diff options
author | Hugo van Kemenade <hugovk@users.noreply.github.com> | 2019-11-11 12:06:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-11 12:06:25 +0200 |
commit | 22a193dafb3f3fbcff16ddba0b1791ee2c270e9d (patch) | |
tree | f6c95868fe2a605c4e02a1c8171b8fa5c1def115 | |
parent | b539e9669719d2a9d10a9cef614ffaf67f723086 (diff) | |
download | tablib-22a193dafb3f3fbcff16ddba0b1791ee2c270e9d.tar.gz |
No __cmp__ or cmp in Python 3 (#429)
* No __cmp__ or cmp in Python 3
* Add rich comparisons
* Simplify using total_ordering decorator
-rw-r--r-- | src/tablib/packages/dbfpy/fields.py | 12 | ||||
-rw-r--r-- | tests/test_tablib_dbfpy_packages_fields.py | 42 |
2 files changed, 52 insertions, 2 deletions
diff --git a/src/tablib/packages/dbfpy/fields.py b/src/tablib/packages/dbfpy/fields.py index d6ee84e..8c7d022 100644 --- a/src/tablib/packages/dbfpy/fields.py +++ b/src/tablib/packages/dbfpy/fields.py @@ -33,12 +33,14 @@ __all__ = ["lookupFor"] # field classes added at the end of the module import datetime import struct import sys +from functools import total_ordering from . import utils # abstract definitions +@total_ordering class DbfFieldDef: """Abstract field definition. @@ -101,8 +103,14 @@ class DbfFieldDef: self.start = start self.end = stop - def __cmp__(self, other): - return cmp(self.name, str(other).upper()) + def __eq__(self, other): + return repr(self) == repr(other) + + def __ne__(self, other): + return repr(self) != repr(other) + + def __lt__(self, other): + return repr(self) < repr(other) def __hash__(self): return hash(self.name) diff --git a/tests/test_tablib_dbfpy_packages_fields.py b/tests/test_tablib_dbfpy_packages_fields.py new file mode 100644 index 0000000..fd39717 --- /dev/null +++ b/tests/test_tablib_dbfpy_packages_fields.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +"""Tests for tablib.packages.dbfpy.""" + +import unittest + +from tablib.packages.dbfpy import fields + + +class DbfFieldDefTestCompareCase(unittest.TestCase): + """dbfpy.fields.DbfFieldDef comparison test cases, via child classes.""" + + def setUp(self) -> None: + self.length = 10 + self.a = fields.DbfCharacterFieldDef("abc", self.length) + self.z = fields.DbfCharacterFieldDef("xyz", self.length) + self.a2 = fields.DbfCharacterFieldDef("abc", self.length) + + def test_compare__eq__(self): + # Act / Assert + self.assertEqual(self.a, self.a2) + + def test_compare__ne__(self): + # Act / Assert + self.assertNotEqual(self.a, self.z) + + def test_compare__lt__(self): + # Act / Assert + self.assertLess(self.a, self.z) + + def test_compare__le__(self): + # Act / Assert + self.assertLessEqual(self.a, self.a2) + self.assertLessEqual(self.a, self.z) + + def test_compare__gt__(self): + # Act / Assert + self.assertGreater(self.z, self.a) + + def test_compare__ge__(self): + # Act / Assert + self.assertGreaterEqual(self.a2, self.a) + self.assertGreaterEqual(self.z, self.a) |