Port last postgis alg to connections API

This commit is contained in:
Nyall Dawson 2020-03-17 09:22:52 +10:00
parent cb883b0610
commit 184bb0ebb2

View File

@ -23,20 +23,18 @@ __author__ = 'Anita Graser'
__date__ = 'May 2018'
__copyright__ = '(C) 2018, Anita Graser'
from qgis.core import (Qgis,
QgsProcessingException,
from qgis.core import (QgsProcessingException,
QgsProcessingParameterString,
QgsApplication,
QgsVectorLayer,
QgsProject,
QgsDataSourceUri,
QgsProcessing,
QgsProcessingException,
QgsProcessingOutputVectorLayer,
QgsProcessingContext,
QgsProcessingParameterProviderConnection,
QgsProcessingFeedback)
QgsProviderRegistry,
QgsProviderConnectionException
)
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
from processing.tools import postgis
class PostGISExecuteAndLoadSQL(QgisAlgorithm):
@ -92,11 +90,20 @@ class PostGISExecuteAndLoadSQL(QgisAlgorithm):
return self.tr('postgis,table,database').split(',')
def processAlgorithm(self, parameters, context, feedback):
connection = self.parameterAsConnectionName(parameters, self.DATABASE, context)
connection_name = self.parameterAsConnectionName(parameters, self.DATABASE, context)
id_field = self.parameterAsString(parameters, self.ID_FIELD, context)
geom_field = self.parameterAsString(
parameters, self.GEOMETRY_FIELD, context)
uri = postgis.uri_from_name(connection)
# resolve connection details to uri
try:
md = QgsProviderRegistry.instance().providerMetadata('postgres')
conn = md.createConnection(connection_name)
except QgsProviderConnectionException:
raise QgsProcessingException(self.tr('Could not retrieve connection details for {}').format(connection_name))
uri = QgsDataSourceUri(conn.uri())
sql = self.parameterAsString(parameters, self.SQL, context)
sql = sql.replace('\n', ' ')
uri.setDataSource("", "(" + sql.rstrip(';') + ")", geom_field, "", id_field)