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