Skip to content

Commit a6bd9f0

Browse files
committedNov 12, 2016
Revert "Fix extraction of ogr LayerName from multi-layer dataset URIs"
This reverts commit 6c53641. As it breaks all OGR geoprocessing algoroithms.
1 parent 5991ecc commit a6bd9f0

File tree

2 files changed

+12
-95
lines changed

2 files changed

+12
-95
lines changed
 

‎python/plugins/processing/tests/ToolsTest.py

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -31,72 +31,17 @@
3131
from qgis.core import (QgsVectorLayer, QgsFeatureRequest)
3232
from processing.core.ProcessingConfig import ProcessingConfig
3333

34-
import os.path
35-
import errno
36-
import shutil
37-
38-
dataFolder = os.path.join(os.path.dirname(__file__), '../../../../tests/testdata/')
39-
tmpBaseFolder = os.path.join(os.sep, 'tmp', 'qgis_test', str(os.getpid()))
40-
41-
42-
def mkDirP(path):
43-
try:
44-
os.makedirs(path)
45-
except OSError as exc:
46-
if exc.errno == errno.EEXIST and os.path.isdir(path):
47-
pass
48-
else:
49-
raise
50-
5134
start_app()
5235

5336

5437
class VectorTest(unittest.TestCase):
5538

56-
@classmethod
57-
def setUpClass(cls):
58-
mkDirP(tmpBaseFolder)
59-
60-
@classmethod
61-
def tearDownClass(cls):
62-
shutil.rmtree(tmpBaseFolder)
63-
pass
64-
65-
# See http://hub.qgis.org/issues/15698
66-
def test_ogrLayerName(self):
67-
tmpdir = os.path.join(tmpBaseFolder, 'ogrLayerName')
68-
os.mkdir(tmpdir)
69-
70-
def linkTestfile(f, t):
71-
os.link(os.path.join(dataFolder, f), os.path.join(tmpdir, t))
72-
7339
# URI from OGR provider
74-
linkTestfile('geom_data.csv', 'a.csv')
75-
name = vector.ogrLayerName(tmpdir)
76-
self.assertEqual(name, 'a')
77-
7840
# URI from OGR provider
79-
linkTestfile('wkt_data.csv', 'b.csv')
80-
name = vector.ogrLayerName(tmpdir + '|layerid=0')
81-
self.assertEqual(name, 'a')
82-
name = vector.ogrLayerName(tmpdir + '|layerid=1')
83-
self.assertEqual(name, 'b')
84-
8541
# URI from OGR provider
86-
name = vector.ogrLayerName(tmpdir + '|layerid=2')
87-
self.assertEqual(name, 'invalid-layerid')
88-
8942
# URI from OGR provider
90-
name = vector.ogrLayerName(tmpdir + '|layername=f')
91-
self.assertEqual(name, 'f') # layername takes precedence
92-
9343
# URI from OGR provider
94-
name = vector.ogrLayerName(tmpdir + '|layerid=0|layername=f2')
95-
self.assertEqual(name, 'f2') # layername takes precedence
96-
9744
# URI from OGR provider
98-
name = vector.ogrLayerName(tmpdir + '|layername=f2|layerid=0')
99-
self.assertEqual(name, 'f2') # layername takes precedence
10045

10146
# URI from Sqlite provider
10247
name = vector.ogrLayerName('dbname=\'/tmp/x.sqlite\' table="t" (geometry) sql=')
@@ -105,7 +50,6 @@ def linkTestfile(f, t):
10550
# URI from PostgreSQL provider
10651
name = vector.ogrLayerName('port=5493 sslmode=disable key=\'edge_id\' srid=0 type=LineString table="city_data"."edge" (geom) sql=')
10752
self.assertEqual(name, 'city_data.edge')
108-
10953
def testFeatures(self):
11054
ProcessingConfig.initialize()
11155

‎python/plugins/processing/tools/vector.py

Lines changed: 12 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@
4141

4242
import psycopg2
4343

44-
from osgeo import ogr
45-
4644
from qgis.PyQt.QtCore import QVariant, QSettings
4745
from qgis.core import (Qgis, QgsFields, QgsField, QgsGeometry, QgsRectangle, QgsWkbTypes,
4846
QgsSpatialIndex, QgsMapLayerRegistry, QgsMapLayer, QgsVectorLayer,
@@ -558,46 +556,21 @@ def ogrConnectionString(uri):
558556
# /tmp/x.gdb|layername=thelayer
559557
#
560558
def ogrLayerName(uri):
561-
562-
# handle URIs of database providers
563-
if ' table=' in uri:
564-
# Matches table="schema"."table"
565-
re_table_schema = re.compile(' table="([^"]*)"\."([^"]*)"')
566-
r = re_table_schema.search(uri)
567-
if r:
568-
return r.groups()[0] + '.' + r.groups()[1]
569-
# Matches table="table"
570-
re_table = re.compile(' table="([^"]*)"')
571-
r = re_table.search(uri)
572-
if r:
573-
return r.groups()[0]
574-
575-
# handle URIs of OGR provider with explicit layername
576-
if 'layername' in uri:
577-
regex = re.compile('(layername=)([^|]*)')
559+
if 'host' in uri:
560+
regex = re.compile('(table=")(.+?)(\.)(.+?)"')
561+
r = regex.search(uri)
562+
return '"' + r.groups()[1] + '.' + r.groups()[3] + '"'
563+
elif 'dbname' in uri:
564+
regex = re.compile('(table=")(.+?)"')
578565
r = regex.search(uri)
579566
return r.groups()[1]
567+
elif 'layername' in uri:
568+
regex = re.compile('(layername=)(.*)')
569+
r = regex.search(uri)
570+
return r.groups()[1]
571+
else:
572+
return os.path.basename(os.path.splitext(uri)[0])
580573

581-
fields = uri.split('|')
582-
ogruri = fields[0]
583-
fields = fields[1:]
584-
layerid = 0
585-
for f in fields:
586-
if f.startswith('layername='):
587-
# Name encoded in uri, nothing more needed
588-
return f.split('=')[1]
589-
if f.startswith('layerid='):
590-
layerid = int(f.split('=')[1])
591-
# Last layerid= takes precedence, to allow of layername to
592-
# take precedence
593-
ds = ogr.Open(ogruri)
594-
if not ds:
595-
return "invalid-uri"
596-
ly = ds.GetLayer(layerid)
597-
if not ly:
598-
return "invalid-layerid"
599-
name = ly.GetName()
600-
return name
601574

602575

603576
class VectorWriter(object):

0 commit comments

Comments
 (0)
Please sign in to comment.