Tek API çağrısıyla NASA Webb, Hubble, TESS ve Chandra teleskoplarından veri çek.
Bir araştırmacı, aynı gök cisminin verisini Hubble, Webb, TESS ve Chandra'dan almak istediğinde 4 farklı araç, 4 farklı format, 4 farklı API ile uğraşmak zorunda. FITS başka, HDF5 başka, LC (light curve) başka. Zaman MJD, koordinat farklı sistemde, dalga boyu metre/Angstrom karışık.
Tek çağrı. Tek schema. Karşılaştırılabilir veri.
from nasa_bridge import query
result = query(
target="Pi Mensae",
missions=["hubble", "tess"],
limit=10,
)
print(f"{len(result)} gözlem, {result.elapsed_seconds:.1f}s'de")
for obs in result.observations:
print(f" {obs.mission:8s} {obs.raw_format:5s} "
f"{obs.wavelength.band:10s} {obs.observation_id}")
# JSON çıktı (REST API'ye hazır)
print(result.to_json())# Kayıtlı misyonları gör
nasa-bridge missions
# Sorgu — terminale JSON
nasa-bridge query "M16" --missions hubble,tess --limit 5 --pretty
# Sorgu — dosyaya JSON
nasa-bridge query "Pi Mensae" -m tess -l 25 -o pi_mensae.json --pretty# Servisi başlat
uvicorn nasa_bridge.api.main:app --reload
# http://localhost:8000/docs ← Otomatik Swagger UI
# http://localhost:8000/redoc ← ReDoc
# Sorgu (v1 prefix'i kullanılır)
curl "http://localhost:8000/v1/query?target=Crab+Nebula&missions=hubble,chandra&limit=3"API URL yapısı:
| Endpoint | Açıklama |
|---|---|
GET / |
Servis bilgisi |
GET /health |
Sağlık kontrolü (k8s convention) |
GET /cache/stats |
Cache hit/miss istatistikleri |
POST /cache/clear |
Cache temizle |
GET /v1/missions |
Kayıtlı misyonlar |
GET /v1/query |
Multi-mission sorgu |
Her yanıt X-Request-ID header'ı içerir — log korelasyonu için.
Tüm hatalar standart formatta:
{
"error": {
"code": 400,
"message": "Bilinmeyen misyon(lar): ['xyz']",
"request_id": "a1b2c3d4"
}
}Tek komutla deploy:
docker compose up --build
# http://localhost:8000/docsYa da Makefile ile:
make docker-run # build + start
make docker-stop # durdurContainer özellikleri:
- Multi-stage build — küçük runtime imajı (~250 MB)
- Non-root user (UID 1000)
- Healthcheck
/healthendpoint'i üzerinden - JSON log driver, 10MB rotation
| Misyon | Veri Kaynağı | Format | Durum |
|---|---|---|---|
| Hubble (HST) | MAST | FITS | ✅ Tamamlandı |
| TESS | MAST | LC (FITS) | ✅ Tamamlandı |
| Webb (JWST) | MAST | FITS | ✅ Tamamlandı |
| Chandra | CXC/HEASARC | FITS (EVT2) | ✅ Tamamlandı |
Tüm misyonlardan gelen veri tek bir Observation modeline oturuyor:
{
"observation_id": "hst_10533_01_acs_wfc_f775w_j9cs01",
"mission": "hubble",
"instrument": "ACS/WFC",
"target": { "name": "NGC6611-ACS", "ra": 274.67, "dec": -13.79 },
"time": { "start": "2006-04-12T12:21:17Z", "exposure_seconds": 2000.0 },
"wavelength": { "min_nm": 690.0, "max_nm": 860.0, "band": "optical" },
"raw_format": "FITS",
"data_url": "https://mast.stsci.edu/...",
"metadata": { "filters": "F775W", "calib_level": 3, "proposal_id": "10533" }
}Bir TESS ışık eğrisi ya da Chandra X-ray verisi de aynı yapıyı kullanır.
git clone https://github.com/mirankurdistani/nasa-bridge
cd nasa-bridge
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -e .Doğrulama:
python -c "from nasa_bridge import query; print('ok')"
nasa-bridge missions- Paralel sorgu: Birden fazla misyon aynı anda — toplam süre en yavaş misyon kadar
- Limit kontrolü: Her misyondan en fazla N sonuç
- Hata izolasyonu: Bir misyonda hata diğerlerini düşürmez; hatalar
result.errorslistesinde - Zaman ölçümü:
result.elapsed_seconds+result.per_mission_seconds - JSON serialization:
to_json()ile API-hazır çıktı - Stdlib CLI: Ek bağımlılık yok,
argparsetabanlı
nasa_bridge/
├── core/
│ ├── schema.py # Observation, BridgeResult
│ ├── detector.py # FITS/HDF5/LC format algılama
│ └── normalizer.py # query() + paralel orkestrasyon
├── missions/
│ ├── base.py # MissionAdapter abstract
│ ├── _mast_base.py # MAST için ortak yardımcılar + MastImageAdapter
│ ├── hubble.py # HubbleAdapter (MAST)
│ ├── webb.py # WebbAdapter (MAST)
│ ├── tess.py # TessAdapter (MAST, timeseries)
│ └── chandra.py # ChandraAdapter (HEASARC)
├── utils/converters.py # MJD→ISO, m→nm, bant türetme
└── cli.py # nasa-bridge komutu
Tasarım prensibi: Yeni misyon eklemek = missions/<name>.py dosyası + register_mission() çağrısı. Webb ve Chandra Hafta 3'te bu şekilde eklenecek.
Detaylar: CLAUDE.md.
python -m unittest discover tests -v40+ test üç kategoride:
- Birim: schema, detector, converters, adapter parsing — saniyeler
- Orkestrasyon: query() davranışı, paralelizm — saniyeler (sahte adapter)
- Entegrasyon: gerçek MAST sorgusu — opsiyonel (
NASA_BRIDGE_INTEGRATION=1ile)
- Hafta 1 — Temel + format algılama + örnek scriptler (FITS, LC keşfi)
- Hafta 2 — Schema, Hubble adapter, TESS adapter, paralel query, CLI
- Hafta 3 — Webb (JWST) + Chandra adaptörleri
- Hafta 4 — FastAPI REST katmanı
- Hafta 5 — PyPI yayını + NASA ESDS başvurusu
Bu proje NASA ESDS (Earth Science Data Systems) Programı'na açık kaynak katkı olarak geliştirilmektedir. Issue açmaktan ya da PR göndermekten çekinmeyin.
Araştırmanızda bu araç kullandıysanız aşağıdaki gibi alıntı yapabilirsiniz:
@software{nasa_bridge_2026,
author = {{nasa-bridge contributors}},
title = {NASA Multi-Mission Data Bridge: Unified ETL for Hubble, Webb, TESS, Chandra},
year = {2026},
url = {https://github.com/mirankurdistani/nasa-bridge},
version = {0.4.0}
}MIT — bkz. LICENSE.