文档提取器。
exdoc的Python项目详细描述
EXDOC
文档提取器。
从代码中提取文档片段以构建可馈送到模板处理器的文档。
输出可以是json、yaml等格式。 使用任何命令行模板引擎(如j2cli)从中呈现模板。
它不做任何自动背景魔术:它只是提供帮助,让你提取必要的片段。
当前支持分析以下文档格式:
收集器
exdoc只是一组将信息收集到字典中的帮助函数。
Python
python对象的帮助程序
doc(obj,of_class=none)
获取作为dict的对象的解析文档。
这包括参数规范,以及从docstring解析的数据。
fromexdocimportdoc
函数doc()
只是获取对象的文档,可以是
- 模块
- 类
- 函数或方法
- 属性
生成的字典包括参数规范以及解析的docstring:
deff(a,b=1,*args):''' Simple function : param a: First : type a: int : param b: Second : type b: int : param args: More numbers : returns: nothing interesting : rtype: bool : raises ValueError: hopeless condition '''fromexdocimportdocdoc(f)# ->{'module':'__main__','name':'f','qualname':'f',# qualified name: e.g. <class>.<method>'signature':'f(a, b=1, *args)','qsignature':'f(a, b=1, *args)',# qualified signature'doc':'Simple function','clsdoc':'',# doc from the class (used for constructors)# Exceptions'exc':[{'doc':'hopeless condition','name':'ValueError'}],# Return value'ret':{'doc':'nothing interesting','type':'bool'},# Arguments'args':[{'doc':'First','name':'a','type':'int'},{'default':1,'doc':'Second','name':'b','type':'int'},{'doc':'More numbers','name':'*args','type':None}],}
注意:在python 3中,当记录一个类的方法时,将该类作为第二个参数传递给doc()
函数:
doc(cls.method,cls)
这是必要的,因为在python3中方法不像以前那样绑定。现在,它们只是功能。
getMembers(obj,*谓词)
将对象的所有成员作为按名称排序的(key, value)
元组列表返回。
谓词的可选列表可用于筛选成员。
默认谓词删除名称以“\u”开头的成员。要禁用它,请将None
作为第一个谓词传递。
子类(cls,leaves=false)
列出给定类的所有子类,包括它自己。
如果leaves=True
,则只返回本身没有子类的类。
炼金术
记录sqlalchemy模型。
fromexdoc.saimportdocdoc(User)# ->{'name':'User',# List of tables the model uses'table':('users',),'doc':'User account',# PK: tuple[str]'primary':('uid',),# Unique keys'unique':(# tuple[str]('login',),),# Foreign keys'foreign':({'key':'uid','target':'users.uid','onupdate':None,'ondelete':'CASCADE'},),# Columns'columns':[{'key':'uid','type':'INTEGER NOT NULL','doc':''},{'key':'login','type':'VARCHAR NULL','doc':'Login'},{'key':'creator_uid','type':'INTEGER NULL','doc':'Creator'},{'key':'meta','type':'JSON NULL','doc':''},],# Relationships'relations':[{'key':'creator','model':'User','target':'User(creator_uid=uid)','doc':''},{'key':'devices[]','model':'Device','target':'Device(uid)','doc':''},{'key':'created[]','model':'User','target':'User(uid=creator_uid)','doc':''},]}
建筑
创建一个python文件,收集必要的信息并打印json:
#! /usr/bin/env pythonfromexdocimportdocimportjsonfromprojectimportUserprintjson.dumps({'user':doc(User),})
然后使用其输出:
./collect.py | j2 --format=json README.md.j2