mirror of
https://github.com/migatu/astrololo.git
synced 2026-07-14 13:34:38 +00:00
e69c0714b9
Pierwszy increment implementacji warstwy logicznej (ścieżka A). LOG-24: interfejs EphemerisEngine z dwoma backendami — SkyfieldEngine (własny, permisywny: Skyfield MIT + dane JPL public domain) oraz RemoteEngine (klient izolowanej usługi swisseph). Fabryka + leniwa inicjalizacja; endpointy /chart/positions i /chart/compare. LOG-01: pozycje obiektów (długość/szerokość ekliptyczna, prędkość, kierunek, formaty: w znaku / absolutny / dziesiętny). LOG-25/28: harness porównawczy (compare.py) z progami tolerancji oraz wspólny kontrakt parzystości; pełen zestaw testów. LOG-27: services/engine-swisseph — osobna, opcjonalna usługa AGPL (pyswisseph, tryb Moshiera), licencjonowana osobno, w compose pod profilem "comparison"; nie wchodzi do zamkniętego produktu. Walidacja: SkyfieldEngine zgadza się ze Swiss Ephemeris co do ~1" dla wszystkich 10 obiektów na horoskopie referencyjnym (30.04.1984, Warszawa); 12 testów przechodzi (silnik B pomijany gdy nieskonfigurowany). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
872 B
Python
32 lines
872 B
Python
"""Wspólne fixture'y testów silnika.
|
|
|
|
Horoskop referencyjny = przykład z notatek projektu (notes3): 30.04.1984,
|
|
09:35 CEST = 07:35 UTC, Warszawa. Pozycje znane z astro.com/Swiss Ephemeris
|
|
służą jako wyrocznia (LOG-25).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import datetime as dt
|
|
|
|
import pytest
|
|
|
|
from app.engine.models import ChartMoment
|
|
|
|
REFERENCE_UTC = dt.datetime(1984, 4, 30, 7, 35, 0, tzinfo=dt.timezone.utc)
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def reference_moment() -> ChartMoment:
|
|
return ChartMoment(when_utc=REFERENCE_UTC, lat=52.2333, lon=21.0167)
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def own_engine():
|
|
pytest.importorskip("skyfield")
|
|
from app.engine.skyfield_engine import SkyfieldEngine
|
|
|
|
try:
|
|
return SkyfieldEngine()
|
|
except Exception as e: # brak efemeryd / brak sieci
|
|
pytest.skip(f"Nie można wczytać efemeryd: {e}")
|