Re: [Qgis-developer] iterating over fields an values API 2.0

2014-02-19 Thread PIERRE Sylvain

Yes, I will do that

Sylvain


-Message d'origine-
De : Martin Dobias [mailto:wonder...@gmail.com] 
Envoyé : mardi 18 février 2014 16:05
À : PIERRE Sylvain
Cc : qgis-developer@lists.osgeo.org
Objet : Re: [Qgis-developer] iterating over fields an values API 2.0

On Tue, Feb 18, 2014 at 9:53 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote:


 Yes!
 That's it

 Thanks

 PS: Don't you think it should be clearly documented in the pyqgis cookbook?

Agreed. Would you mind preparing a pull request to fix that?

Thanks
Martin
___
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer


Re: [Qgis-developer] iterating over fields an values API 2.0

2014-02-18 Thread PIERRE Sylvain


Yes!
That's it

Thanks

PS: Don't you think it should be clearly documented in the pyqgis cookbook?


-Message d'origine-
De : Martin Dobias [mailto:wonder...@gmail.com] 
Envoyé : lundi 17 février 2014 18:43
À : PIERRE Sylvain
Cc : qgis-developer@lists.osgeo.org
Objet : Re: [Qgis-developer] iterating over fields an values API 2.0

On Mon, Feb 17, 2014 at 10:36 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote:


 When iterating over vector features like this:

 fields = layer.pendingFields()
   field_names = [field.name() for field in fields]
   for elem in layer.getFeatures():
   atr = dict(zip(field_names, elem.attributes()))

 returns this:

 {PyQt4.QtCore.QString(u'off_set'): PyQt4.QtCore.QVariant object at
 0x05115C70, PyQt4.QtCore.QString(u'code'): PyQt4.QtCore.QVariant 
 0x05115C70object at
 0x05115BC8, PyQt4.QtCore.QString(u'pk'): PyQt4.QtCore.QVariant 
 0x05115BC8object at
 0x05115C00, PyQt4.QtCore.QString(u'id'): PyQt4.QtCore.QVariant 
 0x05115C00object at
 0x05115B90, PyQt4.QtCore.QString(u'annee'): PyQt4.QtCore.QVariant 
 0x05115B90object
 at 0x05115CA8, PyQt4.QtCore.QString(u'id_anom'): 
 PyQt4.QtCore.QVariant object at 0x05115B58, 
 PyQt4.QtCore.QString(u'fk_position'):
 PyQt4.QtCore.QVariant object at 0x05115C38,
 PyQt4.QtCore.QString(u'resolu'): PyQt4.QtCore.QVariant object at
 0x05115CE0}

 Instead of tupple like u'off_set': 1 ...

You have not set SIP api to version 2 to QString, QVariant and other Qt 
classes. QGIS python package tries to do that automatically for you, but if you 
imported PyQt4 python modules before QGIS python modules, that will not work. 
You have two options:
1. move import of QGIS module before PyQt4 2. keep the order of imports as is, 
but put these lines before import of PyQt4:
import sip
sip.setapi(QString, 2)
sip.setapi(QVariant, 2)


This is only necessary in standalone applications - inside QGIS application 
this initialization is done before any plugins are loaded, so this issue does 
not come up. Probably in qgis __init__.py there should be some code checking if 
there are not Qt classes imported with API v1 - in such case we could throw an 
exception.

Regards
Martin
___
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer


Re: [Qgis-developer] iterating over fields an values API 2.0

2014-02-18 Thread Martin Dobias
On Tue, Feb 18, 2014 at 9:53 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote:


 Yes!
 That's it

 Thanks

 PS: Don't you think it should be clearly documented in the pyqgis cookbook?

Agreed. Would you mind preparing a pull request to fix that?

Thanks
Martin
___
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer


Re: [Qgis-developer] iterating over fields an values API 2.0

2014-02-17 Thread Martin Dobias
On Mon, Feb 17, 2014 at 10:36 PM, PIERRE Sylvain sylvain.pie...@cg67.fr wrote:


 When iterating over vector features like this:

 fields = layer.pendingFields()
   field_names = [field.name() for field in fields]
   for elem in layer.getFeatures():
   atr = dict(zip(field_names, elem.attributes()))

 returns this:

 {PyQt4.QtCore.QString(u'off_set'): PyQt4.QtCore.QVariant object at
 0x05115C70, PyQt4.QtCore.QString(u'code'): PyQt4.QtCore.QVariant object at
 0x05115BC8, PyQt4.QtCore.QString(u'pk'): PyQt4.QtCore.QVariant object at
 0x05115C00, PyQt4.QtCore.QString(u'id'): PyQt4.QtCore.QVariant object at
 0x05115B90, PyQt4.QtCore.QString(u'annee'): PyQt4.QtCore.QVariant object
 at 0x05115CA8, PyQt4.QtCore.QString(u'id_anom'): PyQt4.QtCore.QVariant
 object at 0x05115B58, PyQt4.QtCore.QString(u'fk_position'):
 PyQt4.QtCore.QVariant object at 0x05115C38,
 PyQt4.QtCore.QString(u'resolu'): PyQt4.QtCore.QVariant object at
 0x05115CE0}

 Instead of tupple like u'off_set': 1 ...

You have not set SIP api to version 2 to QString, QVariant and other
Qt classes. QGIS python package tries to do that automatically for
you, but if you imported PyQt4 python modules before QGIS python
modules, that will not work. You have two options:
1. move import of QGIS module before PyQt4
2. keep the order of imports as is, but put these lines before import of PyQt4:
import sip
sip.setapi(QString, 2)
sip.setapi(QVariant, 2)


This is only necessary in standalone applications - inside QGIS
application this initialization is done before any plugins are loaded,
so this issue does not come up. Probably in qgis __init__.py there
should be some code checking if there are not Qt classes imported with
API v1 - in such case we could throw an exception.

Regards
Martin
___
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer