Skip to content

Commit 9ad6071

Browse files
sir-sigurdtimgraham
authored andcommitted
Simplified usage of sets in MigrationAutodetector.
1 parent c6a3546 commit 9ad6071

File tree

1 file changed

+58
-59
lines changed

1 file changed

+58
-59
lines changed

django/db/migrations/autodetector.py

Lines changed: 58 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -128,34 +128,34 @@ def _detect_changes(self, convert_apps=None, graph=None):
128128
# proxy models and ignoring unmigrated apps.
129129
self.old_apps = self.from_state.concrete_apps
130130
self.new_apps = self.to_state.apps
131-
self.old_model_keys = []
132-
self.old_proxy_keys = []
133-
self.old_unmanaged_keys = []
134-
self.new_model_keys = []
135-
self.new_proxy_keys = []
136-
self.new_unmanaged_keys = []
137-
for al, mn in sorted(self.from_state.models):
131+
self.old_model_keys = set()
132+
self.old_proxy_keys = set()
133+
self.old_unmanaged_keys = set()
134+
self.new_model_keys = set()
135+
self.new_proxy_keys = set()
136+
self.new_unmanaged_keys = set()
137+
for al, mn in self.from_state.models:
138138
model = self.old_apps.get_model(al, mn)
139139
if not model._meta.managed:
140-
self.old_unmanaged_keys.append((al, mn))
140+
self.old_unmanaged_keys.add((al, mn))
141141
elif al not in self.from_state.real_apps:
142142
if model._meta.proxy:
143-
self.old_proxy_keys.append((al, mn))
143+
self.old_proxy_keys.add((al, mn))
144144
else:
145-
self.old_model_keys.append((al, mn))
145+
self.old_model_keys.add((al, mn))
146146

147-
for al, mn in sorted(self.to_state.models):
147+
for al, mn in self.to_state.models:
148148
model = self.new_apps.get_model(al, mn)
149149
if not model._meta.managed:
150-
self.new_unmanaged_keys.append((al, mn))
150+
self.new_unmanaged_keys.add((al, mn))
151151
elif (
152152
al not in self.from_state.real_apps or
153153
(convert_apps and al in convert_apps)
154154
):
155155
if model._meta.proxy:
156-
self.new_proxy_keys.append((al, mn))
156+
self.new_proxy_keys.add((al, mn))
157157
else:
158-
self.new_model_keys.append((al, mn))
158+
self.new_model_keys.add((al, mn))
159159

160160
# Renames have to come first
161161
self.generate_renamed_models()
@@ -201,18 +201,23 @@ def _prepare_field_lists(self):
201201
in the old state so dependencies can be made from the through model
202202
deletion to the field that uses it.
203203
"""
204-
self.kept_model_keys = set(self.old_model_keys).intersection(self.new_model_keys)
205-
self.kept_proxy_keys = set(self.old_proxy_keys).intersection(self.new_proxy_keys)
206-
self.kept_unmanaged_keys = set(self.old_unmanaged_keys).intersection(self.new_unmanaged_keys)
204+
self.kept_model_keys = self.old_model_keys & self.new_model_keys
205+
self.kept_proxy_keys = self.old_proxy_keys & self.new_proxy_keys
206+
self.kept_unmanaged_keys = self.old_unmanaged_keys & self.new_unmanaged_keys
207207
self.through_users = {}
208-
self.old_field_keys = set()
209-
self.new_field_keys = set()
210-
for app_label, model_name in sorted(self.kept_model_keys):
211-
old_model_name = self.renamed_models.get((app_label, model_name), model_name)
212-
old_model_state = self.from_state.models[app_label, old_model_name]
213-
new_model_state = self.to_state.models[app_label, model_name]
214-
self.old_field_keys.update((app_label, model_name, x) for x, y in old_model_state.fields)
215-
self.new_field_keys.update((app_label, model_name, x) for x, y in new_model_state.fields)
208+
self.old_field_keys = {
209+
(app_label, model_name, x)
210+
for app_label, model_name in self.kept_model_keys
211+
for x, y in self.from_state.models[
212+
app_label,
213+
self.renamed_models.get((app_label, model_name), model_name)
214+
].fields
215+
}
216+
self.new_field_keys = {
217+
(app_label, model_name, x)
218+
for app_label, model_name in self.kept_model_keys
219+
for x, y in self.to_state.models[app_label, model_name].fields
220+
}
216221

217222
def _generate_through_model_map(self):
218223
"""Through model map generation."""
@@ -451,12 +456,12 @@ def generate_renamed_models(self):
451456
"""
452457
self.renamed_models = {}
453458
self.renamed_models_rel = {}
454-
added_models = set(self.new_model_keys).difference(self.old_model_keys)
459+
added_models = self.new_model_keys - self.old_model_keys
455460
for app_label, model_name in sorted(added_models):
456461
model_state = self.to_state.models[app_label, model_name]
457462
model_fields_def = self.only_relation_agnostic_fields(model_state.fields)
458463

