Update python code

This commit is contained in:
Matthias Kuhn 2016-09-22 12:09:13 +02:00
parent b6779f63ff
commit 4a7a8ff263
33 changed files with 95 additions and 62 deletions

View File

@ -157,9 +157,10 @@ class QgsFields
%End
/**
* Look up field's index from the field name.
* Get the field index from the field name.
* This method takes is case sensitive and only matches the data source
* name of the field.
* Alias for indexOf
*
* @param fieldName The name of the field.
*
@ -168,6 +169,19 @@ class QgsFields
*/
int indexFromName( const QString& fieldName ) const;
/**
* Get the field index from the field name.
* This method takes is case sensitive and only matches the data source
* name of the field.
*
* @param fieldName The name of the field.
*
* @return The field index if found or -1 in case it cannot be found.
* @see lookupField For a more tolerant alternative.
* @note Added in QGIS 3.0
*/
int indexOf( const QString& fieldName ) const;
/**
* Look up field's index from the field name.
* This method matches in the following order:

View File

@ -86,7 +86,7 @@ class BasicStatisticsStrings(GeoAlgorithm):
outputFile = self.getOutputValue(self.OUTPUT_HTML_FILE)
index = layer.fieldNameIndex(fieldName)
index = layer.fields().lookupField(fieldName)
sumValue = 0
minValue = 0

View File

@ -35,7 +35,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve,
segments, endCapStyle=1, joinStyle=1, mitreLimit=2):
if useField:
field = layer.fieldNameIndex(field)
field = layer.fields().lookupField(field)
outFeat = QgsFeature()

View File

@ -78,7 +78,7 @@ class ConvexHull(GeoAlgorithm):
f = QgsField('value', QVariant.String, '', 255)
if useField:
index = layer.fieldNameIndex(fieldName)
index = layer.fields().lookupField(fieldName)
fType = layer.fields()[index].type()
if fType in [QVariant.Int, QVariant.UInt, QVariant.LongLong, QVariant.ULongLong]:
f.setType(fType)

View File

@ -52,7 +52,7 @@ class DeleteColumn(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
idx = layer.fieldNameIndex(self.getParameterValue(self.COLUMN))
idx = layer.fields().lookupField(self.getParameterValue(self.COLUMN))
fields = layer.fields()
fields.remove(idx)

View File

@ -127,7 +127,7 @@ class Dissolve(GeoAlgorithm):
outFeat.setAttributes(attrs)
writer.addFeature(outFeat)
else:
field_indexes = [vlayerA.fieldNameIndex(f) for f in field_names.split(';')]
field_indexes = [vlayerA.fields().lookupField(f) for f in field_names.split(';')]
attribute_dict = {}
geometry_dict = defaultdict(lambda: [])

View File

@ -54,7 +54,7 @@ class EquivalentNumField(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
vlayer = dataobjects.getObjectFromUri(
self.getParameterValue(self.INPUT))
fieldindex = vlayer.fieldNameIndex(fieldname)
fieldindex = vlayer.fields().lookupField(fieldname)
fields = vlayer.fields()
fields.append(QgsField('NUM_FIELD', QVariant.Int))
writer = output.getVectorWriter(fields, vlayer.wkbType(),

View File

@ -87,7 +87,7 @@ class ExtractByAttribute(GeoAlgorithm):
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
layer.wkbType(), layer.crs())
idx = layer.fieldNameIndex(fieldName)
idx = layer.fields().lookupField(fieldName)
fieldType = fields[idx].type()
if fieldType != QVariant.String and operator in self.OPERATORS[-2:]:

View File

@ -70,10 +70,10 @@ class JoinAttributes(GeoAlgorithm):
field2 = self.getParameterValue(self.TABLE_FIELD_2)
layer = dataobjects.getObjectFromUri(input)
joinField1Index = layer.fieldNameIndex(field)
joinField1Index = layer.fields().lookupField(field)
layer2 = dataobjects.getObjectFromUri(input2)
joinField2Index = layer2.fieldNameIndex(field2)
joinField2Index = layer2.fields().lookupField(field2)
outFields = vector.combineVectorFields(layer, layer2)
writer = output.getVectorWriter(outFields, layer.wkbType(),

View File

@ -79,8 +79,8 @@ class LinesIntersection(GeoAlgorithm):
fieldA = self.getParameterValue(self.FIELD_A)
fieldB = self.getParameterValue(self.FIELD_B)
idxA = layerA.fieldNameIndex(fieldA)
idxB = layerB.fieldNameIndex(fieldB)
idxA = layerA.fields().lookupField(fieldA)
idxB = layerB.fields().lookupField(fieldB)
fieldList = [layerA.fields()[idxA],
layerB.fields()[idxB]]

View File

@ -79,12 +79,12 @@ class MeanCoords(GeoAlgorithm):
if weightField is None:
weightIndex = -1
else:
weightIndex = layer.fieldNameIndex(weightField)
weightIndex = layer.fields().lookupField(weightField)
if uniqueField is None:
uniqueIndex = -1
else:
uniqueIndex = layer.fieldNameIndex(uniqueField)
uniqueIndex = layer.fields().lookupField(uniqueField)
fieldList = [QgsField('MEAN_X', QVariant.Double, '', 24, 15),
QgsField('MEAN_Y', QVariant.Double, '', 24, 15),

View File

@ -122,8 +122,8 @@ class PointDistance(GeoAlgorithm):
index = vector.spatialindex(targetLayer)
inIdx = inLayer.fieldNameIndex(inField)
outIdx = targetLayer.fieldNameIndex(targetField)
inIdx = inLayer.fields().lookupField(inField)
outIdx = targetLayer.fields().lookupField(targetField)
distArea = QgsDistanceArea()
@ -162,7 +162,7 @@ class PointDistance(GeoAlgorithm):
nPoints, progress):
index = vector.spatialindex(targetLayer)
inIdx = inLayer.fieldNameIndex(inField)
inIdx = inLayer.fields().lookupField(inField)
distArea = QgsDistanceArea()

View File

@ -65,7 +65,7 @@ class PointsInPolygonUnique(GeoAlgorithm):
fields = polyLayer.fields()
fields.append(QgsField(fieldName, QVariant.Int))
classFieldIndex = pointLayer.fieldNameIndex(classFieldName)
classFieldIndex = pointLayer.fields().lookupField(classFieldName)
(idxCount, fieldList) = vector.findOrCreateField(polyLayer,
polyLayer.fields(), fieldName)

View File

@ -68,7 +68,7 @@ class PointsInPolygonWeighted(GeoAlgorithm):
polyLayer = dataobjects.getObjectFromUri(self.getParameterValue(self.POLYGONS))
pointLayer = dataobjects.getObjectFromUri(self.getParameterValue(self.POINTS))
fieldName = self.getParameterValue(self.FIELD)
fieldIdx = pointLayer.fieldNameIndex(self.getParameterValue(self.WEIGHT))
fieldIdx = pointLayer.fields().lookupField(self.getParameterValue(self.WEIGHT))
fields = polyLayer.fields()
fields.append(QgsField(fieldName, QVariant.Int))

View File

@ -65,8 +65,8 @@ class PointsLayerFromTable(GeoAlgorithm):
output = self.getOutputFromName(self.OUTPUT)
fields = vlayer.fields()
writer = output.getVectorWriter(fields, QgsWkbTypes.Point, self.crs)
xfieldindex = vlayer.fieldNameIndex(self.getParameterValue(self.XFIELD))
yfieldindex = vlayer.fieldNameIndex(self.getParameterValue(self.YFIELD))
xfieldindex = vlayer.fields().lookupField(self.getParameterValue(self.XFIELD))
yfieldindex = vlayer.fields().lookupField(self.getParameterValue(self.YFIELD))
crsId = self.getParameterValue(self.TARGET_CRS)
targetCrs = QgsCoordinateReferenceSystem()

View File

@ -71,7 +71,7 @@ class RandomExtractWithinSubsets(GeoAlgorithm):
field = self.getParameterValue(self.FIELD)
method = self.getParameterValue(self.METHOD)
index = layer.fieldNameIndex(field)
index = layer.fields().lookupField(field)
features = vector.features(layer)
featureCount = len(features)

View File

@ -83,7 +83,7 @@ class RandomSelectionWithinSubsets(GeoAlgorithm):
method = self.getParameterValue(self.METHOD)
layer.removeSelection()
index = layer.fieldNameIndex(field)
index = layer.fields().lookupField(field)
unique = vector.getUniqueValues(layer, index)
featureCount = layer.featureCount()

View File

@ -86,7 +86,7 @@ class SelectByAttribute(GeoAlgorithm):
fields = layer.fields()
idx = layer.fieldNameIndex(fieldName)
idx = layer.fields().lookupField(fieldName)
fieldType = fields[idx].type()
if fieldType != QVariant.String and operator in self.OPERATORS[-2:]:

View File

@ -75,7 +75,7 @@ class SinglePartsToMultiparts(GeoAlgorithm):
inGeom = QgsGeometry()
outGeom = QgsGeometry()
index = layer.fieldNameIndex(fieldName)
index = layer.fields().lookupField(fieldName)
unique = vector.getUniqueValues(layer, index)
current = 0

View File

@ -62,8 +62,8 @@ class StatisticsByCategories(GeoAlgorithm):
categoriesFieldName = self.getParameterValue(self.CATEGORIES_FIELD_NAME)
output = self.getOutputFromName(self.OUTPUT)
valuesField = layer.fieldNameIndex(valuesFieldName)
categoriesField = layer.fieldNameIndex(categoriesFieldName)
valuesField = layer.fields().lookupField(valuesFieldName)
categoriesField = layer.fields().lookupField(categoriesFieldName)
features = vector.features(layer)
total = 100.0 / len(features)

View File

@ -53,7 +53,7 @@ class TextToFloat(GeoAlgorithm):
def processAlgorithm(self, progress):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT))
fieldName = self.getParameterValue(self.FIELD)
idx = layer.fieldNameIndex(fieldName)
idx = layer.fields().lookupField(fieldName)
fields = layer.fields()
fields[idx] = QgsField(fieldName, QVariant.Double, '', 24, 15)

View File

@ -69,7 +69,7 @@ class UniqueValues(GeoAlgorithm):
layer = dataobjects.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
fieldName = self.getParameterValue(self.FIELD_NAME)
outputFile = self.getOutputValue(self.OUTPUT)
values = vector.getUniqueValues(layer, layer.fieldNameIndex(fieldName))
values = vector.getUniqueValues(layer, layer.fields().lookupField(fieldName))
self.createHTML(outputFile, values)
self.setOutputValue(self.TOTAL_VALUES, len(values))
self.setOutputValue(self.UNIQUE_VALUES, ';'.join([str(v) for v in

View File

@ -67,7 +67,7 @@ class VectorSplit(GeoAlgorithm):
mkdir(directory)
fieldIndex = layer.fieldNameIndex(fieldName)
fieldIndex = layer.fields().lookupField(fieldName)
uniqueValues = vector.uniqueValues(layer, fieldIndex)
baseName = os.path.join(directory, '{0}_{1}'.format(layer.name(), fieldName))

View File

@ -14,8 +14,8 @@ fields.append(QgsField('UNIQ_COUNT', QVariant.Int))
writer = VectorWriter(N_unique_values, None, fields, layer.wkbType(),
layer.crs())
class_field_index = layer.fieldNameIndex(class_field)
value_field_index = layer.fieldNameIndex(value_field)
class_field_index = layer.fields().lookupField(class_field)
value_field_index = layer.fields().lookupField(value_field)
outFeat = QgsFeature()
classes = {}

View File

@ -156,7 +156,7 @@ def resolveFieldIndex(layer, attr):
if isinstance(attr, int):
return attr
else:
index = layer.fieldNameIndex(str(attr))
index = layer.fields().lookupField(attr)
if index == -1:
raise ValueError('Wrong field name')
return index
@ -236,7 +236,7 @@ def createUniqueFieldName(fieldName, fieldList):
def findOrCreateField(layer, fieldList, fieldName, fieldLen=24, fieldPrec=15):
idx = layer.fieldNameIndex(fieldName)
idx = layer.fields().lookupField(fieldName)
if idx == -1:
fn = createUniqueFieldName(fieldName, fieldList)
field = QgsField(fn, QVariant.Double, '', fieldLen, fieldPrec)

View File

@ -173,7 +173,12 @@ int QgsFields::fieldOriginIndex( int fieldIdx ) const
return d->fields[fieldIdx].originIndex;
}
int QgsFields::indexFromName( const QString &fieldName ) const
int QgsFields::indexFromName( const QString& fieldName ) const
{
return d->nameToIndex.value( fieldName, -1 );
}
int QgsFields::indexOf( const QString& fieldName ) const
{
return d->nameToIndex.value( fieldName, -1 );
}

View File

@ -121,9 +121,10 @@ class CORE_EXPORT QgsFields
int fieldOriginIndex( int fieldIdx ) const;
/**
* Look up field's index from the field name.
* Get the field index from the field name.
* This method takes is case sensitive and only matches the data source
* name of the field.
* Alias for indexOf
*
* @param fieldName The name of the field.
*
@ -132,6 +133,19 @@ class CORE_EXPORT QgsFields
*/
int indexFromName( const QString& fieldName ) const;
/**
* Get the field index from the field name.
* This method takes is case sensitive and only matches the data source
* name of the field.
*
* @param fieldName The name of the field.
*
* @return The field index if found or -1 in case it cannot be found.
* @see lookupField For a more tolerant alternative.
* @note Added in QGIS 3.0
*/
int indexOf( const QString& fieldName ) const;
/**
* Look up field's index from the field name.
* This method matches in the following order:

View File

@ -152,7 +152,7 @@ class OfflineTestBase(object):
# Edit feature 2
feat2 = self._getFeatureByAttribute(offline_layer, 'name', "'name 2'")
self.assertTrue(offline_layer.startEditing())
self.assertTrue(offline_layer.changeAttributeValue(feat2.id(), offline_layer.fieldNameIndex('name'), 'name 2 edited'))
self.assertTrue(offline_layer.changeAttributeValue(feat2.id(), offline_layer.fields().lookupField('name'), 'name 2 edited'))
self.assertTrue(offline_layer.changeGeometry(feat2.id(), QgsGeometry.fromPoint(QgsPoint(33.0, 60.0))))
self.assertTrue(offline_layer.commitChanges())
feat2 = self._getFeatureByAttribute(offline_layer, 'name', "'name 2 edited'")
@ -182,11 +182,11 @@ class OfflineTestBase(object):
# Edit feature 2
feat2 = self._getFeatureByAttribute(offline_layer, 'name', "'name 2 edited'")
self.assertTrue(offline_layer.startEditing())
self.assertTrue(offline_layer.changeAttributeValue(feat2.id(), offline_layer.fieldNameIndex('name'), 'name 2'))
self.assertTrue(offline_layer.changeAttributeValue(feat2.id(), offline_layer.fields().lookupField('name'), 'name 2'))
self.assertTrue(offline_layer.changeGeometry(feat2.id(), QgsGeometry.fromPoint(TEST_FEATURES[1][2])))
# Edit feat 4
feat4 = self._getFeatureByAttribute(offline_layer, 'name', "'name 4'")
self.assertTrue(offline_layer.changeAttributeValue(feat4.id(), offline_layer.fieldNameIndex('name'), 'name 4 edited'))
self.assertTrue(offline_layer.changeAttributeValue(feat4.id(), offline_layer.fields().lookupField('name'), 'name 4 edited'))
self.assertTrue(offline_layer.commitChanges())
# Sync
ol.synchronize()

View File

@ -72,13 +72,13 @@ class TestPyQgsMssqlProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
date_idx = vl.fieldNameIndex('date_field')
date_idx = vl.fields().lookupField('date_field')
assert isinstance(f.attributes()[date_idx], QDate)
self.assertEqual(f.attributes()[date_idx], QDate(2004, 3, 4))
time_idx = vl.fieldNameIndex('time_field')
time_idx = vl.fields().lookupField('time_field')
assert isinstance(f.attributes()[time_idx], QTime)
self.assertEqual(f.attributes()[time_idx], QTime(13, 41, 52))
datetime_idx = vl.fieldNameIndex('datetime_field')
datetime_idx = vl.fields().lookupField('datetime_field')
assert isinstance(f.attributes()[datetime_idx], QDateTime)
self.assertEqual(f.attributes()[datetime_idx], QDateTime(
QDate(2004, 3, 4), QTime(13, 41, 52)))

View File

@ -91,10 +91,10 @@ class TestPyQgsOracleProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
date_idx = vl.fieldNameIndex('date_field')
date_idx = vl.fields().lookupField('date_field')
self.assertTrue(isinstance(f.attributes()[date_idx], QDate))
self.assertEqual(f.attributes()[date_idx], QDate(2004, 3, 4))
datetime_idx = vl.fieldNameIndex('datetime_field')
datetime_idx = vl.fields().lookupField('datetime_field')
self.assertTrue(isinstance(f.attributes()[datetime_idx], QDateTime))
self.assertEqual(f.attributes()[datetime_idx], QDateTime(
QDate(2004, 3, 4), QTime(13, 41, 52)))

View File

@ -84,13 +84,13 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
date_idx = vl.fieldNameIndex('date_field')
date_idx = vl.fields().lookupField('date_field')
self.assertTrue(isinstance(f.attributes()[date_idx], QDate))
self.assertEqual(f.attributes()[date_idx], QDate(2004, 3, 4))
time_idx = vl.fieldNameIndex('time_field')
time_idx = vl.fields().lookupField('time_field')
self.assertTrue(isinstance(f.attributes()[time_idx], QTime))
self.assertEqual(f.attributes()[time_idx], QTime(13, 41, 52))
datetime_idx = vl.fieldNameIndex('datetime_field')
datetime_idx = vl.fields().lookupField('datetime_field')
self.assertTrue(isinstance(f.attributes()[datetime_idx], QDateTime))
self.assertEqual(f.attributes()[datetime_idx], QDateTime(QDate(2004, 3, 4), QTime(13, 41, 52)))
@ -165,7 +165,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
def test_layer(ql, att, val, fidval):
self.assertTrue(ql.isValid())
features = ql.getFeatures()
att_idx = ql.fieldNameIndex(att)
att_idx = ql.fields().lookupField(att)
count = 0
for f in features:
count += 1
@ -344,7 +344,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
value_idx = vl.fieldNameIndex('value')
value_idx = vl.fields().lookupField('value')
self.assertTrue(isinstance(f.attributes()[value_idx], dict))
self.assertEqual(f.attributes()[value_idx], {'a': 'b', '1': '2'})
@ -375,7 +375,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
value_idx = vl.fieldNameIndex('value')
value_idx = vl.fields().lookupField('value')
self.assertTrue(isinstance(f.attributes()[value_idx], list))
self.assertEqual(f.attributes()[value_idx], ['a', 'b', 'c'])
@ -406,7 +406,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
value_idx = vl.fieldNameIndex('value')
value_idx = vl.fields().lookupField('value')
self.assertTrue(isinstance(f.attributes()[value_idx], list))
self.assertEqual(f.attributes()[value_idx], [1, 2, -5])
@ -420,7 +420,7 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
value_idx = vl.fieldNameIndex('value')
value_idx = vl.fields().lookupField('value')
self.assertTrue(isinstance(f.attributes()[value_idx], list))
self.assertEqual(f.attributes()[value_idx], [1.1, 2, -5.12345])

View File

@ -58,13 +58,13 @@ class TestPyQgsTabfileProvider(unittest.TestCase):
f = next(vl.getFeatures(QgsFeatureRequest()))
date_idx = vl.fieldNameIndex('date')
date_idx = vl.fields().lookupField('date')
assert isinstance(f.attributes()[date_idx], QDate)
self.assertEqual(f.attributes()[date_idx], QDate(2004, 5, 3))
time_idx = vl.fieldNameIndex('time')
time_idx = vl.fields().lookupField('time')
assert isinstance(f.attributes()[time_idx], QTime)
self.assertEqual(f.attributes()[time_idx], QTime(13, 41, 00))
datetime_idx = vl.fieldNameIndex('date_time')
datetime_idx = vl.fields().lookupField('date_time')
assert isinstance(f.attributes()[datetime_idx], QDateTime)
self.assertEqual(f.attributes()[datetime_idx], QDateTime(QDate(2004, 5, 3), QTime(13, 41, 00)))

View File

@ -132,15 +132,15 @@ class TestQgsVectorLayer(unittest.TestCase):
f = next(created_layer.getFeatures(QgsFeatureRequest()))
date_idx = created_layer.fieldNameIndex('date_f')
date_idx = created_layer.fields().lookupField('date_f')
self.assertIsInstance(f.attributes()[date_idx], QDate)
self.assertEqual(f.attributes()[date_idx], QDate(2014, 3, 5))
time_idx = created_layer.fieldNameIndex('time_f')
time_idx = created_layer.fields().lookupField('time_f')
#shapefiles do not support time types
self.assertIsInstance(f.attributes()[time_idx], str)
self.assertEqual(f.attributes()[time_idx], '13:45:22')
#shapefiles do not support datetime types
datetime_idx = created_layer.fieldNameIndex('dt_f')
datetime_idx = created_layer.fields().lookupField('dt_f')
self.assertIsInstance(f.attributes()[datetime_idx], str)
self.assertEqual(f.attributes()[datetime_idx], QDateTime(QDate(2014, 3, 5), QTime(13, 45, 22)).toString("yyyy/MM/dd hh:mm:ss.zzz"))
@ -185,13 +185,13 @@ class TestQgsVectorLayer(unittest.TestCase):
f = next(created_layer.getFeatures(QgsFeatureRequest()))
date_idx = created_layer.fieldNameIndex('date_f')
date_idx = created_layer.fields().lookupField('date_f')
self.assertIsInstance(f.attributes()[date_idx], QDate)
self.assertEqual(f.attributes()[date_idx], QDate(2014, 3, 5))
time_idx = created_layer.fieldNameIndex('time_f')
time_idx = created_layer.fields().lookupField('time_f')
self.assertIsInstance(f.attributes()[time_idx], QTime)
self.assertEqual(f.attributes()[time_idx], QTime(13, 45, 22))
datetime_idx = created_layer.fieldNameIndex('dt_f')
datetime_idx = created_layer.fields().lookupField('dt_f')
self.assertIsInstance(f.attributes()[datetime_idx], QDateTime)
self.assertEqual(f.attributes()[datetime_idx], QDateTime(QDate(2014, 3, 5), QTime(13, 45, 22)))
@ -458,7 +458,7 @@ class TestQgsVectorLayer(unittest.TestCase):
f = next(created_layer.getFeatures(QgsFeatureRequest()))
int8_idx = created_layer.fieldNameIndex('int8')
int8_idx = created_layer.fields().lookupField('int8')
self.assertEqual(f.attributes()[int8_idx], 2123456789)
def testDefaultDatasetOptions(self):