summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2020-07-22 01:04:06 -0400
committerGitHub <noreply@github.com>2020-07-22 07:04:06 +0200
commitff55adbd0da6618abaf265d16196bf54f81aa77a (patch)
treea4b16306b57c8b49bd62cbf9c03922d9a80b8b70
parent3f2821af6bc48fa8e7970c1ce27bc54c3172545e (diff)
Reverted "Fixed #30300 -- Allowed migrations to be loaded from directories without __init__.py file."
This reverts commit 3cd3bebe8921e14b911b36b2a1cbceef8fb6294e.
-rw-r--r--django/db/migrations/loader.py10
-rw-r--r--docs/releases/3.1.txt6
-rw-r--r--tests/migrations/test_loader.py11
3 files changed, 11 insertions, 16 deletions
diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py
index cb61aeca16..95a5062ec9 100644
--- a/django/db/migrations/loader.py
+++ b/django/db/migrations/loader.py
@@ -88,6 +88,11 @@ class MigrationLoader:
continue
raise
else:
+ # Empty directories are namespaces.
+ # getattr() needed on PY36 and older (replace w/attribute access).
+ if getattr(module, '__file__', None) is None:
+ self.unmigrated_apps.add(app_config.label)
+ continue
# Module is not a package (e.g. migrations.py).
if not hasattr(module, '__path__'):
self.unmigrated_apps.add(app_config.label)
@@ -95,14 +100,11 @@ class MigrationLoader:
# Force a reload if it's already loaded (tests need this)
if was_loaded:
reload(module)
+ self.migrated_apps.add(app_config.label)
migration_names = {
name for _, name, is_pkg in pkgutil.iter_modules(module.__path__)
if not is_pkg and name[0] not in '_~'
}
- if migration_names or self.ignore_no_migrations:
- self.migrated_apps.add(app_config.label)
- else:
- self.unmigrated_apps.add(app_config.label)
# Load migrations
for migration_name in migration_names:
migration_path = '%s.%s' % (module_name, migration_name)
diff --git a/docs/releases/3.1.txt b/docs/releases/3.1.txt
index a9843f638b..cd74eb81cb 100644
--- a/docs/releases/3.1.txt
+++ b/docs/releases/3.1.txt
@@ -337,12 +337,6 @@ Management Commands
* The :djadmin:`flush` and :djadmin:`sqlflush` commands now include SQL to
reset sequences on SQLite.
-Migrations
-~~~~~~~~~~
-
-* Migrations are now loaded also from directories without ``__init__.py``
- files.
-
Models
~~~~~~
diff --git a/tests/migrations/test_loader.py b/tests/migrations/test_loader.py
index ce2f209188..27a052ddac 100644
--- a/tests/migrations/test_loader.py
+++ b/tests/migrations/test_loader.py
@@ -506,12 +506,11 @@ class LoaderTests(TestCase):
MIGRATION_MODULES={'migrations': 'migrations.test_migrations_namespace_package'},
)
def test_loading_namespace_package(self):
- """Migration directories without an __init__.py file are loaded."""
- migration_loader = MigrationLoader(connection)
- self.assertEqual(
- migration_loader.graph.forwards_plan(('migrations', '0001_initial')),
- [('migrations', '0001_initial')],
- )
+ """Migration directories without an __init__.py file are ignored."""
+ loader = MigrationLoader(connection)
+ loader.load_disk()
+ migrations = [name for app, name in loader.disk_migrations if app == 'migrations']
+ self.assertEqual(migrations, [])
class PycLoaderTests(MigrationTestBase):