Source code for rolling_pin.conform_config

from typing import Dict, List  # noqa: F401

from pathlib import Path

from schematics import Model
from schematics.exceptions import ValidationError
from schematics.types import ListType, ModelType, StringType

Rules = List[Dict[str, str]]
# ------------------------------------------------------------------------------


[docs]def is_dir(dirpath): # type: (str) -> None ''' Validates whether a given dirpath exists. Args: dirpath (str): Directory path. Raises: ValidationError: If dirpath is not a directory or does not exist. ''' if not Path(dirpath).is_dir(): msg = f'{dirpath} is not a directory or does not exist.' raise ValidationError(msg)
[docs]class ConformConfig(Model): ''' A class for validating configurations supplied to ConformETL. Attributes: source_rules (Rules): A list of rules for parsing directories. Default: []. rename_rules (Rules): A list of rules for renaming source filepath to target filepaths. Default: []. group_rules (Rules): A list of rules for grouping files. Default: []. line_rules (Rules): A list of rules for peforming line copies and substitutions on files belonging to a given group. Default: []. '''
[docs] class SourceRule(Model): path = StringType(required=True, validators=[is_dir]) # type: StringType include = StringType(required=False, serialize_when_none=False) # type: StringType exclude = StringType(required=False, serialize_when_none=False) # type: StringType
[docs] class RenameRule(Model): regex = StringType(required=True) # type: StringType replace = StringType(required=True) # type: StringType
[docs] class GroupRule(Model): name = StringType(required=True) # type: StringType regex = StringType(required=True) # type: StringType
[docs] class LineRule(Model): group = StringType(required=True) # type: StringType include = StringType(required=False, serialize_when_none=False) # type: StringType exclude = StringType(required=False, serialize_when_none=False) # type: StringType regex = StringType(required=False) # type: StringType replace = StringType(required=False) # type: StringType
source_rules = ListType(ModelType(SourceRule), required=True) # type: ListType rename_rules = ListType(ModelType(RenameRule), required=False) # type: ListType group_rules = ListType(ModelType(GroupRule), required=False) # type: ListType line_rules = ListType(ModelType(LineRule), required=False) # type: ListType