Skip to content

Commit 043fe5a

Browse files
gounuxsuricactus
andcommitted
feat: add session_role to a postgis layer if configured, in the mini offliner
Co-authored-by: Ivan Ivanov <suricactus@users.noreply.github.com>
1 parent ed003e8 commit 043fe5a

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

libqfieldsync/offliners.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import hashlib
2+
import os
23
from collections import defaultdict
34
from enum import Enum
45
from pathlib import Path
@@ -9,6 +10,7 @@
910
Qgis,
1011
QgsCoordinateReferenceSystem,
1112
QgsCoordinateTransform,
13+
QgsDataSourceUri,
1214
QgsFeatureRequest,
1315
QgsField,
1416
QgsFieldConstraints,
@@ -42,6 +44,8 @@
4244
PROJECT_ENTRY_SCOPE_OFFLINE = "OfflineEditingPlugin"
4345
PROJECT_ENTRY_KEY_OFFLINE_DB_PATH = "/OfflineDbPath"
4446

47+
QFC_PG_EFFECTIVE_USER = os.getenv("QFC_PG_EFFECTIVE_USER")
48+
4549

4650
class OfflinerType(str, Enum):
4751
QGISCORE = "qgiscore"
@@ -491,6 +495,17 @@ def _get_datasource_mapping(
491495
)
492496
continue
493497

498+
# check if a PostGIS layer's session_role override is requested.
499+
if layer.providerType() == "postgres" and QFC_PG_EFFECTIVE_USER:
500+
logger.info(
501+
f"Adjusting pg layer {layer.name()} with session_role={QFC_PG_EFFECTIVE_USER}"
502+
)
503+
504+
uri = QgsDataSourceUri(layer.dataProvider().dataSourceUri())
505+
uri.setParam("session_role", QFC_PG_EFFECTIVE_USER)
506+
layer.setDataSource(uri.uri(), layer.name(), "postgres")
507+
layer.reload()
508+
494509
subset_string = layer.subsetString()
495510
layer.setSubsetString("")
496511

0 commit comments

Comments
 (0)