SimpleRST.py 文件源码

python
阅读 24 收藏 0 点赞 0 评论 0

项目:SimpleRST 作者: kasramvd 项目源码 文件源码
def extract_info(self, module):
        """
        .. py:attribute:: extract_info()

           This function loop over parser object and extracts the informations
           (contains name, documentation, line number etc.) for function, class
           and attribute objects.

           :rtype: dict

        .. note::

        """
        def extracter(root_nod):
            for node in root_nod.body:
                if isinstance(node, ast.ClassDef):
                    yield {
                        "name": node.name,
                        "lineno": node.lineno - 1,
                        "docstring": ast.get_docstring(node),
                        "type": 'class'}
                    for sub_node in node.body:
                        args_ = []
                        if isinstance(sub_node, ast.FunctionDef):
                            for arg in sub_node.args.args:
                                    try:
                                        args_.append(arg.id)
                                    except AttributeError:
                                        args_.extend([item.id for item in arg.elts if item.id != 'self'])

                            yield {
                                "name": sub_node.name,
                                "lineno": sub_node.lineno - 1,
                                "docstring": ast.get_docstring(sub_node),
                                "type": 'attribute',
                                "args": args_,
                                "header": ''}
                            for n in extracter(sub_node):
                                yield n
                elif isinstance(node, ast.FunctionDef):
                    args_ = []
                    for arg in node.args.args:
                        try:
                            args_.append(arg.id)
                        except AttributeError:
                            args_.extend([item.id for item in arg])
                    yield {
                        "name": node.name,
                        "lineno": node.lineno - 1,
                        "docstring": ast.get_docstring(node),
                        "type": 'function',
                        "args": args_}
                    for n in extracter(node):
                        yield n
        return extracter(module)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号