def validate( cls, value: Union[datetime.date, datetime.datetime, str, bytes, int, float] ) -> Union[datetime.datetime, datetime.date, str]: """ """ if isinstance(value, datetime.date): return value if not isinstance(value, str): # default handler return parse_datetime(value) match = FHIR_DATE_PARTS.match(value) if match: if ( match.groupdict().get("year") and match.groupdict().get("month") and match.groupdict().get("day") ): return parse_date(value) elif match.groupdict().get("year") and match.groupdict().get("month"): if int(match.groupdict()["month"]) > 12: raise DateError() # we don't want to loose actual information, so keep as string return value if not cls.regex.match(value): raise DateTimeError() return parse_datetime(value)
def validate( cls, value: Union[datetime.date, str, bytes, int, float] ) -> Union[datetime.date, str]: """ """ if not isinstance(value, str): # default handler return parse_date(value) match = FHIR_DATE_PARTS.match(value) if not match: if not cls.regex.match(value): raise DateError() elif not match.groupdict().get("day"): if match.groupdict().get("month") and int(match.groupdict()["month"]) > 12: raise DateError() # we keep original return value return parse_date(value)