459-
removed_models = set(self.old_model_keys).difference(self.new_model_keys)
464+
removed_models = self.old_model_keys - self.new_model_keys
460465
for rem_app_label, rem_model_name in removed_models:
461466
if rem_app_label == app_label:
462467
rem_model_state = self.from_state.models[rem_app_label, rem_model_name]
@@ -477,7 +482,7 @@ def generate_renamed_models(self):
477482
model_state.name,
478483
)
479484
self.old_model_keys.remove((rem_app_label, rem_model_name))
480-
self.old_model_keys.append((app_label, model_name))
485+
self.old_model_keys.add((app_label, model_name))
481486
break
482487

483488
def generate_created_models(self):
@@ -490,9 +495,9 @@ def generate_created_models(self):
490495
Defer any model options that refer to collections of fields that might
491496
be deferred (e.g. unique_together, index_together).
492497
"""
493-
old_keys = set(self.old_model_keys).union(self.old_unmanaged_keys)
494-
added_models = set(self.new_model_keys) - old_keys
495-
added_unmanaged_models = set(self.new_unmanaged_keys) - old_keys
498+
old_keys = self.old_model_keys | self.old_unmanaged_keys
499+
added_models = self.new_model_keys - old_keys
500+
added_unmanaged_models = self.new_unmanaged_keys - old_keys
496501
all_added_models = chain(
497502
sorted(added_models, key=self.swappable_first_key, reverse=True),
498503
sorted(added_unmanaged_models, key=self.swappable_first_key, reverse=True)
@@ -642,7 +647,7 @@ def generate_created_proxies(self):
642647
models it's safe to skip all the pointless field stuff and just chuck
643648
out an operation.
644649
"""
645-
added = set(self.new_proxy_keys).difference(self.old_proxy_keys)
650+
added = self.new_proxy_keys - self.old_proxy_keys
646651
for app_label, model_name in sorted(added):
647652
model_state = self.to_state.models[app_label, model_name]
648653
assert model_state.options.get("proxy")
@@ -679,9 +684,9 @@ def generate_deleted_models(self):
679684
Also bring forward removal of any model options that refer to
680685
collections of fields - the inverse of generate_created_models().
681686
"""
682-
new_keys = set(self.new_model_keys).union(self.new_unmanaged_keys)
683-
deleted_models = set(self.old_model_keys) - new_keys
684-
deleted_unmanaged_models = set(self.old_unmanaged_keys) - new_keys
687+
new_keys = self.new_model_keys | self.new_unmanaged_keys
688+
deleted_models = self.old_model_keys - new_keys
689+
deleted_unmanaged_models = self.old_unmanaged_keys - new_keys
685690
all_deleted_models = chain(sorted(deleted_models), sorted(deleted_unmanaged_models))
686691
for app_label, model_name in all_deleted_models:
687692
model_state = self.from_state.models[app_label, model_name]
@@ -764,7 +769,7 @@ def generate_deleted_models(self):
764769

765770
def generate_deleted_proxies(self):
766771
"""Make DeleteModel options for proxy models."""
767-
deleted = set(self.old_proxy_keys).difference(self.new_proxy_keys)
772+
deleted = self.old_proxy_keys - self.new_proxy_keys
768773
for app_label, model_name in sorted(deleted):
769774
model_state = self.from_state.models[app_label, model_name]
770775
assert model_state.options.get("proxy")
@@ -868,7 +873,7 @@ def generate_altered_fields(self):
868873
Make AlterField operations, or possibly RemovedField/AddField if alter
869874
isn's possible.
870875
"""
871-
for app_label, model_name, field_name in sorted(self.old_field_keys.intersection(self.new_field_keys)):
876+
for app_label, model_name, field_name in sorted(self.old_field_keys & self.new_field_keys):
872877
# Did the field change?
873878
old_model_name = self.renamed_models.get((app_label, model_name), model_name)
874879
old_field_name = self.renamed_fields.get((app_label, model_name, field_name), field_name)
@@ -988,19 +993,17 @@ def _generate_altered_foo_together(self, operation):
988993
new_model_state = self.to_state.models[app_label, model_name]
989994

