PyGeoFetch 2.5.0__py3-none-any.whl → 2.6.0__py3-none-any.whl

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/__init__.py CHANGED
@@ -30,7 +30,7 @@ CLI::
30
30
  pygeofetch doctor
31
31
  """
32
32
 
33
- __version__ = "2.5.0"
33
+ __version__ = "2.6.0"
34
34
  __author__ = "PyGeoFetch Contributors"
35
35
  __license__ = "MIT"
36
36
 
@@ -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
- from pygeofetch.providers.copernicus_nodes import fetch_annotation_zip
615
- from pygeofetch.core.orbits import fetch_orbit_file
616
- from pygeofetch.insar.stack_selection import select_burst_synchronized_dates
617
- from pygeofetch.insar.geolocation import geodetic_to_ecef
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
 
pygeofetch/meta.yaml CHANGED
@@ -1,4 +1,4 @@
1
- {% set version = "2.5.0" %}
1
+ {% set version = "2.6.0" %}
2
2
 
3
3
  package:
4
4
  name: pygeofetch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeofetch
3
- Version: 2.5.0
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.5.0; extra == "viz"
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"
@@ -1,5 +1,5 @@
1
- pygeofetch/__init__.py,sha256=GWQJPhEHRE912aufB3A3thLi87N5Zj_ZjsPVa08UQUA,1990
2
- pygeofetch/meta.yaml,sha256=5hj9c3zPaZ-aRyPnb1xpN-2jgrw7L_AB2qW3hfoLURg,1280
1
+ pygeofetch/__init__.py,sha256=F_VEyEH--uQTGhKk1eN2qwI_l3wf50SG8uyfXhHjXUU,1990
2
+ pygeofetch/meta.yaml,sha256=2JkF_wWstJBRpaC2XvfZLXUqhxDgAYALKwjOFnsLY5k,1280
3
3
  pygeofetch/cli/__init__.py,sha256=QZMIIHEgmjGFieucqq9fZ5uephxP9-jdu1s8Q4qqw8o,30
4
4
  pygeofetch/cli/auth_commands.py,sha256=YqbrN_BYcAYCaUIYLpSJ_VIw35tKFUiD9Kc55SWbDWg,7742
5
5
  pygeofetch/cli/config_commands.py,sha256=1Pps0HLCLPODMlM6SFV8ru3IKCDpexSTz8uKIXvIIF8,3918
@@ -36,7 +36,7 @@ pygeofetch/insar/geolocation.py,sha256=-vwTYFhvutKjI4c_f-3BGkfV3XnnDUh5r7KwQbLlE
36
36
  pygeofetch/insar/gpu.py,sha256=E4Dx9-78s2GyKl2_dJrc6lXIHiy67tlqHlpkYue_418,3933
37
37
  pygeofetch/insar/interferogram.py,sha256=6T9k7LAGupWcib2S26fyacNwKi3DBP2jAKbTM8M2Bvw,111471
38
38
  pygeofetch/insar/ionosphere.py,sha256=vG60pyUtxyoJqLCMb_KjFEJvkDE1Bl8fqTzTTbrTIX8,30101
39
- pygeofetch/insar/preflight.py,sha256=s5MtHVNocHhWtQqudpcrhCvNCBUubfuB68Hd3EJlcQ0,39070
39
+ pygeofetch/insar/preflight.py,sha256=EDrSxzlPIrBHtYgcMyaoaBr7CmInvg6FlHRb9k6EJfw,41270
40
40
  pygeofetch/insar/provenance.py,sha256=b2Ql40ZVeI9xHwFUvstBl4npK2o4lua39sRcpZI_lAQ,1876
41
41
  pygeofetch/insar/splitspectrum_diagnostic.py,sha256=_IlfBs__BW7Yz2RwdmWxfrOspe67jHMgJPyNyzK_rYE,7705
42
42
  pygeofetch/insar/stack_selection.py,sha256=FaRBXDNnLwwiXPGeALSW1AaUdpLFOEepVTgEGVfNC4o,37555
@@ -108,9 +108,9 @@ pygeofetch/utils/validators.py,sha256=f-k3mGFP4byjimyDymhPEdsz5I16jZacx1HSnwrARj
108
108
  pygeofetch/viz/__init__.py,sha256=xf2C9IL4n3bv3oxk8RYkogq7nkuNyt18V-urAoXWRQY,449
109
109
  pygeofetch/viz/map.py,sha256=vYO99NvTumCAVXVtXcEzMx_cpmH-FvSVNWl8X0PNSgE,15494
110
110
  pygeofetch/viz/plot.py,sha256=I16rdOWb80gcjYDsDvTMzuyek7QHgUNOQxY2RejBAPs,53675
111
- pygeofetch-2.5.0.dist-info/licenses/LICENSE,sha256=zavMyhODD6NvZTmmKFEtATrngwY4CU_NEtY7lhjxGnI,1075
112
- pygeofetch-2.5.0.dist-info/METADATA,sha256=frDzX4t6B0Vc_j-ggBrzZUHzgJS9KEsjQCZ7OHD0YBQ,43254
113
- pygeofetch-2.5.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
114
- pygeofetch-2.5.0.dist-info/entry_points.txt,sha256=dHiUXLF5xNJ8vgtXZoUQNleEMQUeDPZiKQOE1tW8SDY,55
115
- pygeofetch-2.5.0.dist-info/top_level.txt,sha256=rOmnZargIfNk99fwVOqt6OJyJvpSTBBAYO5HU37yhHk,11
116
- pygeofetch-2.5.0.dist-info/RECORD,,
111
+ pygeofetch-2.6.0.dist-info/licenses/LICENSE,sha256=zavMyhODD6NvZTmmKFEtATrngwY4CU_NEtY7lhjxGnI,1075
112
+ pygeofetch-2.6.0.dist-info/METADATA,sha256=LIpSgXxPKu7xMWPmyomXRfNJOySwxV93eiAifJ0qQp4,43254
113
+ pygeofetch-2.6.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
114
+ pygeofetch-2.6.0.dist-info/entry_points.txt,sha256=dHiUXLF5xNJ8vgtXZoUQNleEMQUeDPZiKQOE1tW8SDY,55
115
+ pygeofetch-2.6.0.dist-info/top_level.txt,sha256=rOmnZargIfNk99fwVOqt6OJyJvpSTBBAYO5HU37yhHk,11
116
+ pygeofetch-2.6.0.dist-info/RECORD,,