mirror of
				https://github.com/clearml/clearml-agent
				synced 2025-06-26 18:16:15 +00:00 
			
		
		
		
	Fix untitled file based on binary is now py/sh based on requested binary
This commit is contained in:
		
							parent
							
								
									0a13fd79fc
								
							
						
					
					
						commit
						4f91c45d38
					
				| @ -109,7 +109,7 @@ from clearml_agent.helper.base import ( | |||||||
|     is_linux_platform, |     is_linux_platform, | ||||||
|     rm_file, |     rm_file, | ||||||
|     add_python_path, |     add_python_path, | ||||||
|     safe_remove_tree, get_python_version, dump_flat_dict, |     safe_remove_tree, get_python_version, dump_flat_dict, check_is_binary_python_or_bash, | ||||||
| ) | ) | ||||||
| from clearml_agent.helper.check_update import start_check_update_daemon | from clearml_agent.helper.check_update import start_check_update_daemon | ||||||
| from clearml_agent.helper.console import ensure_text, print_text, decode_binary_lines | from clearml_agent.helper.console import ensure_text, print_text, decode_binary_lines | ||||||
| @ -226,13 +226,15 @@ class LiteralScriptManager(object): | |||||||
|         """ |         """ | ||||||
|         log = logging.getLogger(__name__) |         log = logging.getLogger(__name__) | ||||||
|         target_file_name_module_call = None |         target_file_name_module_call = None | ||||||
|  |         is_python_binary, is_bash_binary = check_is_binary_python_or_bash(task.script.binary) | ||||||
|  | 
 | ||||||
|         if execution.entry_point and ( |         if execution.entry_point and ( | ||||||
|                 execution.entry_point.strip().startswith("-m ") or |                 execution.entry_point.strip().startswith("-m ") or | ||||||
|                 execution.entry_point.strip().startswith("-c ") |                 execution.entry_point.strip().startswith("-c ") | ||||||
|         ): |         ): | ||||||
|             # this is a module we cannot use it as file name |             # this is a module we cannot use it as file name | ||||||
|             target_file_name_module_call = 'untitled.sh' \ |             target_file_name_module_call = 'untitled.sh' \ | ||||||
|                 if execution.entry_point.strip().startswith("-c ") else 'untitled.py' |                 if is_bash_binary and execution.entry_point.strip().startswith("-c ") else 'untitled.py' | ||||||
|             # let's parse the working_dir and override the default literal file |             # let's parse the working_dir and override the default literal file | ||||||
|             if execution.working_dir and ":" in execution.working_dir: |             if execution.working_dir and ":" in execution.working_dir: | ||||||
|                 execution.working_dir, target_file_name_module_call = execution.working_dir.split(":", 1) |                 execution.working_dir, target_file_name_module_call = execution.working_dir.split(":", 1) | ||||||
| @ -249,7 +251,7 @@ class LiteralScriptManager(object): | |||||||
|                     execution.working_dir, |                     execution.working_dir, | ||||||
|                 ) |                 ) | ||||||
|             if not execution.entry_point: |             if not execution.entry_point: | ||||||
|                 execution.entry_point = 'untitled.py' |                 execution.entry_point = 'untitled.sh' if is_bash_binary else 'untitled.py' | ||||||
|             elif not target_file_name_module_call: |             elif not target_file_name_module_call: | ||||||
|                 # ignore any folders in the entry point we only need the file name |                 # ignore any folders in the entry point we only need the file name | ||||||
|                 execution.entry_point = execution.entry_point.split(os.path.sep)[-1] |                 execution.entry_point = execution.entry_point.split(os.path.sep)[-1] | ||||||
| @ -2914,14 +2916,7 @@ class Worker(ServiceCommandSection): | |||||||
|         if ENV_AGENT_FORCE_TASK_INIT.get(): |         if ENV_AGENT_FORCE_TASK_INIT.get(): | ||||||
|             patch_add_task_init_call((Path(script_dir) / execution.entry_point).as_posix()) |             patch_add_task_init_call((Path(script_dir) / execution.entry_point).as_posix()) | ||||||
| 
 | 
 | ||||||
|         is_python_binary = (current_task.script.binary or "").split("/")[-1].startswith('python') |         is_python_binary, is_bash_binary = check_is_binary_python_or_bash(current_task.script.binary) | ||||||
|         is_bash_binary = (not is_python_binary and |  | ||||||
|                           (current_task.script.binary or "").split("/")[-1] in ('bash', 'zsh', 'sh')) |  | ||||||
| 
 |  | ||||||
|         if not is_bash_binary and not is_python_binary: |  | ||||||
|             if (current_task.script.binary or "").strip(): |  | ||||||
|                 print("WARNING binary '{}' not supported, defaulting to python".format(current_task.script.binary)) |  | ||||||
|             is_python_binary = True |  | ||||||
| 
 | 
 | ||||||
|         extra = [] |         extra = [] | ||||||
|         if is_python_binary: |         if is_python_binary: | ||||||
|  | |||||||
| @ -53,6 +53,25 @@ def select_for_platform(linux, windows): | |||||||
|     return windows if is_windows_platform() else linux |     return windows if is_windows_platform() else linux | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def check_is_binary_python_or_bash(script_binary) -> (bool, bool): | ||||||
|  |     """ | ||||||
|  |     return if we should treat it as bash script or python based on the binary section of the task | ||||||
|  |     i.e. task.script.binary | ||||||
|  |     :param script_binary: e.g. task.script.binary | ||||||
|  |     :return: tuple boolean (is_python_binary, is_bash_binary) | ||||||
|  |     """ | ||||||
|  |     is_python_binary = (script_binary or "").split("/")[-1].startswith('python') | ||||||
|  |     is_bash_binary = (not is_python_binary and | ||||||
|  |                       (script_binary or "").split("/")[-1] in ('bash', 'zsh', 'sh')) | ||||||
|  | 
 | ||||||
|  |     if not is_bash_binary and not is_python_binary: | ||||||
|  |         if (script_binary or "").strip(): | ||||||
|  |             print("WARNING binary '{}' not supported, defaulting to python".format(script_binary)) | ||||||
|  |         is_python_binary = True | ||||||
|  | 
 | ||||||
|  |     return is_python_binary, is_bash_binary | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def bash_c(): | def bash_c(): | ||||||
|     return 'bash -c' if not is_windows_platform() else ('powershell -Command' if use_powershell else 'cmd /c') |     return 'bash -c' if not is_windows_platform() else ('powershell -Command' if use_powershell else 'cmd /c') | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 clearml
						clearml