使用 pdoc3 自动生成数据库模块的文档时出现 SQLAlchemy 错误

问题描述

我正在使用 pydoc3 为项目创建文档,但在运行 sqlAlchemy 模块时遇到来自 database 的奇怪错误

背景

项目布局:

PROJECT_NAME/
|-- __init__.py
|
|-- api
|   |-- main.py
|
|-- database
|   |-- __init__.py
|   |-- Metadata.py
|
|   |-- methods
|       |-- __init__.py
|       |-- foo.py
|
|   |-- models
|       |-- __init__.py
|       |-- base.py
|       |-- models.py
|
| - tests
|   |-- test_this.py
...

生成文档的命令:
其中 MODULE 是模块的名称...

python3 venv/bin/pdoc3 --html --output-dir docs $MODULE

问题:

我能够为每个模块生成文档,一次一个,没有问题。
(例如:python3 venv/bin/pdoc3 --html --output-dir docs database

但是当我尝试为整个项目生成文档 (MODULE='.') 时,我收到以下错误

导入错误:导入“PROJECT_NAME.database”时出错:

InvalidRequestError:已为此 MetaData 实例定义了表 'FooBar'。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。


这个错误的奇怪之处在于我有一个完整的测试套件,其中根本没有问题。此外,错误发生在 database.__init__.py 中,这对我来说根本没有意义。


尽可能的解决方案:

我的想法是我的问题来自于我如何配置我的 declarative base...

database.__init__.py内容

from .Metadata import Metadata
from . import methods
from . import models

database.Metadata.py内容

from sqlalchemy import MetaData
Metadata = MetaData()

database.models.base.py内容

from database import Metadata
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(Metadata=Metadata)

database.models.model.py内容

from database.models import Base
from sqlalchemy import Column,Integer,String

class FooBar(Base):

    __tablename__ = 'foo_bar'
    __table_args__ = {
        'comment': 'Example...'
    }

    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(80),nullable=False,unique=True)

从根调用时,pydoc 是否可能尝试创建两次我的模型?

在这里完全不知所措,不知道要使用什么资源来进一步调查。


更新:

this answer as inspa 之后,如果我更新 database.__init__.py 的格式,pdoc3 能够解析我的数据库模块,但是,而不是 database.models (我明确转义,因为完成胜于完美)

修改后的database.__init__.py

__pdoc__ = {'models': False}

from database.Metadata import Metadata
from database import methods
from database import models

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)