diff options
author | Chris Larson <chris_larson@mentor.com> | 2011-04-04 09:36:45 -0700 |
---|---|---|
committer | Chris Larson <chris_larson@mentor.com> | 2011-04-05 17:23:07 -0700 |
commit | 1190406c526c7bb7cf415867be83e0403812a7dd (patch) | |
tree | ede0aaec85199ab556df6d35d0c957a36a3b6ca7 /lib/bb/compat.py | |
parent | d6fba8bad6277eb2a19e94f93a7a4baf74b29ef3 (diff) | |
download | bitbake-contrib-1190406c526c7bb7cf415867be83e0403812a7dd.tar.gz |
persist_data: implement comparison, same as dict
Signed-off-by: Chris Larson <chris_larson@mentor.com>
Diffstat (limited to 'lib/bb/compat.py')
-rw-r--r-- | lib/bb/compat.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/bb/compat.py b/lib/bb/compat.py new file mode 100644 index 000000000..c6978fccc --- /dev/null +++ b/lib/bb/compat.py @@ -0,0 +1,28 @@ +"""Code pulled from future python versions, here for compatibility""" + +def total_ordering(cls): + """Class decorator that fills in missing ordering methods""" + convert = { + '__lt__': [('__gt__', lambda self, other: other < self), + ('__le__', lambda self, other: not other < self), + ('__ge__', lambda self, other: not self < other)], + '__le__': [('__ge__', lambda self, other: other <= self), + ('__lt__', lambda self, other: not other <= self), + ('__gt__', lambda self, other: not self <= other)], + '__gt__': [('__lt__', lambda self, other: other > self), + ('__ge__', lambda self, other: not other > self), + ('__le__', lambda self, other: not self > other)], + '__ge__': [('__le__', lambda self, other: other >= self), + ('__gt__', lambda self, other: not other >= self), + ('__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 |