Example #1
0
    def _check_slots(self, node):
        if '__slots__' not in node.locals:
            return
        for slots in node.igetattr('__slots__'):
            # check if __slots__ is a valid type
            if slots is astroid.YES:
                continue
            if not is_iterable(slots) and not is_comprehension(slots):
                self.add_message('invalid-slots', node=node)
                continue

            if isinstance(slots, astroid.Const):
                # a string, ignore the following checks
                continue
            if not hasattr(slots, 'itered'):
                # we can't obtain the values, maybe a .deque?
                continue

            if isinstance(slots, astroid.Dict):
                values = [item[0] for item in slots.items]
            else:
                values = slots.itered()
            if values is astroid.YES:
                return

            for elt in values:
                try:
                    self._check_slots_elt(elt)
                except astroid.InferenceError:
                    continue
Example #2
0
    def _check_slots(self, node):
        if '__slots__' not in node.locals:
            return
        for slots in node.igetattr('__slots__'):
            # check if __slots__ is a valid type
            if slots is astroid.YES:
                continue
            if not is_iterable(slots) and not is_comprehension(slots):
                self.add_message('invalid-slots', node=node)
                continue

            if isinstance(slots, astroid.Const):
                # a string, ignore the following checks
                continue
            if not hasattr(slots, 'itered'):
                # we can't obtain the values, maybe a .deque?
                continue

            if isinstance(slots, astroid.Dict):
                values = [item[0] for item in slots.items]
            else:
                values = slots.itered()
            if values is astroid.YES:
                return

            for elt in values:
                try:
                    self._check_slots_elt(elt)
                except astroid.InferenceError:
                    continue
Example #3
0
 def _check_iterable(self, node):
     if is_inside_abstract_class(node):
         return
     if is_comprehension(node):
         return
     infered = safe_infer(node)
     if infered is None or infered is astroid.YES:
         return
     if not is_iterable(infered):
         self.add_message("not-an-iterable", args=node.as_string(), node=node)
Example #4
0
 def _check_iterable(self, node):
     if is_inside_abstract_class(node):
         return
     if is_comprehension(node):
         return
     infered = safe_infer(node)
     if infered is None or infered is astroid.YES:
         return
     if not is_iterable(infered):
         self.add_message('not-an-iterable',
                          args=node.as_string(),
                          node=node)