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.
- {pygeofetch-0.1.0 → pygeofetch-0.1.1}/LICENSE +1 -1
- {pygeofetch-0.1.0 → pygeofetch-0.1.1}/PKG-INFO +103 -103
- {pygeofetch-0.1.0 → pygeofetch-0.1.1}/README.md +94 -94
- pygeofetch-0.1.1/pygeofetch/__init__.py +39 -0
- pygeofetch-0.1.1/pygeofetch/cli/__init__.py +1 -0
- pygeofetch-0.1.1/pygeofetch/cli/auth_commands.py +257 -0
- pygeofetch-0.1.1/pygeofetch/cli/config_commands.py +143 -0
- pygeofetch-0.1.1/pygeofetch/cli/download_commands.py +272 -0
- pygeofetch-0.1.1/pygeofetch/cli/main.py +770 -0
- pygeofetch-0.1.1/pygeofetch/cli/search_commands.py +249 -0
- pygeofetch-0.1.1/pygeofetch/config/__init__.py +11 -0
- pygeofetch-0.1.1/pygeofetch/config/defaults.yaml +86 -0
- pygeofetch-0.1.1/pygeofetch/config/settings.py +235 -0
- pygeofetch-0.1.1/pygeofetch/core/__init__.py +18 -0
- pygeofetch-0.1.1/pygeofetch/core/authenticator.py +428 -0
- pygeofetch-0.1.1/pygeofetch/core/cache_manager.py +288 -0
- pygeofetch-0.1.1/pygeofetch/core/downloader.py +354 -0
- pygeofetch-0.1.1/pygeofetch/core/engine.py +312 -0
- pygeofetch-0.1.1/pygeofetch/core/scheduler.py +473 -0
- pygeofetch-0.1.1/pygeofetch/core/searcher.py +341 -0
- pygeofetch-0.1.1/pygeofetch/models/__init__.py +44 -0
- pygeofetch-0.1.1/pygeofetch/models/download_task.py +282 -0
- pygeofetch-0.1.1/pygeofetch/models/satellite_data.py +395 -0
- pygeofetch-0.1.1/pygeofetch/models/search_query.py +329 -0
- pygeofetch-0.1.1/pygeofetch/models/user_auth.py +123 -0
- pygeofetch-0.1.1/pygeofetch/providers/__init__.py +192 -0
- pygeofetch-0.1.1/pygeofetch/providers/airbus_oneatlas.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/alaska_satellite_facility.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/aws_earth.py +267 -0
- pygeofetch-0.1.1/pygeofetch/providers/base.py +306 -0
- pygeofetch-0.1.1/pygeofetch/providers/copernicus.py +487 -0
- pygeofetch-0.1.1/pygeofetch/providers/digitalglobe.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/earth_explorer_additional.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/element84.py +230 -0
- pygeofetch-0.1.1/pygeofetch/providers/esa_scihub.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/geoserver_generic.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/google_earth_engine.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/inpe_cbers.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/isro_bhuvan.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/jaxa_earth.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/maxar_gbdx.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/nasa_earthdata.py +190 -0
- pygeofetch-0.1.1/pygeofetch/providers/nasa_earthdata_cloud.py +345 -0
- pygeofetch-0.1.1/pygeofetch/providers/noaa_big_data.py +150 -0
- pygeofetch-0.1.1/pygeofetch/providers/opentopography.py +108 -0
- pygeofetch-0.1.1/pygeofetch/providers/planet.py +369 -0
- pygeofetch-0.1.1/pygeofetch/providers/planetary_computer.py +273 -0
- pygeofetch-0.1.1/pygeofetch/providers/sentinel_hub.py +173 -0
- pygeofetch-0.1.1/pygeofetch/providers/terrabotics.py +278 -0
- pygeofetch-0.1.1/pygeofetch/providers/usgs.py +469 -0
- pygeofetch-0.1.1/pygeofetch/utils/__init__.py +50 -0
- pygeofetch-0.1.1/pygeofetch/utils/file_utils.py +275 -0
- pygeofetch-0.1.1/pygeofetch/utils/geo_utils.py +240 -0
- pygeofetch-0.1.1/pygeofetch/utils/logging_setup.py +107 -0
- pygeofetch-0.1.1/pygeofetch/utils/retry_handler.py +225 -0
- pygeofetch-0.1.1/pygeofetch/utils/validators.py +155 -0
- {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/PKG-INFO +103 -103
- pygeofetch-0.1.1/pygeofetch.egg-info/SOURCES.txt +64 -0
- pygeofetch-0.1.1/pygeofetch.egg-info/entry_points.txt +2 -0
- {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/requires.txt +1 -1
- pygeofetch-0.1.1/pygeofetch.egg-info/top_level.txt +1 -0
- {pygeofetch-0.1.0 → pygeofetch-0.1.1}/pyproject.toml +13 -13
- pygeofetch-0.1.0/PyGeoFetch.egg-info/SOURCES.txt +0 -11
- pygeofetch-0.1.0/PyGeoFetch.egg-info/entry_points.txt +0 -2
- pygeofetch-0.1.0/PyGeoFetch.egg-info/top_level.txt +0 -1
- {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/dependency_links.txt +0 -0
- {pygeofetch-0.1.0/PyGeoFetch.egg-info → pygeofetch-0.1.1/pygeofetch.egg-info}/not-zip-safe +0 -0
- {pygeofetch-0.1.0 → pygeofetch-0.1.1}/setup.cfg +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
|
-
Name:
|
|
3
|
-
Version: 0.1.
|
|
2
|
+
Name: pygeofetch
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Universal satellite data download pipeline with unified access to 20+ repositories
|
|
5
|
-
Author:
|
|
5
|
+
Author: pygeofetch Contributors
|
|
6
6
|
License: MIT License
|
|
7
7
|
|
|
8
|
-
Copyright (c) 2024
|
|
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/
|
|
29
|
-
Project-URL: Documentation, https://
|
|
30
|
-
Project-URL: Repository, https://github.com/
|
|
31
|
-
Project-URL: Bug Tracker, https://github.com/
|
|
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:
|
|
81
|
+
Requires-Dist: pygeofetch[dev,geo]; extra == "all"
|
|
82
82
|
Dynamic: license-file
|
|
83
83
|
|
|
84
|
-
#
|
|
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
|
-
[](https://pypi.org/project/pygeofetch/)
|
|
89
|
+
[](https://pypi.org/project/pygeofetch/)
|
|
90
90
|
[](https://opensource.org/licenses/MIT)
|
|
91
|
-
[](https://github.com/pygeofetch/pygeofetch/actions)
|
|
92
|
+
[](https://codecov.io/gh/pygeofetch/pygeofetch)
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
96
|
-
## Why
|
|
96
|
+
## Why pygeofetch?
|
|
97
97
|
|
|
98
|
-
| Feature |
|
|
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
|
|
117
|
+
pip install pygeofetch
|
|
118
118
|
|
|
119
119
|
# With raster processing support
|
|
120
|
-
pip install "
|
|
120
|
+
pip install "pygeofetch[geo]"
|
|
121
121
|
|
|
122
122
|
# Full installation (all optional deps)
|
|
123
|
-
pip install "
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
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
|
-

|
|
183
183
|
|
|
184
184
|
### 3. Download
|
|
185
185
|
|
|
186
186
|
```bash
|
|
187
|
-
|
|
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
|
-

|
|
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
|
|
204
|
-
from
|
|
203
|
+
from pygeofetch import pygeofetch
|
|
204
|
+
from pygeofetch.models import SearchQuery, DownloadOptions
|
|
205
205
|
|
|
206
|
-
sb =
|
|
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
|
-
|
|
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
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
265
|
-
|
|
266
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
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
|
-
|
|
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
|
-
|
|
429
|
+
pygeofetch pipeline run weekly-sentinel2.yaml
|
|
430
430
|
|
|
431
431
|
# Schedule for recurring execution
|
|
432
|
-
|
|
432
|
+
pygeofetch pipeline schedule weekly-sentinel2.yaml
|
|
433
433
|
|
|
434
434
|
# Validate without running
|
|
435
|
-
|
|
435
|
+
pygeofetch pipeline validate weekly-sentinel2.yaml
|
|
436
436
|
```
|
|
437
437
|
|
|
438
438
|
---
|
|
439
439
|
|
|
440
440
|
## Configuration
|
|
441
441
|
|
|
442
|
-
|
|
442
|
+
pygeofetch uses a hierarchical config system:
|
|
443
443
|
|
|
444
444
|
1. Built-in defaults
|
|
445
|
-
2. User config (`~/.
|
|
446
|
-
3. Project config (`.
|
|
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
|
-
# ~/.
|
|
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: ~/.
|
|
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:
|
|
488
|
-
file_path: ~/.
|
|
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
|
-
|
|
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
|
-
|
|
545
|
+
pygeofetch search run --providers copernicus,usgs,planet --on-provider-failure skip
|
|
546
546
|
|
|
547
547
|
# Abort entirely if any provider fails
|
|
548
|
-
|
|
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; `
|
|
560
|
+
- Cache auto-invalidates; `pygeofetch cache clear` for manual purge
|
|
561
561
|
|
|
562
562
|
### Logging
|
|
563
563
|
|
|
564
564
|
```bash
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
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 `~/.
|
|
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** —
|
|
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@
|
|
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
|
|
613
|
+
docker pull pygeofetch/pygeofetch:latest
|
|
614
614
|
|
|
615
|
-
docker run -v ~/.
|
|
615
|
+
docker run -v ~/.pygeofetch:/root/.pygeofetch \
|
|
616
616
|
-v $(pwd)/data:/data \
|
|
617
|
-
|
|
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
|
-
|
|
629
|
-
image:
|
|
628
|
+
pygeofetch-scheduler:
|
|
629
|
+
image: pygeofetch/pygeofetch:latest
|
|
630
630
|
volumes:
|
|
631
|
-
- ~/.
|
|
631
|
+
- ~/.pygeofetch:/root/.pygeofetch
|
|
632
632
|
- ./pipelines:/pipelines
|
|
633
633
|
- ./data:/data
|
|
634
|
-
command:
|
|
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
|
|
642
|
-
docker run
|
|
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=
|
|
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 (`
|
|
688
|
-
- [ ] REST API server mode (`
|
|
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
|
-
- [ ]
|
|
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/
|
|
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/
|
|
711
|
-
cd
|
|
710
|
+
git clone https://github.com/appiahkubis14/pygeofetch
|
|
711
|
+
cd pygeofetch
|
|
712
712
|
pip install -e ".[dev,all]"
|
|
713
713
|
make test
|
|
714
714
|
```
|