def decideRecursion(module_filename, module_name, module_kind, extra_recursion=False): # Many branches, which make decisions immediately, by returning # pylint: disable=too-many-return-statements if module_name == "__main__": return False, "Main program is not recursed to again." plugin_decision = Plugins.onModuleEncounter(module_filename, module_name, module_kind) if plugin_decision: return plugin_decision if module_kind == "shlib": if Options.isStandaloneMode(): return True, "Shared library for inclusion." else: return False, "Shared library cannot be inspected." no_case, reason = matchesModuleNameToPatterns( module_name=module_name, patterns=Options.getShallFollowInNoCase()) if no_case: return (False, "Module %s instructed by user to not recurse to." % reason) any_case, reason = matchesModuleNameToPatterns( module_name=module_name, patterns=Options.getShallFollowModules()) if any_case: return (True, "Module %s instructed by user to recurse to." % reason) if Options.shallFollowNoImports(): return (False, "Requested to not recurse at all.") if StandardLibrary.isStandardLibraryPath(module_filename): return ( Options.shallFollowStandardLibrary(), "Requested to %srecurse to standard library." % ("" if Options.shallFollowStandardLibrary() else "not "), ) if Options.shallFollowAllImports(): return (True, "Requested to recurse to all non-standard library modules.") # Means, we were not given instructions how to handle things. if extra_recursion: return (True, "Lives in plug-in directory.") if Options.shallMakeModule(): return (False, "Making a module, not following any imports by default.") return (None, "Default behavior, not recursing without request.")
def decideRecursion(module_filename, module_name, module_package, module_kind): # Many branches, which make decisions immediately, by returning # pylint: disable=R0911,R0912 if module_kind == "shlib": if Options.isStandaloneMode(): return True, "Shared library for inclusion." else: return False, "Shared library cannot be inspected." if module_package is None: full_name = module_name else: full_name = module_package + '.' + module_name if isFrozenModule(full_name): return False, "Module is frozen." no_case_modules = Options.getShallFollowInNoCase() for no_case_module in no_case_modules: if full_name == no_case_module: return (False, "Module listed explicitly to not recurse to.") if full_name.startswith(no_case_module + '.'): return (False, "Module in package listed explicitly to not recurse to.") any_case_modules = Options.getShallFollowModules() for any_case_module in any_case_modules: if full_name == any_case_module: return (True, "Module listed explicitly to recurse to.") if full_name.startswith(any_case_module + '.'): return (True, "Module in package listed explicitly to recurse to.") if Options.shallFollowNoImports(): return (False, "Requested to not recurse at all.") if StandardLibrary.isStandardLibraryPath(module_filename): return (Options.shallFollowStandardLibrary(), "Requested to %srecurse to standard library." % ("" if Options.shallFollowStandardLibrary() else "not ")) if Options.shallFollowAllImports(): return (True, "Requested to recurse to all non-standard library modules.") # Means, we were not given instructions how to handle things. return (None, "Default behavior, not recursing without request.")
def isWhiteListedImport(node): module = node.getParentModule() return StandardLibrary.isStandardLibraryPath(module.getFilename())
def decideRecursion(module_filename, module_name, module_package, module_kind): # Many branches, which make decisions immediately, by returning # pylint: disable=R0911,R0912 if module_kind == "shlib": if Options.isStandaloneMode(): return True, "Shared library for inclusion." else: return False, "Shared library cannot be inspected." if module_package is None: full_name = module_name else: full_name = module_package + '.' + module_name if isFrozenModule(full_name): return False, "Module is frozen." no_case_modules = Options.getShallFollowInNoCase() for no_case_module in no_case_modules: if full_name == no_case_module: return ( False, "Module listed explicitly to not recurse to." ) if full_name.startswith(no_case_module + '.'): return ( False, "Module in package listed explicitly to not recurse to." ) any_case_modules = Options.getShallFollowModules() for any_case_module in any_case_modules: if full_name == any_case_module: return ( True, "Module listed explicitly to recurse to." ) if full_name.startswith(any_case_module + '.'): return ( True, "Module in package listed explicitly to recurse to." ) if Options.shallFollowNoImports(): return ( False, "Requested to not recurse at all." ) if StandardLibrary.isStandardLibraryPath(module_filename): return ( Options.shallFollowStandardLibrary(), "Requested to %srecurse to standard library." % ( "" if Options.shallFollowStandardLibrary() else "not " ) ) if Options.shallFollowAllImports(): return ( True, "Requested to recurse to all non-standard library modules." ) # Means, we were not given instructions how to handle things. return ( None, "Default behavior, not recursing without request." )
def isIgnoreListedImportMaker(node): module = node.getParentModule() return StandardLibrary.isStandardLibraryPath(module.getFilename())
def decideRecursion( module_filename, module_name, module_package, module_kind, extra_recursion=False ): # Many branches, which make decisions immediately, by returning # pylint: disable=too-many-branches,too-many-return-statements if module_name == "__main__": return False, "Main program is not recursed to again." plugin_decision = Plugins.onModuleEncounter( module_filename, module_name, module_package, module_kind ) if plugin_decision: return plugin_decision if module_kind == "shlib": if Options.isStandaloneMode(): return True, "Shared library for inclusion." else: return False, "Shared library cannot be inspected." if module_package is None: full_name = module_name else: full_name = module_package + "." + module_name no_case, reason = matchesModuleNameToPatterns( module_name=full_name, patterns=Options.getShallFollowInNoCase() ) if no_case: return (False, "Module %s instructed by user to not recurse to." % reason) any_case, reason = matchesModuleNameToPatterns( module_name=full_name, patterns=Options.getShallFollowModules() ) if any_case: return (True, "Module %s instructed by user to recurse to." % reason) if Options.shallFollowNoImports(): return (False, "Requested to not recurse at all.") if StandardLibrary.isStandardLibraryPath(module_filename): return ( Options.shallFollowStandardLibrary(), "Requested to %srecurse to standard library." % ("" if Options.shallFollowStandardLibrary() else "not "), ) if Options.shallFollowAllImports(): return (True, "Requested to recurse to all non-standard library modules.") # Means, we were not given instructions how to handle things. if extra_recursion: return (True, "Lives in plug-in directory.") if Options.shallMakeModule(): return (False, "Making a module, not following any imports by default.") return (None, "Default behavior, not recursing without request.")
def isIgnoreListedImportMaker(source_ref): return StandardLibrary.isStandardLibraryPath(source_ref.getFilename())
def decideRecursion(module_filename, module_name, module_kind, extra_recursion=False): # Many branches, which make decisions immediately, by returning # pylint: disable=too-many-branches,too-many-return-statements if module_name == "__main__": return False, "Main program is not followed to a second time." # In -m mode, when including the package, do not duplicate main program. if (Options.hasPythonFlagPackageMode() and not Options.shallMakeModule() and module_name.getBasename() == "__main__"): if module_name.getPackageName() == getRootTopModule( ).getRuntimePackageValue(): return False, "Main program is already included in package mode." plugin_decision = Plugins.onModuleEncounter( module_filename=module_filename, module_name=module_name, module_kind=module_kind, ) if plugin_decision is not None: return plugin_decision if module_kind == "extension": if Options.isStandaloneMode(): return True, "Extension module needed for standalone mode." else: return False, "Extension module cannot be inspected." # PGO decisions are not overruling plugins, but all command line options, they are # supposed to be applied already. is_stdlib = StandardLibrary.isStandardLibraryPath(module_filename) if not is_stdlib or Options.shallFollowStandardLibrary(): # TODO: Bad placement of this function or should PGO also know about # bytecode modules loaded or not. from nuitka.tree.Building import decideCompilationMode if (decideCompilationMode(is_top=False, module_name=module_name, for_pgo=True) == "compiled"): pgo_decision = decideInclusionFromPGO( module_name=module_name, module_kind=module_kind, ) if pgo_decision is not None: return pgo_decision, "PGO based decision" no_case, reason = module_name.matchesToShellPatterns( patterns=Options.getShallFollowInNoCase()) if no_case: return (False, "Module %s instructed by user to not follow to." % reason) any_case, reason = module_name.matchesToShellPatterns( patterns=Options.getShallFollowModules()) if any_case: return (True, "Module %s instructed by user to follow to." % reason) if Options.shallFollowNoImports(): return (False, "Instructed by user to not follow at all.") if is_stdlib and Options.shallFollowStandardLibrary(): return (True, "Instructed by user to follow to standard library.") if Options.shallFollowAllImports(): if is_stdlib: if StandardLibrary.isStandardLibraryNoAutoInclusionModule( module_name): return ( True, "Instructed by user to follow all modules, including non-automatic standard library modules.", ) else: return ( True, "Instructed by user to follow to all non-standard library modules.", ) # Means, we were not given instructions how to handle things. if extra_recursion: return (True, "Lives in plug-in directory.") if Options.shallMakeModule(): return (False, "Making a module, not following any imports by default.") return (None, "Default behavior, not recursing without request.")