58#if (SIP_VERSION >= 0x040900 && SIP_VERSION < 0x040c01)
59#define sipType_QVariant ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QVariant))
65 Q_PROPERTY(
QgsAttributes attributes READ attributes WRITE setAttributes )
66 Q_PROPERTY(
QgsFields fields READ fields WRITE setFields )
67 Q_PROPERTY(
QgsGeometry geometry READ geometry WRITE setGeometry )
72 SIP_PYOBJECT __iter__();
75 PyObject *attrs = sipConvertFromType( &attributes, sipType_QgsAttributes, Py_None );
76 sipRes = PyObject_GetIter( attrs );
79 SIP_PYOBJECT __getitem__(
int key );
82 if ( a0 < 0 || a0 >= attrs.count() )
84 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
89 QVariant *v =
new QVariant( attrs.at( a0 ) );
90 sipRes = sipConvertFromNewType( v, sipType_QVariant, Py_None );
94 SIP_PYOBJECT __getitem__(
const QString &name );
96 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
99 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
104 QVariant *v =
new QVariant( sipCpp->attribute( fieldIdx ) );
105 sipRes = sipConvertFromNewType( v, sipType_QVariant, Py_None );
109 void __setitem__(
int key, QVariant value / GetWrapper / );
113 if ( a1Wrapper == Py_None )
115 rv = sipCpp->setAttribute( a0, QVariant( QVariant::Int ) );
119 rv = sipCpp->setAttribute( a0, *a1 );
124 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
129 void __setitem__(
const QString &key, QVariant value / GetWrapper / );
131 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
132 if ( fieldIdx == -1 )
134 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
139 if ( a1Wrapper == Py_None )
141 sipCpp->setAttribute( *a0, QVariant( QVariant::Int ) );
145 sipCpp->setAttribute( fieldIdx, *a1 );
150 void __delitem__(
int key );
152 if ( a0 >= 0 && a0 < sipCpp->attributes().count() )
153 sipCpp->deleteAttribute( a0 );
156 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
161 void __delitem__(
const QString &name );
163 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
164 if ( fieldIdx == -1 )
166 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
170 sipCpp->deleteAttribute( fieldIdx );
173 long __hash__()
const;
175 sipRes =
qHash( *sipCpp );
267 QVariantMap attributeMap()
const;
281 SIP_PYOBJECT attributeMap() const
SIP_TYPEHINT( Dict[
str, Optional[
object]] );
283 const
int fieldSize = sipCpp->fields().size();
284 const
int attributeSize = sipCpp->attributes().size();
285 if ( fieldSize == 0 && attributeSize != 0 )
287 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Field definition has not been set for feature" ).toUtf8().constData() );
290 else if ( fieldSize != attributeSize )
292 PyErr_SetString( PyExc_ValueError, QStringLiteral(
"Feature attribute size (%1) does not match number of fields (%2)" ).arg( attributeSize ).arg( fieldSize ).toUtf8().constData() );
297 QVariantMap *v =
new QVariantMap( sipCpp->attributeMap() );
298 const sipTypeDef *qvariantmap_type = sipFindType(
"QMap<QString,QVariant>" );
299 sipRes = sipConvertFromNewType( v, qvariantmap_type, Py_None );
308 int attributeCount()
const;
340 bool setAttribute(
int field,
const QVariant &attr );
367 bool setAttribute(
int field,
const QVariant &attr / GetWrapper / );
371 if ( a1Wrapper == Py_None )
373 rv = sipCpp->setAttribute( a0, QVariant( QVariant::Int ) );
377 rv = sipCpp->setAttribute( a0, *a1 );
382 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
399 void initAttributes(
int fieldCount );
414 void resizeAttributes(
int fieldCount );
422 void padAttributes(
int count );
433 void deleteAttribute(
int field );
460 void deleteAttribute(
int field );
462 if ( a0 >= 0 && a0 < sipCpp->attributes().count() )
463 sipCpp->deleteAttribute( a0 );
466 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
480 bool isValid()
const;
489 void setValid(
bool validity );
495 bool hasGeometry()
const;
547 void setGeometry( std::unique_ptr< QgsAbstractGeometry > geometry );
551 sipCpp->setGeometry( std::unique_ptr< QgsAbstractGeometry>( a0 ) );
560 void clearGeometry();
592 bool setAttribute(
const QString &name,
const QVariant &value );
621 void setAttribute(
const QString &name,
const QVariant &value / GetWrapper / );
623 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
624 if ( fieldIdx == -1 )
626 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
631 if ( a1Wrapper == Py_None )
633 sipCpp->setAttribute( *a0, QVariant( QVariant::Int ) );
637 sipCpp->setAttribute( fieldIdx, *a1 );
654 bool deleteAttribute(
const QString &name );
686 bool deleteAttribute(
const QString &name );
688 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
689 if ( fieldIdx == -1 )
691 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
697 sipCpp->deleteAttribute( fieldIdx );
714 QVariant attribute(
const QString &name )
const;
742 SIP_PYOBJECT attribute(
const QString &name )
const;
744 int fieldIdx = sipCpp->fieldNameIndex( *a0 );
745 if ( fieldIdx == -1 )
747 PyErr_SetString( PyExc_KeyError, a0->toLatin1() );
752 QVariant *v =
new QVariant( sipCpp->attribute( fieldIdx ) );
753 sipRes = sipConvertFromNewType( v, sipType_QVariant, Py_None );
767 QVariant attribute(
int fieldIdx )
const;
794 SIP_PYOBJECT attribute(
int fieldIdx )
const;
797 if ( a0 < 0 || a0 >= sipCpp->attributes().count() )
799 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
804 QVariant *v =
new QVariant( sipCpp->attribute( a0 ) );
805 sipRes = sipConvertFromNewType( v, sipType_QVariant, Py_None );
820 bool isUnsetValue(
int fieldIdx )
const;
830 bool isUnsetValue(
int fieldIdx )
const;
833 if ( a0 < 0 || a0 >= sipCpp->attributes().count() )
835 PyErr_SetString( PyExc_KeyError, QByteArray::number( a0 ) );
840 sipRes = sipCpp->isUnsetValue( a0 );
871 int fieldNameIndex(
const QString &fieldName )
const;
882 int approximateMemoryUsage()
const;
885 operator QVariant()
const
887 return QVariant::fromValue( *
this );
892 QExplicitlySharedDataPointer<QgsFeaturePrivate> d;