From 51bf833e1f2051ebe1886afa92ddc977eda0b670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Mon, 7 Feb 2022 01:09:05 +0100 Subject: [PATCH] fix some bugs with reading config and merging dictionaries --- PyTeX/format/formatting_config.py | 19 ++++++++++++++++++- main.py | 14 +++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/PyTeX/format/formatting_config.py b/PyTeX/format/formatting_config.py index 1ffb39d..de61a8a 100644 --- a/PyTeX/format/formatting_config.py +++ b/PyTeX/format/formatting_config.py @@ -42,6 +42,20 @@ def clean_dict(dictionary: Dict) -> Optional[Dict]: return aux2 if aux2 != {} else None +def recursive_merge_dictionaries(dict1: Dict, dict2: Dict) -> Dict: + + aux1 = { + k: v for k, v in dict1.items() if type(v) == dict + } + aux2 = { + k: v for k, v in dict2.items() if type(v) == dict + } + merged = { + k: recursive_merge_dictionaries(v, aux2[k]) for k, v in aux1.items() if k in aux2.keys() + } + return dict1 | dict2 | merged + + class FormattingConfig(Config): def __init__(self): self._naming_scheme: Optional[Union[NamingScheme, str]] = None @@ -73,7 +87,10 @@ class FormattingConfig(Config): self._tex_flavour: Optional[TeXFlavour] = None def set_from_json(self, content: Dict): - content = FormattingConfig().to_json() | content # Fill with none values + content = recursive_merge_dictionaries( + FormattingConfig().to_json(), + content + ) info = content[YAML_INFO] self._author = info[YAML_AUTHOR] diff --git a/main.py b/main.py index acc9843..162366d 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,7 @@ from PyTeX.build.enums import * from PyTeX.build.paths import RelativePath from PyTeX.format.formatting_config import FormattingConfig - +from PyTeX.format.generic_text import GenericText spec = BuildDirSpecification( source_root=Path('src'), @@ -55,7 +55,19 @@ dump = config.to_json() config.naming_scheme = 'prepend-author' + +config.extra_header = GenericText(Path('header.txt')) +config.extra_header = GenericText(['hello', 'world']) config.dump_as_yaml(Path('test.yaml')) +json = config.to_json() + +config2 = FormattingConfig() +config2.set_from_json(json) + + +config3 = FormattingConfig.from_yaml(Path('test.yaml')) +pass +