简体   繁体   中英

How to generate documentation from Python files?

How to create documentation from Python files without writing docstring? I want to create a tree from all objects and classes and functions. For example, this is my python file:

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. I think it should be the use of parse Python file by re module and use of regex.

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:

  • 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:

python -i your_file.py
help(your_class)

You can even generate the documentation from the shell prompt (not from the python interpreter prompt). Assuming again that you want to generate documentation for your_file.py, do the following:

pydoc your_file

Finally, if you want to generate html documentation for this module, do:

pydoc -w your_file

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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