Index: lnt/server/db/testsuitedb.py =================================================================== --- lnt/server/db/testsuitedb.py +++ lnt/server/db/testsuitedb.py @@ -207,8 +207,8 @@ __tablename__ = db_key_name + '_Order' # We guarantee that our fields are stored in the order they are - # supposed to be lexicographically compared, the __cmp__ method - # relies on this. + # supposed to be lexicographically compared, the rich comparison + # methods rely on this. fields = sorted(self.order_fields, key=lambda of: of.ordinal) @@ -273,17 +273,52 @@ def name(self): return self.as_ordered_string() - def __cmp__(self, b): + def _prepare_compare(self, b): + """Prepare order b for comparison against order self.""" # SA occasionally uses comparison to check model instances # verse some sentinels, so we ensure we support comparison # against non-instances. if self.__class__ is not b.__class__: - return -1 - # Compare every field in lexicographic order. - return cmp([convert_revision(self.get_field(item), cache=Order.order_name_cache) - for item in self.fields], - [convert_revision(b.get_field(item), cache=Order.order_name_cache) - for item in self.fields]) + return (0, 1) + + return ( + [ + convert_revision( + self.get_field(item), cache=Order.order_name_cache + ) + for item in self.fields + ], + [ + convert_revision( + b.get_field(item), cache=Order.order_name_cache + ) + for item in self.fields + ], + ) + + def __eq__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self == prepared_b + + def __ne__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self != prepared_b + + def __lt__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self < prepared_b + + def __le__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self <= prepared_b + + def __gt__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self > prepared_b + + def __ge__(self, b): + prepared_self, prepared_b = self._prepare_compare(b) + return prepared_self >= prepared_b def __json__(self, include_id=True): result = {} Index: tests/server/ui/test_api_modify.py =================================================================== --- tests/server/ui/test_api_modify.py +++ tests/server/ui/test_api_modify.py @@ -226,5 +226,4 @@ if __name__ == '__main__': - unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(x, y) unittest.main(argv=[sys.argv[0], ]) Index: tests/server/ui/test_api_roundtrip.py =================================================================== --- tests/server/ui/test_api_roundtrip.py +++ tests/server/ui/test_api_roundtrip.py @@ -57,5 +57,4 @@ if __name__ == '__main__': - unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(x, y) unittest.main(argv=[sys.argv[0], ])