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

1"""Command-line interface for the QField Cloud plugin.""" 

2 

3from typing import cast, Optional 

4import gws 

5import gws.base.action 

6 

7 

8from . import action 

9 

10class PackageRequest(gws.Request): 

11 """Parameters of the ``qfieldcloudPackage`` command.""" 

12 

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.""" 

21 

22class Object(gws.Node): 

23 """QField Cloud CLI commands. 

24 

25 Provides the ``qfieldcloudPackage`` command, which creates a QField package 

26 into a directory. 

27 """ 

28 

29 @gws.ext.command.cli('qfieldcloudPackage') 

30 def invoke(self, p: PackageRequest): 

31 """Package a QField Cloud project into a directory.""" 

32 

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 

40 

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 

45 

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 

51 

52 

53 sys_user = act.root.app.authMgr.systemUser 

54 act.create_package_from_cli(p.qfcProjectUid, p.dir, project, sys_user) 

55