From fd325b9dee95f0930f5e8d582892b899508021fe Mon Sep 17 00:00:00 2001 From: David Wobrock Date: Sat, 25 Apr 2020 13:30:58 +0200 Subject: [PATCH] Refs #29899 -- Moved resolve_relation() to django.db.migrations.utils. --- django/db/migrations/operations/models.py | 3 ++- django/db/migrations/operations/utils.py | 30 +---------------------- django/db/migrations/utils.py | 29 ++++++++++++++++++++++ 3 files changed, 32 insertions(+), 30 deletions(-) diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index 28a7dde4dc..a39731e412 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -1,13 +1,14 @@ from django.db import models from django.db.migrations.operations.base import Operation from django.db.migrations.state import ModelState +from django.db.migrations.utils import resolve_relation from django.db.models.options import normalize_together from django.utils.functional import cached_property from .fields import ( AddField, AlterField, FieldOperation, RemoveField, RenameField, ) -from .utils import field_references, get_references, resolve_relation +from .utils import field_references, get_references def _check_for_duplicates(arg_name, objs): diff --git a/django/db/migrations/operations/utils.py b/django/db/migrations/operations/utils.py index facfd9fc60..0ea55bd3f7 100644 --- a/django/db/migrations/operations/utils.py +++ b/django/db/migrations/operations/utils.py @@ -1,34 +1,6 @@ from collections import namedtuple -from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT - - -def resolve_relation(model, app_label=None, model_name=None): - """ - Turn a model class or model reference string and return a model tuple. - - app_label and model_name are used to resolve the scope of recursive and - unscoped model relationship. - """ - if isinstance(model, str): - if model == RECURSIVE_RELATIONSHIP_CONSTANT: - if app_label is None or model_name is None: - raise TypeError( - 'app_label and model_name must be provided to resolve ' - 'recursive relationships.' - ) - return app_label, model_name - if '.' in model: - app_label, model_name = model.split('.', 1) - return app_label, model_name.lower() - if app_label is None: - raise TypeError( - 'app_label must be provided to resolve unscoped model ' - 'relationships.' - ) - return app_label, model.lower() - return model._meta.app_label, model._meta.model_name - +from django.db.migrations.utils import resolve_relation FieldReference = namedtuple('FieldReference', 'to through') diff --git a/django/db/migrations/utils.py b/django/db/migrations/utils.py index 8939794e59..7ce2c5bc82 100644 --- a/django/db/migrations/utils.py +++ b/django/db/migrations/utils.py @@ -1,6 +1,8 @@ import datetime import re +from django.db.models.fields.related import RECURSIVE_RELATIONSHIP_CONSTANT + COMPILED_REGEX_TYPE = type(re.compile('')) @@ -15,3 +17,30 @@ class RegexObject: def get_migration_name_timestamp(): return datetime.datetime.now().strftime("%Y%m%d_%H%M") + + +def resolve_relation(model, app_label=None, model_name=None): + """ + Turn a model class or model reference string and return a model tuple. + + app_label and model_name are used to resolve the scope of recursive and + unscoped model relationship. + """ + if isinstance(model, str): + if model == RECURSIVE_RELATIONSHIP_CONSTANT: + if app_label is None or model_name is None: + raise TypeError( + 'app_label and model_name must be provided to resolve ' + 'recursive relationships.' + ) + return app_label, model_name + if '.' in model: + app_label, model_name = model.split('.', 1) + return app_label, model_name.lower() + if app_label is None: + raise TypeError( + 'app_label must be provided to resolve unscoped model ' + 'relationships.' + ) + return app_label, model.lower() + return model._meta.app_label, model._meta.model_name