Example #1
0
    def get_object_members(self, want_all):
        """
        Return `(members_check_module, members)` where `members` is a
        list of `(membername, member)` pairs of the members of *self.object*.

        If *want_all* is True, return all members.  Else, only return those
        members given by *self.options.members* (which may also be none).
        """
        if not want_all:
            if not self.options.members:
                return False, []
            # specific members given
            ret = []
            for mname in self.options.members:
                try:
                    ret.append((mname, self.get_attr(self.object, mname)))
                except AttributeError:
                    self.directive.warn('missing attribute %s in object %s' %
                                        (mname, self.fullname))
            return False, ret
        elif self.options.inherited_members:
            # safe_getmembers() uses dir() which pulls in members from all
            # base classes
            return False, safe_getmembers(self.object)
        else:
            # __dict__ contains only the members directly defined in
            # the class (but get them via getattr anyway, to e.g. get
            # unbound method objects instead of function objects);
            # using keys() because apparently there are objects for which
            # __dict__ changes while getting attributes
            return False, sorted([
                (mname, self.get_attr(self.object, mname, None))
                for mname in self.get_attr(self.object, '__dict__').keys()
            ])
Example #2
0
 def get_object_members(self, want_all):
     if want_all:
         # if not hasattr(self.object, '__all__'):
         #     for implicit module members, check __module__ to avoid
         #     documenting imported objects
         return True, safe_getmembers(self.object)
     # else:
     #     memberlist = self.object.__all__
     #     # Sometimes __all__ is broken...
     #     if not isinstance(memberlist, (list, tuple)) or not \
     #        all(isinstance(entry, string_types) for entry in memberlist):
     #         self.directive.warn(
     #             '__all__ should be a list of strings, not %r '
     #             '(in module %s) -- ignoring __all__' %
     #             (memberlist, self.fullname))
     #         # fall back to all members
     #         return True, safe_getmembers(self.object)
     else:
         memberlist = self.options.members or []
     ret = []
     for mname in memberlist:
         try:
             ret.append((mname, safe_getattr(self.object, mname)))
         except AttributeError:
             self.directive.warn(
                 'missing attribute mentioned in :members: or __all__: '
                 'module %s, attribute %s' %
                 (safe_getattr(self.object, '__name__', '???'), mname))
     return False, ret
Example #3
0
    def get_object_members(self, want_all):
        """
        Return `(members_check_module, members)` where `members` is a
        list of `(membername, member)` pairs of the members of *self.object*.

        If *want_all* is True, return all members.  Else, only return those
        members given by *self.options.members* (which may also be none).
        """
        if not want_all:
            if not self.options.members:
                return False, []
            # specific members given
            ret = []
            for mname in self.options.members:
                try:
                    ret.append((mname, self.get_attr(self.object, mname)))
                except AttributeError:
                    self.directive.warn('missing attribute %s in object %s'
                                        % (mname, self.fullname))
            return False, ret
        elif self.options.inherited_members:
            # safe_getmembers() uses dir() which pulls in members from all
            # base classes
            return False, safe_getmembers(self.object)
        else:
            # __dict__ contains only the members directly defined in
            # the class (but get them via getattr anyway, to e.g. get
            # unbound method objects instead of function objects);
            # using keys() because apparently there are objects for which
            # __dict__ changes while getting attributes
            return False, sorted([
                (mname, self.get_attr(self.object, mname, None))
                for mname in self.get_attr(self.object, '__dict__').keys()])
Example #4
0
 def get_object_members(self, want_all):
     if want_all:
         # if not hasattr(self.object, '__all__'):
         #     for implicit module members, check __module__ to avoid
         #     documenting imported objects
             return True, safe_getmembers(self.object)
         # else:
         #     memberlist = self.object.__all__
         #     # Sometimes __all__ is broken...
         #     if not isinstance(memberlist, (list, tuple)) or not \
         #        all(isinstance(entry, string_types) for entry in memberlist):
         #         self.directive.warn(
         #             '__all__ should be a list of strings, not %r '
         #             '(in module %s) -- ignoring __all__' %
         #             (memberlist, self.fullname))
         #         # fall back to all members
         #         return True, safe_getmembers(self.object)
     else:
         memberlist = self.options.members or []
     ret = []
     for mname in memberlist:
         try:
             ret.append((mname, safe_getattr(self.object, mname)))
         except AttributeError:
             self.directive.warn(
                 'missing attribute mentioned in :members: or __all__: '
                 'module %s, attribute %s' % (
                     safe_getattr(self.object, '__name__', '???'), mname))
     return False, ret
