added backport of total_ordering to work with 2.6

main
aiko1895 13 years ago
parent 100d23b72e
commit d26db69cbd

@ -1,9 +1,36 @@
import times import times
from functools import total_ordering
from .connections import get_current_connection from .connections import get_current_connection
from .job import Job from .job import Job
from .exceptions import NoSuchJobError, UnpickleError, InvalidJobOperationError from .exceptions import NoSuchJobError, UnpickleError, InvalidJobOperationError
""" 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
def get_failed_queue(connection=None): def get_failed_queue(connection=None):
"""Returns a handle to the special failed queue.""" """Returns a handle to the special failed queue."""

Loading…
Cancel
Save