import yaml from dataclasses import dataclass, field from pathlib import Path @dataclass class FieldMapping: cobol_field: str java_field: str field_type: str = "string" precision: int = 0 trim: bool = False format: str = "" init_strategy: str = "auto" @dataclass class MappingConfig: program: str = "" dialect: str = "ibm" field_mappings: list[FieldMapping] = field(default_factory=list) redefines_strategy: dict = field(default_factory=dict) @classmethod def from_yaml(cls, path: str) -> "MappingConfig": data = yaml.safe_load(Path(path).read_text()) c = cls() c.program = data.get("program", "") c.dialect = data.get("dialect", "ibm") for fm in data.get("field_mapping", []): c.field_mappings.append(FieldMapping(**fm)) c.redefines_strategy = data.get("redefines_strategy", {}) return c def get_java_field(self, cobol_name: str) -> str: for m in self.field_mappings: if m.cobol_field == cobol_name: return m.java_field return cobol_name _m = FieldMapping(cobol_field="BR-AMT", java_field="billAmount", field_type="decimal", precision=2) assert _m.cobol_field == "BR-AMT"