summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo van Kemenade <hugovk@users.noreply.github.com>2019-11-11 12:06:25 +0200
committerGitHub <noreply@github.com>2019-11-11 12:06:25 +0200
commit22a193dafb3f3fbcff16ddba0b1791ee2c270e9d (patch)
treef6c95868fe2a605c4e02a1c8171b8fa5c1def115
parentb539e9669719d2a9d10a9cef614ffaf67f723086 (diff)
downloadtablib-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.py12
-rw-r--r--tests/test_tablib_dbfpy_packages_fields.py42
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)