AcuGIS CLI coverage¶
This mapping is based on acugis/services/qgis_publish.py, qgis_publish_client.py, and the CLI session/auth helpers. It describes calls the code actually makes, not endpoint URLs that it merely prints.
The CLI uses SERVICE_BASE=/qgis-publish-service, independent of a server's custom BASE_PATH. It creates a requests.Session, sends Accept: application/json, and authenticates with either the saved Central acugis_session cookie or Authorization: Bearer <token>. Password login itself is a Central workflow (POST /login, then GET /api/me); those are not QGIS Publish Service endpoints.
Resolution shared by map commands¶
When a command accepts MAP, resolve_catalog_map() uses this fallback chain:
GET /api/catalogon Central; filter themapsbucket totype=map.- If no match,
GET /qgis-publish-service/api/discovery. - If still unresolved,
GET /qgis-publish-service/projects/{MAP}. - If direct ID lookup fails,
GET /qgis-publish-service/projectsand matchnameoridcase-insensitively.
The chain stops when it finds a unique match. Therefore the calls below are possible calls, not a promise that every invocation makes every call.
Implemented commands¶
acugis maps list¶
Calls:
GET /api/catalog(Central, not this service).- Only when its map list is empty or invalid,
GET /qgis-publish-service/api/discovery.
It does not call GET /projects. Viewer URLs are taken from catalog/discovery and may be synthesized locally only for display.
acugis maps open MAP¶
Runs the shared resolution chain, then constructs/opens the catalog viewer URL (or local fallback /qgis-publish-service/ui/viewer.html?id=...). It makes no viewer, WMS, or project-detail request after resolution.
acugis maps info MAP¶
Runs the shared resolution chain, then attempts all of:
GET /qgis-publish-service/projects/{id}GET /qgis-publish-service/projectsGET /qgis-publish-service/api/projects/{id}/metadataGET /qgis-publish-service/api/projects/{id}/layersGET /qgis-publish-service/api/projects/{id}/reportsGET /qgis-publish-service/projects/{id}/versions
Most enrichment failures are swallowed and represented as missing sections. The displayed WMS/WFS/capabilities URLs are constructed, not requested. In cache/XYZ mode it constructs qcarta WMS URLs from qgs_path.
acugis maps layers MAP¶
Runs the shared resolution chain, then:
GET /qgis-publish-service/projects/{id}(for title/layer-tree enrichment)GET /qgis-publish-service/api/projects/{id}/layers
Failure of the layers call becomes a friendly CLI error.
acugis maps versions MAP¶
Runs the shared resolution chain, then:
GET /qgis-publish-service/projects/{id}GET /qgis-publish-service/projects/{id}/versions
acugis maps publish SOURCE¶
Create mode:
POST /qgis-publish-service/projects/uploadas multipart fieldfile.
Update mode (--update MAP):
- Runs the shared resolution chain.
POST /qgis-publish-service/projects/{id}/updateas multipart fieldfile.
Optional metadata composite (--title and/or --description):
GET /qgis-publish-service/api/projects/{id}/metadatato preserve existing fields.- The current implementation calls the same GET again inside
upsert_project_metadata(). PUT /qgis-publish-service/api/projects/{id}/metadatawith merged JSON.
Thus publish is not one-to-one with upload: it may be an upload/update plus two metadata reads and one metadata write. --open only opens a locally constructed viewer URL after success; it makes no extra service call. Accepted local source files are .zip, .qgs, and .qgz; directories are rejected.
acugis maps delete¶
Unimplemented. It invokes the generic not_implemented() helper and makes no HTTP request. In particular, it does not call DELETE /qgis-publish-service/projects/{id}.
QGIS endpoints used by at least one CLI map command¶
There are 10 unique QGIS Publish Service method/path patterns actually called:
GET /api/discoveryGET /projectsGET /projects/{id}GET /api/projects/{id}/metadataPUT /api/projects/{id}/metadataGET /api/projects/{id}/layersGET /api/projects/{id}/reportsGET /projects/{id}/versionsPOST /projects/uploadPOST /projects/{id}/update
Paths above are shown relative to /qgis-publish-service. Central GET /api/catalog is an additional non-service dependency.
Registered service endpoints with no matching CLI command¶
The map CLI does not call the following API/protocol registrations. This is an explicit list; aliases and method variants remain separate.
Project lifecycle/configuration:
POST /api/resource-syncDELETE /projects/{id}GET /projects/{id}/downloadGET /projects/{id}/versions/{version}/downloadPOST /projects/{id}/versions/{version}/restorePOST /projects/generateGET /api/projects/{id}/formsPUT /api/projects/{id}/reportsDELETE /api/projects/{id}/metadataGET /api/projects/{id}/relation-referenceGET /api/projects/{id}/lookupPOST /projects/{id}/render-modePOST /projects/{id}/legend-settingsPOST /projects/{id}/basemap-settingsPOST /projects/{id}/seedPOST /api/projects/{id}/runtime/reload
Viewer/expression/analysis:
GET /api/auth/contextPOST /api/qgis/evaluate-expressionGET /api/projects/{id}/pivot-dataGET /api/projects/{id}/outliers-dataGET /api/projects/{id}/hotspots-dataGET /qgis/{projectId}HEAD /qgis/{projectId}GET /api/feature-relationsGET /api/feature-relations.php
Feature data:
POST /api/projects/{id}/features/createPOST /api/projects/{id}/features/updatePOST /api/projects/{id}/features/deletePOST /api/projects/{id}/attachmentsGET /project-data/{id}/{path...}HEAD /project-data/{id}/{path...}
PostgreSQL services and basemaps:
GET /pgservicePOST /pgservicePOST /pgservice/testDELETE /pgservice/{name}GET /basemapsPOST /basemapsDELETE /basemaps/{id}
Browser maps and GeoVault browser proxy:
GET /api/browser-mapsPOST /api/browser-mapsGET /api/browser-maps/{id}PUT /api/browser-maps/{id}DELETE /api/browser-maps/{id}POST /api/browser-maps/{id}/duplicatePOST /api/browser-maps/{id}/thumbnailGET /api/browser-maps/datasets/{datasetId}/resolveGET /api/map-builder/geovault/{path...}
Ingest:
GET /api/ingest/sessionsPOST /api/ingest/sessionsGET /api/ingest/sessions/{id}DELETE /api/ingest/sessions/{id}POST /api/ingest/sessions/{id}/sourcesGET /api/ingest/sessions/{id}/sources/{sourceId}PATCH /api/ingest/sessions/{id}/sources/{sourceId}DELETE /api/ingest/sessions/{id}/sources/{sourceId}GET /api/ingest/sessions/{id}/sources/{sourceId}/previewGET /api/ingest/sessions/{id}/sources/{sourceId}/filePOST /api/ingest/sessions/{id}/sources/{sourceId}/actions/{action}POST /api/ingest/postgis/connectPOST /api/ingest/postgis/discover
Import/integration:
POST /api/geosync-publishPOST /api/quick-importGET /api/quick-import/postgis-service/{path...}POST /api/quick-import/postgis-service/{path...}GET /api/quick-import/geovault/{path...}POST /api/quick-import/geovault/{path...}POST /api/operational/importGET /api/operational/datasetsGET /api/operational/datasets/{id}POST /api/operational/datasets/{id}/rewrite-project(server endpoint itself is disabled with410)
External prefixes and bundled qcarta:
{BASE}/cache/{path...}and{BASE}/routing/{path...}- qcarta
GET /api/wms,GET /mproxy/service,GET /api/tiles/{z}/{x}/{y}.png,/api/wmts,POST /api/seed,GET /api/seed/status,POST /api/prewarm,/api/health,/health,/api/metrics, andPOST /admin/cache/purge
Browser/static registrations also have no CLI command: both bootstrap JavaScript paths, /maps/view/{id}, /seed.html, /shared/ui/, /ui/, and root/static fallbacks. The CLI may open a viewer URL, but that is browser navigation rather than an HTTP call made by the CLI client.
Coverage counts¶
- CLI map commands: 7 registered — 6 implemented and 1 (
maps delete) explicitly unimplemented. - Unique QGIS Publish Service API patterns actually called: 10.
- Additional Central API dependency: 1 (
GET /api/catalog); Central login/session calls are authentication infrastructure, not map-command coverage. - The server source has 91
mux.Handle*registrations (including mutually exclusive base-path/static branches) plus 11 bundled qcarta registrations. The CLI therefore does not provide one-to-one endpoint coverage and should not be described as doing so.