Skip to content

API Internal Server Error when querying “Esri 10m Land Use” data #374

@Thimm

Description

@Thimm

I’m encountering an Internal Server Error when querying the Esri 10m Land Use dataset via the API.
The issue does not occur with the collection "esa-cci-lc", which suggests that the problem might be specific to the "io-lulc-annual-v02" collection.

The issue can be reproduced with the following code snippet:

import pystac_client
import planetary_computer

collection = "io-lulc-annual-v02" # it works with "esa-cci-lc"
date_range = "2017/2024"
geometry = {
    "type": "Polygon",
    "coordinates": (
        (
            (101.73491035020805, 4.696557725917117),
            (101.73491035020805, 4.694507651101134),
            (101.737283130389, 4.6945076511034),
            (101.73728313038987, 4.696557725917117),
            (101.73491035020805, 4.696557725917117),
        ),
    ),
}

catalog = pystac_client.Client.open(
    "https://planetarycomputer.microsoft.com/api/stac/v1/",
    modifier=planetary_computer.sign_inplace,
)
search = catalog.search(
    collections=[catalog.get_collection(collection)],
    intersects=geometry,
    datetime=date_range,
)
list(search.items())

Exception Traceback:

---------------------------------------------------------------------------
APIError                                  Traceback (most recent call last)
Cell In[116], [line 28](vscode-notebook-cell:?execution_count=116&line=28)
     [19](vscode-notebook-cell:?execution_count=116&line=19) catalog = pystac_client.Client.open(
     [20](vscode-notebook-cell:?execution_count=116&line=20)     "https://planetarycomputer.microsoft.com/api/stac/v1/",
     [21](vscode-notebook-cell:?execution_count=116&line=21)     modifier=planetary_computer.sign_inplace,
     [22](vscode-notebook-cell:?execution_count=116&line=22) )
     [23](vscode-notebook-cell:?execution_count=116&line=23) search = catalog.search(
     [24](vscode-notebook-cell:?execution_count=116&line=24)     collections=[catalog.get_collection(collection)],
     [25](vscode-notebook-cell:?execution_count=116&line=25)     intersects=geometry,
     [26](vscode-notebook-cell:?execution_count=116&line=26)     datetime=date_range,
     [27](vscode-notebook-cell:?execution_count=116&line=27) )
---> [28](vscode-notebook-cell:?execution_count=116&line=28) list(search.items())

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:694, in ItemSearch.items(self)
    [687](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:687) def items(self) -> Iterator[Item]:
    [688](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:688)     """Iterator that yields :class:`pystac.Item` instances for each item matching
    [689](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:689)     the given search parameters.
    [690](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:690) 
    [691](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:691)     Yields:
    [692](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:692)         Item : each Item matching the search criteria
    [693](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:693)     """
--> [694](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:694)     for item in self.items_as_dicts():
    [695](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:695)         # already signed in items_as_dicts
    [696](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:696)         yield Item.from_dict(item, root=self.client, preserve_dict=False)

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:705, in ItemSearch.items_as_dicts(self)
    [698](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:698) def items_as_dicts(self) -> Iterator[Dict[str, Any]]:
    [699](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:699)     """Iterator that yields :class:`dict` instances for each item matching
    [700](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:700)     the given search parameters.
    [701](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:701) 
    [702](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:702)     Yields:
    [703](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:703)         Item : each Item matching the search criteria
    [704](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:704)     """
--> [705](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:705)     for page in self.pages_as_dicts():
    [706](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:706)         for item in page.get("features", []):
    [707](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:707)             # already signed in pages_as_dicts
    [708](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:708)             yield item

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:737, in ItemSearch.pages_as_dicts(self)
    [735](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:735) if isinstance(self._stac_io, StacApiIO):
    [736](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:736)     num_items = 0
--> [737](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:737)     for page in self._stac_io.get_pages(
    [738](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:738)         self.url, self.method, self.get_parameters()
    [739](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:739)     ):
    [740](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:740)         call_modifier(self.modifier, page)
    [741](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/item_search.py:741)         features = page.get("features", [])

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:308, in StacApiIO.get_pages(self, url, method, parameters)
    [296](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:296) def get_pages(
    [297](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:297)     self,
    [298](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:298)     url: str,
    [299](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:299)     method: Optional[str] = None,
    [300](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:300)     parameters: Optional[Dict[str, Any]] = None,
    [301](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:301) ) -> Iterator[Dict[str, Any]]:
    [302](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:302)     """Iterator that yields dictionaries for each page at a STAC paging
    [303](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:303)     endpoint, e.g., /collections, /search
    [304](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:304) 
    [305](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:305)     Return:
    [306](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:306)         Dict[str, Any] : JSON content from a single page
    [307](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:307)     """
--> [308](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:308)     page = self.read_json(url, method=method, parameters=parameters)
    [309](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:309)     if not (page.get("features") or page.get("collections")):
    [310](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:310)         return None

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:205, in StacIO.read_json(self, source, *args, **kwargs)
    [188](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:188) def read_json(self, source: HREF, *args: Any, **kwargs: Any) -> dict[str, Any]:
    [189](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:189)     """Read a dict from the given source.
    [190](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:190) 
    [191](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:191)     See :func:`StacIO.read_text <pystac.StacIO.read_text>` for usage of
   (...)
    [203](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:203)         given source.
    [204](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:204)     """
--> [205](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:205)     txt = self.read_text(source, *args, **kwargs)
    [206](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac/stac_io.py:206)     return self.json_loads(txt)

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:171, in StacApiIO.read_text(self, source, *args, **kwargs)
    [169](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:169) href = str(source)
    [170](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:170) if _is_url(href):
--> [171](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:171)     return self.request(href, *args, **kwargs)
    [172](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:172) else:
    [173](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:173)     with open(href) as f:

File ~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:223, in StacApiIO.request(self, href, method, headers, parameters)
    [221](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:221)     raise APIError(str(err))
    [222](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:222) if resp.status_code != 200:
--> [223](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:223)     raise APIError.from_response(resp)
    [224](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:224) try:
    [225](https://file+.vscode-resource.vscode-cdn.net/Users/thimmzwiener/farmon/farmon-webapp/regenrate_azure_function_app/src/reports/data/~/miniforge3/envs/farmon/lib/python3.10/site-packages/pystac_client/stac_api_io.py:225)     return resp.content.decode("utf-8")

APIError: Internal Server Error

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions