| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # | 2 # |
| 3 # $Id: _compat.py 1142 2011-10-05 18:45:49Z g.rodola $ | 3 # $Id: _compat.py 1145 2011-10-11 10:30:02Z g.rodola $ |
| 4 # | 4 # |
| 5 # Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved. | 5 # Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved. |
| 6 # Use of this source code is governed by a BSD-style license that can be | 6 # Use of this source code is governed by a BSD-style license that can be |
| 7 # found in the LICENSE file. | 7 # found in the LICENSE file. |
| 8 | 8 |
| 9 """Module which provides compatibility with older Python versions.""" | 9 """Module which provides compatibility with older Python versions.""" |
| 10 | 10 |
| 11 __all__ = ["namedtuple", "property"] | 11 __all__ = ["namedtuple", "property"] |
| 12 | 12 |
| 13 from operator import itemgetter as _itemgetter | 13 from operator import itemgetter as _itemgetter |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 # for example) or sys._getframe is not defined for arguments | 112 # for example) or sys._getframe is not defined for arguments |
| 113 # greater than 0 (IronPython). | 113 # greater than 0 (IronPython). |
| 114 try: | 114 try: |
| 115 result.__module__ = _sys._getframe(1).f_globals.get('__name__', '__m
ain__') | 115 result.__module__ = _sys._getframe(1).f_globals.get('__name__', '__m
ain__') |
| 116 except (AttributeError, ValueError): | 116 except (AttributeError, ValueError): |
| 117 pass | 117 pass |
| 118 | 118 |
| 119 return result | 119 return result |
| 120 | 120 |
| 121 | 121 |
| 122 # dirty hack to support property.setter on python < 2.6 | 122 # hack to support property.setter/deleter on python < 2.6 |
| 123 property = property | 123 # http://docs.python.org/library/functions.html?highlight=property#property |
| 124 | 124 if hasattr(property, 'setter'): |
| 125 if not hasattr(property, "setter"): | 125 property = property |
| 126 | 126 else: |
| 127 class property(property): | 127 class property(__builtin__.property): |
| 128 __metaclass__ = type |
| 128 | 129 |
| 129 def __init__(self, fget, *args, **kwargs): | 130 def __init__(self, fget, *args, **kwargs): |
| 131 super(property, self).__init__(fget, *args, **kwargs) |
| 130 self.__doc__ = fget.__doc__ | 132 self.__doc__ = fget.__doc__ |
| 131 super(property, self).__init__(fget, *args, **kwargs) | |
| 132 | 133 |
| 133 def setter(self, fset): | 134 def getter(self, method): |
| 134 cls_ns = _sys._getframe(1).f_locals | 135 return property(method, self.fset, self.fdel) |
| 135 for k, v in cls_ns.iteritems(): | |
| 136 if v == self: | |
| 137 propname = k | |
| 138 break | |
| 139 cls_ns[propname] = property(self.fget, fset, | |
| 140 self.fdel, self.__doc__) | |
| 141 return cls_ns[propname] | |
| 142 | 136 |
| 143 def deleter(self, fdel): | 137 def setter(self, method): |
| 144 cls_ns = _sys._getframe(1).f_locals | 138 return property(self.fget, method, self.fdel) |
| 145 for k, v in cls_ns.iteritems(): | |
| 146 if v == self: | |
| 147 propname = k | |
| 148 break | |
| 149 cls_ns[propname] = property(self.fget, self.fset, | |
| 150 fdel, self.__doc__) | |
| 151 return cls_ns[propname] | |
| 152 | 139 |
| 153 __builtin__.property = property | 140 def deleter(self, method): |
| 154 | 141 return property(self.fget, self.fset, method) |
| OLD | NEW |