summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2014-12-30 11:19:59 -0500
committerTim Graham <timograham@gmail.com>2014-12-31 08:33:34 -0500
commit478d6a950361ef541ff40b51b7c04439647e0492 (patch)
tree03ffa46fcce385ea998ee7451ec2ed661498e5b8
parent93d73dac91104fd82d44b0dd4521cfa4f31e02aa (diff)
Copied BaseDatabaseCreation._digest() to SchemaEditor to remove dependency.
refs #22340.
-rw-r--r--django/db/backends/schema.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/django/db/backends/schema.py b/django/db/backends/schema.py
index 63382adace..40db888e50 100644
--- a/django/db/backends/schema.py
+++ b/django/db/backends/schema.py
@@ -1,6 +1,5 @@
import hashlib
-from django.db.backends.creation import BaseDatabaseCreation
from django.db.backends.utils import truncate_name
from django.db.models.fields.related import ManyToManyField
from django.db.transaction import atomic
@@ -106,6 +105,17 @@ class BaseDatabaseSchemaEditor(object):
def quote_name(self, name):
return self.connection.ops.quote_name(name)
+ @classmethod
+ def _digest(cls, *args):
+ """
+ Generates a 32-bit digest of a set of arguments that can be used to
+ shorten identifying names.
+ """
+ h = hashlib.md5()
+ for arg in args:
+ h.update(force_bytes(arg))
+ return h.hexdigest()[:8]
+
# Field <-> database mapping functions
def column_sql(self, model, field, include_default=False):
@@ -772,7 +782,7 @@ class BaseDatabaseSchemaEditor(object):
# If there is just one column in the index, use a default algorithm from Django
if len(column_names) == 1 and not suffix:
return truncate_name(
- '%s_%s' % (model._meta.db_table, BaseDatabaseCreation._digest(column_names[0])),
+ '%s_%s' % (model._meta.db_table, self._digest(column_names[0])),
self.connection.ops.max_name_length()
)
# Else generate the name for the index using a different algorithm