Browse Source

Mark flaskbb's internal plugins as internal in pluggy

Peter Justin 7 years ago
parent
commit
15a00cfe47
2 changed files with 28 additions and 2 deletions
  1. 1 0
      flaskbb/app.py
  2. 27 2
      flaskbb/plugins/manager.py

+ 1 - 0
flaskbb/app.py

@@ -419,6 +419,7 @@ def load_plugins(app):
     ]
     ]
     for module in flaskbb_modules:
     for module in flaskbb_modules:
         app.pluggy.register(module)
         app.pluggy.register(module)
+        app.pluggy.mark_as_internal_plugin(module)
 
 
     try:
     try:
         with app.app_context():
         with app.app_context():

+ 27 - 2
flaskbb/plugins/manager.py

@@ -31,10 +31,34 @@ class FlaskBBPluginManager(pluggy.PluginManager):
         self._plugin_metadata = {}
         self._plugin_metadata = {}
         self._disabled_plugins = []
         self._disabled_plugins = []
 
 
+        self._internal_name2plugin = {}
+
+    def mark_as_internal_plugin(self, plugin):
+        """Marks a plugin as an internal FlaskBB plugin.
+        Returns the name of the plugin or None.
+
+        :param plugin: The plugin object to mark as internal
+                       FlaskBB plugin.
+        :param force: If set to ``True`` it will overwrite plugins which
+                      are already marked as internal.
+        """
+        name = self.get_name(plugin)
+        if name not in self._name2plugin:
+            return None
+
+        # already marked as internal
+        if name in self._internal_name2plugin:
+            self._name2plugin.pop(name)
+            return name
+
+        self._internal_name2plugin[name] = self._name2plugin.pop(name)
+        return name
+
     def load_setuptools_entrypoints(self, entrypoint_name):
     def load_setuptools_entrypoints(self, entrypoint_name):
         """Load modules from querying the specified setuptools entrypoint name.
         """Load modules from querying the specified setuptools entrypoint name.
         Return the number of loaded plugins. """
         Return the number of loaded plugins. """
-        logger.info("Loading plugins under entrypoint {}".format(entrypoint_name))
+        logger.info("Loading plugins under entrypoint {}"
+                    .format(entrypoint_name))
         for ep in iter_entry_points(entrypoint_name):
         for ep in iter_entry_points(entrypoint_name):
             if self.get_plugin(ep.name):
             if self.get_plugin(ep.name):
                 continue
                 continue
@@ -48,7 +72,8 @@ class FlaskBBPluginManager(pluggy.PluginManager):
             try:
             try:
                 plugin = ep.load()
                 plugin = ep.load()
             except DistributionNotFound:
             except DistributionNotFound:
-                logger.warn("Could not load plugin {}. Passing.".format(ep.name))
+                logger.warn("Could not load plugin {}. Passing."
+                            .format(ep.name))
                 continue
                 continue
             except VersionConflict as e:
             except VersionConflict as e:
                 raise pluggy.PluginValidationError(
                 raise pluggy.PluginValidationError(