[QGIS-Developer] Common PyQGIS functions for QGIS 3

Nyall Dawson nyall.dawson at gmail.com
Wed Feb 20 01:28:50 PST 2019


On Wed, 20 Feb 2019 at 18:38, Thomas Baumann <rdbath.regiodata at gmail.com> wrote:
>
> Hi qgis-devs,
>
> I recently updated 15 QGIS-plugins to be QGIS3-ready. Most of them were self written (in house) plugins but four of them were also plugins from the official repository which were written by someone else.
>
> I noticed that there are severals tasks that have many plugins in common like:
> - load a vectorlayer

This is a single line via the existing API :

    vl = QgsVectorLayer( '/home/me/my.shp' , 'my_layer' )

I'm curious to hear how this could be improved?

> - add a layer to the layertree
> - iterate through all (visible?) layers of the layertree

# all layers
layers = [l.layer() for l in QgsProject.instance().layerTreeRoot().findLayers()]
# visible layers
visible_layers = [l.layer() for l in
QgsProject.instance().layerTreeRoot().findLayers() if l.isVisible()]

Ok, not super-obvious in this case, but still quite concise ;)

> - show a message with different levels (info, warning, critical)

iface.messageBar().pushWarning('blah','some message')
iface.messageBar().pushInfo('blah','some message')
iface.messageBar().pushCritical('blah','some message')

> - log messages
QgsMessageLog.logMessage('my plugin','something', Qgis.Critical)

> - reading setting, writing settings

The QgsSettings class should make this straightforward

I'm not saying we can't improve the PyQGIS experience, but I don't
personally see these as good candidates.

I think we have a LOT of work to do with things like:
- throwing proper exceptions instead of crashing/returning "None"
values/returning "invalid" objects (e.g. QgsGeometry.fromWkt should
ideally raise an exception for invalid wkt instead of returning a null
geometry)
- providing Python-esque things like __repr__ methods, __len__, []
operators (which behave in a python style, e.g. with -1 returning the
last item), iterators, etc
- providing more "context managers" (e.g. with .... : #something )

(Definitely don't take this as a "don't proceed"... there is a VERY
STRONG need to improve the PyQGIS API/Documentation/examples, and this
would be very valuable work!)

Nyall

>
>
>
> Wouldn't it be possible to provide such a collection not only from privat persons/projects but from the QGIS-project itself so users could add common functions?
> I think the chances would be higher that such a "official" collection would be used in the long run and constantly extended.
>
> Apart from the fact that developers could save time while writing their plugins this could perhaps also help to improve the overall quality of the qgis-plugins as there would probably be several persons who could/would countercheck these common functions to make sure they are well written.
>
> regards,
> Thomas
>
> PS: I asked something similar also on gis.stackexchange recently:
>
> https://gis.stackexchange.com/questions/311755/looking-for-common-pyqgis-functions-for-qgis-3
>
>
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer


More information about the QGIS-Developer mailing list