Source code for netdef.Rules.utils

import importlib
import importlib.util
import pathlib
import sys
import os.path

V_MAJOR = sys.version_info.major
V_MINOR = sys.version_info.minor

# function to import module from anywere
if V_MAJOR == 3 and V_MINOR > 4:

    def import_file(abs_pyfile, location_name, mod_name):
        # py 3.5+
        spec = importlib.util.spec_from_file_location(
            "%s.%s" % (location_name, mod_name), abs_pyfile
        )

        mod = importlib.util.module_from_spec(spec)
        spec.loader.exec_module(mod)

        return mod


else:

    from importlib.machinery import SourceFileLoader

[docs] def import_file(abs_pyfile, location_name, mod_name): # py 3.4: mod_string = "%s.%s" % (location_name, mod_name) mod = SourceFileLoader(mod_string, abs_pyfile).load_module() return mod
[docs]def load_entrypoint(entrypoint, package=None): modname, qualname_separator, qualname = entrypoint.partition(":") mod = importlib.import_module(modname, package) obj = None if qualname_separator: for attr in qualname.split("."): obj = getattr(mod, attr) return mod, obj
[docs]def get_module_from_string(mod_str, package, abs_root, location_name, mod_name): if "/" in mod_str or os.path.sep in mod_str: if pathlib.Path(mod_str).is_absolute(): abs_file = pathlib.Path(mod_str) elif abs_root: abs_file = pathlib.Path(abs_root).joinpath(mod_str) else: abs_file = pathlib.Path(mod_str).absolute() if not abs_file.is_absolute(): raise ValueError("{} is not absolute path".format(abs_file)) elif not abs_file.is_file(): raise ValueError("{} not found".format(abs_file)) elif not location_name: raise ValueError( "location_name: expect string, got {}".format(location_name) ) elif not mod_name: raise ValueError("mod_name: expect string, got {}".format(mod_name)) return import_file(abs_file, location_name, mod_name) else: mod, obj = load_entrypoint(mod_str, package) return mod