MCPcopy Create free account
hub / github.com/bugy/script-server / DependantScriptValuesProvider

Class DependantScriptValuesProvider

src/config/script/list_values.py:54–102  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

52
53
54class DependantScriptValuesProvider(ValuesProvider):
55
56 def __init__(self, script, parameters_supplier, shell, process_invoker: ProcessInvoker) -> None:
57 pattern = re.compile('\${([^}]+)\}')
58
59 search_start = 0
60 script_template = ''
61 required_parameters = set()
62
63 while search_start < len(script):
64 match = pattern.search(script, search_start)
65 if not match:
66 script_template += script[search_start:]
67 break
68 param_start = match.start()
69 if param_start > search_start:
70 script_template += script[search_start:param_start]
71
72 param_name = match.group(1)
73 required_parameters.add(param_name)
74
75 search_start = match.end() + 1
76
77 self._required_parameters = tuple(required_parameters)
78 self._script_template = script
79 self._parameters_supplier = parameters_supplier
80 self._shell = shell
81 self._process_invoker = process_invoker
82
83 def get_required_parameters(self):
84 return self._required_parameters
85
86 def get_values(self, parameter_values):
87 for param_name in self._required_parameters:
88 value_wrapper = parameter_values.get(param_name)
89 if (value_wrapper is None) or is_empty(value_wrapper.mapped_script_value):
90 return []
91
92 parameters = self._parameters_supplier()
93 script = fill_parameter_values(parameters, self._script_template, parameter_values)
94
95 try:
96 script_output = self._process_invoker.invoke(script, shell=self._shell)
97 except Exception as e:
98 LOGGER.warning('Failed to execute script. ' + str(e))
99 return []
100
101 script_output = script_output.rstrip('\n')
102 return [line for line in script_output.split('\n') if not is_empty(line)]
103
104
105class FilesProvider(ValuesProvider):

Calls

no outgoing calls