def parse_iso8601_interval(value): try: return aniso8601.parse_interval(value) except Exception: try: return aniso8601.parse_repeating_interval(value) except Exception: raise FormatError('{} is not an iso8601 interval'.format(value))
def _parse_interval(value): """Do some nasty try/except voodoo to get some sort of datetime object(s) out of the string. """ try: return sorted(aniso8601.parse_interval(value)) except ValueError: try: return aniso8601.parse_datetime(value), None except ValueError: return aniso8601.parse_date(value), None
def test_import(self): #Just some tests repeated from other places to make sure the #imports work time = aniso8601.parse_time('01:23:45') self.assertEqual(time.hour, 1) self.assertEqual(time.minute, 23) self.assertEqual(time.second, 45) resultdatetime = aniso8601.parse_datetime( '1981-04-05T23:21:28.512400Z') self.assertEqual(resultdatetime.year, 1981) self.assertEqual(resultdatetime.month, 4) self.assertEqual(resultdatetime.day, 5) self.assertEqual(resultdatetime.hour, 23) self.assertEqual(resultdatetime.minute, 21) self.assertEqual(resultdatetime.second, 28) self.assertEqual(resultdatetime.microsecond, 512400) tzinfoobject = resultdatetime.tzinfo self.assertEqual(tzinfoobject.utcoffset(None), datetime.timedelta(hours=0)) self.assertEqual(tzinfoobject.tzname(None), 'UTC') date = aniso8601.parse_date('19810405') self.assertEqual(date.year, 1981) self.assertEqual(date.month, 4) self.assertEqual(date.day, 5) resultduration = aniso8601.parse_duration('P1Y2M3DT4H54M6S') self.assertEqual(resultduration.days, 428) self.assertEqual(resultduration.seconds, 17646) resultinterval = aniso8601.parse_interval( '1980-03-05T01:01:00/1981-04-05T01:01:00') self.assertEqual( resultinterval[0], datetime.datetime(year=1980, month=3, day=5, hour=1, minute=1)) self.assertEqual( resultinterval[1], datetime.datetime(year=1981, month=4, day=5, hour=1, minute=1)) results = list(aniso8601.parse_repeating_interval('R3/1981-04-05/P1D')) self.assertEqual(results[0], datetime.date(year=1981, month=4, day=5)) self.assertEqual(results[1], datetime.date(year=1981, month=4, day=6)) self.assertEqual(results[2], datetime.date(year=1981, month=4, day=7))
def test_import(self): #Just some tests repeated from other places to make sure the #imports work time = aniso8601.parse_time('01:23:45') self.assertEqual(time.hour, 1) self.assertEqual(time.minute, 23) self.assertEqual(time.second, 45) resultdatetime = aniso8601.parse_datetime('1981-04-05T23:21:28.512400Z') self.assertEqual(resultdatetime.year, 1981) self.assertEqual(resultdatetime.month, 4) self.assertEqual(resultdatetime.day, 5) self.assertEqual(resultdatetime.hour, 23) self.assertEqual(resultdatetime.minute, 21) self.assertEqual(resultdatetime.second, 28) self.assertEqual(resultdatetime.microsecond, 512400) tzinfoobject = resultdatetime.tzinfo self.assertEqual(tzinfoobject.utcoffset(None), datetime.timedelta(hours=0)) self.assertEqual(tzinfoobject.tzname(None), 'UTC') date = aniso8601.parse_date('19810405') self.assertEqual(date.year, 1981) self.assertEqual(date.month, 4) self.assertEqual(date.day, 5) resultduration = aniso8601.parse_duration('P1Y2M3DT4H54M6S') self.assertEqual(resultduration.days, 428) self.assertEqual(resultduration.seconds, 17646) resultinterval = aniso8601.parse_interval('1980-03-05T01:01:00/1981-04-05T01:01:00') self.assertEqual(resultinterval[0], datetime.datetime(year=1980, month=3, day=5, hour=1, minute=1)) self.assertEqual(resultinterval[1], datetime.datetime(year=1981, month=4, day=5, hour=1, minute=1)) results = list(aniso8601.parse_repeating_interval('R3/1981-04-05/P1D')) self.assertEqual(results[0], datetime.date(year=1981, month=4, day=5)) self.assertEqual(results[1], datetime.date(year=1981, month=4, day=6)) self.assertEqual(results[2], datetime.date(year=1981, month=4, day=7))
def _extract_refs(ref_geojson): """ ref_geojson -- path to geojson with reference shapes return -- dict of refid -> latA,lngA,latB,lngB """ with open(ref_geojson, 'r') as f: geo = json.load(f) for feature in geo['features']: if feature["type"] != "Feature": continue geom = feature["geometry"] if geom["type"] != "LineString": # Todo: Allow using a single point to setup a north facing reference frame continue points = geom["coordinates"] a = points[0] # first point b = points[-1] # last point aLng, aLat = a[0], a[1] bLng, bLat = b[0], b[1] try: props = feature["properties"] except KeyError: # no properties / events defined to setup temporal frame continue for prop, val in props.items(): try: start_dt, end_dt = aniso8601.parse_interval(val) except ValueError as ex: # not a date interval print(ex) continue yield prop, aLat, aLng, bLat, bLng, start_dt, end_dt
def __init__(self, v): import aniso8601 self.interval = aniso8601.parse_interval(v)