Skip to content

Commit

Permalink
Fixes TM offest ranges to support values from -1200 to +1400
Browse files Browse the repository at this point in the history
  • Loading branch information
svituz committed Apr 28, 2020
1 parent 6900994 commit 316986f
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 7 deletions.
2 changes: 1 addition & 1 deletion hl7apy/base_datatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def __init__(self, value=None, out_format='%H%M%S.%f', offset='', microsec_preci
raise InvalidDateOffset(offset)
try:
d = datetime.strptime(offset[1:], '%H%M')
if d.hour > 12:
if offset[0] == '+' and d.hour > 14 or offset[0] == '-' and d.hour > 12:
raise ValueError
except ValueError:
if offset:
Expand Down
1 change: 1 addition & 0 deletions hl7apy/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ def datatype_factory(datatype, value, version=None, validation_level=None):
except KeyError:
raise InvalidDataType(datatype)
except ValueError as e:
print(e)
if Validator.is_strict(validation_level):
raise e
# TODO: Do we really want this? In that case the parent's datatype must be changed accordingly
Expand Down
2 changes: 1 addition & 1 deletion hl7apy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def get_datetime_info(value):


def _split_offset(value):
offset = re.search('\d*((-|\+)(1[0-2]|0[0-9])([0-5][0-9]))$', value)
offset = re.search('\d*((\+(1[0-4]|0[0-9])|(-(1[0-2]|0[0-9])))([0-5][0-9]))$', value)
if offset:
offset = offset.groups()[0]
return value.replace(offset, ''), offset
Expand Down
15 changes: 10 additions & 5 deletions tests/test_datatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,17 +102,21 @@ def test_create_timestamp_by_factory(self):
self.assertEqual(dtm.classname, 'TM')
self.assertEqual(dtm.to_er7(), '120252.059+0200')

dtm = datatype_factory('TM', '120252.05+0200')
dtm = datatype_factory('TM', '120252.05-0200')
self.assertEqual(dtm.classname, 'TM')
self.assertEqual(dtm.to_er7(), '120252.05+0200')
self.assertEqual(dtm.to_er7(), '120252.05-0200')

dtm = datatype_factory('TM', '120252.05+1400')
self.assertEqual(dtm.classname, 'TM')
self.assertEqual(dtm.to_er7(), '120252.05+1400')

dtm = datatype_factory('TM', '120252.5+0200')
self.assertEqual(dtm.classname, 'TM')
self.assertEqual(dtm.to_er7(), '120252.5+0200')

dtm = datatype_factory('TM', '120252+0200')
dtm = datatype_factory('TM', '120252-1200')
self.assertEqual(dtm.classname, 'TM')
self.assertEqual(dtm.to_er7(), '120252+0200')
self.assertEqual(dtm.to_er7(), '120252-1200')

def test_create_nm_by_factory(self):
nm = datatype_factory('NM', 100000)
Expand Down Expand Up @@ -156,6 +160,7 @@ def test_DT_wrong_default_format_strict(self):
class TestTM(unittest.TestCase):

def test_TM(self):

time = datetime.strptime('01', '%H')
time1 = datetime.strptime('0101', '%H%M')
time2 = datetime.strptime('010111', '%H%M%S')
Expand Down Expand Up @@ -199,7 +204,7 @@ def test_TM_invalid_offset(self):
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='+00:00')
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='&0100')
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='+100')
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='+1300')
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='+1500')
self.assertRaises(InvalidDateOffset, TM, datetime.strptime('0101', '%H%M'), offset='-1300')

def test_TM_custom_microsec_precision(self):
Expand Down

0 comments on commit 316986f

Please sign in to comment.