|
3 | 3 | import sys |
4 | 4 | from typing import TYPE_CHECKING, Optional |
5 | 5 |
|
| 6 | +import tabulate |
| 7 | + |
6 | 8 | from datachain.config import Config, ConfigLevel |
7 | 9 | from datachain.dataset import QUERY_DATASET_PREFIX |
8 | 10 | from datachain.error import DataChainError |
@@ -44,6 +46,10 @@ def process_jobs_args(args: "Namespace"): |
44 | 46 | return cancel_job(args.id, args.team) |
45 | 47 | if args.cmd == "logs": |
46 | 48 | return show_job_logs(args.id, args.team) |
| 49 | + |
| 50 | + if args.cmd == "ls": |
| 51 | + return list_jobs(args.status, args.team, args.limit) |
| 52 | + |
47 | 53 | raise DataChainError(f"Unknown command '{args.cmd}'.") |
48 | 54 |
|
49 | 55 |
|
@@ -240,13 +246,13 @@ async def _run(): |
240 | 246 | raise DataChainError(response.message) |
241 | 247 |
|
242 | 248 | response_data = response.data |
243 | | - if response_data: |
| 249 | + if response_data and response_data.get("dataset_versions"): |
244 | 250 | dataset_versions = response_data.get("dataset_versions", []) |
245 | 251 | print("\n\n>>>> Dataset versions created during the job:") |
246 | 252 | for version in dataset_versions: |
247 | 253 | print(f" - {version.get('dataset_name')}@v{version.get('version')}") |
248 | 254 | else: |
249 | | - print("No dataset versions created during the job.") |
| 255 | + print("\n\nNo dataset versions created during the job.") |
250 | 256 |
|
251 | 257 |
|
252 | 258 | def create_job( |
@@ -337,6 +343,31 @@ def cancel_job(job_id: str, team_name: Optional[str]): |
337 | 343 | print(f"Job {job_id} canceled") |
338 | 344 |
|
339 | 345 |
|
| 346 | +def list_jobs(status: Optional[str], team_name: Optional[str], limit: int): |
| 347 | + client = StudioClient(team=team_name) |
| 348 | + response = client.get_jobs(status, limit) |
| 349 | + if not response.ok: |
| 350 | + raise DataChainError(response.message) |
| 351 | + |
| 352 | + jobs = response.data.get("jobs", []) |
| 353 | + if not jobs: |
| 354 | + print("No jobs found") |
| 355 | + return |
| 356 | + |
| 357 | + rows = [ |
| 358 | + { |
| 359 | + "ID": job.get("id"), |
| 360 | + "Name": job.get("name"), |
| 361 | + "Status": job.get("status"), |
| 362 | + "Created at": job.get("created_at"), |
| 363 | + "Created by": job.get("created_by"), |
| 364 | + } |
| 365 | + for job in jobs |
| 366 | + ] |
| 367 | + |
| 368 | + print(tabulate.tabulate(rows, headers="keys", tablefmt="grid")) |
| 369 | + |
| 370 | + |
340 | 371 | def show_job_logs(job_id: str, team_name: Optional[str]): |
341 | 372 | token = Config().read().get("studio", {}).get("token") |
342 | 373 | if not token: |
|
0 commit comments