chore: more compact code
This commit is contained in:
		
							parent
							
								
									91ad7e88a7
								
							
						
					
					
						commit
						12451eebbe
					
				|  | @ -4,6 +4,8 @@ from joj3_config_generator.lib.task import ( | ||||||
|     fix_diff, |     fix_diff, | ||||||
|     fix_keyword, |     fix_keyword, | ||||||
|     fix_result_detail, |     fix_result_detail, | ||||||
|  |     get_conf_stage, | ||||||
|  |     get_executorWithConfig, | ||||||
| ) | ) | ||||||
| from joj3_config_generator.models import ( | from joj3_config_generator.models import ( | ||||||
|     Cmd, |     Cmd, | ||||||
|  | @ -22,7 +24,6 @@ from joj3_config_generator.models import ( | ||||||
| 
 | 
 | ||||||
| def convert(repo_conf: Repo, task_conf: Task) -> ResultConfig: | def convert(repo_conf: Repo, task_conf: Task) -> ResultConfig: | ||||||
|     # Create the base ResultConf object |     # Create the base ResultConf object | ||||||
|     # FIXME: wrap things in functions |  | ||||||
|     result_conf = ResultConfig( |     result_conf = ResultConfig( | ||||||
|         name=task_conf.task, |         name=task_conf.task, | ||||||
|         # TODO: specify the exact folder difference |         # TODO: specify the exact folder difference | ||||||
|  | @ -39,62 +40,11 @@ def convert(repo_conf: Repo, task_conf: Task) -> ResultConfig: | ||||||
|     # Construct healthcheck stage |     # Construct healthcheck stage | ||||||
|     healthcheck_stage = getHealthcheckConfig(repo_conf, task_conf) |     healthcheck_stage = getHealthcheckConfig(repo_conf, task_conf) | ||||||
|     result_conf.stage.stages.append(healthcheck_stage) |     result_conf.stage.stages.append(healthcheck_stage) | ||||||
|     cached = [] |     cached: list[str] = [] | ||||||
|     # Convert each stage in the task configuration |     # Convert each stage in the task configuration | ||||||
|     for task_stage in task_conf.stages: |     for task_stage in task_conf.stages: | ||||||
|         file_import = ( |         executor_with_config, cached = get_executorWithConfig(task_stage, cached) | ||||||
|             task_stage.files.import_ |         conf_stage = get_conf_stage(task_stage, executor_with_config) | ||||||
|             if hasattr(task_stage, "files") |  | ||||||
|             and hasattr(task_stage.files, "import_") |  | ||||||
|             and (task_stage.files is not None) |  | ||||||
|             and (task_stage.files.import_ is not None) |  | ||||||
|             else [] |  | ||||||
|         ) |  | ||||||
|         copy_in_files = [file for file in file_import if (file not in cached)] |  | ||||||
|         file_export = ( |  | ||||||
|             task_stage.files.export |  | ||||||
|             if hasattr(task_stage, "files") |  | ||||||
|             and hasattr(task_stage.files, "export") |  | ||||||
|             and (task_stage.files is not None) |  | ||||||
|             else [] |  | ||||||
|         ) |  | ||||||
|         # TODO: the global limit field |  | ||||||
|         executor_with_config = ExecutorWithConfig( |  | ||||||
|             default=Cmd( |  | ||||||
|                 args=( |  | ||||||
|                     task_stage.command.split() if task_stage.command is not None else [] |  | ||||||
|                 ), |  | ||||||
|                 copy_in={ |  | ||||||
|                     file: CmdFile(src=f"/home/tt/.config/joj/{file}") |  | ||||||
|                     for file in copy_in_files |  | ||||||
|                 }, |  | ||||||
|                 copy_in_cached={file: file for file in copy_in_files}, |  | ||||||
|                 copy_out_cached=file_export if file_export is not None else [], |  | ||||||
|             ), |  | ||||||
|             cases=[],  # You can add cases if needed |  | ||||||
|         ) |  | ||||||
|         if file_export is not None: |  | ||||||
|             for file in file_export: |  | ||||||
|                 if file not in cached: |  | ||||||
|                     cached.append(file) |  | ||||||
|         conf_stage = Stage( |  | ||||||
|             name=task_stage.name if task_stage.name is not None else "", |  | ||||||
|             # TODO: we may have cq in future |  | ||||||
|             group=( |  | ||||||
|                 "joj" |  | ||||||
|                 if (task_stage.name is not None) and ("judge" in task_stage.name) |  | ||||||
|                 else None |  | ||||||
|             ), |  | ||||||
|             executor=ExecutorConfig( |  | ||||||
|                 name="sandbox", |  | ||||||
|                 with_=executor_with_config, |  | ||||||
|             ), |  | ||||||
|             parsers=( |  | ||||||
|                 [ParserConfig(name=parser, with_={}) for parser in task_stage.parsers] |  | ||||||
|                 if task_stage.parsers is not None |  | ||||||
|                 else [] |  | ||||||
|             ), |  | ||||||
|         ) |  | ||||||
|         conf_stage = fix_result_detail(task_stage, conf_stage) |         conf_stage = fix_result_detail(task_stage, conf_stage) | ||||||
|         conf_stage = fix_comment(task_stage, conf_stage) |         conf_stage = fix_comment(task_stage, conf_stage) | ||||||
|         conf_stage = fix_keyword(task_stage, conf_stage) |         conf_stage = fix_keyword(task_stage, conf_stage) | ||||||
|  |  | ||||||
|  | @ -1,10 +1,112 @@ | ||||||
|  | from typing import Tuple | ||||||
|  | 
 | ||||||
| import rtoml | import rtoml | ||||||
| 
 | 
 | ||||||
| from joj3_config_generator.models.result import CmdFile, OptionalCmd | from joj3_config_generator.models import ( | ||||||
|  |     ExecutorConfig, | ||||||
|  |     ExecutorWithConfig, | ||||||
|  |     ParserConfig, | ||||||
|  | ) | ||||||
|  | from joj3_config_generator.models.result import Cmd, CmdFile, OptionalCmd | ||||||
| from joj3_config_generator.models.result import Stage as ResultStage | from joj3_config_generator.models.result import Stage as ResultStage | ||||||
| from joj3_config_generator.models.task import Stage as TaskStage | from joj3_config_generator.models.task import Stage as TaskStage | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def get_conf_stage( | ||||||
|  |     task_stage: TaskStage, executor_with_config: ExecutorWithConfig | ||||||
|  | ) -> ResultStage: | ||||||
|  |     conf_stage = ResultStage( | ||||||
|  |         name=task_stage.name if task_stage.name is not None else "", | ||||||
|  |         # TODO: we may have cq in future | ||||||
|  |         group=( | ||||||
|  |             "joj" | ||||||
|  |             if (task_stage.name is not None) and ("judge" in task_stage.name) | ||||||
|  |             else None | ||||||
|  |         ), | ||||||
|  |         executor=ExecutorConfig( | ||||||
|  |             name="sandbox", | ||||||
|  |             with_=executor_with_config, | ||||||
|  |         ), | ||||||
|  |         parsers=( | ||||||
|  |             [ParserConfig(name=parser, with_={}) for parser in task_stage.parsers] | ||||||
|  |             if task_stage.parsers is not None | ||||||
|  |             else [] | ||||||
|  |         ), | ||||||
|  |     ) | ||||||
|  |     return conf_stage | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_executorWithConfig( | ||||||
|  |     task_stage: TaskStage, cached: list[str] | ||||||
|  | ) -> Tuple[ExecutorWithConfig, list[str]]: | ||||||
|  |     file_import = ( | ||||||
|  |         task_stage.files.import_ | ||||||
|  |         if hasattr(task_stage, "files") | ||||||
|  |         and hasattr(task_stage.files, "import_") | ||||||
|  |         and (task_stage.files is not None) | ||||||
|  |         and (task_stage.files.import_ is not None) | ||||||
|  |         else [] | ||||||
|  |     ) | ||||||
|  |     copy_in_files = [file for file in file_import if (file not in cached)] | ||||||
|  |     file_export = ( | ||||||
|  |         task_stage.files.export | ||||||
|  |         if hasattr(task_stage, "files") | ||||||
|  |         and hasattr(task_stage.files, "export") | ||||||
|  |         and (task_stage.files is not None) | ||||||
|  |         else [] | ||||||
|  |     ) | ||||||
|  |     executor_with_config = ExecutorWithConfig( | ||||||
|  |         default=Cmd( | ||||||
|  |             args=(task_stage.command.split() if task_stage.command is not None else []), | ||||||
|  |             copy_in={ | ||||||
|  |                 file: CmdFile(src=f"/home/tt/.config/joj/{file}") | ||||||
|  |                 for file in copy_in_files | ||||||
|  |             }, | ||||||
|  |             copy_in_cached={file: file for file in copy_in_files}, | ||||||
|  |             copy_out_cached=file_export if file_export is not None else [], | ||||||
|  |             cpu_limit=( | ||||||
|  |                 task_stage.limit.cpu * 1_000_000_000 | ||||||
|  |                 if task_stage.limit is not None and task_stage.limit.cpu is not None | ||||||
|  |                 else 4 * 1_000_000_000 | ||||||
|  |             ), | ||||||
|  |             clock_limit=( | ||||||
|  |                 2 * task_stage.limit.cpu * 1_000_000_000 | ||||||
|  |                 if task_stage.limit is not None and task_stage.limit.cpu is not None | ||||||
|  |                 else 8 * 1_000_000_000 | ||||||
|  |             ), | ||||||
|  |             memory_limit=( | ||||||
|  |                 task_stage.limit.mem * 1_024 * 1_024 | ||||||
|  |                 if task_stage.limit is not None and task_stage.limit.mem is not None | ||||||
|  |                 else 4 * 1_024 * 1_024 | ||||||
|  |             ), | ||||||
|  |             stderr=CmdFile( | ||||||
|  |                 name="stderr", | ||||||
|  |                 max=( | ||||||
|  |                     task_stage.limit.stderr * 1_000_000_000 | ||||||
|  |                     if task_stage.limit is not None | ||||||
|  |                     and task_stage.limit.stderr is not None | ||||||
|  |                     else 4 * 1_024 * 1_024 | ||||||
|  |                 ), | ||||||
|  |             ), | ||||||
|  |             stdout=CmdFile( | ||||||
|  |                 name="stdout", | ||||||
|  |                 max=( | ||||||
|  |                     task_stage.limit.stdout * 1_000_000_000 | ||||||
|  |                     if task_stage.limit is not None | ||||||
|  |                     and task_stage.limit.stdout is not None | ||||||
|  |                     else 4 * 1_024 * 1_024 | ||||||
|  |                 ), | ||||||
|  |             ), | ||||||
|  |         ), | ||||||
|  |         cases=[],  # You can add cases if needed | ||||||
|  |     ) | ||||||
|  |     if file_export is not None: | ||||||
|  |         for file in file_export: | ||||||
|  |             if file not in cached: | ||||||
|  |                 cached.append(file) | ||||||
|  |     return (executor_with_config, cached) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def fix_keyword(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage: | def fix_keyword(task_stage: TaskStage, conf_stage: ResultStage) -> ResultStage: | ||||||
|     keyword_parser = ["clangtidy", "keyword", "cppcheck"]  # TODO: may add cpplint |     keyword_parser = ["clangtidy", "keyword", "cppcheck"]  # TODO: may add cpplint | ||||||
|     if task_stage.parsers is not None: |     if task_stage.parsers is not None: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user