def test_shortcut_dict_representation(self): """If precision is the default value, to_dict should return a string""" date_str = "2013-11-17T01:03:05" d = DateTimeWithPrecision() d.precision = "second" d.value = date_str self.assertEqual(str, type(d.to_dict())) self.assertEqual(datetime.datetime, type(d.value)) self.assertEqual(date_str, d.to_dict()) d2 = round_trip(d, output=True) self.assertEqual(d.to_dict(), d2.to_dict())
def convert_time_item_to_datetime(incident_time_item): day_item = incident_time_item.get("day") month_item = incident_time_item.get("month") time_item = incident_time_item.get("time") year_item = incident_time_item.get("year") if not time_item: time_item = "00:00:00" precision = "day" if not day_item: day_item = 1 precision = "month" if not month_item: month_item = 1 precision = "year" if not year_item: error("Required 'year' item is missing in 'incident' item, skipping item") return None dateTime = DateTimeWithPrecision() dateTime.precision = precision value = convert_items_to_datetime(year_item, month_item, day_item, time_item) if not value: return None dateTime.value = value return dateTime
def test_construction(self): d = DateTimeWithPrecision() d.precision = "hour" d.value = datetime.datetime(2014, 2, 4, 8, 21, 33) self.assertEqual(self._full_dict, d.to_dict())
def convert_value_unit_to_datetime(item, incident_date_time, fieldname): unit_item = item.get("unit") if unit_item == "Unknown": warn("'%s' item contains 'Unknown'", fieldname) return None value_item = item.get("value") # if no values, assume an half-way point to the next largest unit, except for years - 2 chosen somewhat arbitrarily if not value_item: imprecise = True if unit_item == "Seconds": value_item = 30 warn("'%s' item contains only 'Seconds' as unit information - assuming value is 30 seconds", fieldname) elif unit_item == "Minutes": value_item = 30 warn("'%s' item contains only 'Minutes' as unit information - assuming value is 30 minutes", fieldname) elif unit_item == "Hours": value_item = 12 warn("'%s' item contains only 'Hours' as unit information - assuming value is 12 hours", fieldname) elif unit_item == "Days": value_item = 3 warn("'%s' item contains only 'Days' as unit information - assuming value is 3 days", fieldname) elif unit_item == "Weeks": value_item = 2 warn("'%s' item contains only 'Weeks' as unit information - assuming value is 2 weeks", fieldname) elif unit_item == "Months": value_item = 6 warn("'%s' item contains only 'Months' as unit information - assuming value is 6 months", fieldname) elif unit_item == "Years": value_item = 2 warn("'%s' item contains only 'Years' as unit information - assuming value is 2 years", fieldname) elif unit_item == "Never": warn("'%s' item contains 'Never' as unit information - returning 0", fieldname) return 0 elif unit_item == "NA": warn("'%s' item contains 'NA' as unit information - returning 0", fieldname) return 0 else: imprecise = False if unit_item == "Seconds": if imprecise: precision = "minute" else: precision = "second" delta = timedelta(0, value_item) elif unit_item == "Minutes": if imprecise: precision = "hour" else: precision = "minute" delta = timedelta(0, 0, 0, 0, value_item) elif unit_item == "Hours": if imprecise: precision = "day" else: precision = "hour" delta = timedelta(0, 0, 0, 0, 0, value_item) elif unit_item == "Days": precision = "day" delta = timedelta(value_item) elif unit_item == "Weeks": precision = "month" delta = timedelta(0, 0, 0, 0, 0, 0, value_item) elif unit_item == "Months": if imprecise: precision = "year" else: precision = "month" delta = timedelta(0, 0, 0, 0, 0, 0, value_item * 4) elif unit_item == "Years": precision = "year" delta = timedelta(value_item * 365) elif unit_item == "Never": warn("'%s' item contains 'Never' as unit information, but also a value, skipping", fieldname) return None elif unit_item == "NA": warn("'%s' item contains 'NA' as unit information, but also a value, skipping", fieldname) return None dateTime = DateTimeWithPrecision() dateTime.precision = precision if fieldname == "compromise": dateTime.value = incident_date_time.value - delta else: dateTime.value = incident_date_time.value + delta return dateTime