refactoring stage 2

This commit is contained in:
2026-05-03 12:40:23 +09:00
parent 21d51e4af9
commit 63ecdae57b

48
run.py
View File

@@ -79,11 +79,21 @@ def _parse_range_string_list(str_list) -> list[int]:
return list(result) return list(result)
def _dispatch_target(target: str) -> tuple[str, str]: def _dispatch_target(target: str) -> tuple[str, str, Language]:
splited = target.split("/") splited = target.split("/")
if len(splited) != 2: if len(splited) != 2:
raise ValueError("Invalid target format. Expected format: <loc>/<problem>") raise ValueError("Invalid target format. Expected format: <loc>/<problem>.<lang>")
return splited[0], splited[1]
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 @unique
@@ -391,6 +401,27 @@ def register(location: str):
storage_manager.register_location(location) storage_manager.register_location(location)
click.echo(f"Location '{location}' registered successfully.") 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.command(name="run")
@click.argument("target", type=str, nargs=1, required=True) @click.argument("target", type=str, nargs=1, required=True)
@click.option("--testcase", "-t", default=["1"], multiple=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) loc, prob, from_language = _dispatch_target(target)
# Language 확인
from_language: Language = Language.convert_name(from_)
if from_language is Language.UNDEFINED: if from_language is Language.UNDEFINED:
raise click.ClickException("Undefined Language Exception") 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) @click.option("--force", "-f", is_flag=True)
def load(file: str, to: str, from_: str, force: bool): def load(file: str, to: str, from_: str, force: bool):
""" """
파일을 각 언어의 src-space로 이동시키는 명령. Storage의 파일을 각 언어의 src-space로 이동시키는 명령.
이 명령어는 다음 과정을 수행함.
""" """
# 파일의 src-space가 어딘지 확인 # 파일의 src-space가 어딘지 확인
@@ -994,6 +1020,8 @@ def fetchprob(target: str, force: bool):
raise click.ClickException("fetchprob is currently disabled (BOJ closing)") raise click.ClickException("fetchprob is currently disabled (BOJ closing)")
cli.add_command(register)
cli.add_command(create)
cli.add_command(run) cli.add_command(run)
cli.add_command(load) cli.add_command(load)
cli.add_command(init) cli.add_command(init)