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 |