refactoring stage 2
This commit is contained in:
48
run.py
48
run.py
@@ -79,11 +79,21 @@ def _parse_range_string_list(str_list) -> list[int]:
|
||||
return list(result)
|
||||
|
||||
|
||||
def _dispatch_target(target: str) -> tuple[str, str]:
|
||||
def _dispatch_target(target: str) -> tuple[str, str, Language]:
|
||||
splited = target.split("/")
|
||||
if len(splited) != 2:
|
||||
raise ValueError("Invalid target format. Expected format: <loc>/<problem>")
|
||||
return splited[0], splited[1]
|
||||
raise ValueError("Invalid target format. Expected format: <loc>/<problem>.<lang>")
|
||||
|
||||
prob_parts = splited[1].rsplit(".", 1)
|
||||
if len(prob_parts) != 2:
|
||||
raise ValueError("Invalid target format. Expected format: <loc>/<problem>.<lang>")
|
||||
|
||||
prob_name, ext = prob_parts
|
||||
lang = Language.convert_ext(ext)
|
||||
if lang is Language.UNDEFINED:
|
||||
raise ValueError(f"Unknown language: {ext}")
|
||||
|
||||
return splited[0], prob_name, lang
|
||||
|
||||
|
||||
@unique
|
||||
@@ -391,6 +401,27 @@ def register(location: str):
|
||||
storage_manager.register_location(location)
|
||||
click.echo(f"Location '{location}' registered successfully.")
|
||||
|
||||
@click.command(name="create")
|
||||
@click.argument("target", type=str, nargs=1, required=True)
|
||||
@click.option("--completed/--no-completed", "-c/-nc", default=False, help="Mark as completed")
|
||||
def create(target: str, completed: bool):
|
||||
"""
|
||||
지정된 target을 storage에 생성하는 명령어
|
||||
"""
|
||||
loc, prob, lang = _dispatch_target(target)
|
||||
storage_manager = StorageManager()
|
||||
if not storage_manager.check_location(loc):
|
||||
raise click.ClickException(f"Location '{loc}' is not registered. Please register it first.")
|
||||
filename = prob
|
||||
if storage_manager.check_location_lang(loc, lang):
|
||||
existing_file = storage_manager.check_get_file(loc, lang, filename)
|
||||
if existing_file:
|
||||
click.echo(f"File '{filename}.{lang.value}' already exists in location '{loc}'.")
|
||||
return
|
||||
storage_manager.save_file(loc, lang.value, f"{filename}.{lang.value}", b"", completed) # create empty file
|
||||
click.echo(f"Problem '{filename}.{lang.value}' created successfully in location '{loc}' with completed status: {completed}.")
|
||||
|
||||
|
||||
@click.command(name="run")
|
||||
@click.argument("target", type=str, nargs=1, required=True)
|
||||
@click.option("--testcase", "-t", default=["1"], multiple=True)
|
||||
@@ -399,10 +430,7 @@ def run(target: str, testcase: str, verbose: bool):
|
||||
"""
|
||||
지정된 언어로 빌드 및 실행하는 명령어
|
||||
"""
|
||||
loc, prob = _dispatch_target(target)
|
||||
|
||||
# Language 확인
|
||||
from_language: Language = Language.convert_name(from_)
|
||||
loc, prob, from_language = _dispatch_target(target)
|
||||
|
||||
if from_language is Language.UNDEFINED:
|
||||
raise click.ClickException("Undefined Language Exception")
|
||||
@@ -492,9 +520,7 @@ def run(target: str, testcase: str, verbose: bool):
|
||||
@click.option("--force", "-f", is_flag=True)
|
||||
def load(file: str, to: str, from_: str, force: bool):
|
||||
"""
|
||||
파일을 각 언어의 src-space로 이동시키는 명령어.
|
||||
이 명령어는 다음 과정을 수행함.
|
||||
|
||||
Storage의 파일을 각 언어의 src-space로 이동시키는 명령.
|
||||
"""
|
||||
|
||||
# 파일의 src-space가 어딘지 확인
|
||||
@@ -994,6 +1020,8 @@ def fetchprob(target: str, force: bool):
|
||||
raise click.ClickException("fetchprob is currently disabled (BOJ closing)")
|
||||
|
||||
|
||||
cli.add_command(register)
|
||||
cli.add_command(create)
|
||||
cli.add_command(run)
|
||||
cli.add_command(load)
|
||||
cli.add_command(init)
|
||||
|
||||
Reference in New Issue
Block a user