Example #5
0
    def get_object_members(self, want_all):
        """Return `(members_check_module, members)` where `members` is a
        list of `(membername, member)` pairs of the members of *self.object*.

        If *want_all* is True, return all members.  Else, only return those
        members given by *self.options.members* (which may also be none).
        """
        analyzed_member_names = set()
        if self.analyzer:
            attr_docs = self.analyzer.find_attr_docs()
            namespace = '.'.join(self.objpath)
            for item in attr_docs.items():
                if item[0][0] == namespace:
                    analyzed_member_names.add(item[0][1])
        if not want_all:
            if not self.options.members:
                return False, []
            # specific members given
            members = []
            for mname in self.options.members:
                try:
                    members.append((mname, self.get_attr(self.object, mname)))
                except AttributeError:
                    if mname not in analyzed_member_names:
                        self.directive.warn(
                            'missing attribute %s in object %s' %
                            (mname, self.fullname))
        elif self.options.inherited_members:
            # safe_getmembers() uses dir() which pulls in members from all
            # base classes
            members = safe_getmembers(self.object, attr_getter=self.get_attr)
        else:
            # __dict__ contains only the members directly defined in
            # the class (but get them via getattr anyway, to e.g. get
            # unbound method objects instead of function objects);
            # using keys() because apparently there are objects for which
            # __dict__ changes while getting attributes
            try:
                obj_dict = self.get_attr(self.object, '__dict__')
            except AttributeError:
                members = []
            else:
                members = [(mname, self.get_attr(self.object, mname, None))
                           for mname in list(obj_dict.keys())]
        membernames = set(m[0] for m in members)
        # add instance attributes from the analyzer
        for aname in analyzed_member_names:
            if aname not in membernames and \
               (want_all or aname in self.options.members):
                members.append((aname, INSTANCEATTR))
        return False, sorted(members)
Example #6
0
    def get_object_members(self, want_all):
        """Return `(members_check_module, members)` where `members` is a
        list of `(membername, member)` pairs of the members of *self.object*.

        If *want_all* is True, return all members.  Else, only return those
        members given by *self.options.members* (which may also be none).
        """
        analyzed_member_names = set()
        if self.analyzer:
            attr_docs = self.analyzer.find_attr_docs()
            namespace = '.'.join(self.objpath)
            for item in attr_docs.iteritems():
                if item[0][0] == namespace:
                    analyzed_member_names.add(item[0][1])
        if not want_all:
            if not self.options.members:
                return False, []
            # specific members given
            members = []
            for mname in self.options.members:
                try:
                    members.append((mname, self.get_attr(self.object, mname)))
                except AttributeError:
                    if mname not in analyzed_member_names:
                        self.directive.warn('missing attribute %s in object %s'
                                            % (mname, self.fullname))
        elif self.options.inherited_members:
            # safe_getmembers() uses dir() which pulls in members from all
            # base classes
            members = safe_getmembers(self.object, attr_getter=self.get_attr)
        else:
            # __dict__ contains only the members directly defined in
            # the class (but get them via getattr anyway, to e.g. get
            # unbound method objects instead of function objects);
            # using keys() because apparently there are objects for which
            # __dict__ changes while getting attributes
            try:
                obj_dict = self.get_attr(self.object, '__dict__')
            except AttributeError:
                members = []
            else:
                members = [(mname, self.get_attr(self.object, mname, None))
                           for mname in obj_dict.keys()]
        membernames = set(m[0] for m in members)
        # add instance attributes from the analyzer
        for aname in analyzed_member_names:
            if aname not in membernames and \
               (want_all or aname in self.options.members):
                members.append((aname, INSTANCEATTR))
        return False, sorted(members)
Example #7
0
    def get_object_members(self, want_all):
        """
        Override the module introspection to add any steps not
        contained in __all__ into the member list.
        """

        ret, memberlist = super().get_object_members(want_all)

        for name, member in safe_getmembers(self.object):
            if is_step(member):
                if (name, member) in memberlist:
                    continue

                memberlist.append((name, member))

        return ret, memberlist
Example #8
0
    def get_object_members(self, want_all):
        """
        Override the module introspection to add any steps not
        contained in __all__ into the member list.
        """

        ret, memberlist = super().get_object_members(want_all)

        for name, member in safe_getmembers(self.object):
            if is_step(member):
                if (name, member) in memberlist:
                    continue

                memberlist.append((name, member))

        return ret, memberlist
Example #9
0
 def get_object_members(self, want_all):
     if want_all:
         if not hasattr(self.object, '__all__'):
             # for implicit module members, check __module__ to avoid
             # documenting imported objects
             return True, safe_getmembers(self.object)
         else:
             memberlist = self.object.__all__
     else:
         memberlist = self.options.members or []
     ret = []
     for mname in memberlist:
         try:
             ret.append((mname, safe_getattr(self.object, mname)))
         except AttributeError:
             self.directive.warn(
                 'missing attribute mentioned in :members: or __all__: '
                 'module %s, attribute %s' %
                 (safe_getattr(self.object, '__name__', '???'), mname))
     return False, ret
Example #10
0
 def get_object_members(self, want_all):
     if want_all:
         if not hasattr(self.object, '__all__'):
             # for implicit module members, check __module__ to avoid
             # documenting imported objects
             return True, safe_getmembers(self.object)
         else:
             memberlist = self.object.__all__
     else:
         memberlist = self.options.members or []
     ret = []
     for mname in memberlist:
         try:
             ret.append((mname, safe_getattr(self.object, mname)))
         except AttributeError:
             self.directive.warn(
                 'missing attribute mentioned in :members: or __all__: '
                 'module %s, attribute %s' % (
                 safe_getattr(self.object, '__name__', '???'), mname))
     return False, ret