From 7212be6f062985ff8386e1c07ea7e15d96c27b0b Mon Sep 17 00:00:00 2001
From: Bruce Flynn <brucef@ssec.wisc.edu>
Date: Tue, 16 Jan 2018 18:09:30 -0600
Subject: [PATCH] Fix cmp for py3

---
 edosl0util/merge.py | 29 +++++++++++++++++++----------
 tests/test_merge.py | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 10 deletions(-)
 create mode 100644 tests/test_merge.py

diff --git a/edosl0util/merge.py b/edosl0util/merge.py
index d73b9e1..c11e4a1 100644
--- a/edosl0util/merge.py
+++ b/edosl0util/merge.py
@@ -8,18 +8,22 @@
 4. Write
 
 """
-import os
 import logging
+import os
 from collections import deque, OrderedDict
+from functools import total_ordering
 
 LOG = logging.getLogger(__name__)
 
-VIIRS_APID_ORDER = (826, 821) + tuple(range(800,821)) + tuple(range(822,826))
+VIIRS_APID_ORDER = (826, 821) + tuple(range(800, 821)) + tuple(range(822, 826))
+
 
+@total_ordering
 class _Ptr(object):
     """
     Represents one or more packets that share the same time timecode and apid.
     """
+
     def __init__(self, fobj, timecode, apid, offset, size):
         self.fobj = fobj
         self.timecode = timecode
@@ -30,17 +34,22 @@ class _Ptr(object):
 
     def __repr__(self):
         attrs = ' '.join(
-                '{}={}'.format(k, v)
-                for k, v in sorted(vars(self).items())
-                if not k.startswith('_'))
+            '{}={}'.format(k, v)
+            for k, v in sorted(vars(self).items())
+            if not k.startswith('_'))
 
         return '<{:s} {:s}>'.format(self.__class__.__name__, attrs)
 
-    def __cmp__(self, that):
-        return cmp(
-            (self.timecode, self.apid),
-            (that.timecode, that.apid)
-        )
+    def __eq__(self, that):
+        return (self.timecode.day_segmented_timecode(), self.apid) \
+               == (that.timecode.day_segmented_timecode(), that.apid)
+
+    def __ne__(self, that):
+        return not self == that
+
+    def __lt__(self, that):
+        return (self.timecode.day_segmented_timecode(), self.apid) \
+               < (that.timecode.day_segmented_timecode(), that.apid)
 
     # instances with same timecode/apid/size will compare the same
     def __hash__(self):
diff --git a/tests/test_merge.py b/tests/test_merge.py
new file mode 100644
index 0000000..6af6c71
--- /dev/null
+++ b/tests/test_merge.py
@@ -0,0 +1,32 @@
+from operator import eq, lt, gt
+
+import pytest
+
+from edosl0util import merge, headers
+
+
+class Test_Ptr:
+
+    @pytest.mark.parametrize(
+        'd1,d2,op',
+        [
+            [(0, 0), (0, 0), eq],
+            [(1, 0), (0, 0), gt],
+            [(0, 1), (0, 0), gt],
+            [(1, 1), (0, 0), gt],
+            [(0, 0), (1, 0), lt],
+            [(0, 0), (0, 1), lt],
+            [(0, 0), (1, 1), lt],
+        ])
+    def test_ordering(self, d1, d2, op):
+        time1, apid1 = d1
+        ptr1 = merge._Ptr(open('/dev/null', 'r'),
+                          headers.DaySegmentedTimecode(time1, 0, 0),
+                          apid1, 0, 0)
+
+        time2, apid2 = d2
+        ptr2 = merge._Ptr(open('/dev/null', 'r'),
+                          headers.DaySegmentedTimecode(time2, 0, 0),
+                          apid2, 0, 0)
+
+        assert op(ptr1, ptr2)
-- 
GitLab