From 36d1fefc19ecb7f1f8b11a8f3bc269be0a36de5e Mon Sep 17 00:00:00 2001 From: w-e-w <40751091+w-e-w@users.noreply.github.com> Date: Sat, 27 Jan 2024 14:42:52 +0900 Subject: [PATCH 1/2] rework set_named_arg change identifying a script from using Scripts class name to Scripts internal name an as not all Script have unique names raise RuntimeError when there's issue --- modules/scripts.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/modules/scripts.py b/modules/scripts.py index 060069cf3..4b38ca320 100644 --- a/modules/scripts.py +++ b/modules/scripts.py @@ -939,22 +939,33 @@ class ScriptRunner: except Exception: errors.report(f"Error running setup: {script.filename}", exc_info=True) - def set_named_arg(self, args, script_type, arg_elem_id, value): - script = next((x for x in self.scripts if type(x).__name__ == script_type), None) + def set_named_arg(self, args, script_name, arg_elem_id, value): + """Locate an arg of a specific script in script_args and set its value + Args: + args: all script args of process p, p.script_args + script_name: the name target script name to + arg_elem_id: the elem_id of the target arg + value: the value to set + Returns: + Updated script args + when script_name in not found or arg_elem_id is not found in script controls, raise RuntimeError + """ + script = next((x for x in self.scripts if x.name == script_name), None) if script is None: - return + raise RuntimeError(f"script {script_name} not found") for i, control in enumerate(script.controls): - if arg_elem_id in control.elem_id: + if arg_elem_id == control.elem_id: index = script.args_from + i - if isinstance(args, list): + if isinstance(args, tuple): + return args[:index] + (value,) + args[index + 1:] + elif isinstance(args, list): args[index] = value return args - elif isinstance(args, tuple): - return args[:index] + (value,) + args[index+1:] else: - return None + raise RuntimeError(f"args is not a list or tuple, but {type(args)}") + raise RuntimeError(f"arg_elem_id {arg_elem_id} not found in script {script_name}") scripts_txt2img: ScriptRunner = None From eae0bb89fd0e0836098235540765d934c377d15c Mon Sep 17 00:00:00 2001 From: w-e-w <40751091+w-e-w@users.noreply.github.com> Date: Sat, 27 Jan 2024 18:31:53 +0900 Subject: [PATCH 2/2] set_named_arg fuzzy option --- modules/scripts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/scripts.py b/modules/scripts.py index 4b38ca320..94690a22f 100644 --- a/modules/scripts.py +++ b/modules/scripts.py @@ -939,13 +939,14 @@ class ScriptRunner: except Exception: errors.report(f"Error running setup: {script.filename}", exc_info=True) - def set_named_arg(self, args, script_name, arg_elem_id, value): + def set_named_arg(self, args, script_name, arg_elem_id, value, fuzzy=False): """Locate an arg of a specific script in script_args and set its value Args: args: all script args of process p, p.script_args script_name: the name target script name to arg_elem_id: the elem_id of the target arg value: the value to set + fuzzy: if True, arg_elem_id can be a substring of the control.elem_id else exact match Returns: Updated script args when script_name in not found or arg_elem_id is not found in script controls, raise RuntimeError @@ -955,7 +956,7 @@ class ScriptRunner: raise RuntimeError(f"script {script_name} not found") for i, control in enumerate(script.controls): - if arg_elem_id == control.elem_id: + if arg_elem_id in control.elem_id if fuzzy else arg_elem_id == control.elem_id: index = script.args_from + i if isinstance(args, tuple):