55 lines
2 KiB
Python
55 lines
2 KiB
Python
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"}
|