plugins.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # -*- coding: utf-8 -*-
  2. """
  3. flaskbb.cli.plugins
  4. ~~~~~~~~~~~~~~~~~~~
  5. This module contains all plugin commands.
  6. :copyright: (c) 2016 by the FlaskBB Team.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. import pluggy
  10. import click
  11. from flask import current_app
  12. from flaskbb.cli.main import flaskbb
  13. @flaskbb.group()
  14. def plugins():
  15. """Plugins command sub group."""
  16. pass
  17. @plugins.command("list")
  18. def list_plugins():
  19. """Lists all installed plugins."""
  20. click.secho("[+] Listing all installed plugins...", fg="cyan")
  21. enabled_plugins = current_app.pluggy.list_plugin_distinfo()
  22. if len(enabled_plugins) > 0:
  23. click.secho("[+] Enabled Plugins:", fg="blue", bold=True)
  24. for plugin in enabled_plugins:
  25. # plugin[0] is the module
  26. plugin = plugin[1]
  27. click.secho(" - {} (version {})".format(
  28. plugin.key, plugin.version), bold=True
  29. )
  30. # TODO: is there a better way for doing this?
  31. pm = pluggy.PluginManager('flaskbb', implprefix='flaskbb_')
  32. pm.load_setuptools_entrypoints('flaskbb_plugins')
  33. all_plugins = pm.list_plugin_distinfo()
  34. disabled_plugins = set(all_plugins) - set(enabled_plugins)
  35. if len(disabled_plugins) > 0:
  36. click.secho("[+] Disabled Plugins:", fg="yellow", bold=True)
  37. for plugin in disabled_plugins:
  38. plugin = plugin[1]
  39. click.secho(" - {} (version {})".format(
  40. plugin.key, plugin.version), bold=True
  41. )