<div dir="ltr"><div>I have mapproxy v1.5 set up using multiple TMS as source with each source having a polygon shapefile as a coverage.  I then use a cache to assemble the source TMS together with storage disabled.  I've noticed that when I make a request for one of the caches outside of the defined boundary MapProxy will generate an IO error:</div>
<div><br></div><div>Am I doing something wrong or is this related to the fix - "catch IOErrors when PIL/Pillow can't identify image file"</div><div><br></div><div>Thanks</div><div><br></div><div>2014-04-28 13:00:43 [7465] [ERROR] Error handling request</div>
<div>Traceback (most recent call last):</div><div>  File "/usr/lib/python2.6/site-packages/gunicorn/workers/async.py", line 45, in handle</div><div>    self.handle_request(listener, req, client, addr)</div><div>
  File "/usr/lib/python2.6/site-packages/gunicorn/workers/async.py", line 93, in handle_request</div><div>    respiter = self.wsgi(environ, resp.start_response)</div><div>  File "/usr/lib/python2.6/site-packages/mapproxy/wsgiapp.py", line 181, in __call__</div>
<div>    return resp(environ, start_response)</div><div>  File "/usr/lib64/python2.6/contextlib.py", line 34, in __exit__</div><div>    self.gen.throw(type, value, traceback)</div><div>  File "/usr/lib/python2.6/site-packages/mapproxy/util/__init__.py", line 42, in local_base_config</div>
<div>    yield</div><div>  File "/usr/lib/python2.6/site-packages/mapproxy/wsgiapp.py", line 181, in __call__</div><div>    return resp(environ, start_response)</div><div>  File "/usr/lib/python2.6/site-packages/mapproxy/response.py", line 151, in __call__</div>
<div>    self.response.seek(0, 2) # to EOF</div><div>ValueError: I/O operation on closed file</div><div><br></div><div>#######################################################</div><div><br></div><div>caches:</div><div><div>
  ORTHO2006:</div><div>    grids: [spherical_mercator]</div><div>    sources: [foo1_tms, foo2_tms]</div><div>    meta_buffer: 0</div><div>    meta_size: [1,1]</div><div>    format: image/png</div><div>    disable_storage: true</div>
</div><div><br></div><div>sources:</div><div> foo1_tms:<br></div><div><div>    type: tile</div><div>    url: '<a href="http://localhost/mapcache_fbstiles/tms/1.0.0/foo1@gmaps/%(tms_path)s.xxx">http://localhost/mapcache_fbstiles/tms/1.0.0/foo1@gmaps/%(tms_path)s.xxx</a>'</div>
<div>    grid: spherical_mercator</div><div>    transparent: true</div><div>    on_error:</div><div>      other:</div><div>        response: transparent</div><div>        cache: false</div><div>      404:</div><div>        response: transparent</div>
<div>        cache: false</div><div>    coverage:</div><div>      datasource: '/home/caches/src/boundaries/web_mercator/foo1_boundary_epsg3857.shp'</div><div>      srs: EPSG:3857</div></div><div><br></div><div><div>
 foo2_tms:<br></div><div><div>    type: tile</div><div>    url: '<a href="http://localhost/mapcache_fbstiles/tms/1.0.0/foo2@gmaps/%(tms_path)s.xxx">http://localhost/mapcache_fbstiles/tms/1.0.0/foo2@gmaps/%(tms_path)s.xxx</a>'</div>
<div>    grid: spherical_mercator</div><div>    transparent: true</div><div>    on_error:</div><div>      other:</div><div>        response: transparent</div><div>        cache: false</div><div>      404:</div><div>        response: transparent</div>
<div>        cache: false</div><div>    coverage:</div><div>      datasource: '/home/caches/src/boundaries/web_mercator/foo2_boundary_epsg3857.shp'</div><div>      srs: EPSG:3857</div></div></div><div><br></div><div>
<br></div><div><br></div><div><br></div><div><br></div></div>