spai 2026.3.18.dev0__tar.gz → 2026.3.35.dev0__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 (212) hide show
  1. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/PKG-INFO +1 -1
  2. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/pyproject.toml +1 -1
  3. spai-2026.3.35.dev0/spai/__init__.py +1 -0
  4. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/load.py +0 -19
  5. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/models/Config.py +7 -0
  6. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/S3Storage.py +9 -12
  7. spai-2026.3.18.dev0/spai/__init__.py +0 -1
  8. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/.gitignore +0 -0
  9. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/README.md +0 -0
  10. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/__init__.py +0 -0
  11. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/00_setup.ipynb +0 -0
  12. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/00bis_download_satellite_imagery.ipynb +0 -0
  13. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/01_satellite_data_access.ipynb +0 -0
  14. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/02_geospatial_data_access.ipynb +0 -0
  15. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/03_storage.ipynb +0 -0
  16. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/04_infra_management.ipynb +0 -0
  17. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/05_mails.ipynb +0 -0
  18. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/99_new_data_access.ipynb +0 -0
  19. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/03_xyz_api.ipynb +0 -0
  20. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/03_xyz_api.py +0 -0
  21. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/05_nominatim_example.ipynb +0 -0
  22. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/06_colorize.ipynb +0 -0
  23. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/10_select_one_gdf_from_map.ipynb +0 -0
  24. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/11_forest_monitoring_flow.ipynb +0 -0
  25. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/12_forest_monitoring.ipynb +0 -0
  26. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/13_ms_buildings_download.ipynb +0 -0
  27. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/13_water_quality_flow.ipynb +0 -0
  28. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/14_download_dem.ipynb +0 -0
  29. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/14_water_quality.ipynb +0 -0
  30. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/development/15_perform_analysis.ipynb +0 -0
  31. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/legacy/00_download_satellite_imagery.ipynb +0 -0
  32. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/legacy/01_process_satellite_imagery.ipynb +0 -0
  33. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/legacy/02_analytics.ipynb +0 -0
  34. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/legacy/04_download_satellite_imagery_advanced.ipynb +0 -0
  35. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/legacy/21_storage.ipynb +0 -0
  36. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/llanca 2.geojson +0 -0
  37. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/llanca.geojson +0 -0
  38. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/map.geojson +0 -0
  39. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/sample.pdf +0 -0
  40. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/examples/samples/AOI_Vegetation_Growth.json +0 -0
  41. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/main.py +0 -0
  42. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/makefile +0 -0
  43. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/analytics/__init__.py +0 -0
  44. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/analytics/forest_monitoring.py +0 -0
  45. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/analytics/utils.py +0 -0
  46. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/analytics/water_quality.py +0 -0
  47. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/auth/__init__.py +0 -0
  48. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/auth/auth.py +0 -0
  49. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/auth/is_logged.py +0 -0
  50. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/auth/logout.py +0 -0
  51. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/auth/retrieve_credentials.py +0 -0
  52. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/cli.py +0 -0
  53. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/commands/__init__.py +0 -0
  54. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/commands/auth.py +0 -0
  55. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/commands/list.py +0 -0
  56. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/commands/stop.py +0 -0
  57. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/commands/workspace.py +0 -0
  58. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/config/__init__.py +0 -0
  59. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/config/config.py +0 -0
  60. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/config/validate.py +0 -0
  61. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/config/vars.py +0 -0
  62. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/__init__.py +0 -0
  63. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/climate/README.md +0 -0
  64. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/climate/__init__.py +0 -0
  65. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/climate/area_of_interest.py +0 -0
  66. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/climate/reanalysis_land_era5.py +0 -0
  67. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/ecosystems/__init__.py +0 -0
  68. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/ecosystems/protected_areas.py +0 -0
  69. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/fire/__init__.py +0 -0
  70. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/fire/fwi/__init__.py +0 -0
  71. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/fire/fwi/fwi_nasa.py +0 -0
  72. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/hidrology/__init__.py +0 -0
  73. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/hidrology/waterbodies.py +0 -0
  74. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/hidrology/waterways.py +0 -0
  75. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/__init__.py +0 -0
  76. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/download.py +0 -0
  77. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/explore.py +0 -0
  78. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PCH4Downloader.py +0 -0
  79. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PCODownloader.py +0 -0
  80. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PDownloader.py +0 -0
  81. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PHCHODownloader.py +0 -0
  82. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PNO2Downloader.py +0 -0
  83. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PO3Downloader.py +0 -0
  84. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/SHS5PSO2Downloader.py +0 -0
  85. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/S5P/__init__.py +0 -0
  86. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHCloudMaskDownloader.py +0 -0
  87. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHDEM30Downloader.py +0 -0
  88. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHDownloader.py +0 -0
  89. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHExplorer.py +0 -0
  90. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS1Downloader.py +0 -0
  91. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS2Downloader.py +0 -0
  92. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS2L1CDownloader.py +0 -0
  93. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS2L2ADownloader.py +0 -0
  94. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS3OLCIDownloader.py +0 -0
  95. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/SHS3SLSTRDownloader.py +0 -0
  96. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/sentinelhub/__init__.py +0 -0
  97. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/STACDownloader.py +0 -0
  98. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/__init__.py +0 -0
  99. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/AWSDEM30Downloader.py +0 -0
  100. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/AWSDEM90Downloader.py +0 -0
  101. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/AWSDEMDownloader.py +0 -0
  102. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/AWSDownloader.py +0 -0
  103. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/AWSS2L2ADownloader.py +0 -0
  104. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/aws/__init__.py +0 -0
  105. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/decorators.py +0 -0
  106. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCAlosPalsarAnnualDownloader.py +0 -0
  107. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCDownloader.py +0 -0
  108. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCESAWCDownloader.py +0 -0
  109. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCLandsat8Downloader.py +0 -0
  110. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCModisBurnedDownloader.py +0 -0
  111. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCModisSnow8Downloader.py +0 -0
  112. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCModisSnowDayDownloader.py +0 -0
  113. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCS1GRDDownloader.py +0 -0
  114. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/PCS1RTCDownloader.py +0 -0
  115. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/stac/pc/__init__.py +0 -0
  116. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/satellite/utils.py +0 -0
  117. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/sources/__init__.py +0 -0
  118. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/sources/osm.py +0 -0
  119. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/utilities/__init__.py +0 -0
  120. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/utilities/buildings.py +0 -0
  121. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/utilities/pipelines.py +0 -0
  122. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/utilities/power.py +0 -0
  123. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/data/utilities/roads.py +0 -0
  124. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/errors/__init__.py +0 -0
  125. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/errors/auth.py +0 -0
  126. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/__init__.py +0 -0
  127. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/utils.py +0 -0
  128. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/xyz/__init__.py +0 -0
  129. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/xyz/cache.py +0 -0
  130. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/xyz/errors.py +0 -0
  131. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/xyz/get_image_tile.py +0 -0
  132. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/image/xyz/image_utils.py +0 -0
  133. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/models/StorageConfig.py +0 -0
  134. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/models/__init__.py +0 -0
  135. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/__init__.py +0 -0
  136. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/autocategorize1D.py +0 -0
  137. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/colorize_raster.py +0 -0
  138. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/convert_array_to_vector.py +0 -0
  139. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/mask_raster.py +0 -0
  140. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/normalised_difference.py +0 -0
  141. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/px_count.py +0 -0
  142. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/rasterio_mask.py +0 -0
  143. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/read_raster.py +0 -0
  144. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/save_table.py +0 -0
  145. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/processing/utils.py +0 -0
  146. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/__init__.py +0 -0
  147. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/delete_project.py +0 -0
  148. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/deploy_folder.py +0 -0
  149. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/deploy_template.py +0 -0
  150. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/download_template.py +0 -0
  151. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/get_logs.py +0 -0
  152. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/get_project_by_name.py +0 -0
  153. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/get_projects.py +0 -0
  154. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/get_service_by_name_type_project.py +0 -0
  155. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/get_services.py +0 -0
  156. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/init_project.py +0 -0
  157. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/install_requirements.py +0 -0
  158. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/README.md +0 -0
  159. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/__init__.py +0 -0
  160. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/__init__.py +0 -0
  161. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/analytics/__init__.py +0 -0
  162. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/analytics/main.py +0 -0
  163. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/analytics/requirements.txt +0 -0
  164. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/xyz/__init__.py +0 -0
  165. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/xyz/main.py +0 -0
  166. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/apis/xyz/requirements.txt +0 -0
  167. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/notebooks/analytics/main.ipynb +0 -0
  168. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/notebooks/analytics/requirements.txt +0 -0
  169. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/scripts/analytics/main.py +0 -0
  170. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/scripts/analytics/requirements.txt +0 -0
  171. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/scripts/downloader/main.py +0 -0
  172. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/scripts/downloader/requirements.txt +0 -0
  173. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/spai.config.local.yaml +0 -0
  174. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/spai.config.yaml +0 -0
  175. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/spai.vars.json +0 -0
  176. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/uis/map/main.py +0 -0
  177. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/project_template/uis/map/requirements.txt +0 -0
  178. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/run_local.py +0 -0
  179. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/project/stop_service.py +0 -0
  180. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/repos/APIRepo.py +0 -0
  181. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/repos/AuthRepo.py +0 -0
  182. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/repos/__init__.py +0 -0
  183. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/BaseStorage.py +0 -0
  184. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/CloudStorage.py +0 -0
  185. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/LocalStorage.py +0 -0
  186. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/Storage.py +0 -0
  187. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/__init__.py +0 -0
  188. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/create_s3.py +0 -0
  189. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/decorators.py +0 -0
  190. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/storage/minio.py +0 -0
  191. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/task_logging/task_logger.py +0 -0
  192. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/add_user_to_workspace.py +0 -0
  193. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/change_user_role.py +0 -0
  194. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/create_workspace.py +0 -0
  195. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/get_workspaces.py +0 -0
  196. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/remove_user_from_workspace.py +0 -0
  197. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/remove_workspace.py +0 -0
  198. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/spai/workspaces/update_workspace.py +0 -0
  199. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/__init__.py +0 -0
  200. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/config/__init__.py +0 -0
  201. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/config/test_vars.py +0 -0
  202. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/task_logging/test_task_logger.py +0 -0
  203. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/__init__.py +0 -0
  204. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_autocategorize1D.py +0 -0
  205. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_mask_raster.py +0 -0
  206. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_normalised_difference.py +0 -0
  207. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_px_count.py +0 -0
  208. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_read_raster.py +0 -0
  209. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_processing/test_save_table.py +0 -0
  210. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_pulses/__init__.py +0 -0
  211. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_pulses/results_forest_monitoring.ipynb +0 -0
  212. {spai-2026.3.18.dev0 → spai-2026.3.35.dev0}/tests/test_pulses/results_water_quality.ipynb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spai
