50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""Railway Route Activator — AI Devs 4, S01E05
|
|
|
|
Aplikacja aktywująca trasę kolejową X-01 przez API hub.ag3nts.org.
|
|
Zbudowana w clean architecture z uwzględnieniem koncepcji z lekcji:
|
|
- Architektura oparta o zdarzenia (EventBus)
|
|
- Obsługa limitów API (rate limiting, retry z backoff)
|
|
- Obsługa błędów 503 (symulacja przeciążenia serwera)
|
|
- Logowanie i monitorowanie wszystkich interakcji
|
|
- Konfiguracja przez zmienne środowiskowe
|
|
"""
|
|
|
|
import sys
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
from infrastructure.config import Config
|
|
from infrastructure.event_bus import EventBus
|
|
from infrastructure.api_client import RailwayApiClient
|
|
from infrastructure.logger_setup import setup_logging, attach_event_logger
|
|
from application.activate_route import ActivateRouteUseCase
|
|
|
|
|
|
def main() -> None:
|
|
load_dotenv()
|
|
setup_logging()
|
|
|
|
config = Config.from_env()
|
|
|
|
event_bus = EventBus()
|
|
attach_event_logger(event_bus)
|
|
|
|
api_client = RailwayApiClient(config, event_bus)
|
|
|
|
use_case = ActivateRouteUseCase(api_client, event_bus)
|
|
|
|
route_name = sys.argv[1] if len(sys.argv) > 1 else "x-01"
|
|
result = use_case.execute(route_name)
|
|
|
|
if result.success:
|
|
print(f"\nTrasa {result.route.name} aktywowana pomyślnie!")
|
|
if result.flag:
|
|
print(f"Flaga: {result.flag}")
|
|
else:
|
|
print(f"\nBłąd: {result.error}", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|