Source code for pyfileconf.pipelines.models.file

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from pyfileconf.basemodels.config import ConfigBase

from pyfileconf.basemodels.file import ConfigFileBase
from pyfileconf.imports.models.statements.obj import ObjectImportStatement
from pyfileconf.assignments.models.statement import AssignmentStatement
from pyfileconf.io.file.write.asttosource import ast_node_to_source

[docs]class FunctionConfigFile(ConfigFileBase): """ Represents config file on filesystem. Handles low-level functions for writing and reading config file """ # lines to always import. pass import objects always_imports = [ ObjectImportStatement.from_str('from pyfileconf import Selector', preferred_position='begin') ] # assignment lines to always include at beginning. pass assign objects always_assigns = [ AssignmentStatement.from_str('s = Selector()', preferred_position='begin'), ] # always assign dict, where assigns will get added if item name matches dict key always_assign_with_names_dict = { 'DataPipeline': [ AssignmentStatement.from_str('cleanup_kwargs = dict(\n \n)', preferred_position='end') ] } # class to use for interfacing with file # no need to override default # interface_class = ConfigFileInterface
[docs] def save(self, config: 'ConfigBase'): # If empty cleanup kwargs on DataPipeline, then delete so can be replaced with dict() constructor # from always assigns if _should_replace_cleanup_kwargs(self, config): config.pop('cleanup_kwargs') super().save(config)
def _should_replace_cleanup_kwargs(config_file: FunctionConfigFile, config: 'ConfigBase') -> bool: return all([ config_file.name == 'DataPipeline', 'cleanup_kwargs' in config ]) and ast_node_to_source(config['cleanup_kwargs']) == 'None\n'