示例#1
0
    def run(self):
        """
        This method is called whenever the :rst:dir:`automodsumm` directive is found
        in a document.  It is used to do any further manipulation of the directive,
        its options, and its content to get the desired rendered outcome.
        """
        env = self.env
        modname = self.arguments[0]

        # for some reason, even though ``currentmodule`` is substituted in,
        # sphinx doesn't necessarily recognize this fact.  So we just force
        # it internally, and that seems to fix things
        env.temp_data["py:module"] = modname
        env.ref_context["py:module"] = modname

        nodelist = []

        # update toctree with relative path to file (not confdir)
        if "toctree" in self.options:
            self.options["toctree"] = self.option_processor(
            ).options["toctree"]

        # define additional content
        content = self.option_processor().generate_obj_list()
        for ii, modname in enumerate(content):
            if not modname.startswith("~"):
                content[ii] = "~" + modname
        self.content = content

        nodelist.extend(Autosummary.run(self))
        return nodelist
示例#2
0
    def run(self):
        from inspect import isclass, isfunction

        self.warnings = []
        nodelist = []

        try:
            localnames, fqns, objs = find_mod_objs(self.arguments[0])
        except ImportError:
            self.warnings = []
            self.warn("Couldn't import module " + self.arguments[0])
            return self.warnings

        try:
            # set self.content to trick the Autosummary internals.
            # Be sure to respect functions-only and classes-only.
            funconly = 'functions-only' in self.options
            clsonly = 'classes-only' in self.options

            skipmap = {}
            if 'skip' in self.options:
                skipnames = set(self.options['skip'])
                for lnm, fqnm in zip(localnames, fqns):
                    if lnm in skipnames:
                        skipnames.remove(lnm)
                        skipmap[fqnm] = lnm
                if len(skipnames) > 0:
                    self.warn('Tried to skip objects {objs} in module {mod}, '
                              'but they were not present.  Ignoring.'.format(
                                  objs=skipnames, mod=self.arguments[0]))

            if funconly and not clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if nm not in skipmap and isfunction(obj):
                        cont.append('~' + nm)
            elif clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if nm not in skipmap and isclass(obj):
                        cont.append('~' + nm)
            else:
                if clsonly and funconly:
                    self.warning('functions-only and classes-only both '
                                 'defined. Skipping.')
                cont = ['~' + nm for nm in fqns if nm not in skipmap]

            self.content = cont

            #can't use super because Sphinx/docutils has trouble
            #return super(Autosummary,self).run()
            nodelist.extend(Autosummary.run(self))
            return self.warnings + nodelist
        finally:  # has_content = False for the Automodsumm
            self.content = []
示例#3
0
    def run(self):
        from inspect import isclass, isfunction

        self.warnings = []
        nodelist = []

        try:
            localnames, fqns, objs = find_mod_objs(self.arguments[0])
        except ImportError:
            self.warnings = []
            self.warn("Couldn't import module " + self.arguments[0])
            return self.warnings

        try:
            # set self.content to trick the Autosummary internals.
            # Be sure to respect functions-only and classes-only.
            funconly = 'functions-only' in self.options
            clsonly = 'classes-only' in self.options

            skipmap = {}
            if 'skip' in self.options:
                skipnames = set(self.options['skip'])
                for lnm, fqnm in zip(localnames, fqns):
                    if lnm in skipnames:
                        skipnames.remove(lnm)
                        skipmap[fqnm] = lnm
                if len(skipnames) > 0:
                    self.warn('Tried to skip objects {objs} in module {mod}, '
                              'but they were not present.  Ignoring.'.format(
                              objs=skipnames, mod=self.arguments[0]))

            if funconly and not clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if nm not in skipmap and isfunction(obj):
                        cont.append('~' + nm)
            elif clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if nm not in skipmap and isclass(obj):
                        cont.append('~' + nm)
            else:
                if clsonly and funconly:
                    self.warning('functions-only and classes-only both '
                                 'defined. Skipping.')
                cont = ['~' + nm for nm in fqns if nm not in skipmap]

            self.content = cont

            #can't use super because Sphinx/docutils has trouble
            #return super(Autosummary,self).run()
            nodelist.extend(Autosummary.run(self))
            return self.warnings + nodelist
        finally:  # has_content = False for the Automodsumm
            self.content = []
示例#4
0
    def run(self):
        from inspect import isclass, isfunction

        nodelist = []

        try:
            localnames, fqns, objs = find_mod_objs(self.arguments[0])
        except ImportError:
            self.warnings = []
            self.warn("Couldn't import module " + self.arguments[0])
            return self.warnings

        try:
            # set self.content to trick the Autosummary internals.
            # Be sure to respect functions-only and classes-only.
            funconly = 'functions-only' in self.options
            clsonly = 'classes-only' in self.options
            if funconly and not clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if isfunction(obj):
                        cont.append('~' + nm)
            elif clsonly:
                cont = []
                for nm, obj in zip(fqns, objs):
                    if isclass(obj):
                        cont.append('~' + nm)
            else:
                if clsonly and funconly:
                    self.warning('functions-only and classes-only both '
                                 'defined. Skipping.')
                cont = ['~' + objname for objname in fqns]
            self.content = cont

            #can't use super because Sphinx/docutils has trouble
            #return super(Autosummary,self).run()
            nodelist.extend(Autosummary.run(self))
            return nodelist
        finally:  # has_content = False for the Automodsumm
            self.content = []
示例#5
0
    def run(self):
        env = self.state.document.settings.env
        modname = self.arguments[0]

        self.warnings = []
        nodelist = []

        try:
            localnames, fqns, objs = find_mod_objs(modname)
        except ImportError:
            self.warnings = []
            self.warn("Couldn't import module " + modname)
            return self.warnings

        try:
            # set self.content to trick the Autosummary internals.
            # Be sure to respect functions-only and classes-only.
            funconly = 'functions-only' in self.options
            clsonly = 'classes-only' in self.options

            skipnames = []
            if 'skip' in self.options:
                option_skipnames = set(self.options['skip'])
                for lnm in localnames:
                    if lnm in option_skipnames:
                        option_skipnames.remove(lnm)
                        skipnames.append(lnm)
                if len(option_skipnames) > 0:
                    self.warn('Tried to skip objects {objs} in module {mod}, '
                              'but they were not present.  Ignoring.'.format(
                              objs=option_skipnames, mod=modname))

            if funconly and not clsonly:
                cont = []
                for nm, obj in zip(localnames, objs):
                    if nm not in skipnames and inspect.isroutine(obj):
                        cont.append(nm)
            elif clsonly:
                cont = []
                for nm, obj in zip(localnames, objs):
                    if nm not in skipnames and inspect.isclass(obj):
                        cont.append(nm)
            else:
                if clsonly and funconly:
                    self.warning('functions-only and classes-only both '
                                 'defined. Skipping.')
                cont = [nm for nm in localnames if nm not in skipnames]

            self.content = cont

            # for some reason, even though ``currentmodule`` is substituted in,
            # sphinx doesn't necessarily recognize this fact.  So we just force
            # it internally, and that seems to fix things
            env.temp_data['py:module'] = modname

            # can't use super because Sphinx/docutils has trouble return
            # super(Autosummary,self).run()
            nodelist.extend(Autosummary.run(self))

            return self.warnings + nodelist
        finally:  # has_content = False for the Automodsumm
            self.content = []