summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvv <contact@ovv.dev>2020-04-06 11:14:45 +0200
committerIngy döt Net <ingy@ingy.net>2021-01-13 16:58:40 -0500
commitddf20330be1fae8813b8ce1789c48f244746d252 (patch)
treeb4014ebc5680a5f201aa0da428e44eb0b1a6b5b9
parentfc914d52c43f499224f7fb4c2d4c47623adc5b33 (diff)
downloadpyyaml-git-ddf20330be1fae8813b8ce1789c48f244746d252.tar.gz
constructor.timezone: __copy_ & __deepcopy__
close #387
-rw-r--r--lib/yaml/constructor.py6
-rw-r--r--tests/lib/test_constructor.py12
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/yaml/constructor.py b/lib/yaml/constructor.py
index c42ee34..ff4e368 100644
--- a/lib/yaml/constructor.py
+++ b/lib/yaml/constructor.py
@@ -38,6 +38,12 @@ class timezone(datetime.tzinfo):
def dst(self, dt=None):
return datetime.timedelta(0)
+ def __copy__(self):
+ return self.__deepcopy__()
+
+ def __deepcopy__(self, memodict={}):
+ return self.__class__(self.utcoffset())
+
__repr__ = __str__ = tzname
diff --git a/tests/lib/test_constructor.py b/tests/lib/test_constructor.py
index 5a8cce2..c76df5e 100644
--- a/tests/lib/test_constructor.py
+++ b/tests/lib/test_constructor.py
@@ -305,6 +305,18 @@ def test_subclass_blacklist_types(data_filename, verbose=False):
test_subclass_blacklist_types.unittest = ['.subclass_blacklist']
+def test_timezone_copy(verbose=False):
+ import copy
+ tzinfo = yaml.constructor.timezone(datetime.timedelta(0))
+
+ tz_copy = copy.copy(tzinfo)
+ tz_deepcopy = copy.deepcopy(tzinfo)
+
+ if tzinfo.tzname() != tz_copy.tzname() != tz_deepcopy.tzname():
+ raise AssertionError("Timezones should be equal")
+
+test_timezone_copy.unittest = []
+
if __name__ == '__main__':
import sys, test_constructor
sys.modules['test_constructor'] = sys.modules['__main__']