in azure_functions_worker/loader.py [0:0]
def load_function(name: str, directory: str, script_file: str,
entry_point: Optional[str]):
dir_path = pathlib.Path(directory)
script_path = pathlib.Path(script_file) if script_file else pathlib.Path(
_DEFAULT_SCRIPT_FILENAME)
if not entry_point:
entry_point = _DEFAULT_ENTRY_POINT
register_function_dir(dir_path.parent)
try:
rel_script_path = script_path.relative_to(dir_path.parent)
except ValueError:
raise RuntimeError(
f'script path {script_file} is not relative to the specified '
f'directory {directory}'
)
last_part = rel_script_path.parts[-1]
modname, ext = os.path.splitext(last_part)
if ext != '.py':
raise RuntimeError(
f'cannot load function {name}: '
f'invalid Python filename {script_file}')
modname_parts = [_AZURE_NAMESPACE]
modname_parts.extend(rel_script_path.parts[:-1])
# If the __init__.py contains the code, we should avoid double loading.
if modname.lower() != '__init__':
modname_parts.append(modname)
fullmodname = '.'.join(modname_parts)
mod = importlib.import_module(fullmodname)
func = getattr(mod, entry_point, None)
if func is None or not callable(func):
raise RuntimeError(
f'cannot load function {name}: function {entry_point}() is not '
f'present in {rel_script_path}')
return func