Files
cobol-java/config/mapping.py
T

46 lines
1.3 KiB
Python

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"
assert _m.java_field == "billAmount"
assert _m.precision == 2