|
6 | 6 | import click |
7 | 7 |
|
8 | 8 | from . import sdk |
9 | | -from .utils import log, print_json |
| 9 | +from .utils import format_project_table, log, print_json |
10 | 10 |
|
11 | 11 | QFIELDCLOUD_DEFAULT_URL = "https://app.qfield.cloud/api/v1/" |
12 | 12 |
|
@@ -200,9 +200,8 @@ def list_projects(ctx: Context, include_public: bool, **opts) -> None: |
200 | 200 | print_json(projects) |
201 | 201 | else: |
202 | 202 | if projects: |
203 | | - log("Projects:") |
204 | | - for project in projects: |
205 | | - log(f'{project["id"]}\t{project["owner"]}/{project["name"]}') |
| 203 | + log("Projects the current user has access to:") |
| 204 | + log(format_project_table(projects)) |
206 | 205 | else: |
207 | 206 | log("User does not have any projects yet.") |
208 | 207 |
|
@@ -258,9 +257,8 @@ def create_project(ctx: Context, name, owner, description, is_public): |
258 | 257 | if ctx.obj["format_json"]: |
259 | 258 | print_json(project) |
260 | 259 | else: |
261 | | - log( |
262 | | - f'Created project "{project["owner"]}/{project["name"]}" with project id "{project["id"]}".' |
263 | | - ) |
| 260 | + log("Created project:") |
| 261 | + log(format_project_table([project])) |
264 | 262 |
|
265 | 263 |
|
266 | 264 | @cli.command() |
@@ -371,6 +369,47 @@ def download_files( |
371 | 369 | log(f"No files to download for project {project_id}") |
372 | 370 |
|
373 | 371 |
|
| 372 | +@cli.command() |
| 373 | +@click.argument("project_id") |
| 374 | +@click.option( |
| 375 | + "--name", |
| 376 | + help="New project name", |
| 377 | +) |
| 378 | +@click.option( |
| 379 | + "--description", |
| 380 | + help="New project description", |
| 381 | +) |
| 382 | +@click.option( |
| 383 | + "--owner", |
| 384 | + help="Transfer the project to a new owner", |
| 385 | +) |
| 386 | +@click.option( |
| 387 | + "--is-public/--is-no-public", |
| 388 | + is_flag=True, |
| 389 | + help="Whether the project shall be public", |
| 390 | +) |
| 391 | +@click.pass_context |
| 392 | +def patch_project( |
| 393 | + ctx: Context, |
| 394 | + project_id: str, |
| 395 | + name: Optional[str] = None, |
| 396 | + description: Optional[str] = None, |
| 397 | + owner: Optional[str] = None, |
| 398 | + is_public: Optional[bool] = None, |
| 399 | +) -> None: |
| 400 | + """Patch the project with new data. Pass only the parameters that shall be changed.""" |
| 401 | + |
| 402 | + project = ctx.obj["client"].patch_project( |
| 403 | + project_id, name=name, owner=owner, description=description, is_public=is_public |
| 404 | + ) |
| 405 | + |
| 406 | + if ctx.obj["format_json"]: |
| 407 | + print_json(project) |
| 408 | + else: |
| 409 | + log("Patched project:") |
| 410 | + log(format_project_table([project])) |
| 411 | + |
| 412 | + |
374 | 413 | @cli.command() |
375 | 414 | @click.argument("project_id") |
376 | 415 | @click.argument("paths", nargs=-1, required=True) |
|
0 commit comments