1#!/usr/bin/python3 2 3import ast 4 5from pyflakes.checker import Checker, ImportationFrom 6 7# Do some monkey patching.. 8def CALL(self, node): 9 if isinstance(node.func, ast.Name) and node.func.id == 'lazy_import': 10 self.LAZY_IMPORT(node) 11 elif (isinstance(node.func, ast.Attribute) and 12 node.func.attr == 'lazy_import' and 13 node.func.value.id == 'lazy_import'): 14 self.LAZY_IMPORT(node) 15 return self.handleChildren(node) 16 17Checker.CALL = CALL 18 19def LAZY_IMPORT(self, node): 20 from breezy.lazy_import import ImportProcessor 21 processor = ImportProcessor() 22 if not isinstance(node.args[1], ast.Str): 23 # Not sure how to deal with this.. 24 return 25 import_text = node.args[1].s 26 scope = {} 27 processor.lazy_import(scope, import_text) 28 for name, (path, sub, scope) in processor.imports.items(): 29 importation = ImportationFrom(name, node, '.'.join(path), scope) 30 self.addBinding(node, importation) 31 32Checker.LAZY_IMPORT = LAZY_IMPORT 33 34 35if __name__ == '__main__': 36 from pyflakes import __main__ 37 __main__.main() 38