def test_datetime_to_iso(self): # with microseconds # naive pair = ( '2014-06-19T16:40:22.293913', datetime(2014, 6, 19, 16, 40, 22, 293913) ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone pair = ( '2014-06-19T21:55:27.934309+00:00', utc.localize(datetime(2014, 6, 19, 21, 55, 27, 934309)), ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # integer seconds # naive pair = ( '2014-06-19T16:40:22', datetime(2014, 6, 19, 16, 40, 22, 0) ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone pair = ( '2014-06-19T21:55:27+00:00', utc.localize(datetime(2014, 6, 19, 21, 55, 27, 0)), ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone other than UTC central = timezone('US/Central') pair = ( '2014-06-19T17:03:17.361077-05:00', central.localize(datetime(2014, 6, 19, 17, 3, 17, 361077)), # Due to pytz weirdness, the following has # incorrect tz offset info: # datetime(2014, 6, 19, 17, 3, 17, 361077, tzinfo=central)) ) self.assertEqual( pair[0], jsonify_datetime(pair[1]), )
def test_datetime_to_iso(self): # with microseconds # naive pair = ('2014-06-19T16:40:22.293913', datetime(2014, 6, 19, 16, 40, 22, 293913)) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone pair = ( '2014-06-19T21:55:27.934309+00:00', utc.localize(datetime(2014, 6, 19, 21, 55, 27, 934309)), ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # integer seconds # naive pair = ('2014-06-19T16:40:22', datetime(2014, 6, 19, 16, 40, 22, 0)) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone pair = ( '2014-06-19T21:55:27+00:00', utc.localize(datetime(2014, 6, 19, 21, 55, 27, 0)), ) self.assertEqual(pair[0], jsonify_datetime(pair[1])) # timezone other than UTC central = timezone('US/Central') pair = ( '2014-06-19T17:03:17.361077-05:00', central.localize(datetime(2014, 6, 19, 17, 3, 17, 361077)), # Due to pytz weirdness, the following has # incorrect tz offset info: # datetime(2014, 6, 19, 17, 3, 17, 361077, tzinfo=central)) ) self.assertEqual( pair[0], jsonify_datetime(pair[1]), )
def as_version(self, version=Version.latest): """Returns a dict that has been modified based on versioning in order to be represented in JSON properly A class should overload as_version(self, version) implementation in order to tailor a more specific representation :param version: the relevant version. This allows for variance between versions :type version: str | unicode """ if not isinstance(self, list): result = {} for k, v in self.iteritems() if isinstance( self, dict) else vars(self).iteritems(): k = self._props_corrected.get(k, k) if isinstance(v, SerializableBase): result[k] = v.as_version(version) elif isinstance(v, list): result[k] = [] for val in v: if isinstance(val, SerializableBase): result[k].append(val.as_version(version)) else: result[k].append(val) elif isinstance(v, uuid.UUID): result[k] = unicode(v) elif isinstance(v, datetime.timedelta): result[k] = jsonify_timedelta(v) elif isinstance(v, datetime.datetime): result[k] = jsonify_datetime(v) else: result[k] = v result = self._filter_none(result) else: result = [] for v in self: if isinstance(v, SerializableBase): result.append(v.as_version(version)) else: result.append(v) return result
def as_version(self, version=Version.latest): """Returns a dict that has been modified based on versioning in order to be represented in JSON properly A class should overload as_version(self, version) implementation in order to tailor a more specific representation :param version: the relevant version. This allows for variance between versions :type version: str | unicode """ if not isinstance(self, list): result = {} for k, v in self.iteritems() if isinstance(self, dict) else vars(self).iteritems(): k = self._props_corrected.get(k, k) if isinstance(v, SerializableBase): result[k] = v.as_version(version) elif isinstance(v, list): result[k] = [] for val in v: if isinstance(val, SerializableBase): result[k].append(val.as_version(version)) else: result[k].append(val) elif isinstance(v, uuid.UUID): result[k] = unicode(v) elif isinstance(v, datetime.timedelta): result[k] = jsonify_timedelta(v) elif isinstance(v, datetime.datetime): result[k] = jsonify_datetime(v) else: result[k] = v result = self._filter_none(result) else: result = [] for v in self: if isinstance(v, SerializableBase): result.append(v.as_version(version)) else: result.append(v) return result
def test_bad_datetime_to_iso(self): with self.assertRaises(AssertionError): jsonify_datetime('2014-06-19T17:03:17.361077-05:00') with self.assertRaises(AssertionError): jsonify_datetime(0) with self.assertRaises(AssertionError): jsonify_datetime(0.0) with self.assertRaises(AssertionError): jsonify_datetime(1) with self.assertRaises(AssertionError): jsonify_datetime(1.5) with self.assertRaises(AssertionError): jsonify_datetime('2014-06-19T17:03:17.361077-05:00') with self.assertRaises(AssertionError): jsonify_datetime('PT1H')