From 6e1202b618dedb2d8d42d8d741f2512f3f446713 Mon Sep 17 00:00:00 2001 From: Thomas Maschler Date: Fri, 31 May 2024 12:17:21 -0400 Subject: [PATCH 1/5] allow to write queryables --- pystac_client/mixins.py | 11 + .../test_client/test_set_queryables.yaml | 236 ++++++++++++++++++ tests/test_client.py | 21 ++ 3 files changed, 268 insertions(+) create mode 100644 tests/cassettes/test_client/test_set_queryables.yaml diff --git a/pystac_client/mixins.py b/pystac_client/mixins.py index 21babd90..d184a962 100644 --- a/pystac_client/mixins.py +++ b/pystac_client/mixins.py @@ -67,3 +67,14 @@ 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 write_queryables_to(self, queryables: Dict[str, Any], url: str) -> None: + """Write a queryables to a given endpoint""" + if self._stac_io is None: + raise APIError("API access is not properly configured") + self._stac_io.save_json(url, queryables) + + def set_queryables(self, queryables: Dict[str, Any]) -> None: + """Write a queryables to the default endpoint""" + url = self._get_queryables_href() + self.write_queryables_to(queryables, url) 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..798d0d65 --- /dev/null +++ b/tests/cassettes/test_client/test_set_queryables.yaml @@ -0,0 +1,236 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python-requests/2.31.0 + method: GET + uri: https://planetarycomputer.microsoft.com/api/stac/v1/ + response: + body: + string: !!binary | + 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 + headers: + Accept-Ranges: + - bytes + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-PC-Request-Entity,DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization + Access-Control-Allow-Methods: + - PUT, GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '1728000' + Connection: + - keep-alive + Content-Length: + - '3247' + Content-Type: + - application/json + Date: + - Fri, 31 May 2024 16:09:06 GMT + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Cache: + - CONFIG_NOCACHE + content-encoding: + - gzip + vary: + - Accept-Encoding + x-azure-ref: + - 20240531T160906Z-1756c4dfbdbmn2mh2u0yrd95d000000001cg000000000rkp + 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://planetarycomputer.microsoft.com/api/stac/v1/queryables + response: + body: + string: !!binary | + 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 + ce48AAA= + headers: + Accept-Ranges: + - bytes + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Headers: + - X-PC-Request-Entity,DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization + Access-Control-Allow-Methods: + - PUT, GET, POST, OPTIONS + Access-Control-Allow-Origin: + - '*' + Access-Control-Max-Age: + - '1728000' + Connection: + - keep-alive + Content-Length: + - '4337' + Content-Type: + - application/schema+json + Date: + - Fri, 31 May 2024 16:09:06 GMT + Strict-Transport-Security: + - max-age=31536000; includeSubDomains + X-Cache: + - CONFIG_NOCACHE + content-encoding: + - gzip + vary: + - Accept-Encoding + x-azure-ref: + - 20240531T160906Z-1756c4dfbdbmn2mh2u0yrd95d000000001cg000000000rkw + status: + code: 200 + message: OK +version: 1 diff --git a/tests/test_client.py b/tests/test_client.py index 0f5a1f76..97c2f073 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://planetarycomputer.microsoft.com/api/stac/v1/", + ) + + 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.write_queryables_to(queryables, str(tmp_file)) + assert json.loads(tmp_file.read_text()) == queryables From 88696e0cfef17152b817a9b78919209365c50513 Mon Sep 17 00:00:00 2001 From: Thomas Maschler Date: Fri, 31 May 2024 12:23:35 -0400 Subject: [PATCH 2/5] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 118aac57..deb7578b 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) + ## [v0.8.2] - 2024-05-30 ### Added From 44711d950faa28ed317227dae8b95ff25453d466 Mon Sep 17 00:00:00 2001 From: Thomas Maschler Date: Fri, 31 May 2024 12:29:51 -0400 Subject: [PATCH 3/5] use different api for tests --- .../test_client/test_set_queryables.yaml | 237 ++++-------------- tests/test_client.py | 2 +- 2 files changed, 55 insertions(+), 184 deletions(-) diff --git a/tests/cassettes/test_client/test_set_queryables.yaml b/tests/cassettes/test_client/test_set_queryables.yaml index 798d0d65..0f693fe1 100644 --- a/tests/cassettes/test_client/test_set_queryables.yaml +++ b/tests/cassettes/test_client/test_set_queryables.yaml @@ -11,98 +11,27 @@ interactions: User-Agent: - python-requests/2.31.0 method: GET - uri: https://planetarycomputer.microsoft.com/api/stac/v1/ + uri: https://explorer.digitalearth.africa/stac/ response: body: - string: !!binary | - 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 + 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: - Accept-Ranges: - - bytes - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Headers: - - X-PC-Request-Entity,DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization - Access-Control-Allow-Methods: - - PUT, GET, POST, OPTIONS Access-Control-Allow-Origin: - '*' - Access-Control-Max-Age: - - '1728000' Connection: - keep-alive Content-Length: - - '3247' + - '11536' Content-Type: - application/json Date: - - Fri, 31 May 2024 16:09:06 GMT - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Cache: - - CONFIG_NOCACHE - content-encoding: - - gzip - vary: - - Accept-Encoding - x-azure-ref: - - 20240531T160906Z-1756c4dfbdbmn2mh2u0yrd95d000000001cg000000000rkp + - Fri, 31 May 2024 16:29:26 GMT + Server: + - gunicorn status: code: 200 message: OK @@ -118,118 +47,60 @@ interactions: User-Agent: - python-requests/2.31.0 method: GET - uri: https://planetarycomputer.microsoft.com/api/stac/v1/queryables + uri: https://explorer.digitalearth.africa/stac response: body: - string: !!binary | - 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 - ce48AAA= + 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: - Accept-Ranges: - - bytes - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Headers: - - X-PC-Request-Entity,DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization - Access-Control-Allow-Methods: - - PUT, GET, POST, OPTIONS Access-Control-Allow-Origin: - '*' - Access-Control-Max-Age: - - '1728000' Connection: - keep-alive Content-Length: - - '4337' + - '11536' Content-Type: - - application/schema+json + - 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:09:06 GMT - Strict-Transport-Security: - - max-age=31536000; includeSubDomains - X-Cache: - - CONFIG_NOCACHE - content-encoding: - - gzip - vary: - - Accept-Encoding - x-azure-ref: - - 20240531T160906Z-1756c4dfbdbmn2mh2u0yrd95d000000001cg000000000rkw + - Fri, 31 May 2024 16:29:26 GMT + Server: + - gunicorn status: code: 200 message: OK diff --git a/tests/test_client.py b/tests/test_client.py index 97c2f073..46f6a2af 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -760,7 +760,7 @@ def test_set_queryables(tmp_path: Path) -> None: """Make sure we can write queryables.""" client = Client.open( - "https://planetarycomputer.microsoft.com/api/stac/v1/", + "https://explorer.digitalearth.africa/stac/", ) queryables = client.get_queryables() From 348e98362ab058c6a6d4dd641a7103b7227c8f5f Mon Sep 17 00:00:00 2001 From: Thomas Maschler Date: Mon, 3 Jun 2024 17:21:59 -0400 Subject: [PATCH 4/5] Update pystac_client/mixins.py Co-authored-by: Pete Gadomski --- pystac_client/mixins.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pystac_client/mixins.py b/pystac_client/mixins.py index d184a962..17d0083b 100644 --- a/pystac_client/mixins.py +++ b/pystac_client/mixins.py @@ -68,13 +68,13 @@ def _get_queryables_href(self) -> str: href = self._get_href(QUERYABLES_REL, link, QUERYABLES_ENDPOINT) return href - def write_queryables_to(self, queryables: Dict[str, Any], url: str) -> None: - """Write a queryables to a given endpoint""" + def set_queryables(self, queryables: Dict[str, Any], url: Option[str]) -> 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") + 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) - - def set_queryables(self, queryables: Dict[str, Any]) -> None: - """Write a queryables to the default endpoint""" - url = self._get_queryables_href() - self.write_queryables_to(queryables, url) From 28032dba89940bd6fc78dcdd888aa8452cff9394 Mon Sep 17 00:00:00 2001 From: Thomas Maschler Date: Mon, 3 Jun 2024 17:25:16 -0400 Subject: [PATCH 5/5] update tests --- pystac_client/mixins.py | 6 ++++-- tests/test_client.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pystac_client/mixins.py b/pystac_client/mixins.py index 17d0083b..2d84debb 100644 --- a/pystac_client/mixins.py +++ b/pystac_client/mixins.py @@ -68,9 +68,11 @@ def _get_queryables_href(self) -> str: href = self._get_href(QUERYABLES_REL, link, QUERYABLES_ENDPOINT) return href - def set_queryables(self, queryables: Dict[str, Any], url: Option[str]) -> None: + 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: diff --git a/tests/test_client.py b/tests/test_client.py index 46f6a2af..401f1de6 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -771,5 +771,5 @@ def test_set_queryables(tmp_path: Path) -> None: # write content to a temp file tmp_file = tmp_path / "queryables.json" - client.write_queryables_to(queryables, str(tmp_file)) + client.set_queryables(queryables, str(tmp_file)) assert json.loads(tmp_file.read_text()) == queryables