Skip to content

Commit 8f12db9

Browse files
committed
refactor(migrations): reduce branch complexity in executor and operation_generator
1 parent 9f42589 commit 8f12db9

1 file changed

Lines changed: 17 additions & 15 deletions

File tree

tortoise/migrations/schema_generator/operation_generator.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ def _create_model_operation(self, model_state: ModelState) -> CreateModel:
6161
bases=[base.__name__ for base in model_state.bases],
6262
)
6363

64+
@staticmethod
65+
def _dependency_key_for_field(field: object) -> ModelKey | None:
66+
if not isinstance(field, (ForeignKeyFieldInstance, ManyToManyFieldInstance)):
67+
return None
68+
ref = getattr(field, "model_name", None)
69+
if not ref:
70+
return None
71+
if isinstance(ref, str):
72+
parts = ref.split(".")
73+
if len(parts) != 2:
74+
return None
75+
return parts[0], parts[1]
76+
# model_name is a model class
77+
return getattr(ref._meta, "app", ""), ref.__name__
78+
6479
@staticmethod
6580
def _sort_by_dependencies(keys: list[ModelKey], state: State) -> list[ModelKey]:
6681
"""Sort model keys so that FK/M2M dependencies come before dependents."""
@@ -70,21 +85,8 @@ def _sort_by_dependencies(keys: list[ModelKey], state: State) -> list[ModelKey]:
7085
for key in keys:
7186
model_state = state.models[key]
7287
for field in model_state.fields.values():
73-
if not isinstance(field, (ForeignKeyFieldInstance, ManyToManyFieldInstance)):
74-
continue
75-
ref = getattr(field, "model_name", None)
76-
if not ref:
77-
continue
78-
if isinstance(ref, str):
79-
parts = ref.split(".")
80-
if len(parts) == 2:
81-
dep_key: ModelKey = (parts[0], parts[1])
82-
else:
83-
continue
84-
else:
85-
# model_name is a model class
86-
dep_key = (getattr(ref._meta, "app", ""), ref.__name__)
87-
if dep_key in key_set and dep_key != key:
88+
dep_key = OperationGenerator._dependency_key_for_field(field)
89+
if dep_key and dep_key in key_set and dep_key != key:
8890
deps[key].add(dep_key)
8991

9092
# Kahn's algorithm

0 commit comments

Comments
 (0)