Skip to content

Commit cdb35d6

Browse files
authored
Merge pull request #4119 from arnaud-morvan/processing_postgis_wrappers
[processing] Add PostGIS widget wrappers
2 parents 7d2d6e8 + 337d188 commit cdb35d6

File tree

8 files changed

+346
-134
lines changed

8 files changed

+346
-134
lines changed

python/plugins/processing/algs/gdal/ogr2ogrtopostgislist.py

+25-16
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@
2727
__revision__ = '$Format:%H$'
2828

2929

30-
from qgis.PyQt.QtCore import QSettings
31-
3230
from processing.core.parameters import ParameterVector
3331
from processing.core.parameters import ParameterString
3432
from processing.core.parameters import ParameterCrs
@@ -87,17 +85,15 @@ def __init__(self):
8785
GdalAlgorithm.__init__(self)
8886
self.processing = False
8987

90-
def dbConnectionNames(self):
91-
settings = QSettings()
92-
settings.beginGroup('/PostgreSQL/connections/')
93-
return settings.childGroups()
94-
9588
def defineCharacteristics(self):
9689
self.name, self.i18n_name = self.trAlgorithm('Import Vector into PostGIS database (available connections)')
9790
self.group, self.i18n_group = self.trAlgorithm('[OGR] Miscellaneous')
98-
self.DB_CONNECTIONS = self.dbConnectionNames()
99-
self.addParameter(ParameterSelection(self.DATABASE,
100-
self.tr('Database (connection name)'), self.DB_CONNECTIONS))
91+
self.addParameter(ParameterString(
92+
self.DATABASE,
93+
self.tr('Database (connection name)'),
94+
metadata={
95+
'widget_wrapper': {
96+
'class': 'processing.gui.wrappers_postgis.ConnectionWidgetWrapper'}}))
10197
self.addParameter(ParameterVector(self.INPUT_LAYER,
10298
self.tr('Input layer')))
10399
self.addParameter(ParameterString(self.SHAPE_ENCODING,
@@ -110,11 +106,24 @@ def defineCharacteristics(self):
110106
self.tr('Reproject to this CRS on output '), '', optional=True))
111107
self.addParameter(ParameterCrs(self.S_SRS,
112108
self.tr('Override source CRS'), '', optional=True))
113-
self.addParameter(ParameterString(self.SCHEMA,
114-
self.tr('Schema name'), 'public', optional=True))
115-
self.addParameter(ParameterString(self.TABLE,
116-
self.tr('Table name, leave blank to use input name'),
117-
'', optional=True))
109+
self.addParameter(ParameterString(
110+
self.SCHEMA,
111+
self.tr('Schema name'),
112+
'public',
113+
optional=True,
114+
metadata={
115+
'widget_wrapper': {
116+
'class': 'processing.gui.wrappers_postgis.SchemaWidgetWrapper',
117+
'connection_param': self.DATABASE}}))
118+
self.addParameter(ParameterString(
119+
self.TABLE,
120+
self.tr('Table name, leave blank to use input name'),
121+
'',
122+
optional=True,
123+
metadata={
124+
'widget_wrapper': {
125+
'class': 'processing.gui.wrappers_postgis.TableWidgetWrapper',
126+
'schema_param': self.SCHEMA}}))
118127
self.addParameter(ParameterString(self.PK,
119128
self.tr('Primary key (new field)'), 'id', optional=True))
120129
self.addParameter(ParameterTableField(self.PRIMARY_KEY,
@@ -168,7 +177,7 @@ def processAlgorithm(self, feedback):
168177
self.processing = False
169178

170179
def getConsoleCommands(self):
171-
connection = self.DB_CONNECTIONS[self.getParameterValue(self.DATABASE)]
180+
connection = self.getParameterValue(self.DATABASE)
172181
uri = uri_from_name(connection)
173182
if self.processing:
174183
# to get credentials input when needed

python/plugins/processing/algs/qgis/ImportIntoPostGIS.py

+25-10
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
from processing.core.parameters import ParameterBoolean
3434
from processing.core.parameters import ParameterVector
3535
from processing.core.parameters import ParameterString
36-
from processing.core.parameters import ParameterSelection
3736
from processing.core.parameters import ParameterTableField
3837
from processing.tools import dataobjects, postgis
3938

@@ -58,14 +57,30 @@ def defineCharacteristics(self):
5857
self.group, self.i18n_group = self.trAlgorithm('Database')
5958
self.addParameter(ParameterVector(self.INPUT,
6059
self.tr('Layer to import')))
61-
62-
self.DB_CONNECTIONS = self.dbConnectionNames()
63-
self.addParameter(ParameterSelection(self.DATABASE,
64-
self.tr('Database (connection name)'), self.DB_CONNECTIONS))
65-
self.addParameter(ParameterString(self.SCHEMA,
66-
self.tr('Schema (schema name)'), 'public'))
67-
self.addParameter(ParameterString(self.TABLENAME,
68-
self.tr('Table to import to (leave blank to use layer name)'), optional=True))
60+
self.addParameter(ParameterString(
61+
self.DATABASE,
62+
self.tr('Database (connection name)'),
63+
metadata={
64+
'widget_wrapper': {
65+
'class': 'processing.gui.wrappers_postgis.ConnectionWidgetWrapper'}}))
66+
self.addParameter(ParameterString(
67+
self.SCHEMA,
68+
self.tr('Schema (schema name)'),
69+
'public',
70+
optional=True,
71+
metadata={
72+
'widget_wrapper': {
73+
'class': 'processing.gui.wrappers_postgis.SchemaWidgetWrapper',
74+
'connection_param': self.DATABASE}}))
75+
self.addParameter(ParameterString(
76+
self.TABLENAME,
77+
self.tr('Table to import to (leave blank to use layer name)'),
78+
'',
79+
optional=True,
80+
metadata={
81+
'widget_wrapper': {
82+
'class': 'processing.gui.wrappers_postgis.TableWidgetWrapper',
83+
'schema_param': self.SCHEMA}}))
6984
self.addParameter(ParameterTableField(self.PRIMARY_KEY,
7085
self.tr('Primary key field'), self.INPUT, optional=True))
7186
self.addParameter(ParameterString(self.GEOMETRY_COLUMN,
@@ -85,7 +100,7 @@ def defineCharacteristics(self):
85100
self.tr('Create single-part geometries instead of multi-part'), False))
86101

87102
def processAlgorithm(self, feedback):
88-
connection = self.DB_CONNECTIONS[self.getParameterValue(self.DATABASE)]
103+
connection = self.getParameterValue(self.DATABASE)
89104
db = postgis.GeoDB.from_name(connection)
90105

91106
schema = self.getParameterValue(self.SCHEMA)

python/plugins/processing/algs/qgis/PostGISExecuteSQL.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626

2727
__revision__ = '$Format:%H$'
2828

29-
from qgis.PyQt.QtCore import QSettings
30-
3129
from processing.core.GeoAlgorithm import GeoAlgorithm
3230
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
3331
from processing.core.parameters import ParameterString
@@ -42,7 +40,12 @@ class PostGISExecuteSQL(GeoAlgorithm):
4240
def defineCharacteristics(self):
4341
self.name, self.i18n_name = self.trAlgorithm('PostGIS execute SQL')
4442
self.group, self.i18n_group = self.trAlgorithm('Database')
45-
self.addParameter(ParameterString(self.DATABASE, self.tr('Database')))
43+
self.addParameter(ParameterString(
44+
self.DATABASE,
45+
self.tr('Database'),
46+
metadata={
47+
'widget_wrapper': {
48+
'class': 'processing.gui.wrappers_postgis.ConnectionWidgetWrapper'}}))
4649
self.addParameter(ParameterString(self.SQL, self.tr('SQL query'), '', True))
4750

4851
def processAlgorithm(self, feedback):

python/plugins/processing/core/parameters.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -178,14 +178,19 @@ def tr(self, string, context=''):
178178

179179
def wrapper(self, dialog, row=0, col=0):
180180
wrapper = self.metadata.get('widget_wrapper', None)
181+
params = {}
182+
# wrapper metadata should be a dict with class key
183+
if isinstance(wrapper, dict):
184+
params = deepcopy(wrapper)
185+
wrapper = params.pop('class')
181186
# wrapper metadata should be a class path
182187
if isinstance(wrapper, str):
183188
tokens = wrapper.split('.')
184189
mod = __import__('.'.join(tokens[:-1]), fromlist=[tokens[-1]])
185190
wrapper = getattr(mod, tokens[-1])
186191
# or directly a class object
187192
if isclass(wrapper):
188-
wrapper = wrapper(self, dialog, row, col)
193+
wrapper = wrapper(self, dialog, row, col, **params)
189194
# or a wrapper instance
190195
return wrapper
191196

python/plugins/processing/gui/StringInputPanel.py

-74
This file was deleted.

0 commit comments

Comments
 (0)