diff --git a/PyTeX/build/build/pytex_file.py b/PyTeX/build/build/pytex_file.py index e84b15d..c875a39 100644 --- a/PyTeX/build/build/pytex_file.py +++ b/PyTeX/build/build/pytex_file.py @@ -40,7 +40,7 @@ class PyTeXSourceFile: self._file_hash = md5(self._relative_path.path) @property - def relative_path(self): + def relative_path(self) -> RelativePath: return self._relative_path @property diff --git a/PyTeX/build/build/pytex_output_file.py b/PyTeX/build/build/pytex_output_file.py new file mode 100644 index 0000000..c25c58a --- /dev/null +++ b/PyTeX/build/build/pytex_output_file.py @@ -0,0 +1,34 @@ +from pathlib import Path +from typing import Optional, Union, List, Tuple + +from .enums import PyTeXRootDirType +from .pytex_config import PyTeXConfig +from ...logger import logger +from .constants import * +from ..versioning.version_info.version_info import VersionInfo, FileVersionInfo +from .pytex_file import PyTeXSourceFile +from .relative_path import RelativePath +from .hashing import md5 + + +class PyTeXOutputFile: + def __init__( + self, + source_file: PyTeXSourceFile, + output_file: RelativePath, + last_version_info: FileVersionInfo + ): + self.output_file: RelativePath = output_file + self.source_file: PyTeXSourceFile = source_file + self.last_version_info: FileVersionInfo = last_version_info + + @property + def dependencies(self) -> List[str]: + return self.source_file.formatter.dependencies + + def is_recent(self) -> bool: + return self.last_version_info.file_hash == self.source_file.file_hash + + @property + def file_hash(self) -> str: + return md5(self.output_file.path) diff --git a/PyTeX/format/dict_formatter.py b/PyTeX/format/dict_formatter.py index eb40017..2ccbc56 100644 --- a/PyTeX/format/dict_formatter.py +++ b/PyTeX/format/dict_formatter.py @@ -22,6 +22,7 @@ class DictFormatter(PyTeXFormatter): self._dict_name = self.input_file.name.split('.')[0] self._translations = None + @property def dependencies(self) -> List[str]: return [] # No dependencies for dictionaries diff --git a/PyTeX/format/pytex_formatter.py b/PyTeX/format/pytex_formatter.py index cc361d6..cb5ef09 100644 --- a/PyTeX/format/pytex_formatter.py +++ b/PyTeX/format/pytex_formatter.py @@ -102,9 +102,9 @@ class PyTeXFormatter(FormatterIF, ABC): or self.config.include_repo_version or self.config.include_repo_info_text ): - self._header = GenericText([]) + self._header = GenericText() else: - self._header = GenericText([]) + self._header = GenericText() # TODO: handle license if self.config.include_extra_header: self._header += self.config.extra_header + [''] diff --git a/PyTeX/format/simple_tex_formatter.py b/PyTeX/format/simple_tex_formatter.py index 7a7d05f..f911065 100644 --- a/PyTeX/format/simple_tex_formatter.py +++ b/PyTeX/format/simple_tex_formatter.py @@ -10,7 +10,7 @@ class SimpleTeXFormatter(TexFormatter): if out_file.exists(): raise NotImplementedError else: - self._output_file = out_file.open() + self._output_file = out_file.open('w') def close_output_stream(self): self._output_file.close() @@ -18,6 +18,7 @@ class SimpleTeXFormatter(TexFormatter): def future_config(self) -> List[Tuple[str, FormattingConfig]]: return [] # TODO + @property def dependencies(self) -> List[str]: return [] # sty / cls file does not depend on anything