diff --git a/python/core/qgsfeature.sip b/python/core/qgsfeature.sip index 17c1302ff289..bbb671e289c6 100644 --- a/python/core/qgsfeature.sip +++ b/python/core/qgsfeature.sip @@ -8,6 +8,32 @@ class QgsFeature public: + SIP_PYOBJECT __getitem__(int key); +%MethodCode + const QgsAttributeMap& attrMap = sipCpp->attributeMap(); + QgsAttributeMap::const_iterator it = attrMap.find(a0); + if (it == attrMap.end()) + PyErr_SetString(PyExc_KeyError, QByteArray::number(a0)); + else + { + QVariant* v = new QVariant(it.value()); + sipRes = sipConvertFromInstance(v, sipClass_QVariant, Py_None); + } +%End + + void __setitem__(int key, QVariant value); +%MethodCode + sipCpp->addAttribute(a0, *a1); +%End + + void __delitem__(int key); +%MethodCode + if (sipCpp->attributeMap().contains(a0)) + sipCpp->deleteAttribute(a0); + else + PyErr_SetString(PyExc_KeyError, QByteArray::number(a0)); +%End + //! Constructor QgsFeature(int id = 0, QString typeName = "" ); diff --git a/python/core/qgsvectordataprovider.sip b/python/core/qgsvectordataprovider.sip index 1df83125f9b0..cce0156eb98c 100644 --- a/python/core/qgsvectordataprovider.sip +++ b/python/core/qgsvectordataprovider.sip @@ -7,6 +7,23 @@ class QgsVectorDataProvider : QgsDataProvider public: + QgsVectorDataProvider* __iter__(); +%MethodCode + sipRes = sipCpp; +%End + + SIP_PYOBJECT __next__(); +%MethodCode + QgsFeature* f = new QgsFeature; + if (sipCpp->nextFeature(*f)) + sipRes = sipConvertFromInstance(f, sipClass_QgsFeature, Py_None); + else + { + delete f; + PyErr_SetString(PyExc_StopIteration,""); + } +%End + // If you add to this, please also add to capabilitiesString() /** * enumeration with capabilities that providers might implement diff --git a/python/core/qgsvectorlayer.sip b/python/core/qgsvectorlayer.sip index 23dd8ef69825..a1c978d67d4c 100644 --- a/python/core/qgsvectorlayer.sip +++ b/python/core/qgsvectorlayer.sip @@ -5,6 +5,25 @@ class QgsVectorLayer : QgsMapLayer %End public: + + QgsVectorLayer* __iter__(); +%MethodCode + sipRes = sipCpp; +%End + + SIP_PYOBJECT __next__(); +%MethodCode + QgsFeature* f = new QgsFeature; + if (sipCpp->nextFeature(*f)) + sipRes = sipConvertFromInstance(f, sipClass_QgsFeature, Py_None); + else + { + delete f; + PyErr_SetString(PyExc_StopIteration,""); + } +%End + + enum EditType { LineEdit, UniqueValues,