diff --git a/CHANGELOG.md b/CHANGELOG.md index b1423fda..7ff34b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +- Allow to write queryables [#698](https://github.com/stac-utils/pystac-client/pull/698) + ### Removed - Python 3.9 support [#724](https://github.com/stac-utils/pystac-client/pull/724) diff --git a/pystac_client/mixins.py b/pystac_client/mixins.py index 21babd90..2d84debb 100644 --- a/pystac_client/mixins.py +++ b/pystac_client/mixins.py @@ -67,3 +67,16 @@ def _get_queryables_href(self) -> str: link = self.get_single_link(QUERYABLES_REL) href = self._get_href(QUERYABLES_REL, link, QUERYABLES_ENDPOINT) return href + + def set_queryables( + self, queryables: Dict[str, Any], url: Optional[str] = None + ) -> None: + """Write a queryables to an endpoint. + + Defaults to the queryables href as defined by the STAC API extension. + """ + if self._stac_io is None: + raise APIError("API access is not properly configured (`_stac_io` not set)") + if url is None: + url = self._get_queryables_href() + self._stac_io.save_json(url, queryables) diff --git a/tests/cassettes/test_client/test_set_queryables.yaml b/tests/cassettes/test_client/test_set_queryables.yaml new file mode 100644 index 00000000..0f693fe1 --- /dev/null +++ b/tests/cassettes/test_client/test_set_queryables.yaml @@ -0,0 +1,107 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.31.0 + method: GET + uri: https://explorer.digitalearth.africa/stac/ + response: + body: + string: '{"type":"Catalog","id":"DEAfrica_data","stac_version":"1.0.0","description":"Configure + stac endpoint information in your Explorer `settings.env.py` file","links":[{"rel":"root","href":"https://explorer.digitalearth.africa/stac","type":"application/json","title":"Digital + Earth Africa"},{"rel":"self","href":"https://explorer.digitalearth.africa/stac","type":"application/json"},{"rel":"children","href":"https://explorer.digitalearth.africa/stac/collections","type":"application/json","title":"Collections"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/catalogs/arrivals","type":"application/json","title":"Arrivals"},{"rel":"search","href":"https://explorer.digitalearth.africa/stac/search","type":"application/json","title":"Item + Search"},{"rel":"http://www.opengis.net/def/rel/ogc/1.0/queryables","href":"https://explorer.digitalearth.africa/stac/queryables","type":"application/json","title":"Queryables"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/alos_palsar_mosaic","type":"application/json","title":"alos_palsar_mosaic"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/cci_landcover","type":"application/json","title":"cci_landcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/cgls_landcover","type":"application/json","title":"cgls_landcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask","type":"application/json","title":"crop_mask"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_central","type":"application/json","title":"crop_mask_central"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_eastern","type":"application/json","title":"crop_mask_eastern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_indian_ocean","type":"application/json","title":"crop_mask_indian_ocean"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_northern","type":"application/json","title":"crop_mask_northern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_sahel","type":"application/json","title":"crop_mask_sahel"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_southeast","type":"application/json","title":"crop_mask_southeast"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_southern","type":"application/json","title":"crop_mask_southern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_western","type":"application/json","title":"crop_mask_western"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_cop_30","type":"application/json","title":"dem_cop_30"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_cop_90","type":"application/json","title":"dem_cop_90"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_srtm","type":"application/json","title":"dem_srtm"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_srtm_deriv","type":"application/json","title":"dem_srtm_deriv"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover","type":"application/json","title":"esa_worldcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover_2020","type":"application/json","title":"esa_worldcover_2020"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover_2021","type":"application/json","title":"esa_worldcover_2021"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/fc_ls","type":"application/json","title":"fc_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/fc_ls_summary_annual","type":"application/json","title":"fc_ls_summary_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls5_ls7_annual","type":"application/json","title":"gm_ls5_ls7_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls5_ls7_annual_lowres","type":"application/json","title":"gm_ls5_ls7_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_annual","type":"application/json","title":"gm_ls8_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_annual_lowres","type":"application/json","title":"gm_ls8_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_ls9_annual","type":"application/json","title":"gm_ls8_ls9_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_ls9_annual_lowres","type":"application/json","title":"gm_ls8_ls9_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_annual","type":"application/json","title":"gm_s2_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_annual_lowres","type":"application/json","title":"gm_s2_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_rolling","type":"application/json","title":"gm_s2_rolling"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_semiannual","type":"application/json","title":"gm_s2_semiannual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_semiannual_lowres","type":"application/json","title":"gm_s2_semiannual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gmw","type":"application/json","title":"gmw"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/io_lulc","type":"application/json","title":"io_lulc"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_bedrock_depth","type":"application/json","title":"isda_soil_bedrock_depth"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_bulk_density","type":"application/json","title":"isda_soil_bulk_density"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_carbon_total","type":"application/json","title":"isda_soil_carbon_total"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_clay_content","type":"application/json","title":"isda_soil_clay_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_sand_content","type":"application/json","title":"isda_soil_sand_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_silt_content","type":"application/json","title":"isda_soil_silt_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/jers_sar_mosaic","type":"application/json","title":"jers_sar_mosaic"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/landsat_c2l2_ar","type":"application/json","title":"landsat_c2l2_ar"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls5_sr","type":"application/json","title":"ls5_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls5_st","type":"application/json","title":"ls5_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls7_sr","type":"application/json","title":"ls7_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls7_st","type":"application/json","title":"ls7_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls8_sr","type":"application/json","title":"ls8_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls8_st","type":"application/json","title":"ls8_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls9_sr","type":"application/json","title":"ls9_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls9_st","type":"application/json","title":"ls9_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/maxar_morocco_earthquake","type":"application/json","title":"maxar_morocco_earthquake"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/nasadem","type":"application/json","title":"nasadem"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ndvi_anomaly","type":"application/json","title":"ndvi_anomaly"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ndvi_climatology_ls","type":"application/json","title":"ndvi_climatology_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/pc_s2_annual","type":"application/json","title":"pc_s2_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/rainfall_chirps_daily","type":"application/json","title":"rainfall_chirps_daily"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/rainfall_chirps_monthly","type":"application/json","title":"rainfall_chirps_monthly"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s1_rtc","type":"application/json","title":"s1_rtc"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s2_l2a","type":"application/json","title":"s2_l2a"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s3_ol_2_wfr_nrt","type":"application/json","title":"s3_ol_2_wfr_nrt"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls","type":"application/json","title":"wofs_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls_summary_alltime","type":"application/json","title":"wofs_ls_summary_alltime"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls_summary_annual","type":"application/json","title":"wofs_ls_summary_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_2015","type":"application/json","title":"wsf_2015"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_2019","type":"application/json","title":"wsf_2019"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_evolution","type":"application/json","title":"wsf_evolution"}],"conformsTo":["http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core","http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson","http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30","https://api.stacspec.org/v1.0.0-rc.1/core","https://api.stacspec.org/v1.0.0-rc.1/item-search","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features","https://api.stacspec.org/v1.0.0-rc.1/item-search#query","https://api.stacspec.org/v1.0.0-rc.1/item-search#fields","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features#fields","https://api.stacspec.org/v1.0.0-rc.1/item-search#sort","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features#sort","https://api.stacspec.org/v1.0.0-rc.1/item-search#filter","http://www.opengis.net/spec/cql2/1.0/conf/cql2-json","http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2","http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter","https://api.stacspec.org/v1.0.0-rc.1/collections"],"title":"Digital + Earth Africa"}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '11536' + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:29:26 GMT + Server: + - gunicorn + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.31.0 + method: GET + uri: https://explorer.digitalearth.africa/stac + response: + body: + string: '{"type":"Catalog","id":"DEAfrica_data","stac_version":"1.0.0","description":"Configure + stac endpoint information in your Explorer `settings.env.py` file","links":[{"rel":"root","href":"https://explorer.digitalearth.africa/stac","type":"application/json","title":"Digital + Earth Africa"},{"rel":"self","href":"https://explorer.digitalearth.africa/stac","type":"application/json"},{"rel":"children","href":"https://explorer.digitalearth.africa/stac/collections","type":"application/json","title":"Collections"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/catalogs/arrivals","type":"application/json","title":"Arrivals"},{"rel":"search","href":"https://explorer.digitalearth.africa/stac/search","type":"application/json","title":"Item + Search"},{"rel":"http://www.opengis.net/def/rel/ogc/1.0/queryables","href":"https://explorer.digitalearth.africa/stac/queryables","type":"application/json","title":"Queryables"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/alos_palsar_mosaic","type":"application/json","title":"alos_palsar_mosaic"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/cci_landcover","type":"application/json","title":"cci_landcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/cgls_landcover","type":"application/json","title":"cgls_landcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask","type":"application/json","title":"crop_mask"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_central","type":"application/json","title":"crop_mask_central"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_eastern","type":"application/json","title":"crop_mask_eastern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_indian_ocean","type":"application/json","title":"crop_mask_indian_ocean"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_northern","type":"application/json","title":"crop_mask_northern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_sahel","type":"application/json","title":"crop_mask_sahel"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_southeast","type":"application/json","title":"crop_mask_southeast"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_southern","type":"application/json","title":"crop_mask_southern"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/crop_mask_western","type":"application/json","title":"crop_mask_western"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_cop_30","type":"application/json","title":"dem_cop_30"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_cop_90","type":"application/json","title":"dem_cop_90"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_srtm","type":"application/json","title":"dem_srtm"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/dem_srtm_deriv","type":"application/json","title":"dem_srtm_deriv"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover","type":"application/json","title":"esa_worldcover"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover_2020","type":"application/json","title":"esa_worldcover_2020"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/esa_worldcover_2021","type":"application/json","title":"esa_worldcover_2021"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/fc_ls","type":"application/json","title":"fc_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/fc_ls_summary_annual","type":"application/json","title":"fc_ls_summary_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls5_ls7_annual","type":"application/json","title":"gm_ls5_ls7_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls5_ls7_annual_lowres","type":"application/json","title":"gm_ls5_ls7_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_annual","type":"application/json","title":"gm_ls8_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_annual_lowres","type":"application/json","title":"gm_ls8_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_ls9_annual","type":"application/json","title":"gm_ls8_ls9_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_ls8_ls9_annual_lowres","type":"application/json","title":"gm_ls8_ls9_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_annual","type":"application/json","title":"gm_s2_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_annual_lowres","type":"application/json","title":"gm_s2_annual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_rolling","type":"application/json","title":"gm_s2_rolling"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_semiannual","type":"application/json","title":"gm_s2_semiannual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gm_s2_semiannual_lowres","type":"application/json","title":"gm_s2_semiannual_lowres"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/gmw","type":"application/json","title":"gmw"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/io_lulc","type":"application/json","title":"io_lulc"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_bedrock_depth","type":"application/json","title":"isda_soil_bedrock_depth"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_bulk_density","type":"application/json","title":"isda_soil_bulk_density"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_carbon_total","type":"application/json","title":"isda_soil_carbon_total"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_clay_content","type":"application/json","title":"isda_soil_clay_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_sand_content","type":"application/json","title":"isda_soil_sand_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/isda_soil_silt_content","type":"application/json","title":"isda_soil_silt_content"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/jers_sar_mosaic","type":"application/json","title":"jers_sar_mosaic"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/landsat_c2l2_ar","type":"application/json","title":"landsat_c2l2_ar"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls5_sr","type":"application/json","title":"ls5_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls5_st","type":"application/json","title":"ls5_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls7_sr","type":"application/json","title":"ls7_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls7_st","type":"application/json","title":"ls7_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls8_sr","type":"application/json","title":"ls8_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls8_st","type":"application/json","title":"ls8_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls9_sr","type":"application/json","title":"ls9_sr"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ls9_st","type":"application/json","title":"ls9_st"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/maxar_morocco_earthquake","type":"application/json","title":"maxar_morocco_earthquake"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/nasadem","type":"application/json","title":"nasadem"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ndvi_anomaly","type":"application/json","title":"ndvi_anomaly"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/ndvi_climatology_ls","type":"application/json","title":"ndvi_climatology_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/pc_s2_annual","type":"application/json","title":"pc_s2_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/rainfall_chirps_daily","type":"application/json","title":"rainfall_chirps_daily"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/rainfall_chirps_monthly","type":"application/json","title":"rainfall_chirps_monthly"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s1_rtc","type":"application/json","title":"s1_rtc"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s2_l2a","type":"application/json","title":"s2_l2a"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/s3_ol_2_wfr_nrt","type":"application/json","title":"s3_ol_2_wfr_nrt"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls","type":"application/json","title":"wofs_ls"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls_summary_alltime","type":"application/json","title":"wofs_ls_summary_alltime"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wofs_ls_summary_annual","type":"application/json","title":"wofs_ls_summary_annual"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_2015","type":"application/json","title":"wsf_2015"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_2019","type":"application/json","title":"wsf_2019"},{"rel":"child","href":"https://explorer.digitalearth.africa/stac/collections/wsf_evolution","type":"application/json","title":"wsf_evolution"}],"conformsTo":["http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core","http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson","http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30","https://api.stacspec.org/v1.0.0-rc.1/core","https://api.stacspec.org/v1.0.0-rc.1/item-search","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features","https://api.stacspec.org/v1.0.0-rc.1/item-search#query","https://api.stacspec.org/v1.0.0-rc.1/item-search#fields","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features#fields","https://api.stacspec.org/v1.0.0-rc.1/item-search#sort","https://api.stacspec.org/v1.0.0-rc.1/ogcapi-features#sort","https://api.stacspec.org/v1.0.0-rc.1/item-search#filter","http://www.opengis.net/spec/cql2/1.0/conf/cql2-json","http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2","http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter","https://api.stacspec.org/v1.0.0-rc.1/collections"],"title":"Digital + Earth Africa"}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '11536' + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:29:26 GMT + Server: + - gunicorn + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.31.0 + method: GET + uri: https://explorer.digitalearth.africa/stac/queryables + response: + body: + string: '{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://explorer.digitalearth.africa/stac/queryables","type":"object","title":"","properties":{"id":{"title":"Item + ID","description":"Item identifier","$ref":"https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/definitions/core/allOf/2/properties/id"},"collection":{"description":"Collection","$ref":"https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/collection"},"geometry":{"description":"Geometry","$ref":"https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/geometry"},"datetime":{"description":"Datetime","$ref":"https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/datetime.json#/properties/datetime"}},"additionalProperties":true}' + headers: + Access-Control-Allow-Origin: + - '*' + Connection: + - keep-alive + Content-Length: + - '754' + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:29:26 GMT + Server: + - gunicorn + status: + code: 200 + message: OK +version: 1 diff --git a/tests/test_client.py b/tests/test_client.py index 0f5a1f76..401f1de6 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -2,6 +2,7 @@ import os.path import warnings from datetime import datetime +from pathlib import Path from tempfile import TemporaryDirectory from typing import Any, Dict from urllib.parse import parse_qs, urlsplit @@ -752,3 +753,23 @@ def test_fallback_strategy() -> None: assert (item_root := item.get_single_link("root")) assert item_root.href == root_href + + +@pytest.mark.vcr +def test_set_queryables(tmp_path: Path) -> None: + """Make sure we can write queryables.""" + + client = Client.open( + "https://explorer.digitalearth.africa/stac/", + ) + + queryables = client.get_queryables() + + # Transactions are not supported in the default StacApiIO + with pytest.raises(APIError): + client.set_queryables(queryables) + + # write content to a temp file + tmp_file = tmp_path / "queryables.json" + client.set_queryables(queryables, str(tmp_file)) + assert json.loads(tmp_file.read_text()) == queryables