diff --git a/PyTeX/build/build/build_dir_spec.py b/PyTeX/build/build/build_dir_spec.py index a477a4f..032ea22 100644 --- a/PyTeX/build/build/build_dir_spec.py +++ b/PyTeX/build/build/build_dir_spec.py @@ -20,7 +20,7 @@ class BuildDirConfig(Config): self._tex_source_root: Optional[Path] = tex_root self._wrapper_dir: Optional[PurePath] = wrapper_dir - def set_from_json(self, content: Dict): + def set_from_json(self, content: Optional[Dict]): content = self._fill_keys(content) self._tex_source_root = content[YAML_TEX_SOURCE_ROOT] diff --git a/PyTeX/build/build/pytex_config.py b/PyTeX/build/build/pytex_config.py index 876b50b..6d5df0f 100644 --- a/PyTeX/build/build/pytex_config.py +++ b/PyTeX/build/build/pytex_config.py @@ -38,7 +38,7 @@ class PyTeXConfig(Config): YAML_CONFIGS: self._configs } - def set_from_json(self, content: Dict): + def set_from_json(self, content: Optional[Dict]): content = self._fill_keys(content) build = content[YAML_BUILD] diff --git a/PyTeX/format/config.py b/PyTeX/format/config.py index 3ba24cf..2e5bbcb 100644 --- a/PyTeX/format/config.py +++ b/PyTeX/format/config.py @@ -48,7 +48,7 @@ class Config: path: Dict = yaml.safe_load(config) return cls.from_json(path) - def set_from_json(self, content: Dict): + def set_from_json(self, content: Optional[Dict]): raise NotImplementedError def to_json(self) -> Dict: @@ -77,11 +77,14 @@ class Config: pass # TODO @classmethod - def _fill_keys(cls, dictionary: Dict): - return recursive_merge_dictionaries( - cls().to_json(), - dictionary - ) + def _fill_keys(cls, dictionary: Optional[Dict]): + if dictionary is None: + return cls().to_json() + else: + return recursive_merge_dictionaries( + cls().to_json(), + dictionary + ) def recursive_merge_dictionaries(dict1: Dict, dict2: Dict) -> Dict: diff --git a/PyTeX/format/constants.py b/PyTeX/format/constants.py index b1c08cf..adff2ac 100644 --- a/PyTeX/format/constants.py +++ b/PyTeX/format/constants.py @@ -31,4 +31,4 @@ YAML_TEX_TYPE = 'type' YAML_TEXT = 'text' YAML_REPO = 'repo' YAML_PYTEX = 'pytex' -YAML_DOCSTRIP = 'docstrip' +YAML_DOCSTRIP = 'docstrip' \ No newline at end of file diff --git a/PyTeX/format/formatting_config.py b/PyTeX/format/formatting_config.py index 8a07b27..9392620 100644 --- a/PyTeX/format/formatting_config.py +++ b/PyTeX/format/formatting_config.py @@ -1,18 +1,33 @@ from typing import List, Optional, Dict, Union -from .config import Config from .constants import * from .enums import NamingScheme from .enums import TeXType, TeXFlavour from .generic_text import GenericText from .git_version_info import GitVersionInfo +from .config import Config -class VersionInfo: +class VersionInfo(Config): def __init__(self): self._repo_version: Optional[GitVersionInfo] = None self._pytex_version: Optional[GitVersionInfo] = None + def set_from_json(self, content: Optional[Dict]): + content = self._fill_keys(content) + self._repo_version = GitVersionInfo.from_json( + content[YAML_REPO] + ) + self._pytex_version = GitVersionInfo.from_json( + content[YAML_PYTEX] + ) + + def to_json(self) -> Dict: + return { + YAML_PYTEX: self._pytex_version.to_json(), + YAML_REPO: self._repo_version.to_json() + } + @property def pytex_version(self) -> Optional[GitVersionInfo]: if self._pytex_version is None: @@ -58,7 +73,7 @@ class FormattingConfig(Config): self._tex_type: Optional[TeXType] = None self._tex_flavour: Optional[TeXFlavour] = None - def set_from_json(self, content: Dict): + def set_from_json(self, content: Optional[Dict]): content = self._fill_keys(content) info = content[YAML_INFO] diff --git a/PyTeX/format/git_version_info.py b/PyTeX/format/git_version_info.py index 7d3923a..a14ff3c 100644 --- a/PyTeX/format/git_version_info.py +++ b/PyTeX/format/git_version_info.py @@ -12,7 +12,7 @@ class GitVersionInfo(Config): self._branch: Optional[str] = None self._version: Optional[str] = None - def set_from_json(self, content: Dict): + def set_from_json(self, content: Optional[Dict]): content = self._fill_keys(content) self._branch = content[JSON_BRANCH] self._dirty = content[JSON_DIRTY]