Просмотр исходного кода

Fixes #11613: Correct plugin import logic fix from #11267

jeremystretch 3 лет назад
Родитель
Сommit
e7ad6eeb74
1 измененных файлов с 9 добавлено и 6 удалено
  1. 9 6
      netbox/extras/plugins/__init__.py

+ 9 - 6
netbox/extras/plugins/__init__.py

@@ -1,5 +1,5 @@
 import collections
-from importlib.util import find_spec
+from importlib import import_module
 
 from django.apps import AppConfig
 from django.conf import settings
@@ -80,12 +80,15 @@ class PluginConfig(AppConfig):
         # Import from the configured path, if defined.
         if getattr(self, name):
             return import_string(f"{self.__module__}.{self.name}")
+
         # Fall back to the resource's default path. Return None if the module has not been provided.
-        default_path = DEFAULT_RESOURCE_PATHS[name]
-        default_module = f'{self.__module__}.{default_path}'.rsplit('.', 1)[0]
-        if find_spec(default_module):
-            setattr(self, name, default_path)
-            return import_string(f"{self.__module__}.{default_path}")
+        default_path = f'{self.__module__}.{DEFAULT_RESOURCE_PATHS[name]}'
+        default_module, resource_name = default_path.rsplit('.', 1)
+        try:
+            module = import_module(default_module)
+            return getattr(module, resource_name, None)
+        except ModuleNotFoundError:
+            pass
 
     def ready(self):
         plugin_name = self.name.rsplit('.', 1)[-1]