summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2020-04-19 08:51:43 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-04-20 07:22:20 +0200
commit661e39c8d5bb05d8ebe8492912bf9f63453b279f (patch)
treee609c8733810f5e5582c3d77e0b0ee8af8c37607
parent141ab6bc6d93d3a91259896f6ea3b7485172df88 (diff)
Fixed #24559 -- Made MigrationLoader.load_disk() catch more specific ModuleNotFoundError.
Avoids inspecting the exception message, which is not considered a stable API and can change across Python versions. ModuleNotFoundError was introduced in Python 3.6. It is a subclass of ImportError that is raised when the imported module does not exist. It is not raised for other errors that can occur during an import. This exception instance has the property "name" which holds the name of module that failed to import.
-rw-r--r--django/db/migrations/loader.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py
index 80945d0ffd..f0f0a42de3 100644
--- a/django/db/migrations/loader.py
+++ b/django/db/migrations/loader.py
@@ -79,11 +79,11 @@ class MigrationLoader:
was_loaded = module_name in sys.modules
try:
module = import_module(module_name)
- except ImportError as e:
- # I hate doing this, but I don't want to squash other import errors.
- # Might be better to try a directory check directly.
- if ((explicit and self.ignore_no_migrations) or (
- not explicit and "No module named" in str(e) and MIGRATIONS_MODULE_NAME in str(e))):
+ except ModuleNotFoundError as e:
+ if (
+ (explicit and self.ignore_no_migrations) or
+ (not explicit and MIGRATIONS_MODULE_NAME in e.name.split('.'))
+ ):
self.unmigrated_apps.add(app_config.label)
continue
raise