990995
# We run the old version through the field renames to account for those
991-
old_value = old_model_state.options.get(option_name) or set()
992-
if old_value:
993-
old_value = {
994-
tuple(
995-
self.renamed_fields.get((app_label, model_name, n), n)
996-
for n in unique
997-
)
998-
for unique in old_value
999-
}
996+
old_value = old_model_state.options.get(option_name)
997+
old_value = {
998+
tuple(
999+
self.renamed_fields.get((app_label, model_name, n), n)
1000+
for n in unique
1001+
)
1002+
for unique in old_value
1003+
} if old_value else set()
10001004

1001-
new_value = new_model_state.options.get(option_name) or set()
1002-
if new_value:
1003-
new_value = set(new_value)
1005+
new_value = new_model_state.options.get(option_name)
1006+
new_value = set(new_value) if new_value else set()
10041007

10051008
if old_value != new_value:
10061009
dependencies = []
@@ -1026,7 +1029,7 @@ def generate_altered_index_together(self):
10261029
self._generate_altered_foo_together(operations.AlterIndexTogether)
10271030

10281031
def generate_altered_db_table(self):
1029-
models_to_check = self.kept_model_keys.union(self.kept_proxy_keys).union(self.kept_unmanaged_keys)
1032+
models_to_check = self.kept_model_keys.union(self.kept_proxy_keys, self.kept_unmanaged_keys)
10301033
for app_label, model_name in sorted(models_to_check):
10311034
old_model_name = self.renamed_models.get((app_label, model_name), model_name)
10321035
old_model_state = self.from_state.models[app_label, old_model_name]
@@ -1049,15 +1052,12 @@ def generate_altered_options(self):
10491052
migrations needs them).
10501053
"""
10511054
models_to_check = self.kept_model_keys.union(
1052-
self.kept_proxy_keys
1053-
).union(
1054-
self.kept_unmanaged_keys
1055-
).union(
1055+
self.kept_proxy_keys,
1056+
self.kept_unmanaged_keys,
10561057
# unmanaged converted to managed
1057-
set(self.old_unmanaged_keys).intersection(self.new_model_keys)
1058-
).union(
1058+
self.old_unmanaged_keys & self.new_model_keys,
10591059
# managed converted to unmanaged
1060-
set(self.old_model_keys).intersection(self.new_unmanaged_keys)
1060+
self.old_model_keys & self.new_unmanaged_keys,
10611061
)
10621062

10631063
for app_label, model_name in sorted(models_to_check):
@@ -1189,8 +1189,7 @@ def _trim_to_apps(self, changes, app_labels):
11891189
old_required_apps = None
11901190
while old_required_apps != required_apps:
11911191
old_required_apps = set(required_apps)
1192-
for app_label in list(required_apps):
1193-
required_apps.update(app_dependencies.get(app_label, set()))
1192+
required_apps.update(*[app_dependencies.get(app_label, ()) for app_label in required_apps])
11941193
# Remove all migrations that aren't needed
11951194
for app_label in list(changes):
11961195
if app_label not in required_apps:

0 commit comments

Comments
 (0)