@@ -128,34 +128,34 @@ def _detect_changes(self, convert_apps=None, graph=None):
128
128
# proxy models and ignoring unmigrated apps.
129
129
self .old_apps = self .from_state .concrete_apps
130
130
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 :
138
138
model = self .old_apps .get_model (al , mn )
139
139
if not model ._meta .managed :
140
- self .old_unmanaged_keys .append ((al , mn ))
140
+ self .old_unmanaged_keys .add ((al , mn ))
141
141
elif al not in self .from_state .real_apps :
142
142
if model ._meta .proxy :
143
- self .old_proxy_keys .append ((al , mn ))
143
+ self .old_proxy_keys .add ((al , mn ))
144
144
else :
145
- self .old_model_keys .append ((al , mn ))
145
+ self .old_model_keys .add ((al , mn ))
146
146
147
- for al , mn in sorted ( self .to_state .models ) :
147
+ for al , mn in self .to_state .models :
148
148
model = self .new_apps .get_model (al , mn )
149
149
if not model ._meta .managed :
150
- self .new_unmanaged_keys .append ((al , mn ))
150
+ self .new_unmanaged_keys .add ((al , mn ))
151
151
elif (
152
152
al not in self .from_state .real_apps or
153
153
(convert_apps and al in convert_apps )
154
154
):
155
155
if model ._meta .proxy :
156
- self .new_proxy_keys .append ((al , mn ))
156
+ self .new_proxy_keys .add ((al , mn ))
157
157
else :
158
- self .new_model_keys .append ((al , mn ))
158
+ self .new_model_keys .add ((al , mn ))
159
159
160
160
# Renames have to come first
161
161
self .generate_renamed_models ()
@@ -201,18 +201,23 @@ def _prepare_field_lists(self):
201
201
in the old state so dependencies can be made from the through model
202
202
deletion to the field that uses it.
203
203
"""
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
207
207
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
+ }
216
221
217
222
def _generate_through_model_map (self ):
218
223
"""Through model map generation."""
@@ -451,12 +456,12 @@ def generate_renamed_models(self):
451
456
"""
452
457
self .renamed_models = {}
453
458
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
455
460
for app_label , model_name in sorted (added_models ):
456
461
model_state = self .to_state .models [app_label , model_name ]
457
462
model_fields_def = self .only_relation_agnostic_fields (model_state .fields )
458
463
459
- removed_models = set ( self .old_model_keys ). difference ( self .new_model_keys )
464
+ removed_models = self .old_model_keys - self .new_model_keys
460
465
for rem_app_label , rem_model_name in removed_models :
461
466
if rem_app_label == app_label :
462
467
rem_model_state = self .from_state .models [rem_app_label , rem_model_name ]
@@ -477,7 +482,7 @@ def generate_renamed_models(self):
477
482
model_state .name ,
478
483
)
479
484
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 ))
481
486
break
482
487
483
488
def generate_created_models (self ):
@@ -490,9 +495,9 @@ def generate_created_models(self):
490
495
Defer any model options that refer to collections of fields that might
491
496
be deferred (e.g. unique_together, index_together).
492
497
"""
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
496
501
all_added_models = chain (
497
502
sorted (added_models , key = self .swappable_first_key , reverse = True ),
498
503
sorted (added_unmanaged_models , key = self .swappable_first_key , reverse = True )
@@ -642,7 +647,7 @@ def generate_created_proxies(self):
642
647
models it's safe to skip all the pointless field stuff and just chuck
643
648
out an operation.
644
649
"""
645
- added = set ( self .new_proxy_keys ). difference ( self .old_proxy_keys )
650
+ added = self .new_proxy_keys - self .old_proxy_keys
646
651
for app_label , model_name in sorted (added ):
647
652
model_state = self .to_state .models [app_label , model_name ]
648
653
assert model_state .options .get ("proxy" )
@@ -679,9 +684,9 @@ def generate_deleted_models(self):
679
684
Also bring forward removal of any model options that refer to
680
685
collections of fields - the inverse of generate_created_models().
681
686
"""
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
685
690
all_deleted_models = chain (sorted (deleted_models ), sorted (deleted_unmanaged_models ))
686
691
for app_label , model_name in all_deleted_models :
687
692
model_state = self .from_state .models [app_label , model_name ]
@@ -764,7 +769,7 @@ def generate_deleted_models(self):
764
769
765
770
def generate_deleted_proxies (self ):
766
771
"""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
768
773
for app_label , model_name in sorted (deleted ):
769
774
model_state = self .from_state .models [app_label , model_name ]
770
775
assert model_state .options .get ("proxy" )
@@ -868,7 +873,7 @@ def generate_altered_fields(self):
868
873
Make AlterField operations, or possibly RemovedField/AddField if alter
869
874
isn's possible.
870
875
"""
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 ):
872
877
# Did the field change?
873
878
old_model_name = self .renamed_models .get ((app_label , model_name ), model_name )
874
879
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):
988
993
new_model_state = self .to_state .models [app_label , model_name ]
989
994
990
995
# 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 ()
1000
1004
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 ()
1004
1007
1005
1008
if old_value != new_value :
1006
1009
dependencies = []
@@ -1026,7 +1029,7 @@ def generate_altered_index_together(self):
1026
1029
self ._generate_altered_foo_together (operations .AlterIndexTogether )
1027
1030
1028
1031
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 )
1030
1033
for app_label , model_name in sorted (models_to_check ):
1031
1034
old_model_name = self .renamed_models .get ((app_label , model_name ), model_name )
1032
1035
old_model_state = self .from_state .models [app_label , old_model_name ]
@@ -1049,15 +1052,12 @@ def generate_altered_options(self):
1049
1052
migrations needs them).
1050
1053
"""
1051
1054
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 ,
1056
1057
# 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 ,
1059
1059
# managed converted to unmanaged
1060
- set ( self .old_model_keys ). intersection ( self .new_unmanaged_keys )
1060
+ self .old_model_keys & self .new_unmanaged_keys ,
1061
1061
)
1062
1062
1063
1063
for app_label , model_name in sorted (models_to_check ):
@@ -1189,8 +1189,7 @@ def _trim_to_apps(self, changes, app_labels):
1189
1189
old_required_apps = None
1190
1190
while old_required_apps != required_apps :
1191
1191
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 ])
1194
1193
# Remove all migrations that aren't needed
1195
1194
for app_label in list (changes ):
1196
1195
if app_label not in required_apps :
0 commit comments