ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ"""Utils.""" import sys import astroid from astroid.bases import Instance from astroid.exceptions import InferenceError from astroid.nodes import ClassDef from pylint_django.compat import Uninferable PY3 = sys.version_info >= (3, 0) # TODO: pylint_django doesn't support Py2 any more def node_is_subclass(cls, *subclass_names): """Checks if cls node has parent with subclass_name.""" if not isinstance(cls, (ClassDef, Instance)): return False if cls.bases == Uninferable: return False for base_cls in cls.bases: try: for inf in base_cls.inferred(): if inf.qname() in subclass_names: return True if inf != cls and node_is_subclass(inf, *subclass_names): # check up the hierarchy in case we are a subclass of # a subclass of a subclass ... return True except InferenceError: continue return False def is_migrations_module(node): if not isinstance(node, astroid.Module): return False return "migrations" in node.path[0] and not node.path[0].endswith("__init__.py")