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