3
- Version: 2026.3.18.dev0
3
+ Version: 2026.3.35.dev0
4
4
  Author-email: Jan Sensio <it@earthpulse.es>
5
5
  Requires-Python: >=3.12
6
6
  Requires-Dist: bson>=0.5.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "spai"
3
- version = "2026.03.18.dev0"
3
+ version = "2026.03.35.dev0"
4
4
  description = ""
5
5
  authors = [{name = "Jan Sensio", email = "it@earthpulse.es"}]
6
6
  readme = "README.md"
@@ -0,0 +1 @@
1
+ __version__ = "2026.03.35.dev0"
@@ -7,24 +7,10 @@ from datetime import datetime
7
7
 
8
8
  from . import DOWNLOADERS, AVAILABLE_COLLECTIONS, STATIC_COLLECTIONS
9
9
  from .stac.STACDownloader import STACDownloader
10
- from .stac.pc.PCDownloader import PCDownloader
11
10
  from .utils import create_aoi_geodataframe
12
11
  from .explore import explore_satellite_imagery
13
12
 
14
13
 
15
- # when running for more than 45 mins, a script that downloads data from planetary computer will fail with a token error
16
- # this function clears the token cache to avoid this error
17
- def _refresh_planetary_computer_tokens():
18
- try:
19
- from planetary_computer.sas import TOKEN_CACHE
20
-
21
- TOKEN_CACHE.clear()
22
-
23
- print("Planetary Computer tokens refreshed", flush=True)
24
- except ImportError:
25
- pass
26
-
27
-
28
14
  def load_satellite_imagery(
29
15
  aoi: Any,
30
16
  date: Optional[List[Union[str, datetime]]] = None,
@@ -85,11 +71,6 @@ def load_satellite_imagery(
85
71
  print("Try introducing a date parameter to load a specific image.")
86
72
  return
87
73
 
88
- if issubclass(
89
- DOWNLOADERS[collection], PCDownloader
90
- ): # not sure if should apply to other Downloaders as well
91
- _refresh_planetary_computer_tokens()
92
-
93
74
  downloader = DOWNLOADERS[collection](bbox, date, **kwargs)
94
75
  data = downloader.load_stac()
95
76
 
@@ -17,6 +17,7 @@ class Resources(BaseModel):
17
17
  cpu: Optional[Union[str, float]] = None
18
18
  memory: Optional[str] = None
19
19
  gpu: Optional[int] = None
20
+ ephemeral_storage: Optional[str] = None
20
21
 
21
22
  def __init__(self, **data):
22
23
  super().__init__(**data)
@@ -32,6 +33,12 @@ class Resources(BaseModel):
32
33
  raise ValueError("CPU must be positive.")
33
34
  if self.gpu is not None and self.gpu < 0:
34
35
  raise ValueError("GPU must be positive.")
36
+ if self.ephemeral_storage is not None:
37
+ pattern = r"^\d+(Ei|Pi|Ti|Gi|Mi|Ki)$"
38
+ if not re.match(pattern, self.ephemeral_storage):
39
+ raise ValueError(
40
+ "Ephemeral storage must be a string with a number followed by a unit (Ei, Pi, Ti, Gi, Mi, Ki), such as 2Gi. "
41
+ )
35
42
 
36
43
 
37
44
  class Autoscaling(BaseModel):
@@ -154,18 +154,16 @@ class S3Storage(BaseStorage):
154
154
 
155
155
  @with_rioxarray
156
156
  def create_from_rioxarray(self, rxr, data, name):
157
- # TODO don't save to disk
158
157
  content_type = "image/tiff"
159
- tmp_path = f"/tmp/{name}"
160
- self._create_dir(tmp_path)
161
- data.rio.to_raster(tmp_path)
162
- self.client.fput_object(
163
- self.bucket,
164
- name,
165
- tmp_path,
166
- content_type=content_type,
167
- )
168
- # shutil.rmtree(os.path.dirname(tmp_path))
158
+ with tempfile.TemporaryDirectory() as tmp_dir:
159
+ tmp_path = os.path.join(tmp_dir, name)
160
+ data.rio.to_raster(tmp_path)
161
+ self.client.fput_object(
162
+ self.bucket,
163
+ name,
164
+ tmp_path,
165
+ content_type=content_type,
166
+ )
169
167
  return self.get_url(name)
170
168
 
171
169
  def create_from_array(self, data, name):
@@ -322,7 +320,6 @@ class S3Storage(BaseStorage):
322
320
 
323
321
  @with_xarray
324
322
  def create_from_netcdf(self, xr, data, name):
325
-
326
323
  with tempfile.NamedTemporaryFile() as temp_file:
327
324
  data.to_netcdf(temp_file.name)
328
325
  self.client.fput_object(
@@ -1 +0,0 @@
1
- __version__ = "2026.03.18.dev0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes