Coverage for gws-app/gws/plugin/qfieldcloud/cli.py: 0%
31 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-05 13:35 +0200
1"""Command-line interface for the QField Cloud plugin."""
3from typing import cast, Optional
4import gws
5import gws.base.action
8from . import action
10class PackageRequest(gws.Request):
11 """Parameters of the ``qfieldcloudPackage`` command."""
13 projectUid: Optional[str]
14 """GWS project uid."""
15 qfcProjectUid: str
16 """QField project uid."""
17 dir: str
18 """Directory to write the package into."""
19 actionName: str = ''
20 """Action type or uid, ``qfieldcloud`` by default."""
22class Object(gws.Node):
23 """QField Cloud CLI commands.
25 Provides the ``qfieldcloudPackage`` command, which creates a QField package
26 into a directory.
27 """
29 @gws.ext.command.cli('qfieldcloudPackage')
30 def invoke(self, p: PackageRequest):
31 """Package a QField Cloud project into a directory."""
33 root = gws.load_root()
34 project = None
35 if p.projectUid:
36 project = root.app.project(p.projectUid)
37 if not project:
38 gws.log.error(f'project {p.projectUid!r} not found')
39 return
41 act_name = p.actionName or 'qfieldcloud'
42 act = cast(action.Object, gws.base.action.get_action_for_cli(root, act_name, p.projectUid))
43 if not act:
44 return
46 own_project = cast(Optional[gws.Project], act.find_closest(gws.ext.object.project))
47 if own_project and project and own_project.uid != project.uid:
48 gws.log.error(f'action {act_name!r} does not belong to project {p.projectUid!r}')
49 return
50 project = project or own_project
53 sys_user = act.root.app.authMgr.systemUser
54 act.create_package_from_cli(p.qfcProjectUid, p.dir, project, sys_user)