from typing import List, Optional, Union, Any, Tuple from .enums import NamingScheme, License from .generic_text import GenericText def generate_properties(attributes: List[Union[str, Tuple[str, Any]]]): attributes = [ x if isinstance(x, Tuple) else (x, None) for x in attributes ] def decorator(cls): for [attribute, default_value] in attributes: def get_attr(self, attribute=attribute, default_value=default_value): if getattr(self, "_" + attribute) is not None: return getattr(self, "_" + attribute) else: return default_value prop = property(get_attr) setattr(cls, attribute, prop) return cls return decorator @generate_properties([('naming_scheme', False), 'license']) class FormattingConfig: def __init__(self): self._naming_scheme: Optional[Union[NamingScheme, str]] = None self._license: Optional[List[License]] = None self._extra_header: Optional[List[str]] = None self._include_extra_header: Optional[bool] = None self._include_build_time: Optional[bool] = None self._include_pytex_version: Optional[bool] = None self._include_pytex_info_text: Optional[bool] = None self._include_repo_version: Optional[bool] = None self._include_repo_info_text: Optional[bool] = None self._include_drv: Optional[bool] = True self._include_ins: Optional[bool] = True self._use_docstrip_guards: Optional[List[str]] = None self._author: Optional[str] = None self._licenses = Optional[List[GenericText]] self._version: Optional[str] = None self._extra_header_file: Optional[GenericText] = None self._pytex_version: Optional[str] = None self._pytex_info_text: Optional[GenericText] = None self._repo_version: Optional[str] = None self._repo_info_text: Optional[GenericText] = None def merge_with(self, other, strict: bool = False): """ Merges the other config into this one :param other: :param strict: whether conflicting options are allowed or not :return: self """ for var in vars(self): if not getattr(self, var): setattr(self, var, getattr(other, var)) else: if strict and getattr(other, var) is not None and getattr(self, var) != getattr(other, var): raise NotImplementedError return self class DocFormattingConfig: def __init__(self): self._documents: Optional[List[str]] = None self._dependencies: Optional[List[str]] = None