From c4cf9d4d2d52fc0afe66fdf57d61bfc530759394 Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Mon, 16 Sep 2013 19:12:28 +0300 Subject: [PATCH] Refactored weekdays, added compat module --- sqlalchemy_utils/compat.py | 73 +++++++++++++++++++++++++++++ sqlalchemy_utils/types/weekdays.py | 75 +----------------------------- 2 files changed, 74 insertions(+), 74 deletions(-) create mode 100644 sqlalchemy_utils/compat.py diff --git a/sqlalchemy_utils/compat.py b/sqlalchemy_utils/compat.py new file mode 100644 index 0000000..a5d2483 --- /dev/null +++ b/sqlalchemy_utils/compat.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +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 diff --git a/sqlalchemy_utils/types/weekdays.py b/sqlalchemy_utils/types/weekdays.py index 09a6bad..ab75155 100644 --- a/sqlalchemy_utils/types/weekdays.py +++ b/sqlalchemy_utils/types/weekdays.py @@ -1,78 +1,4 @@ # -*- coding: utf-8 -*- -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 get_day_names = None @@ -81,6 +7,7 @@ try: except ImportError: pass +from ..compat import total_ordering from ..exceptions import ImproperlyConfigured