From c60e6ba7de9a05386309c34e9e9a0ba16cce8495 Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Mon, 16 Sep 2013 12:08:09 +0300 Subject: [PATCH] Added python 2.6 backport --- sqlalchemy_utils/types/weekdays.py | 74 +++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/sqlalchemy_utils/types/weekdays.py b/sqlalchemy_utils/types/weekdays.py index 85571b2..09a6bad 100644 --- a/sqlalchemy_utils/types/weekdays.py +++ b/sqlalchemy_utils/types/weekdays.py @@ -1,5 +1,77 @@ # -*- coding: utf-8 -*- -from functools import total_ordering +try: + from functools import total_ordering +except ImportError: + """ Backport to work with Python 2.6 """ + 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 + from sqlalchemy import types from sqlalchemy.dialects.postgresql import BIT