From: Anton Demkin Date: Wed, 25 Aug 2021 13:38:50 +0000 (+0300) Subject: Add `totzdatetime` method to UTCTime X-Git-Tag: 9.1~6 X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=commitdiff_plain;h=c6cf876ed3979538eeb0f0df60512c3feedb4715 Add `totzdatetime` method to UTCTime --- diff --git a/pyderasn.py b/pyderasn.py index 0a66137..82021ef 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -1180,7 +1180,13 @@ except ImportError: # pragma: no cover def colored(what, *args, **kwargs): return what -__version__ = "9.0" +try: + from dateutil.tz import tzutc +except ImportError: # pragma: no cover + tzutc = None + + +__version__ = "9.1" __all__ = ( "agg_octet_string", @@ -5241,6 +5247,13 @@ class UTCTime(VisibleString): def todatetime(self): return self._value + def totzdatetime(self): + if tzutc is None: + raise NotImplementedError( + "Package python-dateutil is required to use this feature", + ) + return self._value.replace(tzinfo=tzutc()) + def __repr__(self): return pp_console_row(next(self.pps())) diff --git a/setup.py b/setup.py index 724a161..c36a373 100644 --- a/setup.py +++ b/setup.py @@ -28,4 +28,7 @@ setup( "Topic :: Software Development :: Libraries :: Python Modules", ], py_modules=["pyderasn"], + extras_require={ + "utc": ["python-dateutil~=2.8"], + }, ) diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 78448b8..f319673 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -32,7 +32,9 @@ from string import whitespace from time import mktime from time import time from unittest import TestCase +from unittest.mock import patch +from dateutil.tz import tzutc from dateutil.tz import UTC from hypothesis import assume from hypothesis import given @@ -5062,6 +5064,17 @@ class TestUTCTime(TimeMixin, CommonMixin, TestCase): with self.assertRaisesRegex(ValueError, "only naive"): UTCTime(datetime(2000, 1, 1, 1, tzinfo=UTC)) + def test_raises_if_no_dateutil(self): + with patch("pyderasn.tzutc", new=None): + with self.assertRaisesRegex( + NotImplementedError, + "Package python-dateutil is required to use this feature", + ): + UTCTime(datetime.now()).totzdatetime() + + def test_tzinfo_gives_datetime_with_tzutc_tzinfo(self): + self.assertEqual(UTCTime(datetime.now()).totzdatetime().tzinfo, tzutc()) + @composite def tlv_value_strategy(draw):