[QGIS-Developer] Inconsistency in QgsServerRequest parameter handling ?

David Marteau dmarteau at 3liz.com
Wed Apr 10 14:37:49 PDT 2019


> Le 10 avr. 2019 à 23:21, pblottiere <paul.blottiere at oslandia.com> a écrit :
> 
> Hi David,
> 
> 
>> If you try:
>> 
>> request.setParameter('FOOBAR','foobar')
>> 
>> then
>> 
>> request.parameter('FOOBAR')
>> 
>> then you get an empty string,
>>> Even if I add  an 'allowed' parameter by hand:
>>> 
>>>> request.setParameter('FI_POINT_TOLERANCE','25')
> 
> Actually, QgsServerRequest and QgsServerParameters are high level
> classes which are not aware of valid parameters defined in services. For
> example, FI_POINT_TOLERANCE is a valid parameter in WMS service, and
> defined within the WMS module. But it's totally encapsulated within the
> module (a shared library so), and considered as unknown from
> QgsServerParameters. The only valid parameters from the
> QgsServerParameters point of view are those which are common for all
> services (WMS, WFS, and so on) like SERVICE, VERSION, REQUEST, ...
> 
> If you want to retrieve the full query from the request without any
> filter on valid parameters, you may use request.url(). However, I think
> we could probably add a fallback on the `parameter()` method to return
> invalid parameters too. I'll do a PR tomorrow and I'll ping you to check
> if the behaviour suits you.
> 
> 

Yes, this is what I was thinking about Looking at the code: maybe adding a lookup to the 'unmanaged' parameters if the code is not found should restore the symmetry setParameter/parameter.

I'm standing from the python plugin's point of view - services and filters: plugins are expecting some behavior when setting/getting parameters. If a plugin override a parameter it can only doing it using the requestHandler which is aware
only of the  base QgsServerParameters owned by the  QgsServerRequest instance, so they should be able to set/get parameters in a transparent way.

Regards

David.

> Regards,
> 
> Paul
> 
> 
> On 4/10/19 10:37 PM, David Marteau wrote:
>> To add some precision:
>> 
>> Even if I add  an 'allowed' parameter by hand:
>> 
>>> request.setParameter('FI_POINT_TOLERANCE','25')
>> then
>> 
>>> request.parameter('FI_POINT_TOLERANCE')
>> return an empty string
>> 
>>> Le 10 avr. 2019 à 19:46, David Marteau <dmarteau at 3liz.com> a écrit :
>>> 
>>> 
>>> Hi devs,
>>> 
>>> I found a strange and seemingly inconsistent behavior when accessing QgsServerRequest parameters:
>>> 
>>> If you try:
>>> 
>>> request.setParameter('FOOBAR','foobar')
>>> 
>>> then
>>> 
>>> request.parameter('FOOBAR')
>>> 
>>> then you get an empty string,
>>> 
>>> If you call
>>> 
>>> request.parameters() 
>>> 
>>> Then your get a dictionary with all the values previously set.
>>> 
>>> At first glance it seems that request.setParameter enforce use of a limited set of keys (SERVICE…..
>>> 
>>> This does not seem very consistent with the fact parameter() should return any value previously set with setParameter and also the fact that
>>> request.parameters()  return all previously defined  parameters key/values .
>>> 
>>> Furthemore this may be  problematic with plugins that define services in python and thus may define any other set of allowed parameters.
>>> 
>>> Should I open an issue ?
>>> 
>>> David
> 



More information about the QGIS-Developer mailing list