From 60da0c06d92e4bc708da83d2cfe504cff4a16013 Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Thu, 20 May 2021 13:55:32 +0800 Subject: [PATCH 1/2] Correctly restore data for container --- tomlkit/container.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tomlkit/container.py b/tomlkit/container.py index 4e3ea12..f853558 100644 --- a/tomlkit/container.py +++ b/tomlkit/container.py @@ -654,13 +654,18 @@ def __reduce_ex__(self, protocol): return ( self.__class__, self._getstate(protocol), - (self._map, self._body, self._parsed), + (self._map, self._body, self._parsed, self._table_keys), ) def __setstate__(self, state): self._map = state[0] self._body = state[1] self._parsed = state[2] + self._table_keys = state[3] + + for key, item in self._body: + if key is not None: + dict.__setitem__(self, key.key, item.value) def copy(self): # type: () -> Container return copy.copy(self) From 4cdc2f64765c2623d5d8cb95eb47e00a589d7b5e Mon Sep 17 00:00:00 2001 From: Frost Ming Date: Thu, 20 May 2021 14:50:59 +0800 Subject: [PATCH 2/2] add a test case --- tests/test_toml_document.py | 13 +++++++++++++ tomlkit/container.py | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/test_toml_document.py b/tests/test_toml_document.py index f5695f6..59b42d7 100644 --- a/tests/test_toml_document.py +++ b/tests/test_toml_document.py @@ -669,3 +669,16 @@ def test_repr(): ) assert repr(doc["namespace"]) == "{'key1': 'value1', 'key2': 'value2'}" + + +def test_deepcopy(): + content = """ +[tool] +name = "foo" +[tool.project.section] +option = "test" +""" + doc = parse(content) + copied = copy.deepcopy(doc) + assert copied == doc + assert copied.as_string() == content diff --git a/tomlkit/container.py b/tomlkit/container.py index f853558..e097636 100644 --- a/tomlkit/container.py +++ b/tomlkit/container.py @@ -662,7 +662,7 @@ def __setstate__(self, state): self._body = state[1] self._parsed = state[2] self._table_keys = state[3] - + for key, item in self._body: if key is not None: dict.__setitem__(self, key.key, item.value)