PyGeoFetch 2.5.0__tar.gz → 2.6.0__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.
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/CHANGELOG.md +5 -5
- {pygeofetch-2.5.0/pygeofetch.egg-info → pygeofetch-2.6.0}/PKG-INFO +2 -2
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/__init__.py +1 -1
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/preflight.py +43 -4
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-2.5.0 → pygeofetch-2.6.0/pygeofetch.egg-info}/PKG-INFO +2 -2
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/requires.txt +1 -1
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pyproject.toml +2 -2
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/LICENSE +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/MANIFEST.in +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/README.md +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/auth_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/main.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/cli/search_commands.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/downloader.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/engine.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/core/searcher.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/analysis.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/annotation.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/atmosphere.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/coregister.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/deburst.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/esd.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/extraction.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/flatearth.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/geolocation.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/gpu.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/interferogram.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/ionosphere.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/provenance.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/stack_selection.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/synthetic.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/timeseries.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/unwrap.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/validate.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/visualize.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/insar/workflow.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/base.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/indices.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/preprocessor.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processing/sar.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/indices.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/stacker.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/processor/timeseries.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/airbus_oneatlas.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/alaska_satellite_facility.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/aws_earth.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/base.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/copernicus.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/copernicus_nodes.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/digitalglobe.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/earth_explorer_additional.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/element84.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/eodag_provider.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/esa_scihub.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/geoserver_generic.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/google_earth_engine.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/inpe_cbers.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/isro_bhuvan.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/jaxa_earth.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/maxar_gbdx.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/nasa_earthdata.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/nasa_earthdata_cloud.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/noaa_big_data.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/opentopography.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/planet.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/planetary_computer.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/sentinel_hub.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/terrabotics.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/providers/usgs.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/_native.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/extraction.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/sar/processor.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/gcp_recovery.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/viz/__init__.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/viz/map.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch/viz/plot.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/SOURCES.txt +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/setup.cfg +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_atmospheric_circular_regression (1).py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_atmospheric_circular_regression.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_build_sbas_network.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_burst_metadata.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_burst_processing_integration.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_burst_sync_large_gap.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_burst_sync_prescreening.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_burst_synchronization.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_copernicus_nodes.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_coregister_integration.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_coregister_upgrades.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_era5_atmospheric_correction.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_extraction.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_flat_earth_phase.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_gcp_reprojection.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_insar.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_ionosphere.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_map_preview_consolidation.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_models.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_pgv_integration_contract.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_preflight_gate (1).py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_preflight_gate.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_provider_geometry_audit (1).py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_provider_geometry_audit.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_provider_scene_disambiguation.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_providers.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_raster_collocation_integration.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_reference_pixel_and_despike.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_risk_mapping.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_screen_stack_orchestration.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_search_download.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_splitspectrum_diagnostic.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_stack_selection_consolidation.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_topo_r2_bug.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_utils.py +0 -0
- {pygeofetch-2.5.0 → pygeofetch-2.6.0}/tests/test_viz_plot.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
All notable changes to PyGeoFetch are documented here.
|
|
4
|
-
Format follows [Keep a Changelog](https://keepachangelog.com/en/2.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/2.6.0/).
|
|
5
5
|
|
|
6
|
-
## [2.
|
|
6
|
+
## [2.6.0] — 2026-07-29
|
|
7
7
|
|
|
8
8
|
### Added
|
|
9
9
|
- Major SNAPHU unwrapping improvements for urban InSAR applications
|
|
@@ -72,7 +72,7 @@ unwrapped = unwrapper.unwrap(
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
75
|
-
## [2.
|
|
75
|
+
## [2.6.0] — 2026-07-12
|
|
76
76
|
|
|
77
77
|
### Added
|
|
78
78
|
- Federated search across 22+ satellite data providers
|
|
@@ -188,8 +188,8 @@ unwrapped = unwrapper.unwrap(
|
|
|
188
188
|
|
|
189
189
|
| Version | Date | Key Changes |
|
|
190
190
|
|---------|------------|-------------|
|
|
191
|
-
| **2.
|
|
192
|
-
| **2.
|
|
191
|
+
| **2.6.0** | 2026-07-29 | SNAPHU unwrapping fixes, 87.1% reliable pixels |
|
|
192
|
+
| **2.6.0** | 2026-07-12 | 22 providers, 17 indices, Sentinel-1C/D |
|
|
193
193
|
| **1.9.2** | 2026-06-15 | Batch processing, parallel downloads |
|
|
194
194
|
| **1.9.1** | 2026-05-20 | 3D terrain, SNAPHU integration, time series |
|
|
195
195
|
| **1.9.0** | 2026-04-25 | Initial public release |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: Universal satellite data pipeline + geospatial processing platform
|
|
5
5
|
Author-email: Samuel Appiah Kubi <appiahkubis14@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -97,7 +97,7 @@ Requires-Dist: geemap>=0.28.0; extra == "viz"
|
|
|
97
97
|
Requires-Dist: osmnx>=1.9.4; extra == "viz"
|
|
98
98
|
Requires-Dist: contextily>=1.9.4; extra == "viz"
|
|
99
99
|
Requires-Dist: xyzservices>=2023.10.0; extra == "viz"
|
|
100
|
-
Requires-Dist: mapclassify>=2.
|
|
100
|
+
Requires-Dist: mapclassify>=2.6.0; extra == "viz"
|
|
101
101
|
Requires-Dist: geoplot>=0.5.0; extra == "viz"
|
|
102
102
|
Requires-Dist: mplleaflet>=0.0.5; extra == "viz"
|
|
103
103
|
Requires-Dist: branca>=0.6.0; extra == "viz"
|
|
@@ -610,11 +610,14 @@ class PreflightGate:
|
|
|
610
610
|
advisory," never "risk confirmed absent."
|
|
611
611
|
"""
|
|
612
612
|
import tempfile
|
|
613
|
+
import shutil
|
|
614
|
+
import importlib
|
|
613
615
|
try:
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
616
|
+
for _mod_name in (
|
|
617
|
+
"pygeofetch.providers.copernicus_nodes", "pygeofetch.core.orbits",
|
|
618
|
+
"pygeofetch.insar.stack_selection", "pygeofetch.insar.geolocation",
|
|
619
|
+
):
|
|
620
|
+
importlib.import_module(_mod_name)
|
|
618
621
|
except ImportError as exc:
|
|
619
622
|
logger.info("Real pre-download burst check unavailable (%s).", exc)
|
|
620
623
|
return None
|
|
@@ -625,6 +628,42 @@ class PreflightGate:
|
|
|
625
628
|
logger.info("Real pre-download burst check: couldn't create a scratch dir (%s).", exc)
|
|
626
629
|
return None
|
|
627
630
|
|
|
631
|
+
# REAL BUG FOUND AND FIXED: work_dir was never removed on any exit
|
|
632
|
+
# path -- not on success, not on the early "too few usable dates"
|
|
633
|
+
# return, not on the exception fallback. Every real call to this
|
|
634
|
+
# method (i.e. every real preflight run with attempt_real_burst_
|
|
635
|
+
# check=True, which is the default) left behind a full scratch
|
|
636
|
+
# directory of real annotation mini-zips and real, full orbit
|
|
637
|
+
# files (~4MB+ each) that was never cleaned up. Re-running the
|
|
638
|
+
# same preflight cell repeatedly while iterating on a notebook --
|
|
639
|
+
# completely normal, everyday usage -- accumulates one orphaned
|
|
640
|
+
# directory per run, unbounded, on whatever drive the OS temp
|
|
641
|
+
# folder lives on (on Windows, typically the same small system
|
|
642
|
+
# drive as everything else). A real, concrete, plausible path to
|
|
643
|
+
# exhausting that drive, which is a well-known way to make a
|
|
644
|
+
# Jupyter kernel become unresponsive or fail to save cleanly --
|
|
645
|
+
# matching a real report of a notebook going inactive with blank
|
|
646
|
+
# cell outputs immediately after a preflight run. The real body
|
|
647
|
+
# of this method is now factored into _run_real_burst_family_check
|
|
648
|
+
# below, wrapped here so work_dir is removed on every real exit
|
|
649
|
+
# path, success or failure, not just the ones tested before.
|
|
650
|
+
try:
|
|
651
|
+
return self._run_real_burst_family_check(selected, work_dir)
|
|
652
|
+
finally:
|
|
653
|
+
shutil.rmtree(work_dir, ignore_errors=True)
|
|
654
|
+
|
|
655
|
+
def _run_real_burst_family_check(self, selected: List[Any], work_dir: Path):
|
|
656
|
+
"""
|
|
657
|
+
The real body of _try_real_burst_family_check(), factored out so
|
|
658
|
+
that method's own try/finally can guarantee work_dir cleanup on
|
|
659
|
+
every real exit path here -- including the early returns --
|
|
660
|
+
without duplicating the rmtree call at each one.
|
|
661
|
+
"""
|
|
662
|
+
from pygeofetch.providers.copernicus_nodes import fetch_annotation_zip
|
|
663
|
+
from pygeofetch.core.orbits import fetch_orbit_file
|
|
664
|
+
from pygeofetch.insar.stack_selection import select_burst_synchronized_dates
|
|
665
|
+
from pygeofetch.insar.geolocation import geodetic_to_ecef
|
|
666
|
+
|
|
628
667
|
safe_zips: Dict[str, Any] = {}
|
|
629
668
|
orbit_files: Dict[str, Any] = {}
|
|
630
669
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: Universal satellite data pipeline + geospatial processing platform
|
|
5
5
|
Author-email: Samuel Appiah Kubi <appiahkubis14@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -97,7 +97,7 @@ Requires-Dist: geemap>=0.28.0; extra == "viz"
|
|
|
97
97
|
Requires-Dist: osmnx>=1.9.4; extra == "viz"
|
|
98
98
|
Requires-Dist: contextily>=1.9.4; extra == "viz"
|
|
99
99
|
Requires-Dist: xyzservices>=2023.10.0; extra == "viz"
|
|
100
|
-
Requires-Dist: mapclassify>=2.
|
|
100
|
+
Requires-Dist: mapclassify>=2.6.0; extra == "viz"
|
|
101
101
|
Requires-Dist: geoplot>=0.5.0; extra == "viz"
|
|
102
102
|
Requires-Dist: mplleaflet>=0.0.5; extra == "viz"
|
|
103
103
|
Requires-Dist: branca>=0.6.0; extra == "viz"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pygeofetch"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.6.0"
|
|
8
8
|
description = "Universal satellite data pipeline + geospatial processing platform"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -100,7 +100,7 @@ viz = [
|
|
|
100
100
|
"osmnx>=1.9.4",
|
|
101
101
|
"contextily>=1.9.4",
|
|
102
102
|
"xyzservices>=2023.10.0",
|
|
103
|
-
"mapclassify>=2.
|
|
103
|
+
"mapclassify>=2.6.0",
|
|
104
104
|
"geoplot>=0.5.0",
|
|
105
105
|
"mplleaflet>=0.0.5",
|
|
106
106
|
"branca>=0.6.0",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|