diff --git a/src/oas/schema/formats.py b/src/oas/schema/formats.py index 5689c00..8c2e32d 100644 --- a/src/oas/schema/formats.py +++ b/src/oas/schema/formats.py @@ -83,9 +83,11 @@ def parse_date(value): except ImportError: # pragma: no cover pyrfc3339 = None else: - _register('date-time', 'string', raises=ValueError)( - functools.partial(pyrfc3339.parse, utc=True) - ) + + @_register('date-time', 'string', raises=ValueError) + def parse_date_time(value): + return pyrfc3339.parse(value, utc=True).replace(tzinfo=None) + try: import rfc3986 diff --git a/tests/schema/test_formats.py b/tests/schema/test_formats.py index a2a97fa..a793fec 100644 --- a/tests/schema/test_formats.py +++ b/tests/schema/test_formats.py @@ -9,37 +9,32 @@ import jsonschema import pytest -import pytz from oas.schema.formats import default_formats from oas.schema.formats import Formats @pytest.mark.parametrize( - 'name,value,expected', + 'name,value', [ - ('int32', 0, None), - ('int32', -(2 ** 31), None), - ('int32', 2 ** 31 - 1, None), - ('int64', 0, None), - ('int64', -(2 ** 63), None), - ('int64', 2 ** 63 - 1, None), - ('byte', base64.b64encode(b'foo'), b'foo'), - ('binary', '010203', b'\x01\x02\x03'), - ('date', '2020-01-02', datetime.date(2020, 1, 2)), - ( - 'date-time', - '2020-01-02T03:04:05Z', - datetime.datetime(2020, 1, 2, 3, 4, 5, tzinfo=pytz.utc), - ), - ('uri', 'http://example.com', None), - ('uri', 'https://example.com', None), - ('uri', 'https://example.com/', None), - ('uri', 'https://example.com/path', None), - ('uri', 'https://example.com/path?query#segment', None), + ('int32', 0), + ('int32', -(2 ** 31)), + ('int32', 2 ** 31 - 1), + ('int64', 0), + ('int64', -(2 ** 63)), + ('int64', 2 ** 63 - 1), + ('byte', base64.b64encode(b'foo')), + ('binary', '010203'), + ('date', '2020-01-02'), + ('date-time', '2020-01-02T03:04:05Z'), + ('uri', 'http://example.com'), + ('uri', 'https://example.com'), + ('uri', 'https://example.com/'), + ('uri', 'https://example.com/path'), + ('uri', 'https://example.com/path?query#segment'), ], ) -def test_default_checker_success(name, value, expected): +def test_default_checker_success(name, value): format_checker = default_formats.format_checker try: format_checker.check(value, name) @@ -87,7 +82,12 @@ def test_default_checker_error(name, value): ( 'date-time', '2020-01-02T03:04:05Z', - datetime.datetime(2020, 1, 2, 3, 4, 5, tzinfo=pytz.utc), + datetime.datetime(2020, 1, 2, 3, 4, 5), + ), + ( + 'date-time', + '2020-01-02T03:04:05+09:00', + datetime.datetime(2020, 1, 1, 18, 4, 5), ), ('uri', 'http://example.com', None), ('uri', 'https://example.com', None),