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)
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user