Skip to content

Commit af9756e

Browse files
author
jef
committedDec 13, 2008
use QgsDataSourceURI to parse postgres connection string in mapserver export (fixes #1107)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@9783 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

1 file changed

+7
-38
lines changed

1 file changed

+7
-38
lines changed
 

‎python/plugins/mapserver_export/ms_export.py

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import os
2626
from string import *
2727
from xml.dom import minidom, Node
28+
from qgis.core import *
2829

2930
# symbol map
3031
qgisSymbols = {'hard:circle' : 'CIRCLE',
@@ -234,39 +235,6 @@ def writeWebSection(self):
234235
self.outFile.write(" FOOTER '" + self.footer + "'\n")
235236
self.outFile.write(" END\n\n")
236237

237-
def parsePostgisConnection( self, dataString ):
238-
pg = {}
239-
pg['host'] = 'localhost'
240-
pg['dbname'] = 'gisdata'
241-
pg['user'] = ''
242-
pg['password'] = ''
243-
pg['table'] = ''
244-
pg['geom'] = 'the_geom'
245-
246-
247-
whereCondition = dataString.split("sql")[1][1:]
248-
cmp = dataString.split("sql")[0].split(" ")
249-
250-
for c in cmp:
251-
if c[:1] == "(":
252-
pg['geom'] = c[1:][:-1]
253-
else:
254-
kvp = c.split("=")
255-
if (len(kvp) >= 2):
256-
pg[kvp[0]] = kvp[1]
257-
258-
connString = 'host=' + pg['host'] + " user=" + pg['user']
259-
260-
if (len(pg['password'].replace("\'", "")) > 0):
261-
connString += " password=" + pg['password'].replace("'", "")
262-
263-
connString += " dbname=" + pg['dbname']
264-
265-
dataString = pg['geom'] + " FROM " + pg['table'].replace("\"", "")
266-
filterString = whereCondition.replace("\"", "")
267-
return (connString, dataString, filterString)
268-
269-
270238
# Write the map layers - we have to defer writing to disk so we
271239
# can invert the order of the layes, since they are opposite in QGIS
272240
# compared to mapserver
@@ -321,13 +289,14 @@ def writeMapLayers(self):
321289

322290
if providerString == 'postgres':
323291
# it's a postgis layer
324-
(pgConnString, sqlData, sqlFilter) = self.parsePostgisConnection(dataString)
292+
uri = QgsDataSourceURI(dataString)
293+
325294
layer_def += " CONNECTIONTYPE postgis\n"
326-
layer_def += " CONNECTION \"" + pgConnString + "\"\n"
327-
layer_def += " DATA \"" + sqlData + "\"\n"
295+
layer_def += " CONNECTION \"" + uri.connectionInfo() + "\"\n"
296+
layer_def += " DATA '\"" + uri.geometryColumn() + "\" FROM " + uri.quotedTablename() + "'\n"
328297
# don't write the filter keyword if there isn't one
329-
if sqlFilter:
330-
layer_def += " FILTER \"" + sqlFilter + "\"\n"
298+
if uri.sql() != "":
299+
layer_def += " FILTER ( " + uri.sql() + " )\n"
331300

332301
elif providerString == 'wms' and lyr.getAttribute("type").encode('utf-8').upper() == 'RASTER':
333302
# it's a WMS layer

0 commit comments

Comments
 (0)
Please sign in to comment.