"""Debug CLI — task management commands.""" import click import httpx from cli._context import CliContext, get_http_headers, output, error_output from services import task_service @click.group("tasks") def tasks_group() -> None: """Background task management commands.""" pass @tasks_group.command("status") @click.argument("task_id") @click.pass_context def task_status(ctx: click.Context, task_id: str) -> None: """Get the status of a background task.""" cli_ctx: CliContext = ctx.obj["cli_ctx"] try: if cli_ctx.use_http: resp = httpx.get( f"{cli_ctx.api_base_url}/api/task_status", headers=get_http_headers(cli_ctx.user_email), params={"task_id": task_id}, ) resp.raise_for_status() data = resp.json() else: status = task_service.get_task_status(task_id) data = { "task_id": status.task_id, "status": status.status, "progress": status.progress, "processed": status.processed, "total": status.total, "message": status.message, "error": status.error, } output(data, cli_ctx.json_output) except httpx.HTTPStatusError as e: error_output(f"HTTP {e.response.status_code}: {e.response.text}", cli_ctx.json_output) except Exception as e: error_output(str(e), cli_ctx.json_output) @tasks_group.command("list") @click.pass_context def list_tasks(ctx: click.Context) -> None: """List all task IDs for the user.""" cli_ctx: CliContext = ctx.obj["cli_ctx"] try: if cli_ctx.use_http: resp = httpx.get( f"{cli_ctx.api_base_url}/api/tasks_for_user", headers=get_http_headers(cli_ctx.user_email), ) resp.raise_for_status() data = resp.json() else: data = task_service.get_user_tasks(cli_ctx.user_email) output(data, cli_ctx.json_output) except httpx.HTTPStatusError as e: error_output(f"HTTP {e.response.status_code}: {e.response.text}", cli_ctx.json_output) except Exception as e: error_output(str(e), cli_ctx.json_output) @tasks_group.command("cancel") @click.argument("task_id") @click.pass_context def cancel_task(ctx: click.Context, task_id: str) -> None: """Cancel a running task.""" cli_ctx: CliContext = ctx.obj["cli_ctx"] try: if cli_ctx.use_http: resp = httpx.post( f"{cli_ctx.api_base_url}/api/cancel_task", headers=get_http_headers(cli_ctx.user_email), params={"task_id": task_id}, ) resp.raise_for_status() data = resp.json() else: task_service.cancel_task(task_id, user_email=cli_ctx.user_email) data = {"success": True, "message": "Task cancelled"} output(data, cli_ctx.json_output) except httpx.HTTPStatusError as e: error_output(f"HTTP {e.response.status_code}: {e.response.text}", cli_ctx.json_output) except Exception as e: error_output(str(e), cli_ctx.json_output) @tasks_group.command("clear") @click.pass_context def clear_tasks(ctx: click.Context) -> None: """Clear all tasks for the user.""" cli_ctx: CliContext = ctx.obj["cli_ctx"] try: if cli_ctx.use_http: resp = httpx.post( f"{cli_ctx.api_base_url}/api/clear_all_tasks", headers=get_http_headers(cli_ctx.user_email), ) resp.raise_for_status() data = resp.json() else: count = task_service.clear_all_tasks(cli_ctx.user_email) data = {"success": True, "count": count, "message": f"Cleared {count} tasks"} output(data, cli_ctx.json_output) except httpx.HTTPStatusError as e: error_output(f"HTTP {e.response.status_code}: {e.response.text}", cli_ctx.json_output) except Exception as e: error_output(str(e), cli_ctx.json_output)