def _deserialize(self, value, attr, data): if not value: # Falsy values, e.g. '', None, [] are not valid raise self.fail("invalid") self.dateformat = self.dateformat or self.DEFAULT_FORMAT func = self.DATEFORMAT_DESERIALIZATION_FUNCS.get(self.dateformat) if func: try: return arrow.get(func(value)) except (TypeError, AttributeError, ValueError): raise self.fail("invalid") elif self.dateformat: try: return dt.datetime.strptime(value, self.dateformat) except (TypeError, AttributeError, ValueError): raise self.fail("invalid") elif utils.dateutil_available: try: return arrow.get(utils.from_datestring(value)) except TypeError: raise self.fail("invalid") else: warnings.warn( "It is recommended that you install python-dateutil " "for improved datetime deserialization." ) raise self.fail("invalid")
def _deserialize(self, value): msg = 'Could not deserialize {0!r} to a datetime object.'.format(value) err = ValidationError(getattr(self, 'error', None) or msg) if not value: # Falsy values, e.g. '', None, [] are not valid raise err self.dateformat = self.dateformat or self.DEFAULT_FORMAT func = self.DATEFORMAT_DESERIALIZATION_FUNCS.get(self.dateformat) if func: try: return func(value) except (TypeError, AttributeError, ValueError): raise err elif self.dateformat: try: return dt.datetime.strptime(value, self.dateformat) except (TypeError, AttributeError, ValueError): raise err elif utils.dateutil_available: try: return utils.from_datestring(value) except TypeError: raise err else: warnings.warn('It is recommended that you install python-dateutil ' 'for improved datetime deserialization.') raise err
def _deserialize(self, value, attr, data): self.dateformat = self.dateformat or self.DEFAULT_FORMAT func = self.DATEFORMAT_DESERIALIZATION_FUNCS.get(self.dateformat) if func: try: return func(value) except (TypeError, AttributeError, ValueError): raise self.fail('invalid') elif self.dateformat: try: return datetime.strptime(value, self.dateformat) except (TypeError, AttributeError, ValueError): raise self.fail('invalid') elif utils.dateutil_available: try: return utils.from_datestring(value) except TypeError: raise self.fail('invalid') else: warnings.warn('It is recommended that you install python-dateutil ' 'for improved datetime deserialization.') raise self.fail('invalid')
def _deserialize(self, value): err = UnmarshallingError( 'Cannot deserialize {0!r} to a datetime'.format(value) ) self.dateformat = self.dateformat or self.DEFAULT_FORMAT func = DATEFORMAT_DESERIALIZATION_FUNCS.get(self.dateformat) if func: try: return func(value) except TypeError: raise err except (AttributeError, ValueError) as err: msg = 'Could not deserialize {0!r} to a datetime object.'.format(value) raise UnmarshallingError(getattr(self, 'error', None) or msg) elif utils.dateutil_available: try: return utils.from_datestring(value) except TypeError: raise err else: warnings.warn('It is recommended that you install python-dateutil ' 'for improved datetime deserialization.') raise err
def _deserialize(self, value, attr, data): if not value: # Falsy values, e.g. '', None, [] are not valid raise self.fail('invalid') self.dateformat = self.dateformat or self.DEFAULT_FORMAT func = self.DATEFORMAT_DESERIALIZATION_FUNCS.get(self.dateformat) if func: try: return func(value) except (TypeError, AttributeError, ValueError): raise self.fail('invalid') elif self.dateformat: try: return dt.datetime.strptime(value, self.dateformat) except (TypeError, AttributeError, ValueError): raise self.fail('invalid') elif utils.dateutil_available: try: return utils.from_datestring(value) except TypeError: raise self.fail('invalid') else: warnings.warn('It is recommended that you install python-dateutil ' 'for improved datetime deserialization.') raise self.fail('invalid')
def test_from_datestring(): d = dt.datetime.now() rfc = utils.rfcformat(d) iso = d.isoformat() assert_date_equal(utils.from_datestring(rfc), d) assert_date_equal(utils.from_datestring(iso), d)