easysnowdata 0.3.3__tar.gz → 0.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/CHANGELOG.md +23 -0
  2. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/PKG-INFO +21 -21
  3. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/README.md +20 -20
  4. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/WATCHLIST.toml +8 -0
  5. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/_version.py +2 -2
  6. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/_catalog.py +8 -3
  7. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/README.md +7 -3
  8. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/ceaza/ceaza_client.py +5 -2
  9. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/yukon/yukon_client.py +28 -7
  10. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/networks.py +1 -1
  11. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_ceaza_client.py +13 -8
  12. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_clients_offline.py +21 -0
  13. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_yukon_client.py +1 -1
  14. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/.editorconfig +0 -0
  15. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/.gitignore +0 -0
  16. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/.pre-commit-config.yaml +0 -0
  17. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/CITATION.cff +0 -0
  18. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/LICENSE +0 -0
  19. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/POTENTIAL_DATA_PRODUCTS_SOURCES_AND_EXAMPLES.md +0 -0
  20. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/REVAMP_PLAN.md +0 -0
  21. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/__init__.py +0 -0
  22. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/_gdal.py +0 -0
  23. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/aoi.py +0 -0
  24. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/__init__.py +0 -0
  25. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/_base.py +0 -0
  26. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/aisori.py +0 -0
  27. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/earthdata.py +0 -0
  28. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/earthengine.py +0 -0
  29. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/nve.py +0 -0
  30. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/planet.py +0 -0
  31. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/auth/planetary_computer.py +0 -0
  32. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/boundaries/__init__.py +0 -0
  33. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/boundaries/admin.py +0 -0
  34. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/boundaries/glaciers.py +0 -0
  35. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/boundaries/mountains.py +0 -0
  36. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/boundaries/natural_earth.py +0 -0
  37. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/__init__.py +0 -0
  38. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/_access.py +0 -0
  39. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/_models.py +0 -0
  40. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/_registry.py +0 -0
  41. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/health.py +0 -0
  42. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/catalog/pages.py +0 -0
  43. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/climate/__init__.py +0 -0
  44. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/climate/era5.py +0 -0
  45. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/climate/indices.py +0 -0
  46. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/climate/koppen_geiger.py +0 -0
  47. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/config.py +0 -0
  48. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/hydro/__init__.py +0 -0
  49. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/hydro/basins.py +0 -0
  50. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/land/__init__.py +0 -0
  51. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/land/forest_cover.py +0 -0
  52. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/land/landcover.py +0 -0
  53. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/land/nlcd.py +0 -0
  54. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/optical/__init__.py +0 -0
  55. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/optical/hls.py +0 -0
  56. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/optical/planetscope.py +0 -0
  57. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/optical/sentinel2.py +0 -0
  58. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/plotting/__init__.py +0 -0
  59. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/__init__.py +0 -0
  60. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/categorical.py +0 -0
  61. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/contract.py +0 -0
  62. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/masks.py +0 -0
  63. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/optical.py +0 -0
  64. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/sar.py +0 -0
  65. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/snow.py +0 -0
  66. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/processing/wateryear.py +0 -0
  67. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/__init__.py +0 -0
  68. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/earthdata.py +0 -0
  69. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/gee.py +0 -0
  70. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/opentopography.py +0 -0
  71. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/planet.py +0 -0
  72. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/raster_http.py +0 -0
  73. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/stac.py +0 -0
  74. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/table_http.py +0 -0
  75. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/vector_http.py +0 -0
  76. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/providers/zarr_cloud.py +0 -0
  77. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/sar/__init__.py +0 -0
  78. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/sar/sentinel1.py +0 -0
  79. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/__init__.py +0 -0
  80. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/modis.py +0 -0
  81. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/mountain_snow_mask.py +0 -0
  82. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/snodas.py +0 -0
  83. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/snow_classification.py +0 -0
  84. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/ucla_sr.py +0 -0
  85. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/snow/viirs.py +0 -0
  86. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/__init__.py +0 -0
  87. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/_adapter.py +0 -0
  88. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/_frames.py +0 -0
  89. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/archive.py +0 -0
  90. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/__init__.py +0 -0
  91. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/_common.py +0 -0
  92. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/alberta/__init__.py +0 -0
  93. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/alberta/alberta_client.py +0 -0
  94. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/awdb/__init__.py +0 -0
  95. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/awdb/awdb_client.py +0 -0
  96. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/canswe/__init__.py +0 -0
  97. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/canswe/_format.py +0 -0
  98. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/canswe/canswe_client.py +0 -0
  99. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/cdec/__init__.py +0 -0
  100. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/cdec/cdec_client.py +0 -0
  101. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/ceaza/__init__.py +0 -0
  102. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/databc/__init__.py +0 -0
  103. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/databc/databc_client.py +0 -0
  104. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/dwd/__init__.py +0 -0
  105. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/dwd/dwd_client.py +0 -0
  106. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/ghcnd/__init__.py +0 -0
  107. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/ghcnd/ghcnd_client.py +0 -0
  108. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/hydroquebec/__init__.py +0 -0
  109. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/hydroquebec/hydroquebec_client.py +0 -0
  110. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/norswe/__init__.py +0 -0
  111. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/norswe/norswe_client.py +0 -0
  112. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/nve/__init__.py +0 -0
  113. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/nve/nve_client.py +0 -0
  114. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/rihmi/__init__.py +0 -0
  115. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/rihmi/_aisori.py +0 -0
  116. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/rihmi/rihmi_client.py +0 -0
  117. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/rihmi/route_survey_stations.csv +0 -0
  118. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/rihmi/snow_cover_stations.csv +0 -0
  119. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/slf/__init__.py +0 -0
  120. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/slf/slf_client.py +0 -0
  121. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/snih/__init__.py +0 -0
  122. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/snih/snih_client.py +0 -0
  123. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/southern_andes/__init__.py +0 -0
  124. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/southern_andes/southern_andes_client.py +0 -0
  125. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/syke/__init__.py +0 -0
  126. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/syke/syke_client.py +0 -0
  127. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/stations/clients/yukon/__init__.py +0 -0
  128. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/temporal.py +0 -0
  129. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/terrain/__init__.py +0 -0
  130. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/terrain/chili.py +0 -0
  131. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/terrain/dem.py +0 -0
  132. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/easysnowdata/terrain/hillshade.py +0 -0
  133. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/pyproject.toml +0 -0
  134. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/check_data_sources.py +0 -0
  135. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/feedstock_requirements.py +0 -0
  136. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/gallery_fallback.py +0 -0
  137. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/make_montage.py +0 -0
  138. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/report_health.py +0 -0
  139. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/update_readme_status.py +0 -0
  140. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/scripts/watch.py +0 -0
  141. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/__init__.py +0 -0
  142. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/cassettes/test_recorded/test_cmr_lpcloud_hls_search_is_open.yaml +0 -0
  143. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/cassettes/test_recorded/test_earth_search_sentinel2_search_with_time.yaml +0 -0
  144. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/cassettes/test_recorded/test_health_first_byte_probe_replays.yaml +0 -0
  145. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/cassettes/test_recorded/test_health_stac_probe_replays.yaml +0 -0
  146. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/cassettes/test_recorded/test_planetary_computer_dem_search.yaml +0 -0
  147. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/conftest.py +0 -0
  148. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/fixtures/make_fixtures.py +0 -0
  149. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/__init__.py +0 -0
  150. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/cassettes/test_land_landcover/TestSearchRecorded.test_search_filters_by_version.yaml +0 -0
  151. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/cassettes/test_terrain_dem/TestSearchRecorded.test_search_on_earth_search.yaml +0 -0
  152. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/cassettes/test_terrain_dem/TestSearchRecorded.test_search_returns_tiles.yaml +0 -0
  153. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/conftest.py +0 -0
  154. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/make_fixtures.py +0 -0
  155. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_boundaries.py +0 -0
  156. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_hydro_basins.py +0 -0
  157. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_land_forest_cover.py +0 -0
  158. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_land_landcover.py +0 -0
  159. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_land_nlcd.py +0 -0
  160. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_snow_classification.py +0 -0
  161. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_snow_mountain_snow_mask.py +0 -0
  162. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_terrain_chili.py +0 -0
  163. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_terrain_dem.py +0 -0
  164. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_terrain_hillshade.py +0 -0
  165. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/static/test_theme_common.py +0 -0
  166. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/__init__.py +0 -0
  167. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/conftest.py +0 -0
  168. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/make_fixtures.py +0 -0
  169. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/rihmi_aisori/README.md +0 -0
  170. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/rihmi_aisori/route_semicolon.zip +0 -0
  171. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/rihmi_aisori/route_space.zip +0 -0
  172. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/rihmi_aisori/snow_cover_semicolon.zip +0 -0
  173. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/fixtures/rihmi_aisori/snow_cover_space.zip +0 -0
  174. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_adapter.py +0 -0
  175. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_adapter_offline.py +0 -0
  176. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_alberta_client.py +0 -0
  177. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_archive.py +0 -0
  178. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_awdb_client.py +0 -0
  179. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_canswe_client.py +0 -0
  180. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_cdec_client.py +0 -0
  181. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_common_download.py +0 -0
  182. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_databc_client.py +0 -0
  183. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_dwd_client.py +0 -0
  184. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_ghcnd_client.py +0 -0
  185. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_hydroquebec_client.py +0 -0
  186. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_norswe_client.py +0 -0
  187. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_nve_client.py +0 -0
  188. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_rihmi_client.py +0 -0
  189. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_slf_client.py +0 -0
  190. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_snih_client.py +0 -0
  191. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_southern_andes_client.py +0 -0
  192. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/stations/test_syke_client.py +0 -0
  193. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_aoi.py +0 -0
  194. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_auth.py +0 -0
  195. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_catalog.py +0 -0
  196. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_config.py +0 -0
  197. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_credentials.py +0 -0
  198. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_docs_pages.py +0 -0
  199. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_easysnowdata.py +0 -0
  200. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_edges.py +0 -0
  201. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_feedstock_requirements.py +0 -0
  202. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_gallery_fallback.py +0 -0
  203. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_health_reporting.py +0 -0
  204. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_montage.py +0 -0
  205. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_plotting.py +0 -0
  206. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_processing.py +0 -0
  207. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_providers.py +0 -0
  208. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_recorded.py +0 -0
  209. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_temporal.py +0 -0
  210. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/test_watch.py +0 -0
  211. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/__init__.py +0 -0
  212. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_hls/test_search_cmr_lpcloud_is_open_and_labels_products.yaml +0 -0
  213. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_hls/test_search_planetary_computer_mirror.yaml +0 -0
  214. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_sentinel1/test_search_opera_rtc_is_open.yaml +0 -0
  215. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_sentinel1/test_search_planetary_computer.yaml +0 -0
  216. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_sentinel2/test_search_earth_search_collection_1.yaml +0 -0
  217. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/cassettes/test_sentinel2/test_search_planetary_computer.yaml +0 -0
  218. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/conftest.py +0 -0
  219. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/fixtures/make_fixtures.py +0 -0
  220. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_climate_indices.py +0 -0
  221. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_contract.py +0 -0
  222. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_era5.py +0 -0
  223. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_hls.py +0 -0
  224. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_koppen_geiger.py +0 -0
  225. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_modis.py +0 -0
  226. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_planetscope.py +0 -0
  227. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_sentinel1.py +0 -0
  228. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_sentinel2.py +0 -0
  229. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_snodas.py +0 -0
  230. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_ucla_sr.py +0 -0
  231. {easysnowdata-0.3.3 → easysnowdata-0.3.4}/tests/timeseries/test_viirs.py +0 -0
