Skip to content

Commit d7c6a24

Browse files
committed
fix python_code var
1 parent 4f5dfbd commit d7c6a24

1 file changed

Lines changed: 11 additions & 33 deletions

File tree

hooks/__init__.py

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class Task(Serializable):
5555
command: str = ''
5656

5757
@new_thread('hooks - execute')
58-
def execute_task(self, server: PluginServerInterface, hook: str, var_dict: dict = None):
58+
def execute_task(self, server: PluginServerInterface, hook: str, var_dict: dict = None, obj_dict: dict = None):
5959
server.logger.debug(f'Executing task: {self.name}, task_type: {self.task_type}, command: {self.command}')
6060
server.logger.debug(f'objects_dict: {str(var_dict)}')
6161

@@ -108,33 +108,11 @@ def execute_task(self, server: PluginServerInterface, hook: str, var_dict: dict
108108
server.execute_command(command)
109109

110110
elif self.task_type == TaskType.python_code:
111-
# 注入变量
112-
finally_command = self.command
113-
114-
# 要被注入的赋值语句
115-
command_input = StringIO()
116-
117-
if var_dict is not None:
118-
for key in var_dict.keys():
119-
command_input.write(key)
120-
command_input.write('=')
121-
122-
var_value = var_dict.get(key)
123-
124-
if (not utils.is_int_var(var_value)) and (not utils.is_list_var(var_value)) and (not utils.is_dict_var(var_value)):
125-
if str(var_value).__contains__('"'):
126-
var_value = "'" + str(var_value) + "'"
127-
else:
128-
var_value = '"' + str(var_value) + '"'
129-
130-
command_input.write(str(var_value))
131-
command_input.write(';')
132-
command_input.write('\n')
133-
134-
finally_command = finally_command.replace('# variable injection here', command_input.getvalue())
111+
if obj_dict is not None:
112+
exec(self.command, obj_dict, {})
113+
else:
114+
exec(self.command, var_dict, locals())
135115

136-
exec(finally_command)
137-
138116
server.logger.debug(f'Task finished, name: {self.name}, task_type: {self.task_type}, command: {self.command}, '
139117
f'costs {time.time() - start_time} seconds.')
140118

@@ -204,13 +182,11 @@ def _trigger_hooks(hook: Hooks, server: PluginServerInterface, objects_dict: dic
204182
if (objects_dict is not None) and (len(objects_dict.keys()) != 0):
205183
# 遍历所有已知对象
206184
for an_object_key in objects_dict.keys():
207-
208185
# 目前正在遍历对象的值
209186
an_object_value: Any = objects_dict.get(an_object_key)
210-
211187
# 目前正在遍历对象的内部属性字典
212188
var_inner_attr_dict = serializer.serialize(an_object_value)
213-
189+
# 判断var_inner_attr_dict是否为基本类型
214190
if (not hasattr(var_inner_attr_dict, 'keys')) or (var_inner_attr_dict is None):
215191
finally_var_dict[an_object_key] = an_object_value
216192
continue
@@ -219,6 +195,7 @@ def _trigger_hooks(hook: Hooks, server: PluginServerInterface, objects_dict: dic
219195
for var_inner_attr_key in var_inner_attr_dict.keys():
220196
# 正在遍历的对象的属性字典中的正在遍历的key的value
221197
var_inner_attr_value: Any = var_inner_attr_dict.get(var_inner_attr_key)
198+
# 整合进入finally_var_dict
222199
finally_var_dict[an_object_key + '_' + var_inner_attr_key] = var_inner_attr_value
223200

224201
# 遍历被挂载到此hook的task的key
@@ -229,7 +206,7 @@ def _trigger_hooks(hook: Hooks, server: PluginServerInterface, objects_dict: dic
229206
return
230207
# 执行任务
231208
try:
232-
temp_config.task.get(task).execute_task(server, hook.value, finally_var_dict)
209+
temp_config.task.get(task).execute_task(server, hook.value, finally_var_dict, obj_dict=objects_dict)
233210
except Exception as e:
234211
server.logger.exception(
235212
f'Unexpected exception when executing task {task}, hook {hook.value}, '
@@ -350,7 +327,7 @@ def man_run_task(task: str, env_str: str, src: CommandSource, server: PluginServ
350327
return
351328

352329
try:
353-
temp_config.task.get(task).execute_task(server, Hooks.undefined.value, env_dict)
330+
temp_config.task.get(task).execute_task(server, Hooks.undefined.value, var_dict=env_dict, obj_dict=env_dict)
354331
src.reply(RTextMCDRTranslation('hooks.man_run.success', task))
355332
except Exception as e:
356333
server.logger.exception(
@@ -366,7 +343,8 @@ def parse_and_apply_scripts(script: str, server: PluginServerInterface):
366343
content: dict[str, Union[str, Union[list, dict]]] = yaml.load(f.read(), Loader=yaml.Loader)
367344

368345
for task in content.get('tasks').values():
369-
if (task.get('command_file') is not None) and (len(task.get('command_file')) > 0) and (os.path.isfile(task.get('command_file'))):
346+
if (task.get('command_file') is not None) and (len(task.get('command_file')) > 0) and \
347+
(os.path.isfile(task.get('command_file'))):
370348
with open(task.get('command_file'), 'r') as command_file:
371349
command_file_content = command_file.read()
372350
# 创建task

0 commit comments

Comments
 (0)