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