Hi Oliver,<div><br></div><div>I managed to stick it in BaseRequest (optional kwarg, uppercase_keys) which then sets an instance attribute after constructing the params, with a few other changes to expose the config via HTTPClient. My fork is here though its still missing test cases - <a href="https://bitbucket.org/adonm/mapproxy/overview">https://bitbucket.org/adonm/mapproxy/overview</a></div>

<div><br></div><div>1st source had uppercase_keys = true, second didn&#39;t =)</div><div><br></div><div><div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><a href="http://www2.landgate.wa.gov.au">www2.landgate.wa.gov.au</a> - - [29/Mar/2011:08:00:11 ] &quot;GET /ows/wmsCsMosaic?LAYERS=LGATE-V001&amp;WIDTH=512&amp;VERSION=1.1.1&amp;BBOX=123.75,-33.75,135.0,-22.5&amp;SERVICE=WMS&amp;FORMAT=image%2Fjpeg&amp;STYLES=&amp;SRS=EPSG%3A4326&amp;REQUEST=GetMap&amp;HEIGHT=512 HTTP/1.1&quot; 200 - &quot;-&quot; &quot;&quot;</font></div>

<div><font class="Apple-style-span" face="&#39;courier new&#39;, monospace"><a href="http://www2.landgate.wa.gov.au">www2.landgate.wa.gov.au</a> - - [29/Mar/2011:08:01:40 ] &quot;GET /ows/wmsCsCadastre?styles=&amp;format=image%2Fpng&amp;height=512&amp;bbox=-180.0,-90.0,180.0,270.0&amp;transparent=True&amp;layers=LGATE-082&amp;service=WMS&amp;width=512&amp;request=GetMap&amp;srs=EPSG%3A4326&amp;version=1.1.1 HTTP/1.1&quot; 200 - &quot;-&quot; &quot;&quot;</font></div>

</div><div><br></div><div>I also noticed the new wms_tags stuff broke on integer keys in the dictionary (integers being non iterable) so put in a check to make sure the key was a basestring: <a href="https://bitbucket.org/adonm/mapproxy/changeset/ec6eccb88f22#chg-mapproxy/config/loader.py">https://bitbucket.org/adonm/mapproxy/changeset/ec6eccb88f22#chg-mapproxy/config/loader.py</a></div>

<div><br></div><div><a href="https://bitbucket.org/adonm/mapproxy/changeset/ec6eccb88f22#chg-mapproxy/config/loader.py"></a>When I get a chance I&#39;ll finish some tests and submit a proper pull request.<br><div><br></div>

<div><a href="https://bitbucket.org/adonm/mapproxy/changeset/ec6eccb88f22#chg-mapproxy/config/loader.py"></a>Kind Regards,</div><div>Adon<br><div><div><br><div><div class="gmail_quote">On 28 March 2011 22:03, Oliver Tonnhofer <span dir="ltr">&lt;<a href="mailto:olt@omniscale.de">olt@omniscale.de</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im"><br>
On 27.03.2011, at 04:33, Adon Metcalfe wrote:<br>
&gt; I&#39;m not exactly sure how to go about making an option that gets passed all the way through to the RequestParams object (maybe override query_string with a new WMSMapUpperRequestParams class and add a new source type (wms_upper?) that uses it over WMSMapRequestParams for sources requiring uppercase parameters?)<br>


<br>
</div>The *RequestParams classes are subclassed a few times, WMS130MapRequestParams is based on WMSMapRequestParams, etc. So thats not feasible. I would put that into the WMSClient and then either tranform the URL, or call a new method of RequestParams (e.g request_url(uppercase_keys=True)).<br>


<br>
Regards,<br>
Oliver<br>
<font color="#888888"><br>
--<br>
Oliver Tonnhofer    | Omniscale GmbH &amp; Co KG    | <a href="http://omniscale.de" target="_blank">http://omniscale.de</a><br>
<a href="http://mapproxy.org" target="_blank">http://mapproxy.org</a> | <a href="https://bitbucket.org/olt" target="_blank">https://bitbucket.org/olt</a><br>
<br>
<br>
<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Adon Metcalfe<br>Labyrinth Data Services Pty Ltd<br><a href="http://www.labyrinthdata.net.au">http://www.labyrinthdata.net.au</a><br>
</div></div></div></div></div>