Skip to content

Commit f794d67

Browse files
authored
Gracefully catch tile not found (#1937)
* Gracefully catch tile not found * Fix flake8
1 parent 70b33f0 commit f794d67

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

pygeoapi/api/tiles.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
from pygeoapi.provider.base import (
5050
ProviderGenericError, ProviderTypeError
5151
)
52+
from pygeoapi.provider.tile import ProviderTileNotFoundError
5253

5354
from pygeoapi.util import (
5455
get_provider_by_type, to_json, filter_dict_by_key_value,
@@ -256,6 +257,10 @@ def get_collection_tiles_data(
256257
return api.get_exception(
257258
HTTPStatus.BAD_REQUEST, headers, format_,
258259
'InvalidParameterValue', msg)
260+
except ProviderTileNotFoundError:
261+
msg = 'Tile not found'
262+
LOGGER.info(msg)
263+
return headers, HTTPStatus.NOT_FOUND, msg
259264
except ProviderGenericError as err:
260265
return api.get_exception(
261266
err.http_status_code, headers, request.format,

pygeoapi/provider/mvt_elastic.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from pygeoapi.provider.base import (ProviderConnectionError,
3636
ProviderGenericError,
3737
ProviderInvalidQueryError)
38+
from pygeoapi.provider.tile import ProviderTileNotFoundError
3839
from pygeoapi.models.provider.base import (
3940
TileSetMetadata, TileMatrixSetEnum, LinkType)
4041
from pygeoapi.util import is_url, url_join
@@ -176,6 +177,10 @@ def get_tiles(self, layer=None, tileset=None,
176177
data = {'fields': ['*']}
177178
session.get(base_url)
178179
resp = session.get(f'{base_url}/{layer}/{z}/{y}/{x}{url_query}', json=data) # noqa
180+
181+
if resp.status_code == 404:
182+
raise ProviderTileNotFoundError
183+
179184
resp.raise_for_status()
180185
return resp.content
181186
except requests.exceptions.RequestException as e:

pygeoapi/provider/mvt_proxy.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from pygeoapi.provider.base import (ProviderConnectionError,
3636
ProviderGenericError,
3737
ProviderInvalidQueryError)
38+
from pygeoapi.provider.tile import ProviderTileNotFoundError
3839
from pygeoapi.models.provider.base import (
3940
TileSetMetadata, LinkType)
4041
from pygeoapi.util import is_url, url_join
@@ -173,6 +174,9 @@ def get_tiles(self, layer=None, tileset=None,
173174
else:
174175
resp = session.get(f'{base_url}/{layer}/{z}/{y}/{x}{url_query}') # noqa
175176

177+
if resp.status_code == 404:
178+
raise ProviderTileNotFoundError
179+
176180
resp.raise_for_status()
177181
return resp.content
178182
except requests.exceptions.RequestException as e:

pygeoapi/provider/mvt_tippecanoe.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ def get_tiles_from_url(self, layer=None, tileset=None,
186186
with requests.Session() as session:
187187
session.get(base_url)
188188
resp = session.get(f'{base_url}/{layer}/{z}/{y}/{x}{extension}') # noqa
189+
190+
if resp.status_code == 404:
191+
raise ProviderTileNotFoundError
192+
189193
resp.raise_for_status()
190194
return resp.content
191195
except requests.exceptions.RequestException as e:

0 commit comments

Comments
 (0)