Skip to content

Commit 9a573d6

Browse files
bosdbosd
authored andcommitted
Extract duplicated relation info derivation logic into helper function
- Create _derive_missing_relation_info helper function to eliminate code duplication - Refactor both run_direct_relational_import and run_write_tuple_import to use the new helper - Reduce maintenance burden by centralizing the relation info derivation logic\n- Improve code clarity and maintainability by following DRY principles\n\nThis addresses the review comment about duplicated code in run_write_tuple_import\nthat increases maintenance burden and violates DRY principles.
1 parent c011c9c commit 9a573d6

File tree

1 file changed

+44
-26
lines changed

1 file changed

+44
-26
lines changed

src/odoo_data_flow/lib/relational_import.py

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,44 @@ def _resolve_related_ids(
8888
return None
8989

9090

91+
def _derive_missing_relation_info(
92+
model: str,
93+
field: str,
94+
relational_table: Optional[str],
95+
owning_model_fk: Optional[str],
96+
related_model_fk: Optional[str],
97+
) -> tuple[Optional[str], Optional[str]]:
98+
"""Derive missing relation table and field names if possible.
99+
100+
Args:
101+
model: The owning model name
102+
field: The field name
103+
relational_table: Current relation table name (may be None)
104+
owning_model_fk: Current owning model foreign key field name (may be None)
105+
related_model_fk: Related model name (needed for derivation)
106+
107+
Returns:
108+
Tuple of (relational_table, owning_model_fk) with derived values
109+
where missing, or original values if already present
110+
"""
111+
# Try to derive missing information if possible
112+
if (not relational_table or not owning_model_fk) and related_model_fk:
113+
# Try to derive the relation table and field names
114+
derived_table, derived_field = _derive_relation_info(
115+
model, field, related_model_fk
116+
)
117+
118+
# Only use derived values if we were missing them
119+
if not relational_table:
120+
log.info(f"Deriving relation_table for field '{field}': {derived_table}")
121+
relational_table = derived_table
122+
if not owning_model_fk:
123+
log.info(f"Deriving relation_field for field '{field}': {derived_field}")
124+
owning_model_fk = derived_field
125+
126+
return relational_table, owning_model_fk
127+
128+
91129
def _derive_relation_info(
92130
model: str, field: str, related_model_fk: str
93131
) -> tuple[str, str]:
@@ -137,19 +175,9 @@ def run_direct_relational_import(
137175
related_model_fk = strategy_details.get("relation")
138176

139177
# Try to derive missing information if possible
140-
if (not relational_table or not owning_model_fk) and related_model_fk:
141-
# Try to derive the relation table and field names
142-
derived_table, derived_field = _derive_relation_info(
143-
model, field, related_model_fk
144-
)
145-
146-
# Only use derived values if we were missing them
147-
if not relational_table:
148-
log.info(f"Deriving relation_table for field '{field}': {derived_table}")
149-
relational_table = derived_table
150-
if not owning_model_fk:
151-
log.info(f"Deriving relation_field for field '{field}': {derived_field}")
152-
owning_model_fk = derived_field
178+
relational_table, owning_model_fk = _derive_missing_relation_info(
179+
model, field, relational_table, owning_model_fk, related_model_fk
180+
)
153181

154182
# If we don't have the required information, we can't proceed with this strategy
155183
if not relational_table or not owning_model_fk:
@@ -269,19 +297,9 @@ def run_write_tuple_import(
269297
related_model_fk = strategy_details.get("relation")
270298

271299
# Try to derive missing information if possible
272-
if (not relational_table or not owning_model_fk) and related_model_fk:
273-
# Try to derive the relation table and field names
274-
derived_table, derived_field = _derive_relation_info(
275-
model, field, related_model_fk
276-
)
277-
278-
# Only use derived values if we were missing them
279-
if not relational_table:
280-
log.info(f"Deriving relation_table for field '{field}': {derived_table}")
281-
relational_table = derived_table
282-
if not owning_model_fk:
283-
log.info(f"Deriving relation_field for field '{field}': {derived_field}")
284-
owning_model_fk = derived_field
300+
relational_table, owning_model_fk = _derive_missing_relation_info(
301+
model, field, relational_table, owning_model_fk, related_model_fk
302+
)
285303

286304
# If we still don't have the required information, we can't proceed
287305
# with this strategy

0 commit comments

Comments
 (0)