def _get_module_to_generic_import(gr,
                                  import_code,
                                  pyplete=None,
                                  verbosity=1,
                                  scope=None):
    module = '.'.join(import_code)
    if gr.has_node(module):
        return module
    if len(import_code) == 0:
        return None
    pyplete = pyplete or PyPlete(scope=scope)
    imports = []
    try:
        pyplete.get_importables_rest_level(imports, import_code[0],
                                           import_code[1:])
    except SyntaxError as e:
        if print_log_error(verbosity):
            log.error("\t File: %s SyntaxError %s" % (import_code, e))
        return None
    if imports:
        return module
    return _get_module_to_generic_import(gr,
                                         import_code[:-1],
                                         pyplete=pyplete,
                                         verbosity=verbosity,
                                         scope=scope)
def _add_edges_to_package(gr, package, app_source, applications,
                          pyplete=None, exclude_packages=None,
                          show_modules=False, verbosity=1,
                          scope=None, use_colors=True,
                          pyplete_global=None):
    pyplete = pyplete or PyPlete(scope=scope)
    package_modules = package.split(".")
    importables_to_app = []
    try:
        pyplete.get_importables_rest_level(importables_to_app, package_modules[0], package_modules[1:], into_module=False)
    except SyntaxError, e:
        if print_log_error(verbosity):
            log.error("\t File: %s SyntaxError %s" % (package_modules, e))
def _get_module_to_generic_import(gr, import_code, pyplete=None, verbosity=1, scope=None):
    module = '.'.join(import_code)
    if gr.has_node(module):
        return module
    if len(import_code) == 0:
        return None
    pyplete = pyplete or PyPlete(scope=scope)
    imports = []
    try:
        pyplete.get_importables_rest_level(imports, import_code[0], import_code[1:])
    except SyntaxError, e:
        if print_log_error(verbosity):
            log.error("\t File: %s SyntaxError %s" % (import_code, e))
        return None
def _add_edges_to_package(gr,
                          package,
                          app_source,
                          applications,
                          pyplete=None,
                          exclude_packages=None,
                          show_modules=False,
                          verbosity=1,
                          scope=None,
                          use_colors=True,
                          pyplete_global=None):
    pyplete = pyplete or PyPlete(scope=scope)
    package_modules = package.split(".")
    importables_to_app = []
    try:
        pyplete.get_importables_rest_level(importables_to_app,
                                           package_modules[0],
                                           package_modules[1:],
                                           into_module=False)
    except SyntaxError, e:
        if print_log_error(verbosity):
            log.error("\t File: %s SyntaxError %s" % (package_modules, e))
     if not gr.has_node(node_source):
         _add_node_module(gr,
                          node_source,
                          applications,
                          app_source=app_source,
                          use_colors=use_colors)
 else:
     node_source = None
 code = pyplete.get_imp_loader_from_path(
     package_modules[0],
     package_modules[1:] + [importable_to_app])[0].get_source()
 try:
     imports_code = pyplete.get_pysmell_modules_to_text(
         code)['POINTERS']
 except SyntaxError, e:
     if print_log_error(verbosity):
         log.error("\t File: %s SyntaxError %s" %
                   (package_modules + [importable_to_app], e))
     continue
 for import_code in imports_code.values():
     if isinstance(import_code, list):
         for i in import_code:
             _add_edge_from_import_code(gr,
                                        applications,
                                        app_source,
                                        package_modules,
                                        i,
                                        code,
                                        node_source=node_source,
                                        pyplete=pyplete,
                                        show_modules=show_modules,
                               use_colors=use_colors,
                               pyplete_global=pyplete_global)
 if importable_type != 'module':
     continue
 if show_modules:
     node = package_modules + [importable_to_app]
     node_source = _add_node_init('.'.join(node), applications)
     if not gr.has_node(node_source):
         _add_node_module(gr, node_source, applications, app_source=app_source, use_colors=use_colors)
 else:
     node_source = None
 code = pyplete.get_imp_loader_from_path(package_modules[0], package_modules[1:] + [importable_to_app])[0].get_source()
 try:
     imports_code = pyplete.get_pysmell_modules_to_text(code)['POINTERS']
 except SyntaxError, e:
     if print_log_error(verbosity):
         log.error("\t File: %s SyntaxError %s" % (package_modules + [importable_to_app], e))
     continue
 for import_code in imports_code.values():
     if isinstance(import_code, list):
         for i in import_code:
             _add_edge_from_import_code(gr, applications, app_source,
                                        package_modules, i,
                                        code,
                                        node_source=node_source,
                                        pyplete=pyplete,
                                        show_modules=show_modules,
                                        verbosity=verbosity,
                                        scope=scope,
                                        use_colors=use_colors,
                                        pyplete_global=pyplete_global)
