from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from core.essentials.observers.ConnectionObserver import ConnectionObserver from core.observers.TicketObserver import TicketObserver from core.Constants import Constants from core.observers.BaseObserver import BaseObserver from core.services.networking.api_requests.step1_get_or_post import get_data_from_api from core.services.networking.api_requests.ApiResponseModel import ApiResponse, ErrorType from core.services.networking.api_requests.step5_solve_api_problems import solve_api_problems from core.errors.logger import logger def sync_ticket_prices( ticket_observer: TicketObserver, connection_observer: ConnectionObserver ) -> dict: notification = f"Connecting to get Ticket Pricing..." ticket_observer.notify("connecting", subject=notification) rejected_list = [None, False, ""] base_url = Constants.TICKET_API_BASE_URL if base_url in rejected_list: notification = "Base URL is Empty, so it can't fetch prices.." ticket_observer.notify("failed_input", subject=notification) return {"valid": False, "error_code": "invalid_url"} url = f"{base_url}/sync" try: api_result = get_data_from_api(url, None, connection_observer) if not api_result.valid: error_msg = api_result.message logger.error(f"[TICKET SYNC Controller] There's an issue with the sync of endpoint {url} the API Reply: {error_msg}") api_result = solve_api_problems( api_reply_object=api_result, get_or_post="get", url=url, payload=None, connection_observer=connection_observer, client_observer=None ) # 2nd try: if not api_result.valid: return {"valid": False, "error_code": "sync_failed"} return {"valid": True, "data": api_result.data} except: return {"valid": False, "error_code": "sync_failed"}