"""Model for ows-track.""" from http import HTTPStatus from typing import Any from flask import g from owsrequest import request from video import config from video.constants import service def create_track( product_id: int, track_name: str = "Unnamed Video Track", volume_number: int = 1, ) -> dict[str, Any]: """Create track.""" track_response = request.process( application=config.SERVICE_NAME, environment=config.ENVIRONMENT, method="POST", service_name=service.OWS_TRACK, uwsgi_cache_enabled=True, path="/track", json={ "product_id": product_id, "track_name": track_name, "volume_number": volume_number, "track_type": "video", }, ) track_response.raise_for_status() return track_response.json() def get_track(product_id: int) -> dict[str, Any]: """Get track.""" track_response = request.process( application=config.SERVICE_NAME, environment=config.ENVIRONMENT, method="GET", service_name=service.OWS_TRACK, uwsgi_cache_enabled=True, path=f"/product/{product_id}/tracks", ) track_response.raise_for_status() return track_response.json() def get_track_by_id(track_id: int | None = None) -> dict[str, Any]: """Get track by id; returns {} if the track no longer exists (404).""" if track_id is None: return {} track_response = request.process( application=config.SERVICE_NAME, environment=config.ENVIRONMENT, method="GET", service_name=service.OWS_TRACK, uwsgi_cache_enabled=True, path=f"/track/{track_id}", ) if track_response.status_code == HTTPStatus.NOT_FOUND: g.log.warning( f"ows-track returned 404 for track {track_id}; " f"treating as no track (dangling reference to a deleted track)." ) return {} track_response.raise_for_status() return track_response.json() def get_track_id(product_id: int) -> int: """Get track id.""" track = get_track(product_id) if len(track["items"]) == 0: track = create_track(product_id) return track["tuid"] else: return track["items"][0]["tuid"] def get_track_ids(product_id: int) -> list[int]: """Get track ids.""" tracks = get_track(product_id) return [track["tuid"] for track in tracks["items"]] def update_track(track_id: int, data: dict[str, Any]) -> dict[str, Any]: """Update track.""" track_response = request.process( config.SERVICE_NAME, config.ENVIRONMENT, "patch", service.OWS_TRACK, "/track/{}".format(track_id), uwsgi_cache_enabled=True, json=data, ) track_response.raise_for_status() return track_response.json() def is_isrc_used(isrc: str | None, track_type: str) -> dict[str, Any]: """Is isrc used.""" track_response = request.process( application=config.SERVICE_NAME, environment=config.ENVIRONMENT, method="GET", service_name=service.OWS_TRACK, uwsgi_cache_enabled=True, path=f"/isrc/{track_type}/{isrc}", ) track_response.raise_for_status() return track_response.json()