@@ -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+
91129def _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