diff --git a/dapr/serializers/json.py b/dapr/serializers/json.py index 59e1c194b..e0480667a 100644 --- a/dapr/serializers/json.py +++ b/dapr/serializers/json.py @@ -101,7 +101,12 @@ def __init__(self, *args, **kwargs): def custom_scanstring(cls, s, end, strict=True): (s, end) = json.decoder.scanstring(s, end, strict) # type: ignore if cls.datetime_regex.match(s): - return (parser.parse(s), end) + # The regex only checks the prefix, so a string such as + # '2024-01-01 notes' reaches the parser; keep it as a string. + try: + return (parser.parse(s), end) + except (ValueError, OverflowError): + return (s, end) duration = DAPR_DURATION_PARSER.match(s) if duration is not None and duration.lastindex is not None: diff --git a/tests/serializers/test_default_json_serializer.py b/tests/serializers/test_default_json_serializer.py index 8f65595c0..2ccaea86f 100644 --- a/tests/serializers/test_default_json_serializer.py +++ b/tests/serializers/test_default_json_serializer.py @@ -77,6 +77,14 @@ def test_deserialize(self): ), ) + def test_deserialize_string_with_date_prefix(self): + serializer = DefaultJSONSerializer() + payload = b'{"note":"2024-01-01 meeting notes","file":"2024/01/01_backup.tar"}' + + obj = serializer.deserialize(payload) + self.assertEqual(obj['note'], '2024-01-01 meeting notes') + self.assertEqual(obj['file'], '2024/01/01_backup.tar') + if __name__ == '__main__': unittest.main()