Copied BaseDatabaseCreation._digest() to SchemaEditor to remove dependency.

refs #22340.
This commit is contained in:
Tim Graham 2014-12-30 11:19:59 -05:00
parent 93d73dac91
commit 478d6a9503
1 changed files with 12 additions and 2 deletions

View File

@ -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