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
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)
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)