From acc8dd4142ec81def9a73507120c0262ba6b1264 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Wed, 3 Jan 2018 13:24:02 -0500 Subject: [PATCH] Fixed #28984 -- Made assorted code simplifications. --- django/contrib/admin/helpers.py | 19 +++++++++---------- django/contrib/admin/options.py | 4 +--- django/contrib/sessions/backends/base.py | 3 +-- django/core/serializers/__init__.py | 6 +----- django/db/migrations/autodetector.py | 2 +- django/db/migrations/graph.py | 4 ++-- django/db/models/fields/files.py | 2 +- django/dispatch/dispatcher.py | 10 ++++------ django/test/runner.py | 3 +-- django/utils/synch.py | 2 +- tests/auth_tests/test_context_processors.py | 8 ++------ tests/inspectdb/tests.py | 2 +- tests/modeladmin/tests.py | 16 ++++------------ tests/serializers/test_json.py | 11 ++--------- 14 files changed, 31 insertions(+), 61 deletions(-) diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py index 6f638417b5..cd34587788 100644 --- a/django/contrib/admin/helpers.py +++ b/django/contrib/admin/helpers.py @@ -203,8 +203,7 @@ class AdminReadonlyField: result_repr = self.empty_value_display else: if f is None: - boolean = getattr(attr, "boolean", False) - if boolean: + if getattr(attr, 'boolean', False): result_repr = _boolean_icon(value) else: if hasattr(value, "__html__"): @@ -331,14 +330,14 @@ class InlineAdminForm(AdminForm): ) def needs_explicit_pk_field(self): - # Auto fields are editable (oddly), so need to check for auto or non-editable pk - if self.form._meta.model._meta.auto_field or not self.form._meta.model._meta.pk.editable: - return True - # Also search any parents for an auto field. (The pk info is propagated to child - # models so that does not need to be checked in parents.) - return any( - parent._meta.auto_field or not parent._meta.model._meta.pk.editable - for parent in self.form._meta.model._meta.get_parent_list() + return ( + # Auto fields are editable, so check for auto or non-editable pk. + self.form._meta.model._meta.auto_field or not self.form._meta.model._meta.pk.editable or + # Also search any parents for an auto field. (The pk info is + # propagated to child models so that does not need to be checked + # in parents.) + any(parent._meta.auto_field or not parent._meta.model._meta.pk.editable + for parent in self.form._meta.model._meta.get_parent_list()) ) def pk_field(self): diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 14d4e712c8..d37615b1e5 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -841,13 +841,11 @@ class ModelAdmin(BaseModelAdmin): actions = filter(None, actions) # Convert the actions into an OrderedDict keyed by name. - actions = OrderedDict( + return OrderedDict( (name, (func, name, desc)) for func, name, desc in actions ) - return actions - def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH): """ Return a list of choices for use in a form object. Each choice is a diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py index d469dab44d..35798dbdf7 100644 --- a/django/contrib/sessions/backends/base.py +++ b/django/contrib/sessions/backends/base.py @@ -151,8 +151,7 @@ class SessionBase: while True: session_key = get_random_string(32, VALID_KEY_CHARS) if not self.exists(session_key): - break - return session_key + return session_key def _get_or_create_session_key(self): if self._session_key is None: diff --git a/django/core/serializers/__init__.py b/django/core/serializers/__init__.py index 666d1bb297..3406572b76 100644 --- a/django/core/serializers/__init__.py +++ b/django/core/serializers/__init__.py @@ -216,11 +216,7 @@ def sort_dependencies(app_list): # If all of the models in the dependency list are either already # on the final model list, or not on the original serialization list, # then we've found another model with all it's dependencies satisfied. - found = True - for candidate in ((d not in models or d in model_list) for d in deps): - if not candidate: - found = False - if found: + if all(candidate for candidate in ((d not in models or d in model_list) for d in deps)): model_list.append(model) changed = True else: diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index 0ccb726b3d..0f022137d0 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -301,7 +301,7 @@ class MigrationAutodetector: if deps_satisfied: chopped.append(operation) dependencies.update(operation_dependencies) - self.generated_operations[app_label] = self.generated_operations[app_label][1:] + del self.generated_operations[app_label][0] else: break # Make a migration! Well, only if there's stuff to put in it diff --git a/django/db/migrations/graph.py b/django/db/migrations/graph.py index a2ad984e73..aba8259a7c 100644 --- a/django/db/migrations/graph.py +++ b/django/db/migrations/graph.py @@ -304,7 +304,7 @@ class MigrationGraph: """ roots = set() for node in self.nodes: - if not any(key[0] == node[0] for key in self.node_map[node].parents) and (not app or app == node[0]): + if all(key[0] != node[0] for key in self.node_map[node].parents) and (not app or app == node[0]): roots.add(node) return sorted(roots) @@ -318,7 +318,7 @@ class MigrationGraph: """ leaves = set() for node in self.nodes: - if not any(key[0] == node[0] for key in self.node_map[node].children) and (not app or app == node[0]): + if all(key[0] != node[0] for key in self.node_map[node].children) and (not app or app == node[0]): leaves.add(node) return sorted(leaves) diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py index d45de14e27..683a34ecd9 100644 --- a/django/db/models/fields/files.py +++ b/django/db/models/fields/files.py @@ -39,7 +39,7 @@ class FieldFile(File): def _get_file(self): self._require_file() - if not hasattr(self, '_file') or self._file is None: + if getattr(self, '_file', None) is None: self._file = self.storage.open(self.name, 'rb') return self._file diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py index 6488c7fbd4..cefc00aad7 100644 --- a/django/dispatch/dispatcher.py +++ b/django/dispatch/dispatcher.py @@ -215,12 +215,10 @@ class Signal: # Note: caller is assumed to hold self.lock. if self._dead_receivers: self._dead_receivers = False - new_receivers = [] - for r in self.receivers: - if isinstance(r[1], weakref.ReferenceType) and r[1]() is None: - continue - new_receivers.append(r) - self.receivers = new_receivers + self.receivers = [ + r for r in self.receivers + if not(isinstance(r[1], weakref.ReferenceType) and r[1]() is None) + ] def _live_receivers(self, sender): """ diff --git a/django/test/runner.py b/django/test/runner.py index 49c106049f..d89d734c70 100644 --- a/django/test/runner.py +++ b/django/test/runner.py @@ -531,8 +531,7 @@ class DiscoverRunner: # Since tests are distributed across processes on a per-TestCase # basis, there's no need for more processes than TestCases. parallel_units = len(parallel_suite.subsuites) - if self.parallel > parallel_units: - self.parallel = parallel_units + self.parallel = min(self.parallel, parallel_units) # If there's only one TestCase, parallelization isn't needed. if self.parallel > 1: diff --git a/django/utils/synch.py b/django/utils/synch.py index d944bfd242..23469869bd 100644 --- a/django/utils/synch.py +++ b/django/utils/synch.py @@ -60,7 +60,7 @@ class RWLock: def writer_enters(self): with self.mutex: if self.active_writers == 0 and self.waiting_writers == 0 and self.active_readers == 0: - self.active_writers += 1 + self.active_writers = 1 self.can_write.release() else: self.waiting_writers += 1 diff --git a/tests/auth_tests/test_context_processors.py b/tests/auth_tests/test_context_processors.py index d9cd679a6e..281ea744d8 100644 --- a/tests/auth_tests/test_context_processors.py +++ b/tests/auth_tests/test_context_processors.py @@ -10,14 +10,10 @@ from .settings import AUTH_MIDDLEWARE, AUTH_TEMPLATES class MockUser: def has_module_perms(self, perm): - if perm == 'mockapp': - return True - return False + return perm == 'mockapp' def has_perm(self, perm): - if perm == 'mockapp.someperm': - return True - return False + return perm == 'mockapp.someperm' class PermWrapperTests(SimpleTestCase): diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py index b060f7e25b..88b828168b 100644 --- a/tests/inspectdb/tests.py +++ b/tests/inspectdb/tests.py @@ -189,7 +189,7 @@ class InspectDBTestCase(TestCase): table_name_filter=lambda tn: tn.startswith('inspectdb_special'), stdout=out) output = out.getvalue() - base_name = 'Field' if not connection.features.uppercases_column_names else 'field' + base_name = 'field' if connection.features.uppercases_column_names else 'Field' self.assertIn("field = models.IntegerField()", output) self.assertIn("field_field = models.IntegerField(db_column='%s_')" % base_name, output) self.assertIn("field_field_0 = models.IntegerField(db_column='%s__')" % base_name, output) diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index 67bed3d697..202929df05 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -671,27 +671,19 @@ class ModelAdminPermissionTests(SimpleTestCase): class MockUser: def has_module_perms(self, app_label): - if app_label == "modeladmin": - return True - return False + return app_label == 'modeladmin' class MockAddUser(MockUser): def has_perm(self, perm): - if perm == "modeladmin.add_band": - return True - return False + return perm == 'modeladmin.add_band' class MockChangeUser(MockUser): def has_perm(self, perm): - if perm == "modeladmin.change_band": - return True - return False + return perm == 'modeladmin.change_band' class MockDeleteUser(MockUser): def has_perm(self, perm): - if perm == "modeladmin.delete_band": - return True - return False + return perm == 'modeladmin.delete_band' def test_has_add_permission(self): """ diff --git a/tests/serializers/test_json.py b/tests/serializers/test_json.py index 9037e75e46..a804aa1f3a 100644 --- a/tests/serializers/test_json.py +++ b/tests/serializers/test_json.py @@ -55,20 +55,13 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase): @staticmethod def _get_pk_values(serial_str): - ret_list = [] serial_list = json.loads(serial_str) - for obj_dict in serial_list: - ret_list.append(obj_dict["pk"]) - return ret_list + return [obj_dict['pk'] for obj_dict in serial_list] @staticmethod def _get_field_values(serial_str, field_name): - ret_list = [] serial_list = json.loads(serial_str) - for obj_dict in serial_list: - if field_name in obj_dict["fields"]: - ret_list.append(obj_dict["fields"][field_name]) - return ret_list + return [obj_dict['fields'][field_name] for obj_dict in serial_list if field_name in obj_dict['fields']] def test_indentation_whitespace(self): s = serializers.json.Serializer()