From e762fae84cfb327ca0c47a9a426e936db67a11ef Mon Sep 17 00:00:00 2001 From: Sami Abdul-Wahid Date: Thu, 14 Apr 2022 13:52:19 -0700 Subject: [PATCH] add unwrap methods to collection types + Null --- tomlkit/container.py | 22 ++++++++++++++++++++++ tomlkit/items.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/tomlkit/container.py b/tomlkit/container.py index 2db19e3..c0da383 100644 --- a/tomlkit/container.py +++ b/tomlkit/container.py @@ -46,6 +46,25 @@ def __init__(self, parsed: bool = False) -> None: def body(self) -> List[Tuple[Optional[Key], Item]]: return self._body + def unwrap(self, recursive: bool = True) -> str: + unwrapped = {} + for k, v in self._body: + if k is None: + continue + + k = k.key + v = v.value + + if isinstance(v, Container): + v = v.unwrap(recursive=recursive) + + if k in unwrapped: + merge_dicts(unwrapped[k], v) + else: + unwrapped[k] = v.unwrap(recursive=recursive) + + return unwrapped + @property def value(self) -> Dict[Any, Any]: d = {} @@ -796,6 +815,9 @@ def __init__(self, container: Container, indices: Tuple[int]) -> None: if k is not None: dict.__setitem__(self, k.key, v) + def unwrap(self, recursive: bool = True) -> str: + return self._internal_container.unwrap(recursive=recursive) + @property def value(self): return self._internal_container.value diff --git a/tomlkit/items.py b/tomlkit/items.py index 8b9c070..8b93ada 100644 --- a/tomlkit/items.py +++ b/tomlkit/items.py @@ -984,6 +984,15 @@ def __init__(self, value: list, trivia: Trivia, multiline: bool = False) -> None self._multiline = multiline self._reindex() + def unwrap(self, recursive: bool = True) -> str: + unwrapped = [] + for v in self: + if recursive: + unwrapped.append(v.unwrap(recursive=recursive)) + else: + unwrapped.append(v) + return unwrapped + @property def discriminant(self) -> int: return 8 @@ -1229,7 +1238,14 @@ def __init__(self, value: "container.Container", trivia: Trivia): dict.__setitem__(self, k.key, v) def unwrap(self, recursive: bool = True): - pass + unwrapped = {} + for k in self: + if recursive: + unwrapped[k] = self[k].unwrap(recursive=recursive) + else: + unwrapped[k] = self[k] + + return unwrapped @property def value(self) -> "container.Container": @@ -1614,6 +1630,15 @@ def __init__( for table in body: self.append(table) + def unwrap(self, recursive: bool = True) -> str: + unwrapped = [] + for t in self._body: + if recursive: + unwrapped.append(t.unwrap(recursive=recursive)) + else: + unwrapped.append(t) + return unwrapped + @property def body(self) -> List[Table]: return self._body @@ -1705,6 +1730,9 @@ class Null(Item): def __init__(self) -> None: pass + def unwrap(self, recursive: bool = True) -> str: + return None + @property def discriminant(self) -> int: return -1