[QGIS-Developer] pyqgis - layer.saveDefaultStyle() for PostGIS layers

Etienne Trimaille etienne.trimaille at gmail.com
Fri May 4 05:30:15 PDT 2018


For your information, with the big hint from Matthias in the last email,
it's now fixed in 2.18.20. I checked in QGIS 3, it was working fine already.

2017-09-26 9:07 GMT-04:00 Matthias Kuhn <matthias at opengis.ch>:

> For 2.18 it should be ok to make it /InOut/ (there was no return value
> before, so it shouldn't break anything).
> For 3.0 this can be made /Out/ as proposed.
>
> Matthias
>
> On 09/26/2017 12:06 PM, Luigi Pirelli wrote:
> > there is a SIP specification error
> > https://github.com/qgis/QGIS/blob/release-2_18/python/core/
> qgsvectorlayer.sip#L492
> > should be  QString &msgError /out/ );
> >
> > that's the reason that error is not returned in the python side => I
> > suppose SIP would change C++ api in:
> > msg = saveStyleToDatabase( name, description, useAsDefault,
> uiFileContent)
> > Luigi Pirelli
> >
> > ************************************************************
> **************************************
> > * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
> > * LinkedIn: https://www.linkedin.com/in/luigipirelli
> > * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
> > * GitHub: https://github.com/luipir
> > * Mastering QGIS 2nd Edition:
> > * https://www.packtpub.com/big-data-and-business-
> intelligence/mastering-qgis-second-edition
> > ************************************************************
> **************************************
> >
> >
> > On 25 September 2017 at 16:21, kimaidou <kimaidou at gmail.com> wrote:
> >> I have tried another method
> >>
> >> * first add default style into DB via UI -> it works
> >>
> >> * the use console to create a new, not default, style
> >> msg = ''
> >> layer.saveStyleToDatabase( "a new style", "some description", False,
> None,
> >> msg );
> >>
> >> It does not work (not new line created, and msg remains empty. No log
> in the
> >> database, which means NO query has been sent (I have change postgresql
> >> config to log all requests).
> >>
> >> But the following method works
> >> layer.listStylesInDatabase()
> >>
> >> And a new line appears in the postgresql log
> >> 2017-09-25 16:19:18.248 CEST [8984] mdouchin at qgis LOG:  00000:
> duration:
> >> 0.217 ms  statement: SELECT id,styleName,description FROM layer_styles
> WHERE
> >> NOT (f_table_catalog='qgis' AND f_table_schema='sup' AND
> >> f_table_name='geo_commune' AND f_geometry_column='geom') ORDER BY
> >> update_time DESC
> >>
> >> It seems the method saveStyleToDatabase returns with no error, which
> can be
> >> caused by 2 reasons
> >> https://qgis.org/api/2.18/qgsvectorlayer_8cpp_source.html#l04347
> >>
> >>  4369   this->exportNamedStyle( qmlDocument, msgError );
> >>  4370   if ( !msgError.isNull() )
> >>  4371   {
> >>  4372     return;
> >>  4373   }
> >>  4374   qmlStyle = qmlDocument.toString();
> >>  4375
> >>  4376   this->exportSldStyle( sldDocument, msgError );
> >>  4377   if ( !msgError.isNull() )
> >>  4378   {
> >>  4379     return;
> >>  4380   }
> >>
> >> /me investigates
> >>
> >> 2017-09-25 15:50 GMT+02:00 Jorge Gustavo Pereira Bastos Rocha
> >> <jgr at di.uminho.pt>:
> >>>
> >>> Hi,
> >>>
> >>> It already happened to me. The first user to save a style became the
> owner
> >>> of the table. No other users were able to write on the layer_style
> table,
> >>> because there were DEFAULT PRIVILEGES defined.
> >>>
> >>> Can you check the postgrsql log to see if there is any problem related
> >>> with permissions?
> >>>
> >>> Regards,
> >>>
> >>> Jorge Gustavo
> >>>
> >>> ________________________________________
> >>> De: QGIS-Developer [qgis-developer-bounces at lists.osgeo.org] em nome de
> >>> kimaidou [kimaidou at gmail.com]
> >>> Enviado: 25 de Setembro de 2017 14:23
> >>> Para: Luigi Pirelli
> >>> Cc: qgis-developer at lists.osgeo.org
> >>> Assunto: Re: [QGIS-Developer] pyqgis - layer.saveDefaultStyle() for
> >>> PostGIS     layers
> >>>
> >>> Hi,
> >>>
> >>> @ Tom : I really would like to trust QGIS method instead of managing
> >>> manually different providers.
> >>>
> >>> @ Luigi
> >>> No error message, even worse : i got a message telling everything went
> >>> well ;)
> >>>
> >>> layer.saveDefaultStyle()
> >>> (u'The style dbname=\'qgis\' host=localhost port=5432 user=\'mdouchin\'
> >>> sslmode=disable key=\'ogc_fid\' estimatedmetadata=true srid=2154
> >>> type=MultiPolygon table="sup"."geo_commune" (geom) sql= was updated in
> the
> >>> database.', True)
> >>>
> >>> But the line is not created in the layer_styles table.
> >>>
> >>> Michaƫl
> >>>
> >>>
> >>> 2017-09-25 14:48 GMT+02:00 Luigi Pirelli
> >>> <luipir at gmail.com<mailto:luipir at gmail.com>>:
> >>> from the code:
> >>>
> >>> mLayer->saveStyleToDatabase and mLayer->saveDefaultStyle
> >>>
> >>> and in
> >>> QString QgsMapLayer::saveDefaultStyle( bool & theResultFlag )
> >>> {
> >>>   return saveNamedStyle( styleURI(), theResultFlag );
> >>> }
> >>>
> >>> => seems you are doing correct.
> >>>
> >>> any log message?
> >>>
> >>> ******************************************
> >>>
> >>>
> >>> void QgsVectorLayerProperties::saveDefaultStyle_clicked()
> >>> {
> >>>   apply();
> >>>   QString errorMsg;
> >>>   if ( mLayer->dataProvider()->isSaveAndLoadStyleToDBSupported() )
> >>>   {
> >>>     QMessageBox askToUser;
> >>>     askToUser.setText( tr( "Save default style to: " ) );
> >>>     askToUser.setIcon( QMessageBox::Question );
> >>>     askToUser.addButton( tr( "Cancel" ), QMessageBox::RejectRole );
> >>>     askToUser.addButton( tr( "Local database" ), QMessageBox::NoRole );
> >>>     askToUser.addButton( tr( "Datasource database" ),
> QMessageBox::YesRole
> >>> );
> >>>
> >>>     switch ( askToUser.exec() )
> >>>     {
> >>>       case 0:
> >>>         return;
> >>>       case 2:
> >>>         mLayer->saveStyleToDatabase( "", "", true, "", errorMsg );
> >>>         if ( errorMsg.isNull() )
> >>>         {
> >>>           return;
> >>>         }
> >>>         break;
> >>>       default:
> >>>         break;
> >>>     }
> >>>   }
> >>>
> >>>   bool defaultSavedFlag = false;
> >>>   errorMsg = mLayer->saveDefaultStyle( defaultSavedFlag );
> >>>   if ( !defaultSavedFlag )
> >>>   {
> >>>     QMessageBox::warning( this, tr( "Default Style" ), errorMsg );
> >>>   }
> >>> }
> >>> Luigi Pirelli
> >>>
> >>>
> >>> ************************************************************
> **************************************
> >>> * Boundless QGIS Support/Development: lpirelli AT boundlessgeo DOT com
> >>> * LinkedIn: https://www.linkedin.com/in/luigipirelli
> >>> * Stackexchange: http://gis.stackexchange.com/
> users/19667/luigi-pirelli
> >>> * GitHub: https://github.com/luipir
> >>> * Mastering QGIS 2nd Edition:
> >>> *
> >>> https://www.packtpub.com/big-data-and-business-
> intelligence/mastering-qgis-second-edition
> >>>
> >>> ************************************************************
> **************************************
> >>>
> >>>
> >>> On 25 September 2017 at 13:44, Tom Chadwin
> >>> <tom.chadwin at nnpa.org.uk<mailto:tom.chadwin at nnpa.org.uk>> wrote:
> >>>> Perhaps you have to do it manually via a PostGIS query matching
> >>>> f_table_catalog, f_table_schema, and f_table_name, and updating
> styleqml
> >>>> and
> >>>> stylesld?
> >>>>
> >>>> Tom
> >>>>
> >>>>
> >>>>
> >>>> -----
> >>>> Buy Pie Spy: Adventures in British pastry 2010-11 on Amazon
> >>>> --
> >>>> Sent from:
> >>>> http://osgeo-org.1560.x6.nabble.com/QGIS-Developer-f4099106.html
> >>>> _______________________________________________
> >>>> QGIS-Developer mailing list
> >>>> QGIS-Developer at lists.osgeo.org<mailto: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
> >>>
> >>
> > _______________________________________________
> > 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
> >
> _______________________________________________
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20180504/6c8d6e11/attachment.html>


More information about the QGIS-Developer mailing list