PyGeoFetch 0.1.0__tar.gz → 0.1.1__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 (68) hide show
  1. {pygeofetch-0.1.0 → pygeofetch-0.1.1}/LICENSE +1 -1
  2. {pygeofetch-0.1.0 → pygeofetch-0.1.1}/PKG-INFO +103 -103
  3. {pygeofetch-0.1.0 → pygeofetch-0.1.1}/README.md +94 -94
  4. pygeofetch-0.1.1/pygeofetch/__init__.py +39 -0
  5. pygeofetch-0.1.1/pygeofetch/cli/__init__.py +1 -0
  6. pygeofetch-0.1.1/pygeofetch/cli/auth_commands.py +257 -0
  7. pygeofetch-0.1.1/pygeofetch/cli/config_commands.py +143 -0
  8. pygeofetch-0.1.1/pygeofetch/cli/download_commands.py +272 -0
  9. pygeofetch-0.1.1/pygeofetch/cli/main.py +770 -0
  10. pygeofetch-0.1.1/pygeofetch/cli/search_commands.py +249 -0
  11. pygeofetch-0.1.1/pygeofetch/config/__init__.py +11 -0
  12. pygeofetch-0.1.1/pygeofetch/config/defaults.yaml +86 -0
  13. pygeofetch-0.1.1/pygeofetch/config/settings.py +235 -0
  14. pygeofetch-0.1.1/pygeofetch/core/__init__.py +18 -0
  15. pygeofetch-0.1.1/pygeofetch/core/authenticator.py +428 -0
  16. pygeofetch-0.1.1/pygeofetch/core/cache_manager.py +288 -0
  17. pygeofetch-0.1.1/pygeofetch/core/downloader.py +354 -0
  18. pygeofetch-0.1.1/pygeofetch/core/engine.py +312 -0
  19. pygeofetch-0.1.1/pygeofetch/core/scheduler.py +473 -0
  20. pygeofetch-0.1.1/pygeofetch/core/searcher.py +341 -0
  21. pygeofetch-0.1.1/pygeofetch/models/__init__.py +44 -0
  22. pygeofetch-0.1.1/pygeofetch/models/download_task.py +282 -0
  23. pygeofetch-0.1.1/pygeofetch/models/satellite_data.py +395 -0
  24. pygeofetch-0.1.1/pygeofetch/models/search_query.py +329 -0
  25. pygeofetch-0.1.1/pygeofetch/models/user_auth.py +123 -0
  26. pygeofetch-0.1.1/pygeofetch/providers/__init__.py +192 -0
  27. pygeofetch-0.1.1/pygeofetch/providers/airbus_oneatlas.py +150 -0
  28. pygeofetch-0.1.1/pygeofetch/providers/alaska_satellite_facility.py +150 -0
  29. pygeofetch-0.1.1/pygeofetch/providers/aws_earth.py +267 -0
  30. pygeofetch-0.1.1/pygeofetch/providers/base.py +306 -0
  31. pygeofetch-0.1.1/pygeofetch/providers/copernicus.py +487 -0
  32. pygeofetch-0.1.1/pygeofetch/providers/digitalglobe.py +150 -0
  33. pygeofetch-0.1.1/pygeofetch/providers/earth_explorer_additional.py +150 -0
  34. pygeofetch-0.1.1/pygeofetch/providers/element84.py +230 -0
  35. pygeofetch-0.1.1/pygeofetch/providers/esa_scihub.py +150 -0
  36. pygeofetch-0.1.1/pygeofetch/providers/geoserver_generic.py +150 -0
  37. pygeofetch-0.1.1/pygeofetch/providers/google_earth_engine.py +150 -0
  38. pygeofetch-0.1.1/pygeofetch/providers/inpe_cbers.py +150 -0
  39. pygeofetch-0.1.1/pygeofetch/providers/isro_bhuvan.py +150 -0
  40. pygeofetch-0.1.1/pygeofetch/providers/jaxa_earth.py +150 -0
  41. pygeofetch-0.1.1/pygeofetch/providers/maxar_gbdx.py +150 -0
  42. pygeofetch-0.1.1/pygeofetch/providers/nasa_earthdata.py +190 -0
  43. pygeofetch-0.1.1/pygeofetch/providers/nasa_earthdata_cloud.py +345 -0
  44. pygeofetch-0.1.1/pygeofetch/providers/noaa_big_data.py +150 -0
  45. pygeofetch-0.1.1/pygeofetch/providers/opentopography.py +108 -0
  46. pygeofetch-0.1.1/pygeofetch/providers/planet.py +369 -0
  47. pygeofetch-0.1.1/pygeofetch/providers/planetary_computer.py +273 -0
  48. pygeofetch-0.1.1/pygeofetch/providers/sentinel_hub.py +173 -0
  49. pygeofetch-0.1.1/pygeofetch/providers/terrabotics.py +278 -0
  50. pygeofetch-0.1.1/pygeofetch/providers/usgs.py +469 -0
  51. pygeofetch-0.1.1/pygeofetch/utils/__init__.py +50 -0
  52. pygeofetch-0.1.1/pygeofetch/utils/file_utils.py +275 -0
  53. pygeofetch-0.1.1/pygeofetch/utils/geo_utils.py +240 -0
  54. pygeofetch-0.1.1/pygeofetch/utils/logging_setup.py +107 -0
  55. pygeofetch-0.1.1/pygeofetch/utils/retry_handler.py +225 -0
  56. pygeofetch-0.1.1/pygeofetch/utils/validators.py +155 -0
  57. {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/PKG-INFO +103 -103
  58. pygeofetch-0.1.1/pygeofetch.egg-info/SOURCES.txt +64 -0
  59. pygeofetch-0.1.1/pygeofetch.egg-info/entry_points.txt +2 -0
  60. {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/requires.txt +1 -1
  61. pygeofetch-0.1.1/pygeofetch.egg-info/top_level.txt +1 -0
  62. {pygeofetch-0.1.0 → pygeofetch-0.1.1}/pyproject.toml +13 -13
  63. pygeofetch-0.1.0/PyGeoFetch.egg-info/SOURCES.txt +0 -11
  64. pygeofetch-0.1.0/PyGeoFetch.egg-info/entry_points.txt +0 -2
  65. pygeofetch-0.1.0/PyGeoFetch.egg-info/top_level.txt +0 -1
  66. {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/dependency_links.txt +0 -0
  67. {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/not-zip-safe +0 -0
  68. {pygeofetch-0.1.0 → pygeofetch-0.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 PyGeoFetch Contributors
3
+ Copyright (c) 2024 pygeofetch Contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
- Name: PyGeoFetch
3
- Version: 0.1.0
2
+ Name: pygeofetch
3
+ Version: 0.1.1
4
4
  Summary: Universal satellite data download pipeline with unified access to 20+ repositories
5
- Author: PyGeoFetch Contributors
5
+ Author: pygeofetch Contributors
6
6
  License: MIT License
7
7
 
8
- Copyright (c) 2024 PyGeoFetch Contributors
8
+ Copyright (c) 2024 pygeofetch Contributors
9
9
 
10
10
  Permission is hereby granted, free of charge, to any person obtaining a copy
11
11
  of this software and associated documentation files (the "Software"), to deal
@@ -25,10 +25,10 @@ License: MIT License
25
25
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
26
  SOFTWARE.
27
27
 
28
- Project-URL: Homepage, https://github.com/PyGeoFetch/PyGeoFetch
29
- Project-URL: Documentation, https://PyGeoFetch.readthedocs.io
30
- Project-URL: Repository, https://github.com/PyGeoFetch/PyGeoFetch
31
- Project-URL: Bug Tracker, https://github.com/PyGeoFetch/PyGeoFetch/issues
28
+ Project-URL: Homepage, https://github.com/pygeofetch/pygeofetch
29
+ Project-URL: Documentation, https://pygeofetch.readthedocs.io
30
+ Project-URL: Repository, https://github.com/pygeofetch/pygeofetch
31
+ Project-URL: Bug Tracker, https://github.com/pygeofetch/pygeofetch/issues
32
32
  Keywords: satellite,remote-sensing,GIS,earth-observation,geospatial
33
33
  Classifier: Development Status :: 4 - Beta
34
34
  Classifier: Intended Audience :: Science/Research
@@ -78,24 +78,24 @@ Requires-Dist: ruff>=0.3; extra == "dev"
78
78
  Requires-Dist: mypy>=1.8; extra == "dev"
79
79
  Requires-Dist: bump2version>=1.0; extra == "dev"
80
80
  Provides-Extra: all
81
- Requires-Dist: PyGeoFetch[dev,geo]; extra == "all"
81
+ Requires-Dist: pygeofetch[dev,geo]; extra == "all"
82
82
  Dynamic: license-file
83
83
 
84
- # PyGeoFetch 🛰️
84
+ # pygeofetch 🛰️
85
85
 
86
86
  **Universal satellite data pipeline** — unified access to 22+ satellite repositories with one CLI or Python API.
87
87
 
88
- [![PyPI version](https://badge.fury.io/py/PyGeoFetch.svg)](https://pypi.org/project/PyGeoFetch/)
89
- [![Python Versions](https://img.shields.io/pypi/pyversions/PyGeoFetch.svg)](https://pypi.org/project/PyGeoFetch/)
88
+ [![PyPI version](https://badge.fury.io/py/pygeofetch.svg)](https://pypi.org/project/pygeofetch/)
89
+ [![Python Versions](https://img.shields.io/pypi/pyversions/pygeofetch.svg)](https://pypi.org/project/pygeofetch/)
90
90
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
91
- [![Tests](https://github.com/PyGeoFetch/PyGeoFetch/actions/workflows/tests.yml/badge.svg)](https://github.com/PyGeoFetch/PyGeoFetch/actions)
92
- [![Coverage](https://codecov.io/gh/PyGeoFetch/PyGeoFetch/branch/main/graph/badge.svg)](https://codecov.io/gh/PyGeoFetch/PyGeoFetch)
91
+ [![Tests](https://github.com/pygeofetch/pygeofetch/actions/workflows/tests.yml/badge.svg)](https://github.com/pygeofetch/pygeofetch/actions)
92
+ [![Coverage](https://codecov.io/gh/pygeofetch/pygeofetch/branch/main/graph/badge.svg)](https://codecov.io/gh/pygeofetch/pygeofetch)
93
93
 
94
94
  ---
95
95
 
96
- ## Why PyGeoFetch?
96
+ ## Why pygeofetch?
97
97
 
98
- | Feature | PyGeoFetch | EODAG | pystac-client | satpy | sentinelsat |
98
+ | Feature | pygeofetch | EODAG | pystac-client | satpy | sentinelsat |
99
99
  |---|---|---|---|---|---|
100
100
  | **Providers** | **22+** | 10+ | STAC only | Limited | Sentinel only |
101
101
  | **CLI** | ✅ Full | ❌ | ❌ | ❌ | ✅ Basic |
@@ -114,13 +114,13 @@ Dynamic: license-file
114
114
  ## Installation
115
115
 
116
116
  ```bash
117
- pip install PyGeoFetch
117
+ pip install pygeofetch
118
118
 
119
119
  # With raster processing support
120
- pip install "PyGeoFetch[geo]"
120
+ pip install "pygeofetch[geo]"
121
121
 
122
122
  # Full installation (all optional deps)
123
- pip install "PyGeoFetch[all]"
123
+ pip install "pygeofetch[all]"
124
124
  ```
125
125
 
126
126
  **Requirements:** Python 3.9+
@@ -163,15 +163,15 @@ pip install "PyGeoFetch[all]"
163
163
  ### 1. Add credentials
164
164
 
165
165
  ```bash
166
- PyGeoFetch auth add usgs --username USER --password PASS
167
- PyGeoFetch auth add planet --api-key YOUR_KEY
168
- PyGeoFetch auth login copernicus # interactive
166
+ pygeofetch auth add usgs --username USER --password PASS
167
+ pygeofetch auth add planet --api-key YOUR_KEY
168
+ pygeofetch auth login copernicus # interactive
169
169
  ```
170
170
 
171
171
  ### 2. Search
172
172
 
173
173
  ```bash
174
- PyGeoFetch search run \
174
+ pygeofetch search run \
175
175
  --bbox "-74.1,40.6,-73.7,40.9" \
176
176
  --start-date 2024-01-01 \
177
177
  --cloud-cover 0-15 \
@@ -179,12 +179,12 @@ PyGeoFetch search run \
179
179
  --output results.geojson
180
180
  ```
181
181
 
182
- ![PyGeoFetch search demo](data/test/search.png)
182
+ ![pygeofetch search demo](data/test/search.png)
183
183
 
184
184
  ### 3. Download
185
185
 
186
186
  ```bash
187
- PyGeoFetch download run \
187
+ pygeofetch download run \
188
188
  --from-search results.geojson \
189
189
  --output ./my_data/ \
190
190
  --parallel 4 \
@@ -192,7 +192,7 @@ PyGeoFetch download run \
192
192
  --post-process "unzip,reproject:EPSG:4326,compress:lzw"
193
193
  ```
194
194
 
195
- ![PyGeoFetch download demo](data/test/download.png)
195
+ ![pygeofetch download demo](data/test/download.png)
196
196
 
197
197
  ---
198
198
 
@@ -200,10 +200,10 @@ PyGeoFetch download run \
200
200
 
201
201
  ```python
202
202
  from pathlib import Path
203
- from PyGeoFetch import PyGeoFetch
204
- from PyGeoFetch.models import SearchQuery, DownloadOptions
203
+ from pygeofetch import pygeofetch
204
+ from pygeofetch.models import SearchQuery, DownloadOptions
205
205
 
206
- sb = PyGeoFetch()
206
+ sb = pygeofetch()
207
207
  sb.add_credentials("usgs", username="user", password="pass")
208
208
  sb.add_credentials("planet", api_key="PL_KEY")
209
209
 
@@ -243,32 +243,32 @@ for dr in download_results:
243
243
 
244
244
  ### Global Options
245
245
  ```
246
- PyGeoFetch [--log-level LEVEL] [--log-file FILE] [--log-format console|json]
246
+ pygeofetch [--log-level LEVEL] [--log-file FILE] [--log-format console|json]
247
247
  [--config FILE] [--version] [--help] COMMAND [ARGS]
248
248
  ```
249
249
 
250
250
  ### Authentication
251
251
  ```bash
252
- PyGeoFetch auth add PROVIDER --username USER --password PASS
253
- PyGeoFetch auth add PROVIDER --api-key KEY
254
- PyGeoFetch auth add PROVIDER --client-id ID --client-secret SECRET
255
- PyGeoFetch auth login PROVIDER # interactive
256
- PyGeoFetch auth list [--json]
257
- PyGeoFetch auth test PROVIDER
258
- PyGeoFetch auth remove PROVIDER [--yes]
259
- PyGeoFetch auth export [--output FILE]
252
+ pygeofetch auth add PROVIDER --username USER --password PASS
253
+ pygeofetch auth add PROVIDER --api-key KEY
254
+ pygeofetch auth add PROVIDER --client-id ID --client-secret SECRET
255
+ pygeofetch auth login PROVIDER # interactive
256
+ pygeofetch auth list [--json]
257
+ pygeofetch auth test PROVIDER
258
+ pygeofetch auth remove PROVIDER [--yes]
259
+ pygeofetch auth export [--output FILE]
260
260
  ```
261
261
 
262
262
  ### Providers
263
263
  ```bash
264
- PyGeoFetch providers list [--auth|--no-auth] [--capabilities sar,optical,stac] [--region global] [--satellite Landsat] [--json]
265
- PyGeoFetch providers info PROVIDER [--json]
266
- PyGeoFetch providers search "landsat" [--json]
264
+ pygeofetch providers list [--auth|--no-auth] [--capabilities sar,optical,stac] [--region global] [--satellite Landsat] [--json]
265
+ pygeofetch providers info PROVIDER [--json]
266
+ pygeofetch providers search "landsat" [--json]
267
267
  ```
268
268
 
269
269
  ### Search
270
270
  ```bash
271
- PyGeoFetch search run
271
+ pygeofetch search run
272
272
  --bbox "minx,miny,maxx,maxy" # Bounding box
273
273
  --geometry-file area.geojson # AOI from GeoJSON file
274
274
  --start-date YYYY-MM-DD
@@ -291,7 +291,7 @@ PyGeoFetch search run
291
291
 
292
292
  ### Download
293
293
  ```bash
294
- PyGeoFetch download run
294
+ pygeofetch download run
295
295
  --from-search FILE # GeoJSON from search run
296
296
  --scene-ids ID1,ID2,... # Direct scene IDs
297
297
  --output DIRECTORY
@@ -311,41 +311,41 @@ PyGeoFetch download run
311
311
 
312
312
  ### Cache
313
313
  ```bash
314
- PyGeoFetch cache stats [--json]
315
- PyGeoFetch cache clear [--provider PROVIDER] [--older-than 7d] [--dry-run]
316
- PyGeoFetch cache ttl show
317
- PyGeoFetch cache ttl set SECONDS
318
- PyGeoFetch cache location
319
- PyGeoFetch cache prune --max-size 1GB
314
+ pygeofetch cache stats [--json]
315
+ pygeofetch cache clear [--provider PROVIDER] [--older-than 7d] [--dry-run]
316
+ pygeofetch cache ttl show
317
+ pygeofetch cache ttl set SECONDS
318
+ pygeofetch cache location
319
+ pygeofetch cache prune --max-size 1GB
320
320
  ```
321
321
 
322
322
  ### Pipeline
323
323
  ```bash
324
- PyGeoFetch pipeline run FILE [--step STEP_NAME]
325
- PyGeoFetch pipeline validate FILE
326
- PyGeoFetch pipeline schedule FILE [--name NAME] [--cron "0 6 * * 1"]
327
- PyGeoFetch pipeline list-scheduled [--json]
328
- PyGeoFetch pipeline unschedule NAME
329
- PyGeoFetch pipeline logs NAME [--tail 50] [--follow]
330
- PyGeoFetch pipeline history [--limit 20]
331
- PyGeoFetch pipeline retry RUN_ID
324
+ pygeofetch pipeline run FILE [--step STEP_NAME]
325
+ pygeofetch pipeline validate FILE
326
+ pygeofetch pipeline schedule FILE [--name NAME] [--cron "0 6 * * 1"]
327
+ pygeofetch pipeline list-scheduled [--json]
328
+ pygeofetch pipeline unschedule NAME
329
+ pygeofetch pipeline logs NAME [--tail 50] [--follow]
330
+ pygeofetch pipeline history [--limit 20]
331
+ pygeofetch pipeline retry RUN_ID
332
332
  ```
333
333
 
334
334
  ### Configuration
335
335
  ```bash
336
- PyGeoFetch config show [--json]
337
- PyGeoFetch config get KEY
338
- PyGeoFetch config set KEY VALUE
339
- PyGeoFetch config path
340
- PyGeoFetch config reset
336
+ pygeofetch config show [--json]
337
+ pygeofetch config get KEY
338
+ pygeofetch config set KEY VALUE
339
+ pygeofetch config path
340
+ pygeofetch config reset
341
341
  ```
342
342
 
343
343
  ### System
344
344
  ```bash
345
- PyGeoFetch status [--json]
346
- PyGeoFetch version [--json]
347
- PyGeoFetch doctor # Diagnose installation and connectivity
348
- PyGeoFetch --install-completion bash|zsh|fish
345
+ pygeofetch status [--json]
346
+ pygeofetch version [--json]
347
+ pygeofetch doctor # Diagnose installation and connectivity
348
+ pygeofetch --install-completion bash|zsh|fish
349
349
  ```
350
350
 
351
351
  ---
@@ -369,7 +369,7 @@ PyGeoFetch --install-completion bash|zsh|fish
369
369
  Chain post-processing actions on downloaded data:
370
370
 
371
371
  ```bash
372
- PyGeoFetch download run \
372
+ pygeofetch download run \
373
373
  --from-search results.geojson --output ./data/ \
374
374
  --post-process "unzip,reproject:EPSG:4326,compress:lzw,ndvi,cog"
375
375
  ```
@@ -426,31 +426,31 @@ steps:
426
426
 
427
427
  ```bash
428
428
  # One-shot execution
429
- PyGeoFetch pipeline run weekly-sentinel2.yaml
429
+ pygeofetch pipeline run weekly-sentinel2.yaml
430
430
 
431
431
  # Schedule for recurring execution
432
- PyGeoFetch pipeline schedule weekly-sentinel2.yaml
432
+ pygeofetch pipeline schedule weekly-sentinel2.yaml
433
433
 
434
434
  # Validate without running
435
- PyGeoFetch pipeline validate weekly-sentinel2.yaml
435
+ pygeofetch pipeline validate weekly-sentinel2.yaml
436
436
  ```
437
437
 
438
438
  ---
439
439
 
440
440
  ## Configuration
441
441
 
442
- PyGeoFetch uses a hierarchical config system:
442
+ pygeofetch uses a hierarchical config system:
443
443
 
444
444
  1. Built-in defaults
445
- 2. User config (`~/.PyGeoFetch/config.yaml`)
446
- 3. Project config (`.PyGeoFetch.yaml`)
445
+ 2. User config (`~/.pygeofetch/config.yaml`)
446
+ 3. Project config (`.pygeofetch.yaml`)
447
447
  4. Environment variables (`SATELLITE_BRIDGE_*`)
448
448
  5. CLI arguments
449
449
 
450
450
  ### Full Configuration Reference
451
451
 
452
452
  ```yaml
453
- # ~/.PyGeoFetch/config.yaml
453
+ # ~/.pygeofetch/config.yaml
454
454
 
455
455
  download:
456
456
  parallel: 4 # Default concurrent downloads
@@ -472,7 +472,7 @@ cache:
472
472
  enabled: true
473
473
  ttl_seconds: 3600 # 1 hour default
474
474
  max_size_gb: 10 # Auto-prune when exceeded
475
- location: ~/.PyGeoFetch/cache
475
+ location: ~/.pygeofetch/cache
476
476
 
477
477
  search:
478
478
  default_providers: []
@@ -484,8 +484,8 @@ search:
484
484
 
485
485
  auth:
486
486
  storage_backend: keyring # keyring or file
487
- keyring_service: PyGeoFetch
488
- file_path: ~/.PyGeoFetch/credentials.enc
487
+ keyring_service: pygeofetch
488
+ file_path: ~/.pygeofetch/credentials.enc
489
489
 
490
490
  proxy:
491
491
  http_proxy: null
@@ -532,7 +532,7 @@ export SATELLITE_BRIDGE_PLANET_API_KEY=PL_KEY
532
532
 
533
533
  ## Error Handling & Resilience
534
534
 
535
- PyGeoFetch handles failures at every layer:
535
+ pygeofetch handles failures at every layer:
536
536
 
537
537
  ### Provider Failures
538
538
  - **Circuit breaker**: Failing providers disabled after 5 consecutive failures
@@ -542,10 +542,10 @@ PyGeoFetch handles failures at every layer:
542
542
 
543
543
  ```bash
544
544
  # Skip failing providers, return what's available
545
- PyGeoFetch search run --providers copernicus,usgs,planet --on-provider-failure skip
545
+ pygeofetch search run --providers copernicus,usgs,planet --on-provider-failure skip
546
546
 
547
547
  # Abort entirely if any provider fails
548
- PyGeoFetch search run --providers copernicus,usgs --on-provider-failure abort
548
+ pygeofetch search run --providers copernicus,usgs --on-provider-failure abort
549
549
  ```
550
550
 
551
551
  ### Download Resilience
@@ -557,14 +557,14 @@ PyGeoFetch search run --providers copernicus,usgs --on-provider-failure abort
557
557
  ### Search Caching
558
558
  - Results cached per query (configurable TTL, default 1 hour)
559
559
  - Cache hits return instantly without API calls
560
- - Cache auto-invalidates; `PyGeoFetch cache clear` for manual purge
560
+ - Cache auto-invalidates; `pygeofetch cache clear` for manual purge
561
561
 
562
562
  ### Logging
563
563
 
564
564
  ```bash
565
- PyGeoFetch --log-level DEBUG search run ...
566
- PyGeoFetch --log-file PyGeoFetch.log search run ...
567
- PyGeoFetch --log-format json search run ...
565
+ pygeofetch --log-level DEBUG search run ...
566
+ pygeofetch --log-file pygeofetch.log search run ...
567
+ pygeofetch --log-format json search run ...
568
568
  ```
569
569
 
570
570
  ---
@@ -574,7 +574,7 @@ PyGeoFetch --log-format json search run ...
574
574
  ### Credential Handling
575
575
  - Credentials are **never logged** — log filters redact passwords, tokens, API keys
576
576
  - Authentication tokens stored in **system keyring** (macOS Keychain, Windows Credential Manager, Linux Secret Service)
577
- - Encrypted file fallback at `~/.PyGeoFetch/credentials.enc` using Fernet symmetric encryption
577
+ - Encrypted file fallback at `~/.pygeofetch/credentials.enc` using Fernet symmetric encryption
578
578
  - Environment variables supported: `SATELLITE_BRIDGE_USGS_USERNAME`, `SATELLITE_BRIDGE_PLANET_API_KEY`, etc.
579
579
  - Credentials cleared from memory immediately after authentication
580
580
 
@@ -590,7 +590,7 @@ PyGeoFetch --log-format json search run ...
590
590
  - Download resume tokens prevent data duplication
591
591
 
592
592
  ### Privacy
593
- - **No telemetry** — PyGeoFetch does not phone home
593
+ - **No telemetry** — pygeofetch does not phone home
594
594
  - **No analytics** — zero data collection
595
595
  - **No third-party requests** beyond configured providers
596
596
  - Usage data stays local unless you configure webhook notifications
@@ -599,7 +599,7 @@ PyGeoFetch --log-format json search run ...
599
599
 
600
600
  Do **not** open public issues for security vulnerabilities.
601
601
 
602
- - Email: security@PyGeoFetch.dev
602
+ - Email: security@pygeofetch.dev
603
603
  - Response time: Within 48 hours
604
604
  - Responsible disclosure policy: 90-day disclosure window
605
605
 
@@ -610,11 +610,11 @@ Do **not** open public issues for security vulnerabilities.
610
610
  ### Quick Start
611
611
 
612
612
  ```bash
613
- docker pull PyGeoFetch/PyGeoFetch:latest
613
+ docker pull pygeofetch/pygeofetch:latest
614
614
 
615
- docker run -v ~/.PyGeoFetch:/root/.PyGeoFetch \
615
+ docker run -v ~/.pygeofetch:/root/.pygeofetch \
616
616
  -v $(pwd)/data:/data \
617
- PyGeoFetch/PyGeoFetch search run \
617
+ pygeofetch/pygeofetch search run \
618
618
  --bbox "-74.1,40.6,-73.7,40.9" \
619
619
  --providers aws_earth \
620
620
  --output /data/results.geojson
@@ -625,21 +625,21 @@ docker run -v ~/.PyGeoFetch:/root/.PyGeoFetch \
625
625
  ```yaml
626
626
  version: '3.8'
627
627
  services:
628
- PyGeoFetch-scheduler:
629
- image: PyGeoFetch/PyGeoFetch:latest
628
+ pygeofetch-scheduler:
629
+ image: pygeofetch/pygeofetch:latest
630
630
  volumes:
631
- - ~/.PyGeoFetch:/root/.PyGeoFetch
631
+ - ~/.pygeofetch:/root/.pygeofetch
632
632
  - ./pipelines:/pipelines
633
633
  - ./data:/data
634
- command: PyGeoFetch pipeline run /pipelines/weekly-ndvi.yaml
634
+ command: pygeofetch pipeline run /pipelines/weekly-ndvi.yaml
635
635
  restart: unless-stopped
636
636
  ```
637
637
 
638
638
  ### Build Locally
639
639
 
640
640
  ```bash
641
- docker build -t PyGeoFetch:local .
642
- docker run PyGeoFetch:local status
641
+ docker build -t pygeofetch:local .
642
+ docker run pygeofetch:local status
643
643
  ```
644
644
 
645
645
  Available on Docker Hub and GitHub Container Registry.
@@ -653,7 +653,7 @@ Available on Docker Hub and GitHub Container Registry.
653
653
  pytest tests/ -v
654
654
 
655
655
  # With coverage
656
- pytest tests/ -v --cov=PyGeoFetch --cov-report=html
656
+ pytest tests/ -v --cov=pygeofetch --cov-report=html
657
657
 
658
658
  # Unit tests only (fast)
659
659
  pytest tests/unit/ -v
@@ -684,18 +684,18 @@ Coverage minimum: **80% line coverage** — CI fails if below threshold.
684
684
  - [ ] Streaming COG partial reads (no full download needed)
685
685
 
686
686
  ### v0.3.0 (Q1 2025)
687
- - [ ] Web dashboard for pipeline monitoring (`PyGeoFetch dashboard`)
688
- - [ ] REST API server mode (`PyGeoFetch serve`)
687
+ - [ ] Web dashboard for pipeline monitoring (`pygeofetch dashboard`)
688
+ - [ ] REST API server mode (`pygeofetch serve`)
689
689
  - [ ] Automatic provider health monitoring
690
690
  - [ ] Download bandwidth scheduling (limit during business hours)
691
691
 
692
692
  ### v1.0.0 (Q2 2025)
693
- - [ ] PyGeoFetch Cloud (hosted API, zero setup)
693
+ - [ ] pygeofetch Cloud (hosted API, zero setup)
694
694
  - [ ] Enterprise SSO (Okta, Azure AD)
695
695
  - [ ] Team workspaces for credential sharing
696
696
  - [ ] SLA-backed production support tier
697
697
 
698
- Vote on features at [github.com/PyGeoFetch/PyGeoFetch/discussions](https://github.com/PyGeoFetch/PyGeoFetch/discussions)
698
+ Vote on features at [github.com/pygeofetch/pygeofetch/discussions](https://github.com/pygeofetch/pygeofetch/discussions)
699
699
 
700
700
  ---
701
701
 
@@ -707,8 +707,8 @@ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidel
707
707
  improving test coverage, adding new post-processing actions.
708
708
 
709
709
  ```bash
710
- git clone https://github.com/appiahkubis14/PyGeoFetch
711
- cd PyGeoFetch
710
+ git clone https://github.com/appiahkubis14/pygeofetch
711
+ cd pygeofetch
712
712
  pip install -e ".[dev,all]"
713
713
  make test
714
714
  ```