Ana içeriğe geç

Provider Gelistirme

Yeni provider eklerken amac, provider'in ham verisini STANDARD_COLUMNS semasina donusturmek ve pipeline'a IDataFetcher olarak sunmaktir.

1. Provider enum'una ekle

src/selection_service/enums/enums.py:

class ProviderName(str, Enum):
    AFAD = "AFAD"
    PEER = "PEER"
    FDSN = "FDSN"
    ESM = "ESM"
    NEW_PROVIDER = "NEW_PROVIDER"

2. Mapper yaz

BaseColumnMapper sinifini kullanarak ham kolonlari standart kolonlara esle.

from selection_service.processing.mappers import BaseColumnMapper

class NewProviderColumnMapper(BaseColumnMapper):
    def __init__(self, **kwargs):
        super().__init__({
            "raw_event": "EVENT",
            "raw_mag": "MAGNITUDE",
            "raw_station": "STATION",
        })

Mapper sonunda DataFrame STANDARD_COLUMNS sirasi ile donmelidir.

3. Provider yaz

Provider IDataFetcher sozlesmesini karsilamalidir.

from selection_service.providers.interfaces import IDataFetcher
from selection_service.processing.result_handle import Result

class NewProvider(IDataFetcher):
    def get_name(self) -> str:
        return "NEW_PROVIDER"

    def map_criteria(self, criteria):
        return {}

    def fetch_data_sync(self, criteria):
        df = ...
        return Result.ok(df)

    async def fetch_data_async(self, criteria):
        df = ...
        return Result.ok(df)

4. Factory kaydi ekle

ProviderFactory.create_provider() icinde yeni provider'i olustur.

ColumnMapperFactory icin mapper kaydi ekle veya runtime'da ColumnMapperFactory.register(...) kullan.

5. Test ekle

En az su testler eklenmelidir:

  • mapper standart kolonlari uretiyor
  • provider kriterleri dogru map ediyor
  • sync fetch basarili durumda DataFrame donduruyor
  • hata durumunda Result.fail veya ProviderError akisi korunuyor
  • pipeline coklu provider ile kolon kaybi yasamiyor

6. Dokuman guncelle

Yeni provider:

  • docs/concepts.md
  • docs/provider-development.md
  • README.md
  • API referans sayfalari

icinde listelenmelidir.

Ornek: ESM provider'i

providers/esm_provider.py (2.2.0) bu adimlarin tam bir ornegidir:

  • ESMColumnMapper ham flatfile kolonlarindan STANDARD_COLUMNS uretir; birim donusumleri (Arias cm/s -> m/s) ve eksik deger yedekleri (Rjb bos ise Repi) mapper'dadir.
  • map_criteria sunucuya gidecek sorguyu (query) ve yanita uygulanacak filtreleri (filters) ayri dondurur; servisin desteklemedigi kriterler boylece kaybolmaz.
  • HTTP oturumu (session) ve dosya yoneticisi disaridan verilebilir; testler ag olmadan sahte oturumla calisir (tests/test_EsmProvider.py).
  • Download destegi icin IWaveformDownloader da uygulanir.

FDSN notu

FDSN event, istasyon ve waveform aramalari ProviderName.FDSN ile etkindir. Event katalogu varsayilan olarak USGS, istasyon/dataselect servisleri IRIS uzerinden HTTPS ile calisir. Ozel kurulumlar icin base_url ve data_base_url ayri ayri aktarilabilir.