Stage 1: standardize delivery field names

This commit is contained in:
OpenAI Codex
2026-03-24 08:36:16 +08:00
parent 5f3f7409b3
commit 047833ac6c
2 changed files with 123 additions and 0 deletions

View File

@@ -27,6 +27,16 @@ class FieldValueRule:
return True
@dataclass(frozen=True)
class FieldNameRule:
field_name_jp: str
field_name_std: str
field_group_name: str
keep_in_delivery: bool
keep_in_engineering: bool
normalization_class: str
@dataclass(frozen=True)
class RenderRule:
rule_id: str
@@ -86,12 +96,14 @@ class NavSeaMappingRegistry:
bundle_id: str,
bundle_version: str,
source_layer_rules: dict[str, dict[str, str]],
field_name_rules: dict[str, FieldNameRule],
field_value_rules: dict[tuple[str, str], list[FieldValueRule]],
render_rules: list[RenderRule],
) -> None:
self.bundle_id = bundle_id
self.bundle_version = bundle_version
self.source_layer_rules = source_layer_rules
self.field_name_rules = field_name_rules
self.field_value_rules = field_value_rules
self.render_rules = render_rules
@@ -145,6 +157,32 @@ class NavSeaMappingRegistry:
for row in cur.fetchall()
}
cur.execute(
"""
SELECT
field_name_jp,
field_name_std,
field_group_name,
keep_in_delivery,
keep_in_engineering,
normalization_class
FROM navsea_field_name_rules
WHERE bundle_id = %s AND bundle_version = %s
""",
(resolved_bundle_id, resolved_bundle_version),
)
field_name_rules = {
str(row["field_name_jp"]): FieldNameRule(
field_name_jp=str(row["field_name_jp"]),
field_name_std=str(row["field_name_std"]),
field_group_name=str(row["field_group_name"]),
keep_in_delivery=bool(row["keep_in_delivery"]),
keep_in_engineering=bool(row["keep_in_engineering"]),
normalization_class=str(row["normalization_class"]),
)
for row in cur.fetchall()
}
cur.execute(
"""
SELECT
@@ -200,6 +238,7 @@ class NavSeaMappingRegistry:
bundle_id=resolved_bundle_id,
bundle_version=resolved_bundle_version,
source_layer_rules=source_layer_rules,
field_name_rules=field_name_rules,
field_value_rules=field_value_rules,
render_rules=render_rules,
)
@@ -210,6 +249,9 @@ class NavSeaMappingRegistry:
return source_layer_jp, f"SLR:{source_layer_jp}:identity"
return rule["source_layer_std"], rule["source_layer_rule_id"]
def get_field_name_rule(self, field_name: str) -> FieldNameRule | None:
return self.field_name_rules.get(field_name)
def standardize_field_value(
self,
field_name_jp: str,