def _add_edges_to_package(gr,
                          package,
                          app_source,
                          applications,
                          pyplete=None,
                          exclude_packages=None,
                          show_modules=False,
                          verbosity=1,
                          scope=None,
                          use_colors=True,
                          pyplete_global=None):
    pyplete = pyplete or PyPlete(scope=scope)
    package_modules = package.split(".")
    importables_to_app = []
    try:
        pyplete.get_importables_rest_level(importables_to_app,
                                           package_modules[0],
                                           package_modules[1:],
                                           into_module=False)
    except SyntaxError as e:
        if print_log_error(verbosity):
            log.error("\t File: %s SyntaxError %s" % (package_modules, e))

    for imp in importables_to_app:
        importable_to_app = imp['text']
        importable_type = imp['category']
        if importable_type == 'package':
            if exclude_packages and importable_to_app in exclude_packages:
                if print_log_info(verbosity):
                    log.info('\t Ignore %s' % importable_to_app)
                continue
            subpackage = '%s.%s' % (package, importable_to_app)
            if subpackage not in settings.INSTALLED_APPS:
                _add_edges_to_package(gr,
                                      subpackage,
                                      app_source,
                                      applications,
                                      pyplete,
                                      exclude_packages=exclude_packages,
                                      show_modules=show_modules,
                                      verbosity=verbosity,
                                      scope=scope,
                                      use_colors=use_colors,
                                      pyplete_global=pyplete_global)
        if importable_type != 'module':
            continue
        if show_modules:
            node = package_modules + [importable_to_app]
            node_source = _add_node_init('.'.join(node), applications)
            if not gr.has_node(node_source):
                _add_node_module(gr,
                                 node_source,
                                 applications,
                                 app_source=app_source,
                                 use_colors=use_colors)
        else:
            node_source = None
        code = pyplete.get_imp_loader_from_path(
            package_modules[0],
            package_modules[1:] + [importable_to_app])[0].get_source()
        try:
            imports_code = pyplete.get_pysmell_modules_to_text(
                code)['POINTERS']
        except SyntaxError as e:
            if print_log_error(verbosity):
                log.error("\t File: %s SyntaxError %s" %
                          (package_modules + [importable_to_app], e))
            continue
        for import_code in list(imports_code.values()):
            if isinstance(import_code, list):
                for i in import_code:
                    _add_edge_from_import_code(gr,
                                               applications,
                                               app_source,
                                               package_modules,
                                               i,
                                               code,
                                               node_source=node_source,
                                               pyplete=pyplete,
                                               show_modules=show_modules,
                                               verbosity=verbosity,
                                               scope=scope,
                                               use_colors=use_colors,
                                               pyplete_global=pyplete_global)
            else:
                _add_edge_from_import_code(gr,
                                           applications,
                                           app_source,
                                           package_modules,
                                           import_code,
                                           code,
                                           node_source=node_source,
                                           pyplete=pyplete,
                                           show_modules=show_modules,
                                           verbosity=verbosity,
                                           scope=scope,
                                           use_colors=use_colors,
                                           pyplete_global=pyplete_global)