@@ -6,6 +6,29 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  <!-- insertion marker -->
9
+ ## [v0.3.3](https://github.com/egagli/easysnowdata/releases/tag/v0.3.3) - 2026-10-21
10
+
11
+ <small>[Compare with v0.3.2](https://github.com/egagli/easysnowdata/compare/v0.3.2...v0.3.3)</small>
12
+
13
+ ### Fixed
14
+
15
+ - fix(snih): parse pre-1970 /Date()/ values on Windows ([5488a84](https://github.com/egagli/easysnowdata/commit/5488a8453c4bd07b607323e27f5a253ab1c5fc13) by Claude).
16
+ - fix(tests): read client sources as UTF-8 so the credential scan passes on Windows ([e57a543](https://github.com/egagli/easysnowdata/commit/e57a543a26c3a803e5736ef6a549f9213e0649c3) by Claude).
17
+ - fix(stations): RIHMI reads real AISORI-M exports; fixed-width layout, zips, column files ([4cb9bf5](https://github.com/egagli/easysnowdata/commit/4cb9bf541d8517aa6f63531e33cbb8b5a88a5d65) by Claude).
18
+ - fix(stations): bring the new clients to the established client conventions ([4b98936](https://github.com/egagli/easysnowdata/commit/4b98936252975bca81e3a1beaa031ef250c629f7) by Claude).
19
+ - fix(gallery): climate indices example reads SWE from the station archive; add a western-US analysis ([afa84ee](https://github.com/egagli/easysnowdata/commit/afa84eee7d46b9506613bec76deefebc11cbeb3e) by Claude).
20
+ - fix(planetscope): pair UDM2 with its scene, scale radiance with Planet's coefficients (#59) ([8c166c6](https://github.com/egagli/easysnowdata/commit/8c166c6a9ad243070f95ddab526bbfde3508ed74) by Eric Gagliano).
21
+ - fix(docs): gallery fallback uses POSIX page paths for git lookups (Windows) ([2db26ae](https://github.com/egagli/easysnowdata/commit/2db26ae9ed7d159c01473665f43744325e13fdaa) by egagli).
22
+ - fix(modis): name the sinusoidal grid for Planetary Computer loads ([e5eeaf4](https://github.com/egagli/easysnowdata/commit/e5eeaf4824d59e8e23f0f8c5da0dc251545df5d7) by egagli).
23
+ - fix(auth): bearer-token GDAL reads skip the HEAD request LP DAAC answers with 404 ([0728852](https://github.com/egagli/easysnowdata/commit/072885248021d2cf1433e86390681a14506bed5a) by egagli).
24
+ - fix(watch): name the product a change touches; stop routine moves looking new ([47d21ce](https://github.com/egagli/easysnowdata/commit/47d21ce7d4af24a798d51c5f1a2f3c66e5acdcab) by egagli).
25
+ - fix(health): probe HLS L30 and S30 on both routes, and the LPCLOUD reads ([cfd0634](https://github.com/egagli/easysnowdata/commit/cfd0634a059ead0274e18ee5f3483630296ed540) by egagli).
26
+ - fix(auth): NSIDC on-premises files log in with the password, even with a token set ([5827702](https://github.com/egagli/easysnowdata/commit/5827702291853895f97889e6e366dc49a079989d) by egagli).
27
+ - fix(auth): read an Earthdata token's expiry from the token, not from URS ([2951938](https://github.com/egagli/easysnowdata/commit/2951938646740dda547cf908b338efaba5005717) by egagli).
28
+ - fix(status): escape probe errors in the README tooltips ([826e7df](https://github.com/egagli/easysnowdata/commit/826e7dfd9c66f0de6f25427b4bed534bbb0c4348) by egagli).
29
+ - fix(boundaries): clearer health probes, Census 2025, explain NSIDC's login page ([0086513](https://github.com/egagli/easysnowdata/commit/008651397cd72abf3dc71437fb10d2d3c9b61e3d) by egagli).
30
+ - fix(plotting): graticule on global projected maps ([5d46dfa](https://github.com/egagli/easysnowdata/commit/5d46dfaf9732f5a0b331e36a6cfd52570b002e34) by egagli).
31
+
9
32
  ## [v0.3.2](https://github.com/egagli/easysnowdata/releases/tag/v0.3.2) - 2026-09-23
10
33
 
11
34
  <small>[Compare with v0.3.1](https://github.com/egagli/easysnowdata/compare/v0.3.1...v0.3.2)</small>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: easysnowdata
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: A Python package to easily retrieve data relevant to snow science
5
5
  Project-URL: Homepage, https://github.com/egagli/easysnowdata
6
6
  Project-URL: Documentation, https://egagli.github.io/easysnowdata
@@ -103,12 +103,12 @@ and both Earth Engine catalogs, under "Worth adding" when they are about the
103
103
  cryosphere.
104
104
 
105
105
  <!-- DATA_STATUS_START -->
106
- _Last updated: 2026-10-19 08:22 UTC_
106
+ _Last updated: 2026-10-26 08:22 UTC_
107
107
  _⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the [status page](https://egagli.github.io/easysnowdata/status.html)._
108
108
 
109
109
  ### Stations (`esd.stations`)
110
110
 
111
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
111
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
112
112
  | :---------- | :------: | :------: | :------: | :------: |
113
113
  | AWDB stations (NRCS REST API) | ✅ | ✅ | ✅ | ✅ |
114
114
  | CDEC stations (JSON data servlet) | ✅ | ✅ | ✅ | ✅ |
@@ -122,7 +122,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
122
122
 
123
123
  ### Snow (`esd.snow`)
124
124
 
125
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
125
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
126
126
  | :---------- | :------: | :------: | :------: | :------: |
127
127
  | MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | ✅ | ✅ | ✅ |
128
128
  | MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
@@ -137,7 +137,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
137
137
 
138
138
  ### SAR (`esd.sar`)
139
139
 
140
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
140
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
141
141
  | :---------- | :------: | :------: | :------: | :------: |
142
142
  | Sentinel-1 RTC (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
143
143
  | Sentinel-1 RTC OPERA (CMR-STAC ASF) | ✅ | ✅ | ✅ | ✅ |
@@ -148,7 +148,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
148
148
 
149
149
  ### Optical imagery (`esd.optical`)
150
150
 
151
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
151
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
152
152
  | :---------- | :------: | :------: | :------: | :------: |
153
153
  | HLS L30 (CMR-STAC LPCLOUD) | ✅ | ✅ | ✅ | ✅ |
154
154
  | HLS S30 (CMR-STAC LPCLOUD) | ✅ | ✅ | ✅ | ✅ |
@@ -162,31 +162,31 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
162
162
 
163
163
  ### Terrain (`esd.terrain`)
164
164
 
165
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
165
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
166
166
  | :---------- | :------: | :------: | :------: | :------: |
167
167
  | CHILI (GEE/CSP ERGo) | ✅ | ✅ | ✅ | ✅ |
168
168
  | Copernicus DEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
169
169
  | Copernicus DEM (Earth Search) | ✅ | ✅ | ✅ | ✅ |
170
170
  | Copernicus DEM (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
171
- | Copernicus DEM (OpenTopography) | ✅ | ✅ | ✅ | — |
171
+ | Copernicus DEM (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
172
172
  | NASADEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
173
173
  | NASADEM (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
174
- | NASADEM (OpenTopography) | ✅ | ✅ | ✅ | — |
175
- | SRTM GL1 (OpenTopography) | ✅ | ✅ | ✅ | — |
174
+ | NASADEM (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
175
+ | SRTM GL1 (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
176
176
  | SRTM GL1 (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
177
177
  | 3DEP seamless (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
178
178
  | 3DEP 10 m (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
179
179
  | ALOS World 3D (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
180
180
  | ALOS World 3D (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
181
- | ALOS World 3D (OpenTopography) | ✅ | ✅ | ✅ | — |
182
- | GEDTM30 (OpenTopography) | ✅ | ✅ | ✅ | — |
181
+ | ALOS World 3D (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
182
+ | GEDTM30 (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
183
183
  | Natural Earth hillshade (S3) | ✅ | ✅ | ✅ | ✅ |
184
184
 
185
185
  ### Land cover (`esd.land`)
186
186
 
187
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
187
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
188
188
  | :---------- | :------: | :------: | :------: | :------: |
189
- | Forest cover fraction (Zenodo) | ✅ | <abbr title="ReadTimeout: HTTPSConnectionPool(host=&#x27;zenodo.org&#x27;, port=443): Read timed out. (">❌</abbr> | ✅ | ✅ |
189
+ | Forest cover fraction (Zenodo) | ✅ | ✅ | <abbr title="ReadTimeout: HTTPSConnectionPool(host=&#x27;zenodo.org&#x27;, port=443): Read timed out. (">❌</abbr> | ✅ |
190
190
  | Forest cover fraction (GEE/CGLS-LC100) | ✅ | ✅ | ✅ | ✅ |
191
191
  | ESA WorldCover (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
192
192
  | ESA WorldCover (AWS bucket) | ✅ | ✅ | ✅ | ✅ |
@@ -195,7 +195,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
195
195
 
196
196
  ### Hydrography (`esd.hydro`)
197
197
 
198
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
198
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
199
199
  | :---------- | :------: | :------: | :------: | :------: |
200
200
  | HUC geometries (USGS WBD REST) | ✅ | ✅ | ✅ | ✅ |
201
201
  | HUC geometries (GEE/USGS WBD) | ✅ | ✅ | ✅ | ✅ |
@@ -207,7 +207,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
207
207
 
208
208
  ### Boundaries (`esd.boundaries`)
209
209
 
210
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
210
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
211
211
  | :---------- | :------: | :------: | :------: | :------: |
212
212
  | Natural Earth countries (naciscdn) | ✅ | ✅ | ✅ | ✅ |
213
213
  | geoBoundaries countries (ADM0, gbOpen) | ✅ | ✅ | ✅ | ✅ |
@@ -224,14 +224,14 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
224
224
 
225
225
  ### Climate (`esd.climate`)
226
226
 
227
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
227
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
228
228
  | :---------- | :------: | :------: | :------: | :------: |
229
229
  | ARCO-ERA5 (GCS anonymous) | ✅ | ✅ | ✅ | ✅ |
230
230
  | ERA5 (Google Earth Engine) | ✅ | ✅ | ✅ | ✅ |
231
- | Climate indices (CPC RONI) | ✅ | — | — | — |
232
- | Climate indices (NCEI PDO) | ✅ | — | — | — |
233
- | Climate indices (PSL MEI.v2) | ✅ | — | — | — |
234
- | Climate indices (PSL pdo.data) | ✅ | — | — | — |
231
+ | Climate indices (CPC RONI) | ✅ | ✅ | — | — |
232
+ | Climate indices (NCEI PDO) | ✅ | ✅ | — | — |
233
+ | Climate indices (PSL MEI.v2) | ✅ | ✅ | — | — |
234
+ | Climate indices (PSL pdo.data) | ✅ | ✅ | — | — |
235
235
  | Köppen-Geiger classification (figshare) | ✅ | ✅ | ✅ | ✅ |
236
236
  <!-- DATA_STATUS_END -->
237
237
 
@@ -45,12 +45,12 @@ and both Earth Engine catalogs, under "Worth adding" when they are about the
45
45
  cryosphere.
46
46
 
47
47
  <!-- DATA_STATUS_START -->
48
- _Last updated: 2026-10-19 08:22 UTC_
48
+ _Last updated: 2026-10-26 08:22 UTC_
49
49
  _⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the [status page](https://egagli.github.io/easysnowdata/status.html)._
50
50
 
51
51
  ### Stations (`esd.stations`)
52
52
 
53
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
53
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
54
54
  | :---------- | :------: | :------: | :------: | :------: |
55
55
  | AWDB stations (NRCS REST API) | ✅ | ✅ | ✅ | ✅ |
56
56
  | CDEC stations (JSON data servlet) | ✅ | ✅ | ✅ | ✅ |
@@ -64,7 +64,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
64
64
 
65
65
  ### Snow (`esd.snow`)
66
66
 
67
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
67
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
68
68
  | :---------- | :------: | :------: | :------: | :------: |
69
69
  | MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | ✅ | ✅ | ✅ |
70
70
  | MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
@@ -79,7 +79,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
79
79
 
80
80
  ### SAR (`esd.sar`)
81
81
 
82
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
82
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
83
83
  | :---------- | :------: | :------: | :------: | :------: |
84
84
  | Sentinel-1 RTC (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
85
85
  | Sentinel-1 RTC OPERA (CMR-STAC ASF) | ✅ | ✅ | ✅ | ✅ |
@@ -90,7 +90,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
90
90
 
91
91
  ### Optical imagery (`esd.optical`)
92
92
 
93
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
93
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
94
94
  | :---------- | :------: | :------: | :------: | :------: |
95
95
  | HLS L30 (CMR-STAC LPCLOUD) | ✅ | ✅ | ✅ | ✅ |
96
96
  | HLS S30 (CMR-STAC LPCLOUD) | ✅ | ✅ | ✅ | ✅ |
@@ -104,31 +104,31 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
104
104
 
105
105
  ### Terrain (`esd.terrain`)
106
106
 
107
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
107
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
108
108
  | :---------- | :------: | :------: | :------: | :------: |
109
109
  | CHILI (GEE/CSP ERGo) | ✅ | ✅ | ✅ | ✅ |
110
110
  | Copernicus DEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
111
111
  | Copernicus DEM (Earth Search) | ✅ | ✅ | ✅ | ✅ |
112
112
  | Copernicus DEM (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
113
- | Copernicus DEM (OpenTopography) | ✅ | ✅ | ✅ | — |
113
+ | Copernicus DEM (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
114
114
  | NASADEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
115
115
  | NASADEM (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
116
- | NASADEM (OpenTopography) | ✅ | ✅ | ✅ | — |
117
- | SRTM GL1 (OpenTopography) | ✅ | ✅ | ✅ | — |
116
+ | NASADEM (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
117
+ | SRTM GL1 (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
118
118
  | SRTM GL1 (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
119
119
  | 3DEP seamless (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
120
120
  | 3DEP 10 m (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
121
121
  | ALOS World 3D (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
122
122
  | ALOS World 3D (Earth Engine) | ✅ | ✅ | ✅ | ✅ |
123
- | ALOS World 3D (OpenTopography) | ✅ | ✅ | ✅ | — |
124
- | GEDTM30 (OpenTopography) | ✅ | ✅ | ✅ | — |
123
+ | ALOS World 3D (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
124
+ | GEDTM30 (OpenTopography) | ✅ | ✅ | ✅ | ✅ |
125
125
  | Natural Earth hillshade (S3) | ✅ | ✅ | ✅ | ✅ |
126
126
 
127
127
  ### Land cover (`esd.land`)
128
128
 
129
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
129
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
130
130
  | :---------- | :------: | :------: | :------: | :------: |
131
- | Forest cover fraction (Zenodo) | ✅ | <abbr title="ReadTimeout: HTTPSConnectionPool(host=&#x27;zenodo.org&#x27;, port=443): Read timed out. (">❌</abbr> | ✅ | ✅ |
131
+ | Forest cover fraction (Zenodo) | ✅ | ✅ | <abbr title="ReadTimeout: HTTPSConnectionPool(host=&#x27;zenodo.org&#x27;, port=443): Read timed out. (">❌</abbr> | ✅ |
132
132
  | Forest cover fraction (GEE/CGLS-LC100) | ✅ | ✅ | ✅ | ✅ |
133
133
  | ESA WorldCover (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
134
134
  | ESA WorldCover (AWS bucket) | ✅ | ✅ | ✅ | ✅ |
@@ -137,7 +137,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
137
137
 
138
138
  ### Hydrography (`esd.hydro`)
139
139
 
140
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
140
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
141
141
  | :---------- | :------: | :------: | :------: | :------: |
142
142
  | HUC geometries (USGS WBD REST) | ✅ | ✅ | ✅ | ✅ |
143
143
  | HUC geometries (GEE/USGS WBD) | ✅ | ✅ | ✅ | ✅ |
@@ -149,7 +149,7 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
149
149
 
150
150
  ### Boundaries (`esd.boundaries`)
151
151
 
152
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
152
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
153
153
  | :---------- | :------: | :------: | :------: | :------: |
154
154
  | Natural Earth countries (naciscdn) | ✅ | ✅ | ✅ | ✅ |
155
155
  | geoBoundaries countries (ADM0, gbOpen) | ✅ | ✅ | ✅ | ✅ |
@@ -166,14 +166,14 @@ _⚠️ = skipped (credentials not available in this run). Latency and virtualiz
166
166
 
167
167
  ### Climate (`esd.climate`)
168
168
 
169
- | Data Source | Latest (Oct 19) | Oct 12 | Oct 5 | Sep 29 |
169
+ | Data Source | Latest (Oct 26) | Oct 19 | Oct 12 | Oct 5 |
170
170
  | :---------- | :------: | :------: | :------: | :------: |
171
171
  | ARCO-ERA5 (GCS anonymous) | ✅ | ✅ | ✅ | ✅ |
172
172
  | ERA5 (Google Earth Engine) | ✅ | ✅ | ✅ | ✅ |
173
- | Climate indices (CPC RONI) | ✅ | — | — | — |
174
- | Climate indices (NCEI PDO) | ✅ | — | — | — |
175
- | Climate indices (PSL MEI.v2) | ✅ | — | — | — |
176
- | Climate indices (PSL pdo.data) | ✅ | — | — | — |
173
+ | Climate indices (CPC RONI) | ✅ | ✅ | — | — |
174
+ | Climate indices (NCEI PDO) | ✅ | ✅ | — | — |
175
+ | Climate indices (PSL MEI.v2) | ✅ | ✅ | — | — |
176
+ | Climate indices (PSL pdo.data) | ✅ | ✅ | — | — |
177
177
  | Köppen-Geiger classification (figshare) | ✅ | ✅ | ✅ | ✅ |
178
178
  <!-- DATA_STATUS_END -->
179
179
 
@@ -425,6 +425,14 @@ id = "page-cdec-news"
425
425
  url = "https://water.ca.gov/News"
426
426
  products = ["cdec-stations"]
427
427
 
428
+ [[page]]
429
+ id = "page-ceaza-ws-doc"
430
+ # CEAZA-Met's web-service documentation and terms of use. Its coordinator
431
+ # said (e-mail, 2026-10-23) that API keys will replace the user= name "in the
432
+ # coming months"; a change here is the early warning for CEAZAClient.
433
+ url = "https://www.ceazamet.cl/ws/pop_ws_doc.php"
434
+ products = ["snow-station-archive"]
435
+
428
436
  [[page]]
429
437
  id = "page-earth-search"
430
438
  url = "https://element84.com/earth-search/"
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.3.3'
22
- __version_tuple__ = version_tuple = (0, 3, 3)
21
+ __version__ = version = '0.3.4'
22
+ __version_tuple__ = version_tuple = (0, 3, 4)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -289,7 +289,7 @@ YUKON_PRODUCT = Product(
289
289
  temporal="~1975/present",
290
290
  latency="hours to a day",
291
291
  notes="the open AquaCache REST API; no account",
292
- title="Yukon Water Data (AquaCache) API v1",
292
+ title="Yukon Water Data (AquaCache) API v2",
293
293
  health=_health_probe(
294
294
  "Yukon stations (AquaCache API)",
295
295
  f"{networks.NETWORKS['yukon'].api_url}/locations?limit=1",
@@ -298,15 +298,20 @@ YUKON_PRODUCT = Product(
298
298
  ),
299
299
  variables=variables_for("yukon"),
300
300
  citation=(
301
- "Government of Yukon, Water Resources Branch. Yukon Water Data "
302
- "(AquaCache) API; Yukon Snow Survey Network."
301
+ "Government of Yukon, Department of Environment, Water Science and "
302
+ "Stewardship Branch. Yukon Water Data (AquaCache) API v2, "
303
+ "https://service.yukon.ca/water-data/api/v2/; Yukon Snow Survey "
304
+ "Network. Contains information licensed under the Open Government "
305
+ "Licence – Yukon."
303
306
  ),
304
307
  license="Open Government Licence – Yukon",
305
308
  loader=_LOADER,
306
309
  examples=("stations/plot_yukon_stations.py", "stations/plot_all_networks.py"),
307
310
  references=(
311
+ "https://service.yukon.ca/water-data/api/v2/__docs__/",
308
312
  "https://service.yukon.ca/water-data/shiny/?page=home&lang=en",
309
313
  "https://yukon.ca/en/snow-survey-bulletin",
314
+ "https://open.yukon.ca/node/15612",
310
315
  ),
311
316
  tags=("swe", "snow depth", "stations", "yukon", "snow course"),
312
317
  )
@@ -758,7 +758,7 @@ per API key — the client spaces requests and honours `Retry-After` on 429.
758
758
 
759
759
  **Module:** `easysnowdata.stations.clients.yukon.yukon_client`
760
760
  **Class:** `YukonClient`
761
- **API:** [AquaCache API v1](https://service.yukon.ca/water-data/api/v1/openapi.json)
761
+ **API:** [AquaCache API v2](https://service.yukon.ca/water-data/api/v2/__docs__/)
762
762
  **Operator:** Yukon Government Department of Environment, Water Science and
763
763
  Stewardship
764
764
 
@@ -814,7 +814,7 @@ variables are already metric.
814
814
 
815
815
  ```python
816
816
  YukonClient(
817
- base_url: str = "https://service.yukon.ca/water-data/api/v1",
817
+ base_url: str = "https://service.yukon.ca/water-data/api/v2",
818
818
  timeout: int = 120,
819
819
  max_retries: int = 3,
820
820
  backoff: int = 4,
@@ -841,6 +841,10 @@ The continuous-series catalogue. Only series whose parameter appears in
841
841
  groundwater and water-quality series that have no place in a snow archive.
842
842
  This is the source of truth for per-station variable inventories, so period of
843
843
  record and interval always reflect what the API currently serves.
844
+ `publicly_visible_only` (default True) drops series AquaCache hides from its
845
+ default public listings. The flag is read from `default_show`, which AquaCache
846
+ patch 65 renamed from `publicly_visible` on 2026-10-15; a response carrying
847
+ neither column counts every series as shown.
844
848
 
845
849
  #### `get_snow_course_stations(active_only, bbox)` → `list[dict]`
846
850
 
@@ -971,7 +975,7 @@ Five vocabularies, exported separately and unioned into `DATA_FLAGS`:
971
975
  | Course trends | `GET /snow-survey/trends` |
972
976
  | Flag vocabularies | `GET /grades`, `/approvals`, `/qualifiers` |
973
977
 
974
- Base URL: `https://service.yukon.ca/water-data/api/v1`
978
+ Base URL: `https://service.yukon.ca/water-data/api/v2`
975
979
 
976
980
  ### Notes and gotchas
977
981
 
@@ -66,7 +66,9 @@ Known quirks (checked October 2026)
66
66
  date range and also with the documentation's example ``user`` values.
67
67
  The **JSON** form returned full ranges (13 years daily for Tascadero
68
68
  snow depth, 4,748 rows, in 3.5 s). The client uses JSON and splits
69
- requests into windows of 10 years (daily) or one year (hourly).
69
+ requests into windows of at most one year (365 days), the limit CEAZA-Met
70
+ gave for registered users (e-mail from Cristian Orrego, 2026-10-23: "hasta
71
+ 1 año en cada [consulta]").
70
72
  - Errors come back as HTTP 200: an unsupported ``interv`` gives an HTML
71
73
  ``<p>ERROR en lib_datos…</p>`` before the JSON (no ``serie``); an unknown
72
74
  sensor gives ``e_cod: null`` and a ``serie`` of empty rows. Both raise
@@ -194,7 +196,8 @@ SENSOR_COLUMNS = (
194
196
 
195
197
  #: Interval enum → ``interv`` code, and the request window per interval.
196
198
  _INTERV: dict[str, str] = {"daily": "dia", "hourly": "hora"}
197
- _WINDOW_DAYS: dict[str, int] = {"daily": 3650, "hourly": 365}
199
+ #: CEAZA-Met allows registered users at most one year per request.
200
+ _WINDOW_DAYS: dict[str, int] = {"daily": 365, "hourly": 365}
198
201
 
199
202
  #: Earliest date the documentation allows for ``fecha_inicio``.
200
203
  _EARLIEST = "2004-01-31"
@@ -14,9 +14,14 @@ Primary use cases:
14
14
  daily snow-depth records reaching the Arctic coast (Herschel Island
15
15
  69.57°N; Komakuk Beach from 1963).
16
16
 
17
- API documentation : https://service.yukon.ca/water-data/api/v1/openapi.json
18
- Base URL : https://service.yukon.ca/water-data/api/v1
17
+ API documentation : https://service.yukon.ca/water-data/api/v2/__docs__/
18
+ Base URL : https://service.yukon.ca/water-data/api/v2
19
19
  Authentication : None — the API is fully open.
20
+ Source code : https://github.com/YukonWRB/YGwater (``inst/plumber/``; as of
21
+ 2026-10-26 the live API matches ``dev.WRB``, not ``main``) on top of
22
+ the https://github.com/YukonWRB/AquaCache database, whose
23
+ ``inst/patches/`` record schema changes such as the
24
+ ``publicly_visible`` → ``default_show`` rename.
20
25
 
21
26
  Endpoints used
22
27
  --------------
@@ -114,7 +119,10 @@ logger = logging.getLogger(__name__)
114
119
 
115
120
  # ── Constants ────────────────────────────────────────────────────────────────
116
121
 
117
- BASE_URL = "https://service.yukon.ca/water-data/api/v1"
122
+ BASE_URL = "https://service.yukon.ca/water-data/api/v2"
123
+
124
+ #: Identifies easysnowdata traffic to the AquaCache operators.
125
+ _USER_AGENT = "easysnowdata (+https://github.com/egagli/easysnowdata)"
118
126
 
119
127
  _DEFAULT_TIMEOUT = 120
120
128
  _DEFAULT_RETRIES = 3
@@ -207,7 +215,7 @@ _ROW_LIMIT = 1_000_000
207
215
  #: depth starts 1963-12-26, so 1900 is comfortably early.
208
216
  _EPOCH = "1900-01-01"
209
217
 
210
- _YUKON_DATA_SOURCE = f"Yukon Water Data (AquaCache) API v1 — {BASE_URL}"
218
+ _YUKON_DATA_SOURCE = f"Yukon Water Data (AquaCache) API v2 — {BASE_URL}"
211
219
 
212
220
  # ── Public variable / flag tables ────────────────────────────────────────────
213
221
 
@@ -533,6 +541,15 @@ def _to_bool(value: Any) -> bool:
533
541
  return str(value).strip().upper() == "TRUE"
534
542
 
535
543
 
544
+ def _series_shown(row: dict) -> bool:
545
+ """Read a ``/timeseries`` row's ``default_show`` flag (``publicly_visible``
546
+ before AquaCache patch 65); a row carrying neither counts as shown."""
547
+ for key in ("default_show", "publicly_visible"):
548
+ if key in row:
549
+ return _to_bool(row[key])
550
+ return True
551
+
552
+
536
553
  def _normalize_value(value: Any) -> float | None:
537
554
  """Convert a raw field to float, mapping sentinels to ``None``."""
538
555
  num = _to_float(value)
@@ -830,7 +847,7 @@ class YukonClient:
830
847
  self.max_retries = max_retries
831
848
  self.backoff = backoff
832
849
  self._session = session or requests.Session()
833
- self._session.headers.update({"Accept": "text/csv"})
850
+ self._session.headers.update({"Accept": "text/csv", "User-Agent": _USER_AGENT})
834
851
 
835
852
  # Response caches — the catalogue endpoints are queried repeatedly
836
853
  # while resolving stations and variables.
@@ -915,7 +932,9 @@ class YukonClient:
915
932
  variables : list[str] or str, optional
916
933
  Restrict to these :data:`VARIABLES` keys or standardized types.
917
934
  publicly_visible_only : bool
918
- Drop series flagged ``publicly_visible = FALSE`` (default True).
935
+ Drop series AquaCache hides from its default public listings
936
+ (``default_show = FALSE``, formerly ``publicly_visible``;
937
+ default True).
919
938
 
920
939
  Returns
921
940
  -------
@@ -1810,7 +1829,9 @@ class YukonClient:
1810
1829
  "start_datetime": (row.get("start_datetime") or "").strip(),
1811
1830
  "end_datetime": (row.get("end_datetime") or "").strip(),
1812
1831
  "active": _to_bool(row.get("active")),
1813
- "publicly_visible": _to_bool(row.get("publicly_visible")),
1832
+ # AquaCache patch 65 (2026-10-15) renamed publicly_visible to
1833
+ # default_show; read either, and count a row with neither as shown.
1834
+ "publicly_visible": _series_shown(row),
1814
1835
  "owner": (row.get("default_owner") or "").strip(),
1815
1836
  "networks": _parse_pg_array(row.get("networks")),
1816
1837
  }
@@ -131,7 +131,7 @@ NETWORKS: dict[str, Network] = {
131
131
  requires=(),
132
132
  extent="Yukon and neighbouring BC/Alaska courses",
133
133
  data_provider="Government of Yukon",
134
- api_url="https://service.yukon.ca/water-data/api/v1",
134
+ api_url="https://service.yukon.ca/water-data/api/v2",
135
135
  id_key="station_id",
136
136
  # "09AA-M1", "08AA-SC01", "10MD-MET-00004" — hyphenated
137
137
  code_pattern=r"^[0-9]{2}[A-Z]{2}-[A-Z0-9-]+$",
@@ -8,7 +8,7 @@ stub session. ``live`` tests hit the real web service (no credentials).
8
8
  """
9
9
 
10
10
  import json
11
- from datetime import date
11
+ from datetime import date, timedelta
12
12
 
13
13
  import pytest
14
14
 
@@ -453,18 +453,23 @@ def test_get_data_hourly_has_datetime(client, session):
453
453
 
454
454
  def test_get_data_clips_to_sensor_dates_and_splits_windows(client, session):
455
455
  # No dates: each sensor from its first reading to its last (HUAL ended
456
- # 2019), in ≤ 10-year windows.
456
+ # 2019), in windows of at most one year (CEAZA-Met's per-request limit).
457
457
  client.get_data("HUAL", variables="snwd")
458
- (call,) = session.series_calls()
459
- assert (call["s_cod"], call["fecha_inicio"], call["fecha_fin"]) == (
460
- "HUALAN",
461
- "2014-04-30",
462
- "2019-10-23",
458
+ calls = session.series_calls()
459
+ assert {c["s_cod"] for c in calls} == {"HUALAN"}
460
+ spans = [(c["fecha_inicio"], c["fecha_fin"]) for c in calls]
461
+ assert spans[0][0] == "2014-04-30" and spans[-1][1] == "2019-10-23"
462
+ for (b, e), (nb, _) in zip(spans, spans[1:]):
463
+ assert date.fromisoformat(nb) == date.fromisoformat(e) + timedelta(days=1)
464
+ assert all(
465
+ (date.fromisoformat(e) - date.fromisoformat(b)).days < 365 for b, e in spans
463
466
  )
464
467
  session.calls.clear()
465
468
  client.get_data("TASC", variables="ae_mm", end_date="2025-12-31")
466
469
  spans = [(c["fecha_inicio"], c["fecha_fin"]) for c in session.series_calls()]
467
- assert spans == [("2012-11-27", "2022-11-24"), ("2022-11-25", "2025-12-31")]
470
+ assert len(spans) == 14
471
+ assert spans[0] == ("2012-11-27", "2013-11-26")
472
+ assert spans[-1][1] == "2025-12-31"
468
473
  session.calls.clear()
469
474
  # Outside a sensor's life: no request at all.
470
475
  assert client.get_data("HUAL", begin_date="2024-01-01") == []
@@ -900,3 +900,24 @@ def test_temperature_output_units_are_degrees_celsius():
900
900
  if unit != "°C":
901
901
  bad[(name, key)] = unit
902
902
  assert bad == {}, bad
903
+
904
+
905
+ @pytest.mark.parametrize(
906
+ ("extra", "shown"),
907
+ [
908
+ ({"default_show": "TRUE"}, True),
909
+ ({"default_show": "FALSE"}, False),
910
+ # Responses from before AquaCache patch 65 (2026-10-15).
911
+ ({"publicly_visible": "TRUE"}, True),
912
+ ({"publicly_visible": "FALSE"}, False),
913
+ ({}, True),
914
+ ],
915
+ )
916
+ def test_yukon_series_visibility_flag(extra, shown):
917
+ row = {
918
+ "timeseries_id": "1",
919
+ "parameter_name": "snow depth",
920
+ "aggregation_type": "",
921
+ **extra,
922
+ }
923
+ assert YukonClient()._parse_series(row)["publicly_visible"] is shown
@@ -2,7 +2,7 @@
2
2
  Live-API tests for YukonClient.
3
3
 
4
4
  These tests hit the real Yukon Water Data (AquaCache) API
5
- (https://service.yukon.ca/water-data/api/v1) — an internet connection is
5
+ (https://service.yukon.ca/water-data/api/v2) — an internet connection is
6
6
  required. No API key is needed; the service is fully open.
7
7
 
8
8
  Station-level assertions use long-running Yukon Snow Survey sites: the
File without changes
File without changes
File without changes
File without changes