From 6465e07017e9a2c58db7eb779360c919b83b7df6 Mon Sep 17 00:00:00 2001 From: Fynn <fynn.becker@hs-hannover.de> Date: Tue, 8 Feb 2022 16:59:40 +0100 Subject: [PATCH] Parse date strings as date --- postgrestutils/utils.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/postgrestutils/utils.py b/postgrestutils/utils.py index cf21a3f..35b6e95 100644 --- a/postgrestutils/utils.py +++ b/postgrestutils/utils.py @@ -1,7 +1,7 @@ import importlib.util import logging import re -from datetime import datetime, timedelta, timezone +from datetime import date, datetime, timedelta, timezone from typing import Dict, Union _DJANGO = importlib.util.find_spec("django") is not None @@ -71,6 +71,13 @@ def _try_python_parse_dt(value: str) -> Union[datetime, str]: _try_parse_dt = _try_django_parse_dt if _DJANGO else _try_python_parse_dt +def _try_parse_date(value: str) -> Union[date, str]: + try: + return datetime.strptime(value, "%Y-%m-%d").date() + except ValueError: + return value + + def datetime_parser(json_dict: dict) -> dict: """ A function to use as `object_hook` when deserializing JSON that parses @@ -78,7 +85,11 @@ def datetime_parser(json_dict: dict) -> dict: :param json_dict: the original `json_dict` to process :return: the modified `json_dict` """ + str_parsers = (_try_parse_dt, _try_parse_date) + for key, value in json_dict.items(): if isinstance(value, str): - json_dict[key] = _try_parse_dt(value) + for parser in str_parsers: + json_dict[key] = parser(value) + # json_dict[key] = _try_parse_dt(value) return json_dict -- GitLab