Fixed #28984 -- Made assorted code simplifications.
This commit is contained in:
parent
d79cf1e9e2
commit
acc8dd4142
|
@ -203,8 +203,7 @@ class AdminReadonlyField:
|
||||||
result_repr = self.empty_value_display
|
result_repr = self.empty_value_display
|
||||||
else:
|
else:
|
||||||
if f is None:
|
if f is None:
|
||||||
boolean = getattr(attr, "boolean", False)
|
if getattr(attr, 'boolean', False):
|
||||||
if boolean:
|
|
||||||
result_repr = _boolean_icon(value)
|
result_repr = _boolean_icon(value)
|
||||||
else:
|
else:
|
||||||
if hasattr(value, "__html__"):
|
if hasattr(value, "__html__"):
|
||||||
|
@ -331,14 +330,14 @@ class InlineAdminForm(AdminForm):
|
||||||
)
|
)
|
||||||
|
|
||||||
def needs_explicit_pk_field(self):
|
def needs_explicit_pk_field(self):
|
||||||
# Auto fields are editable (oddly), so need to check for auto or non-editable pk
|
return (
|
||||||
if self.form._meta.model._meta.auto_field or not self.form._meta.model._meta.pk.editable:
|
# Auto fields are editable, so check for auto or non-editable pk.
|
||||||
return True
|
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
|
# Also search any parents for an auto field. (The pk info is
|
||||||
# models so that does not need to be checked in parents.)
|
# propagated to child models so that does not need to be checked
|
||||||
return any(
|
# in parents.)
|
||||||
parent._meta.auto_field or not parent._meta.model._meta.pk.editable
|
any(parent._meta.auto_field or not parent._meta.model._meta.pk.editable
|
||||||
for parent in self.form._meta.model._meta.get_parent_list()
|
for parent in self.form._meta.model._meta.get_parent_list())
|
||||||
)
|
)
|
||||||
|
|
||||||
def pk_field(self):
|
def pk_field(self):
|
||||||
|
|
|
@ -841,13 +841,11 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
actions = filter(None, actions)
|
actions = filter(None, actions)
|
||||||
|
|
||||||
# Convert the actions into an OrderedDict keyed by name.
|
# Convert the actions into an OrderedDict keyed by name.
|
||||||
actions = OrderedDict(
|
return OrderedDict(
|
||||||
(name, (func, name, desc))
|
(name, (func, name, desc))
|
||||||
for func, name, desc in actions
|
for func, name, desc in actions
|
||||||
)
|
)
|
||||||
|
|
||||||
return actions
|
|
||||||
|
|
||||||
def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH):
|
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
|
Return a list of choices for use in a form object. Each choice is a
|
||||||
|
|
|
@ -151,7 +151,6 @@ class SessionBase:
|
||||||
while True:
|
while True:
|
||||||
session_key = get_random_string(32, VALID_KEY_CHARS)
|
session_key = get_random_string(32, VALID_KEY_CHARS)
|
||||||
if not self.exists(session_key):
|
if not self.exists(session_key):
|
||||||
break
|
|
||||||
return session_key
|
return session_key
|
||||||
|
|
||||||
def _get_or_create_session_key(self):
|
def _get_or_create_session_key(self):
|
||||||
|
|
|
@ -216,11 +216,7 @@ def sort_dependencies(app_list):
|
||||||
# If all of the models in the dependency list are either already
|
# If all of the models in the dependency list are either already
|
||||||
# on the final model list, or not on the original serialization list,
|
# on the final model list, or not on the original serialization list,
|
||||||
# then we've found another model with all it's dependencies satisfied.
|
# then we've found another model with all it's dependencies satisfied.
|
||||||
found = True
|
if all(candidate for candidate in ((d not in models or d in model_list) for d in deps)):
|
||||||
for candidate in ((d not in models or d in model_list) for d in deps):
|
|
||||||
if not candidate:
|
|
||||||
found = False
|
|
||||||
if found:
|
|
||||||
model_list.append(model)
|
model_list.append(model)
|
||||||
changed = True
|
changed = True
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -301,7 +301,7 @@ class MigrationAutodetector:
|
||||||
if deps_satisfied:
|
if deps_satisfied:
|
||||||
chopped.append(operation)
|
chopped.append(operation)
|
||||||
dependencies.update(operation_dependencies)
|
dependencies.update(operation_dependencies)
|
||||||
self.generated_operations[app_label] = self.generated_operations[app_label][1:]
|
del self.generated_operations[app_label][0]
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
# Make a migration! Well, only if there's stuff to put in it
|
# Make a migration! Well, only if there's stuff to put in it
|
||||||
|
|
|
@ -304,7 +304,7 @@ class MigrationGraph:
|
||||||
"""
|
"""
|
||||||
roots = set()
|
roots = set()
|
||||||
for node in self.nodes:
|
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)
|
roots.add(node)
|
||||||
return sorted(roots)
|
return sorted(roots)
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ class MigrationGraph:
|
||||||
"""
|
"""
|
||||||
leaves = set()
|
leaves = set()
|
||||||
for node in self.nodes:
|
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)
|
leaves.add(node)
|
||||||
return sorted(leaves)
|
return sorted(leaves)
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ class FieldFile(File):
|
||||||
|
|
||||||
def _get_file(self):
|
def _get_file(self):
|
||||||
self._require_file()
|
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')
|
self._file = self.storage.open(self.name, 'rb')
|
||||||
return self._file
|
return self._file
|
||||||
|
|
||||||
|
|
|
@ -215,12 +215,10 @@ class Signal:
|
||||||
# Note: caller is assumed to hold self.lock.
|
# Note: caller is assumed to hold self.lock.
|
||||||
if self._dead_receivers:
|
if self._dead_receivers:
|
||||||
self._dead_receivers = False
|
self._dead_receivers = False
|
||||||
new_receivers = []
|
self.receivers = [
|
||||||
for r in self.receivers:
|
r for r in self.receivers
|
||||||
if isinstance(r[1], weakref.ReferenceType) and r[1]() is None:
|
if not(isinstance(r[1], weakref.ReferenceType) and r[1]() is None)
|
||||||
continue
|
]
|
||||||
new_receivers.append(r)
|
|
||||||
self.receivers = new_receivers
|
|
||||||
|
|
||||||
def _live_receivers(self, sender):
|
def _live_receivers(self, sender):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -531,8 +531,7 @@ class DiscoverRunner:
|
||||||
# Since tests are distributed across processes on a per-TestCase
|
# Since tests are distributed across processes on a per-TestCase
|
||||||
# basis, there's no need for more processes than TestCases.
|
# basis, there's no need for more processes than TestCases.
|
||||||
parallel_units = len(parallel_suite.subsuites)
|
parallel_units = len(parallel_suite.subsuites)
|
||||||
if self.parallel > parallel_units:
|
self.parallel = min(self.parallel, parallel_units)
|
||||||
self.parallel = parallel_units
|
|
||||||
|
|
||||||
# If there's only one TestCase, parallelization isn't needed.
|
# If there's only one TestCase, parallelization isn't needed.
|
||||||
if self.parallel > 1:
|
if self.parallel > 1:
|
||||||
|
|
|
@ -60,7 +60,7 @@ class RWLock:
|
||||||
def writer_enters(self):
|
def writer_enters(self):
|
||||||
with self.mutex:
|
with self.mutex:
|
||||||
if self.active_writers == 0 and self.waiting_writers == 0 and self.active_readers == 0:
|
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()
|
self.can_write.release()
|
||||||
else:
|
else:
|
||||||
self.waiting_writers += 1
|
self.waiting_writers += 1
|
||||||
|
|
|
@ -10,14 +10,10 @@ from .settings import AUTH_MIDDLEWARE, AUTH_TEMPLATES
|
||||||
|
|
||||||
class MockUser:
|
class MockUser:
|
||||||
def has_module_perms(self, perm):
|
def has_module_perms(self, perm):
|
||||||
if perm == 'mockapp':
|
return perm == 'mockapp'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def has_perm(self, perm):
|
def has_perm(self, perm):
|
||||||
if perm == 'mockapp.someperm':
|
return perm == 'mockapp.someperm'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class PermWrapperTests(SimpleTestCase):
|
class PermWrapperTests(SimpleTestCase):
|
||||||
|
|
|
@ -189,7 +189,7 @@ class InspectDBTestCase(TestCase):
|
||||||
table_name_filter=lambda tn: tn.startswith('inspectdb_special'),
|
table_name_filter=lambda tn: tn.startswith('inspectdb_special'),
|
||||||
stdout=out)
|
stdout=out)
|
||||||
output = out.getvalue()
|
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 = models.IntegerField()", output)
|
||||||
self.assertIn("field_field = models.IntegerField(db_column='%s_')" % base_name, 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)
|
self.assertIn("field_field_0 = models.IntegerField(db_column='%s__')" % base_name, output)
|
||||||
|
|
|
@ -671,27 +671,19 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
||||||
|
|
||||||
class MockUser:
|
class MockUser:
|
||||||
def has_module_perms(self, app_label):
|
def has_module_perms(self, app_label):
|
||||||
if app_label == "modeladmin":
|
return app_label == 'modeladmin'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
class MockAddUser(MockUser):
|
class MockAddUser(MockUser):
|
||||||
def has_perm(self, perm):
|
def has_perm(self, perm):
|
||||||
if perm == "modeladmin.add_band":
|
return perm == 'modeladmin.add_band'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
class MockChangeUser(MockUser):
|
class MockChangeUser(MockUser):
|
||||||
def has_perm(self, perm):
|
def has_perm(self, perm):
|
||||||
if perm == "modeladmin.change_band":
|
return perm == 'modeladmin.change_band'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
class MockDeleteUser(MockUser):
|
class MockDeleteUser(MockUser):
|
||||||
def has_perm(self, perm):
|
def has_perm(self, perm):
|
||||||
if perm == "modeladmin.delete_band":
|
return perm == 'modeladmin.delete_band'
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_has_add_permission(self):
|
def test_has_add_permission(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -55,20 +55,13 @@ class JsonSerializerTestCase(SerializersTestBase, TestCase):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_pk_values(serial_str):
|
def _get_pk_values(serial_str):
|
||||||
ret_list = []
|
|
||||||
serial_list = json.loads(serial_str)
|
serial_list = json.loads(serial_str)
|
||||||
for obj_dict in serial_list:
|
return [obj_dict['pk'] for obj_dict in serial_list]
|
||||||
ret_list.append(obj_dict["pk"])
|
|
||||||
return ret_list
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_field_values(serial_str, field_name):
|
def _get_field_values(serial_str, field_name):
|
||||||
ret_list = []
|
|
||||||
serial_list = json.loads(serial_str)
|
serial_list = json.loads(serial_str)
|
||||||
for obj_dict in serial_list:
|
return [obj_dict['fields'][field_name] for obj_dict in serial_list if field_name in obj_dict['fields']]
|
||||||
if field_name in obj_dict["fields"]:
|
|
||||||
ret_list.append(obj_dict["fields"][field_name])
|
|
||||||
return ret_list
|
|
||||||
|
|
||||||
def test_indentation_whitespace(self):
|
def test_indentation_whitespace(self):
|
||||||
s = serializers.json.Serializer()
|
s = serializers.json.Serializer()
|
||||||
|
|
Loading…
Reference in New Issue