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