Coverage for gws-app/gws/plugin/qgis/cli.py: 0%
51 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1"""CLI utility for qgis"""
3import re
5import gws
6import gws.config
7import gws.base.shape
8import gws.gis.crs
9import gws.lib.importer
10import gws.lib.jsonx
12from . import project
15class CapsParams(gws.CliParams):
16 src: str
17 """Source path or postgres address `postgres:<dbUid>/<schema>/<projectName>`"""
18 out: str = ''
19 """Output filename"""
22class CopyParams(gws.CliParams):
23 src: str
24 """Source path or postgres address `postgres:<dbUid>/<schema>/<projectName>`"""
25 dst: str
26 """Source path or postgres address `postgres:<dbUid>/<schema>/<projectName>`"""
29class Object(gws.Node):
31 @gws.ext.command.cli('qgisCopy')
32 def do_copy(self, p: CopyParams):
33 """Copy a qgis project."""
35 root = gws.config.load()
36 src_prj = project.from_store(root, _addr_to_store(p.src))
37 src_prj.to_store(root, _addr_to_store(p.dst))
39 @gws.ext.command.cli('qgisCaps')
40 def do_caps(self, p: CapsParams):
41 """Print the capabilities of a document in JSON format"""
43 root = gws.config.load()
44 src_prj = project.from_store(root, _addr_to_store(p.src))
45 caps = src_prj.caps()
47 js = gws.lib.jsonx.to_pretty_string(caps, default=_caps_json)
49 if p.out:
50 gws.u.write_file(p.out, js)
51 gws.log.info(f'saved to {p.out!r}')
52 else:
53 print(js)
56def _addr_to_store(addr):
57 m = re.match(r'^postgres:(.*?)/(.*?)/(.+?)$', addr)
58 if m:
59 return project.Store(
60 type=project.StoreType.postgres,
61 dbUid=m.group(1),
62 schema=m.group(2),
63 projectName=m.group(3)
64 )
65 m = re.match(r'^(/.+)$', addr)
66 if m:
67 return project.Store(
68 type=project.StoreType.file,
69 path=m.group(1),
70 )
71 raise ValueError('invalid path or postgres address')
74def _caps_json(x):
75 if isinstance(x, gws.Crs):
76 return x.epsg
77 if isinstance(x, gws.base.shape.Shape):
78 return x.to_geojson()
79 try:
80 return vars(x)
81 except TypeError:
82 return repr(x)