Index: third_party/google-endpoints/future/backports/total_ordering.py |
diff --git a/third_party/google-endpoints/future/backports/total_ordering.py b/third_party/google-endpoints/future/backports/total_ordering.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..760f06d6c35402519521617e330b1e746e0b666b |
--- /dev/null |
+++ b/third_party/google-endpoints/future/backports/total_ordering.py |
@@ -0,0 +1,38 @@ |
+""" |
+For Python < 2.7.2. total_ordering in versions prior to 2.7.2 is buggy. |
+See http://bugs.python.org/issue10042 for details. For these versions use |
+code borrowed from Python 2.7.3. |
+ |
+From django.utils. |
+""" |
+ |
+import sys |
+if sys.version_info >= (2, 7, 2): |
+ from functools import total_ordering |
+else: |
+ def total_ordering(cls): |
+ """Class decorator that fills in missing ordering methods""" |
+ convert = { |
+ '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)), |
+ ('__le__', lambda self, other: self < other or self == other), |
+ ('__ge__', lambda self, other: not self < other)], |
+ '__le__': [('__ge__', lambda self, other: not self <= other or self == other), |
+ ('__lt__', lambda self, other: self <= other and not self == other), |
+ ('__gt__', lambda self, other: not self <= other)], |
+ '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)), |
+ ('__ge__', lambda self, other: self > other or self == other), |
+ ('__le__', lambda self, other: not self > other)], |
+ '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other), |
+ ('__gt__', lambda self, other: self >= other and not self == other), |
+ ('__lt__', lambda self, other: not self >= other)] |
+ } |
+ roots = set(dir(cls)) & set(convert) |
+ if not roots: |
+ raise ValueError('must define at least one ordering operation: < > <= >=') |
+ root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__ |
+ for opname, opfunc in convert[root]: |
+ if opname not in roots: |
+ opfunc.__name__ = opname |
+ opfunc.__doc__ = getattr(int, opname).__doc__ |
+ setattr(cls, opname, opfunc) |
+ return cls |