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.httpx import connect 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) api_result = connect.single_endpoint( method="get", url=url, observer=connection_observer, payload=None ) # 2nd try: if not api_result.valid: logger.error(f"Invalid API call result: {api_result.error_type}") return {"valid": False, "error_code": "sync_failed"} # 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"}