简体   繁体   English

如何从 Python 文件生成文档?

[英]How to generate documentation from Python files?

How to create documentation from Python files without writing docstring?如何在不编写文档字符串的情况下从 Python 文件创建文档? I want to create a tree from all objects and classes and functions.我想从所有对象、类和函数创建一棵树。 For example, this is my python file:例如,这是我的 python 文件:

from core.server import handler
from core.ras import ras_main,ras
from core.lib.sort import SortedList,SortedDic
from core.lib.general import *
from core.lib.multi_strs import MultiStr
from core.ippool import ippool_main

class RasHandler(handler.Handler):
    def __init__(self):
       handler.Handler.__init__(self,"ras")
        self.registerHandlerMethod("addNewRas")
        self.registerHandlerMethod("getRasInfo")
        self.registerHandlerMethod("getActiveRasIPs")
        self.registerHandlerMethod("getRasDescriptions")
        self.registerHandlerMethod("getInActiveRases")
        self.registerHandlerMethod("getRasTypes")
        self.registerHandlerMethod("getRasAttributes")
        self.registerHandlerMethod("getRasPorts")
        self.registerHandlerMethod("updateRasInfo")
        self.registerHandlerMethod("updateAttributes")
        self.registerHandlerMethod("resetAttributes")
        self.registerHandlerMethod("getPortTypes")
        self.registerHandlerMethod("addPort")
        self.registerHandlerMethod("delPort")
        self.registerHandlerMethod("updatePort")
        self.registerHandlerMethod("deActiveRas")
        self.registerHandlerMethod("deleteRas")
        self.registerHandlerMethod("reActiveRas")
        self.registerHandlerMethod("getRasPortInfo")
        self.registerHandlerMethod("getRasIPpools")
        self.registerHandlerMethod("addIPpoolToRas")
        self.registerHandlerMethod("delIPpoolFromRas")

    def addNewRas(self,request):
        request.needAuthType(request.ADMIN)
        creator_obj=request.getAuthNameObj()
        creator_obj.canDo("CHANGE RAS")
        request.checkArgs("ras_ip","ras_type","radius_secret","ras_description","comment")

        ras_id=ras_main.getActionManager().addNewRas(request["ras_ip"].strip(),
                                                     request["ras_description"].strip(),
                                                     request["ras_type"],
                                                     request["radius_secret"],
                                                     request["comment"],
                                                     creator_obj.getAdminID(),
                                                     creator_obj.getISPID(),
                                                     request.getRemoteAddr()
                                                     )
        return ras_id

    def getRasInfo(self,request):
        request.needAuthType(request.ADMIN)
        requester_obj=request.getAuthNameObj()
        requester_obj.canDo("GET RAS INFORMATION")
        request.checkArgs("ras_ip")

        requester_obj.checkAccessToRasByIP(request["ras_ip"])
        ras_obj=ras_main.getLoader().getRasByIP(request["ras_ip"])
        return ras_obj.getInfo()

    def getActiveRasIPs(self,request):
        request.needAuthType(request.ADMIN)
        creator_obj=request.getAuthNameObj()

        if request.has_key("type_filter"):
            types = request.fixList("type_filter")
            def typeFilter(ras_obj):
                if ras_obj.getType() in types:
                    return ras_obj.getRasIP()

                return None

            ras_ips = filter(None, ras_main.getLoader().runOnAllRases(typeFilter))
        else:
            ras_ips = ras_main.getLoader().getAllRasIPs()

        ras_ips = filter(creator_obj.hasAccessToRasByIP, ras_ips)

        sorted=SortedList(ras_ips)
        sorted.sort(False)
        return sorted.getList()


    def getRasDescriptions(self,request):
        """
            return list of tuples in format [(ras_description,ras_ip)]

        """
        request.needAuthType(request.ADMIN)
        requester_obj=request.getAuthNameObj()
        desc_to_ip_map = ras_main.getLoader().getRasDescToIPMap()

        for ras_desc, ras_ip in desc_to_ip_map.items():
            if not requester_obj.hasAccessToRasByIP(ras_ip):
                del(desc_to_ip_map[ras_desc])

        sorted=SortedDic(desc_to_ip_map)
        sorted.sortByKey(False)
        return sorted.getList()

    def getInActiveRases(self,request):
        request.needAuthType(request.ADMIN)
        creator_obj=request.getAuthNameObj()
        creator_obj.canDo("LIST RAS")
        return ras_main.getActionManager().getInActiveRases()

    def getRasTypes(self,request):
        """
            return a list of all available ras types
        """
        request.needAuthType(request.ADMIN)
        creator_obj=request.getAuthNameObj()
        creator_obj.canDo("GET RAS INFORMATION")
        type_list=ras_main.getFactory().getAllTypes()
        sorted = SortedList(type_list)
        sorted.sort(False)
        return sorted.getList()

    def getRasAttributes(self,request):
        request.needAuthType(request.ADMIN)
        request.checkArgs("ras_ip")

        requester_obj=request.getAuthNameObj()
        requester_obj.canDo("GET RAS INFORMATION")
        requester_obj.checkAccessToRasByIP(request["ras_ip"])

        return ras_main.getLoader().getRasByIP(request["ras_ip"]).getAllAttributes()

For example, I want that information for my result, such as How many functions, class do we have?例如,我想要我的结果的信息,例如我们有多少个函数、类? And the relationship between functions and class.以及函数和类的关系。 I won't use help() and dir() method, because I haven't any dependency modules.我不会使用help()dir()方法,因为我没有任何依赖模块。 I think it should be the use of parse Python file by re module and use of regex.我认为应该是使用re模块解析 Python 文件和使用正则表达式。

Even if you don't write the docstrings nor the comments, you can still type:即使你不写文档字符串和注释,你仍然可以输入:

help(your_object)

to get the automatically generated documentation of the class.获取类的自动生成的文档。 your_object can be any kind of object, that is: your_object 可以是任何类型的对象,即:

  • a class一类
  • a class instance一个类实例
  • a function一个函数
  • a module一个模块
  • etc.等等。

So if you want the documentation for a given file (I understand a module), you can do:因此,如果您想要给定文件的文档(我了解一个模块),您可以执行以下操作:

import your_module
help(your_dodule)

if your file is called your_file.py and contains a class called your_class, you can do:如果您的文件名为 your_file.py 并包含一个名为 your_class 的类,您可以执行以下操作:

python -i your_file.py
help(your_class)

You can even generate the documentation from the shell prompt (not from the python interpreter prompt).您甚至可以从 shell 提示(而不是从 python 解释器提示)生成文档。 Assuming again that you want to generate documentation for your_file.py, do the following:再次假设您要为 your_file.py 生成文档,请执行以下操作:

pydoc your_file

Finally, if you want to generate html documentation for this module, do:最后,如果要为此模块生成 html 文档,请执行以下操作:

pydoc -w your_file

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM