python - FAB 自定义加载项创建和安装

python - FAB custom add-on create and install

我正在尝试构建自己的自定义附加组件,以便以通用方式处理我的应用程序外部的 OAuth 登录。

我已阅读 the documentation on implementing OAuth, as well as the documentation 关于创建附加组件的内容。如果我将代码破解到应用程序中(没有附加组件),我的代码就可以工作,但我不想要这个。我想要它的方式是我可以简单地包含代码并在我的 config.py 中设置一个变量来使用它。这就是我尝试附加组件的原因。

我将应用程序内部的代码移到了附加组件中。我使用 fabmanager 为我生成框架,然后修复了 model.py 文件(我的代码所在的位置)和配置文件。然后,根据文档,我在主应用程序的 config.py 文件中添加了以下行,以告诉它使用我的附加组件。

ADDON_MANAGERS = ['fab_addon_x.manager.X']

但这不起作用。我得到一个 "ModuleNotFoundError".

File "/usr/local/lib/python3.6/site-packages/flask_appbuilder/base.py", line 30, in dynamic_class_import
  package = __import__(module_path)
ModuleNotFoundError: No module named 'fab_addon_x'

我已将附加代码与主项目放在同一层级:

/myapp/
/fab_addon_x/

在主项目中:

/myapp/
/myapp/fab_addon_x/

这些都不起作用。

完整文件夹结构

/usr/local/lib/python3.6/site-packages/myapp/
  - __init__.py
  - __pycache__
  - bin
  - cache_util.py
  - cli.py
  - config.py
  - connectors
  - data
  - dataframe.py
  - db_engine_specs.py
  - db_engines
  - dict_import_export_util.py
  - extract_table_names.py
  - forms.py
  - import_util.py
  - jinja_context.py
  - legacy.py
  - migrations
  - models
  - security.py
  - sql_lab.py
  - sql_parse.py
  - static
  - stats_logger.py
  - templates
  - translations
  - utils.py
  - views
  - viz.py

我已将附加文件夹放在这一层和上一层。插件文件夹结构:

fab_addon_x
  - README.rst
  - config.py
  - fab_addon_x
      - __init__.py
      - manager.py
      - models.py
      - templates
      - translations
      - version.py
      - views.py
  - run.py
  - setup.py

是否有特定的方式来注册我的附加组件?或者这是一个我似乎无法弄清楚的直接引用问题?

编辑 1

已将 "ADDON_MANAGERS = ['fab_addon_first.manager.FirstAddOnManager']" 更改为现在的样子。

编辑 2

已添加文件夹结构

所以我在这里找到了我自己的问题。文档在任何地方都没有提到这一点,但是如果您不将附加组件上传到注册表而只是将文件复制到目录中,您首先必须安装它。对于熟悉 python 的人来说,这听起来可能不言自明,但我不是,所以它不适合我。

下面的命令将安装它,您应该可以开始了:

python setup.py install