Skip to content

run_script_modifier.py

ofrak.core.run_script_modifier

RunScriptModifier (Modifier)

"Import" and run Python functions in the current OFRAK context. Useful for reusing quick helper functions and the like. Since this can be run through the GUI, it can be used to automate tasks which might be repetitive or impossible purely through the graphical interface.

modify(self, resource, config) async

Modify the given resource.

Users should not call this method directly; rather, they should run Resource.run.

Parameters:

Name Type Description Default
resource Resource required
config RunScriptModifierConfig

Optional config for modification. If an implementation provides a default, this default will always be used when config would otherwise be None. Note that a copy of the default config will be passed, so the default config values cannot be modified persistently by a component run.

required
Source code in ofrak/core/run_script_modifier.py
async def modify(self, resource: Resource, config: RunScriptModifierConfig) -> None:
    script_globals: Dict[str, Any] = dict()
    script_locals: Dict[str, Any] = dict()
    exec(config.code, script_globals, script_locals)

    if config.function_name in script_globals:
        script_main = script_globals[config.function_name]
    elif config.function_name in script_locals:
        script_main = script_locals[config.function_name]
    else:
        raise ValueError(f"No `{config.function_name}` function found in script!")

    from ofrak.ofrak_context import get_current_ofrak_context

    context = get_current_ofrak_context()

    script_main.__globals__.update(script_globals)
    script_main.__globals__.update(script_locals)

    full_kwargs: Dict[str, Any] = {
        "ofrak_context": context,
        "root_resource": resource,
    }
    full_kwargs.update(config.extra_args)

    await script_main(**full_kwargs)

RunScriptModifierConfig (ComponentConfig) dataclass

Specification of some Python code to run in the current OFRAK context. Useful for reusing quick helper functions and the like.

Attributes:

Name Type Description
code str

Python source code defining one or more function which take an OFRAKContext and Resource as arguments.

function_name str

Name of the function to run.

extra_args Dict[str, Union[int, bool, str, float, bytes]]

Extra arguments to pass to the function in key-value form.