From aab676a313fa8f0ac79e4b991bf71c77b18b3d88 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Sat, 4 Jan 2025 15:53:15 +0100 Subject: [PATCH] Add Overseerr service to get requests (#134229) * Add service to get requests * Add service to get requests * Add service to get requests * fix * Add tests --- .../components/overseerr/__init__.py | 11 + homeassistant/components/overseerr/const.py | 5 + homeassistant/components/overseerr/icons.json | 5 + .../components/overseerr/quality_scale.yaml | 15 +- .../components/overseerr/services.py | 115 + .../components/overseerr/services.yaml | 30 + .../components/overseerr/strings.json | 48 + tests/components/overseerr/conftest.py | 13 +- .../components/overseerr/fixtures/movie.json | 2644 +++++++++++++++++ .../overseerr/fixtures/requests.json | 176 ++ tests/components/overseerr/fixtures/tv.json | 2052 +++++++++++++ .../overseerr/snapshots/test_services.ambr | 204 ++ tests/components/overseerr/test_services.py | 156 + 13 files changed, 5460 insertions(+), 14 deletions(-) create mode 100644 homeassistant/components/overseerr/services.py create mode 100644 homeassistant/components/overseerr/services.yaml create mode 100644 tests/components/overseerr/fixtures/movie.json create mode 100644 tests/components/overseerr/fixtures/requests.json create mode 100644 tests/components/overseerr/fixtures/tv.json create mode 100644 tests/components/overseerr/snapshots/test_services.ambr create mode 100644 tests/components/overseerr/test_services.py diff --git a/homeassistant/components/overseerr/__init__.py b/homeassistant/components/overseerr/__init__.py index 0148dc27fdd..c16b02739ed 100644 --- a/homeassistant/components/overseerr/__init__.py +++ b/homeassistant/components/overseerr/__init__.py @@ -16,13 +16,24 @@ from homeassistant.components.webhook import ( ) from homeassistant.const import CONF_WEBHOOK_ID, Platform from homeassistant.core import HomeAssistant +from homeassistant.helpers import config_validation as cv from homeassistant.helpers.http import HomeAssistantView +from homeassistant.helpers.typing import ConfigType from .const import DOMAIN, JSON_PAYLOAD, LOGGER, REGISTERED_NOTIFICATIONS from .coordinator import OverseerrConfigEntry, OverseerrCoordinator +from .services import setup_services PLATFORMS: list[Platform] = [Platform.SENSOR] +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) + + +async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: + """Set up the Overseerr component.""" + setup_services(hass) + return True + async def async_setup_entry(hass: HomeAssistant, entry: OverseerrConfigEntry) -> bool: """Set up Overseerr from a config entry.""" diff --git a/homeassistant/components/overseerr/const.py b/homeassistant/components/overseerr/const.py index 64262c59d19..48f5436c336 100644 --- a/homeassistant/components/overseerr/const.py +++ b/homeassistant/components/overseerr/const.py @@ -9,6 +9,11 @@ LOGGER = logging.getLogger(__package__) REQUESTS = "requests" +ATTR_CONFIG_ENTRY_ID = "config_entry_id" +ATTR_STATUS = "status" +ATTR_SORT_ORDER = "sort_order" +ATTR_REQUESTED_BY = "requested_by" + REGISTERED_NOTIFICATIONS = ( NotificationType.REQUEST_PENDING_APPROVAL | NotificationType.REQUEST_APPROVED diff --git a/homeassistant/components/overseerr/icons.json b/homeassistant/components/overseerr/icons.json index 0d71028ce5a..2876eb5f882 100644 --- a/homeassistant/components/overseerr/icons.json +++ b/homeassistant/components/overseerr/icons.json @@ -23,5 +23,10 @@ "default": "mdi:message-bulleted" } } + }, + "services": { + "get_requests": { + "service": "mdi:multimedia" + } } } diff --git a/homeassistant/components/overseerr/quality_scale.yaml b/homeassistant/components/overseerr/quality_scale.yaml index 218e4355c96..144f5c1977c 100644 --- a/homeassistant/components/overseerr/quality_scale.yaml +++ b/homeassistant/components/overseerr/quality_scale.yaml @@ -1,19 +1,13 @@ rules: # Bronze - action-setup: - status: exempt - comment: | - This integration does not provide additional actions. + action-setup: done appropriate-polling: done brands: done common-modules: done config-flow-test-coverage: done config-flow: done dependency-transparency: done - docs-actions: - status: exempt - comment: | - This integration does not provide additional actions. + docs-actions: done docs-high-level-description: done docs-installation-instructions: done docs-removal-instructions: done @@ -29,10 +23,7 @@ rules: unique-config-entry: done # Silver - action-exceptions: - status: exempt - comment: | - This integration does not provide additional actions or actionable entities. + action-exceptions: done config-entry-unloading: done docs-configuration-parameters: status: exempt diff --git a/homeassistant/components/overseerr/services.py b/homeassistant/components/overseerr/services.py new file mode 100644 index 00000000000..4631e578af8 --- /dev/null +++ b/homeassistant/components/overseerr/services.py @@ -0,0 +1,115 @@ +"""Define services for the Overseerr integration.""" + +from dataclasses import asdict +from typing import Any, cast + +from python_overseerr import OverseerrClient, OverseerrConnectionError +import voluptuous as vol + +from homeassistant.config_entries import ConfigEntryState +from homeassistant.core import ( + HomeAssistant, + ServiceCall, + ServiceResponse, + SupportsResponse, +) +from homeassistant.exceptions import HomeAssistantError, ServiceValidationError +from homeassistant.util.json import JsonValueType + +from .const import ( + ATTR_CONFIG_ENTRY_ID, + ATTR_REQUESTED_BY, + ATTR_SORT_ORDER, + ATTR_STATUS, + DOMAIN, + LOGGER, +) +from .coordinator import OverseerrConfigEntry + +SERVICE_GET_REQUESTS = "get_requests" +SERVICE_GET_REQUESTS_SCHEMA = vol.Schema( + { + vol.Required(ATTR_CONFIG_ENTRY_ID): str, + vol.Optional(ATTR_STATUS): vol.In( + ["approved", "pending", "available", "processing", "unavailable", "failed"] + ), + vol.Optional(ATTR_SORT_ORDER): vol.In(["added", "modified"]), + vol.Optional(ATTR_REQUESTED_BY): int, + } +) + + +def async_get_entry(hass: HomeAssistant, config_entry_id: str) -> OverseerrConfigEntry: + """Get the Overseerr config entry.""" + if not (entry := hass.config_entries.async_get_entry(config_entry_id)): + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="integration_not_found", + translation_placeholders={"target": DOMAIN}, + ) + if entry.state is not ConfigEntryState.LOADED: + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="not_loaded", + translation_placeholders={"target": entry.title}, + ) + return cast(OverseerrConfigEntry, entry) + + +async def get_media( + client: OverseerrClient, media_type: str, identifier: int +) -> dict[str, Any]: + """Get media details.""" + media = {} + try: + if media_type == "movie": + media = asdict(await client.get_movie_details(identifier)) + if media_type == "tv": + media = asdict(await client.get_tv_details(identifier)) + except OverseerrConnectionError: + LOGGER.error("Could not find data for %s %s", media_type, identifier) + return {} + media["media_info"].pop("requests") + return media + + +def setup_services(hass: HomeAssistant) -> None: + """Set up the services for the Overseerr integration.""" + + async def async_get_requests(call: ServiceCall) -> ServiceResponse: + """Get requests made to Overseerr.""" + entry = async_get_entry(hass, call.data[ATTR_CONFIG_ENTRY_ID]) + client = entry.runtime_data.client + kwargs: dict[str, Any] = {} + if status := call.data.get(ATTR_STATUS): + kwargs["status"] = status + if sort_order := call.data.get(ATTR_SORT_ORDER): + kwargs["sort"] = sort_order + if requested_by := call.data.get(ATTR_REQUESTED_BY): + kwargs["requested_by"] = requested_by + try: + requests = await client.get_requests(**kwargs) + except OverseerrConnectionError as err: + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="connection_error", + translation_placeholders={"error": str(err)}, + ) from err + result: list[dict[str, Any]] = [] + for request in requests: + req = asdict(request) + assert request.media.tmdb_id + req["media"] = await get_media( + client, request.media.media_type, request.media.tmdb_id + ) + result.append(req) + + return {"requests": cast(list[JsonValueType], result)} + + hass.services.async_register( + DOMAIN, + SERVICE_GET_REQUESTS, + async_get_requests, + schema=SERVICE_GET_REQUESTS_SCHEMA, + supports_response=SupportsResponse.ONLY, + ) diff --git a/homeassistant/components/overseerr/services.yaml b/homeassistant/components/overseerr/services.yaml new file mode 100644 index 00000000000..c7593fc5aee --- /dev/null +++ b/homeassistant/components/overseerr/services.yaml @@ -0,0 +1,30 @@ +get_requests: + fields: + config_entry_id: + required: true + selector: + config_entry: + integration: overseerr + status: + selector: + select: + options: + - approved + - pending + - available + - processing + - unavailable + - failed + translation_key: request_status + sort_order: + selector: + select: + options: + - added + - modified + translation_key: request_sort_order + requested_by: + selector: + number: + min: 0 + mode: box diff --git a/homeassistant/components/overseerr/strings.json b/homeassistant/components/overseerr/strings.json index bc3b5ee30c5..338c9d91a38 100644 --- a/homeassistant/components/overseerr/strings.json +++ b/homeassistant/components/overseerr/strings.json @@ -48,6 +48,54 @@ "exceptions": { "connection_error": { "message": "Error connecting to the Overseerr instance: {error}" + }, + "not_loaded": { + "message": "{target} is not loaded." + }, + "integration_not_found": { + "message": "Integration \"{target}\" not found in registry." + } + }, + "services": { + "get_requests": { + "name": "Get requests", + "description": "Get media requests from Overseerr.", + "fields": { + "config_entry_id": { + "name": "Overseerr instance", + "description": "The Overseerr instance to get requests from." + }, + "status": { + "name": "Request status", + "description": "Filter the requests by status." + }, + "sort_order": { + "name": "Sort order", + "description": "Sort the requests by added or modified date." + }, + "requested_by": { + "name": "Requested by", + "description": "Filter the requests by the user id that requested them." + } + } + } + }, + "selector": { + "request_status": { + "options": { + "approved": "Approved", + "pending": "Pending", + "available": "Available", + "processing": "Processing", + "unavailable": "Unavailable", + "failed": "Failed" + } + }, + "request_sort_order": { + "options": { + "added": "Added", + "modified": "Modified" + } } } } diff --git a/tests/components/overseerr/conftest.py b/tests/components/overseerr/conftest.py index a98cfef321f..b05d1d0cb87 100644 --- a/tests/components/overseerr/conftest.py +++ b/tests/components/overseerr/conftest.py @@ -4,8 +4,8 @@ from collections.abc import Generator from unittest.mock import AsyncMock, patch import pytest -from python_overseerr import RequestCount -from python_overseerr.models import WebhookNotificationConfig +from python_overseerr import MovieDetails, RequestCount, RequestResponse +from python_overseerr.models import TVDetails, WebhookNotificationConfig from homeassistant.components.overseerr.const import DOMAIN from homeassistant.const import ( @@ -54,6 +54,15 @@ def mock_overseerr_client() -> Generator[AsyncMock]: ) ) client.test_webhook_notification_config.return_value = True + client.get_requests.return_value = RequestResponse.from_json( + load_fixture("requests.json", DOMAIN) + ).results + client.get_movie_details.return_value = MovieDetails.from_json( + load_fixture("movie.json", DOMAIN) + ) + client.get_tv_details.return_value = TVDetails.from_json( + load_fixture("tv.json", DOMAIN) + ) yield client diff --git a/tests/components/overseerr/fixtures/movie.json b/tests/components/overseerr/fixtures/movie.json new file mode 100644 index 00000000000..2f5e86b3261 --- /dev/null +++ b/tests/components/overseerr/fixtures/movie.json @@ -0,0 +1,2644 @@ +{ + "id": 1156593, + "adult": false, + "budget": 0, + "genres": [ + { + "id": 10749, + "name": "Romance" + }, + { + "id": 18, + "name": "Drama" + } + ], + "relatedVideos": [ + { + "site": "YouTube", + "key": "IoyJOL5WnvQ", + "name": "Nick and Noah Meet Briar and Sofia [Subtitled]", + "size": 1080, + "type": "Clip", + "url": "https://www.youtube.com/watch?v=IoyJOL5WnvQ" + }, + { + "site": "YouTube", + "key": "nuPjieeswM4", + "name": "Sneak Peek: Nick and Noah are Back [Subtitled]", + "size": 1080, + "type": "Clip", + "url": "https://www.youtube.com/watch?v=nuPjieeswM4" + }, + { + "site": "YouTube", + "key": "QT5j0Uf-rdM", + "name": "Official Trailer 2 [Subtitled]", + "size": 1080, + "type": "Trailer", + "url": "https://www.youtube.com/watch?v=QT5j0Uf-rdM" + }, + { + "site": "YouTube", + "key": "m_TWESxP_DE", + "name": "Official Trailer [Subtitled]", + "size": 1080, + "type": "Trailer", + "url": "https://www.youtube.com/watch?v=m_TWESxP_DE" + }, + { + "site": "YouTube", + "key": "Wp4S0-fWgI0", + "name": "Official Teaser [Subtitled]", + "size": 1080, + "type": "Teaser", + "url": "https://www.youtube.com/watch?v=Wp4S0-fWgI0" + }, + { + "site": "YouTube", + "key": "3KTZekgTyFU", + "name": "Date Announce", + "size": 1080, + "type": "Teaser", + "url": "https://www.youtube.com/watch?v=3KTZekgTyFU" + } + ], + "originalLanguage": "es", + "originalTitle": "Culpa tuya", + "popularity": 3958.479, + "productionCompanies": [ + { + "id": 32485, + "name": "Pokeepsie Films", + "originCountry": "ES", + "logoPath": "/fVXreZkiJTOq1cCi6htSQlPSy7R.png" + }, + { + "id": 210099, + "name": "Amazon MGM Studios", + "originCountry": "US", + "logoPath": "/d6HwljzlOzxJ4tXlrpRkNZaZMWL.png" + } + ], + "productionCountries": [ + { + "iso_3166_1": "ES", + "name": "Spain" + }, + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "releaseDate": "2024-12-26", + "releases": { + "results": [ + { + "iso_3166_1": "AR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "AS", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-26T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "AT", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "BE", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "BG", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "BO", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "BR", + "release_dates": [ + { + "certification": "18", + "descriptors": ["Sexual Content", "Illegal Drugs"], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-26T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CA", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CH", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CL", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CO", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "CZ", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "DE", + "release_dates": [ + { + "certification": "16", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "DK", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "EC", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "EG", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "ES", + "release_dates": [ + { + "certification": "16", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "FI", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "FR", + "release_dates": [ + { + "certification": "16", + "descriptors": [], + "iso_639_1": "", + "note": "Prime vidéo", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "GB", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "GR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "GT", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "GU", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "HK", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "HR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "HU", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "ID", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "IE", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "IN", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "IT", + "release_dates": [ + { + "certification": "14+", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "JP", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "KR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "MP", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "MX", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "MY", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "NL", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "NO", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "NZ", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PE", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PH", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PK", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PL", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-26T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "PT", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "RO", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "SA", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "SE", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "SG", + "release_dates": [ + { + "certification": "M18", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "SK", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "TH", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "TR", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "TW", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "US", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-26T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "VE", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "VI", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-26T00:00:00.000Z", + "type": 4 + } + ] + }, + { + "iso_3166_1": "ZA", + "release_dates": [ + { + "certification": "", + "descriptors": [], + "iso_639_1": "", + "note": "Prime Video", + "release_date": "2024-12-27T00:00:00.000Z", + "type": 4 + } + ] + } + ] + }, + "revenue": 0, + "spokenLanguages": [ + { + "english_name": "Spanish", + "iso_639_1": "es", + "name": "Español" + } + ], + "status": "Released", + "title": "Your Fault", + "video": false, + "voteAverage": 7.7, + "voteCount": 190, + "backdropPath": "/6qld2YxAO9gdEblo0rsEb8BcYKO.jpg", + "homepage": "https://www.amazon.com/dp/B0DJ1L7ZN3", + "imdbId": "tt28510079", + "overview": "The love between Noah and Nick seems unwavering despite their parents' attempts to separate them. But his job and her entry into college open up their lives to new relationships that will shake the foundations of both their relationship and the Leister family itself.", + "posterPath": "/1sQA7lfcF9yUyoLYC0e6Zo3jmxE.jpg", + "runtime": 120, + "tagline": "Divided by family. Driven by love.", + "credits": { + "cast": [ + { + "castId": 1, + "character": "Noah Morgan", + "creditId": "64c12ecefdc1460139f9e120", + "id": 2527414, + "name": "Nicole Wallace", + "order": 0, + "gender": 1, + "profilePath": "/gSGCoJVKAMUTmyA3GzCAX22WNBA.jpg" + }, + { + "castId": 2, + "character": "Nick Leister", + "creditId": "64c12ed6df86a80125827557", + "id": 2786960, + "name": "Gabriel Guevara", + "order": 1, + "gender": 2, + "profilePath": "/pviRYKEEmoPUfLYwP1VHJ6LQcRg.jpg" + }, + { + "castId": 12, + "character": "William Leister", + "creditId": "65e0ed456a300b017d1dc9fc", + "id": 1251336, + "name": "Iván Sánchez", + "order": 2, + "gender": 2, + "profilePath": "/woVz8D7t1VUKjFJnsTAdc8tyz5C.jpg" + }, + { + "castId": 13, + "character": "Rafaela", + "creditId": "65e0ed9851f99a018557897f", + "id": 970027, + "name": "Marta Hazas", + "order": 3, + "gender": 1, + "profilePath": "/1dbeTFRCbWBt70dIGjYHKVLnpaG.jpg" + }, + { + "castId": 14, + "character": "Jenna", + "creditId": "65e0edda41a561016382560b", + "id": 4105602, + "name": "Eva Ruiz", + "order": 4, + "gender": 1, + "profilePath": "/bcu0nmQvhxwTzh4csc4kuxJsQee.jpg" + }, + { + "castId": 15, + "character": "Lion", + "creditId": "65e0ef982d531a0162bf8423", + "id": 2126335, + "name": "Víctor Varona", + "order": 5, + "gender": 0, + "profilePath": "/lcwFAjHjhJXkxf59TXGSjGGOlLj.jpg" + }, + { + "castId": 16, + "character": "Sofía", + "creditId": "65e0f001724de10187de9bf1", + "id": 3513082, + "name": "Gabriela Andrada", + "order": 6, + "gender": 1, + "profilePath": "/h8cAdDqbDK2ayGIuxQQdNCzyCsb.jpg" + }, + { + "castId": 17, + "character": "Briar", + "creditId": "65e0f09541a5610186825d32", + "id": 3904252, + "name": "Alex Bejar", + "order": 7, + "gender": 1, + "profilePath": "/kPeFa6xX57IyhAfoT8dtgfPMgmX.jpg" + }, + { + "castId": 18, + "character": "Michael", + "creditId": "65e0f0b46a300b017d1dcbde", + "id": 2785763, + "name": "Javier Morgade", + "order": 8, + "gender": 2, + "profilePath": "/hcDV10bTZlm1rTi0NRhoGIpdicw.jpg" + }, + { + "castId": 19, + "character": "Luca", + "creditId": "65e0f35ea39d0b018608bda5", + "id": 3117422, + "name": "Felipe Londoño", + "order": 9, + "gender": 0, + "profilePath": "/gUKu2bla3ZKtwuzfymMbyzUsobC.jpg" + }, + { + "castId": 20, + "character": "Anabel", + "creditId": "65e0f37c9dee58017c7cdb1f", + "id": 261, + "name": "Goya Toledo", + "order": 10, + "gender": 1, + "profilePath": "/dihdQxVr2sFA1XznPK4orzC2m7i.jpg" + }, + { + "castId": 21, + "character": "Simón", + "creditId": "65e0f3b107e2810163dc6d82", + "id": 1983424, + "name": "Fran Morcillo", + "order": 11, + "gender": 2, + "profilePath": "/ovPzGuRvMQhB4OrC6lfxlEGLewD.jpg" + }, + { + "castId": 22, + "character": "Dioni", + "creditId": "65e0f420724de10187de9dbf", + "id": 2508286, + "name": "José Manuel Palacios", + "order": 12, + "gender": 2, + "profilePath": "/1oXz8Hht5pBluq700BmHBQwWbVQ.jpg" + } + ], + "crew": [ + { + "creditId": "64c54c10cadb6b01440d5d47", + "department": "Writing", + "id": 4106905, + "job": "Novel", + "name": "Mercedes Ron", + "gender": 1, + "profilePath": null + }, + { + "creditId": "64c12f562f1be000ae4ba431", + "department": "Production", + "id": 57865, + "job": "Producer", + "name": "Álex de la Iglesia", + "gender": 2, + "profilePath": "/vyZFSSNtY2jL06v4nJHLIT5fWa2.jpg" + }, + { + "creditId": "64c12f63097c49011d82bc77", + "department": "Production", + "id": 512958, + "job": "Producer", + "name": "Carolina Bang", + "gender": 1, + "profilePath": "/zwY5dMMeRAxUGU2Q50u7mWk3DA0.jpg" + }, + { + "creditId": "64c17c3d871b34011e697f24", + "department": "Directing", + "id": 1739102, + "job": "Director", + "name": "Domingo González", + "gender": 0, + "profilePath": null + }, + { + "creditId": "674ddb345c9ffdbae7692b9a", + "department": "Writing", + "id": 1739102, + "job": "Screenplay", + "name": "Domingo González", + "gender": 0, + "profilePath": null + }, + { + "creditId": "674ddb3f7473778bbd9afc75", + "department": "Writing", + "id": 1495797, + "job": "Screenplay", + "name": "Sofía Cuenca", + "gender": 0, + "profilePath": "/d5JbOSgQFcLd0GlBSotuNXK9Yia.jpg" + } + ] + }, + "collection": { + "id": 1156666, + "name": "Fault Collection", + "posterPath": "/cAimhhErEnKdvaZoU6Wtbf38sTS.jpg", + "backdropPath": "/7N9p8D39MXJDfm14zlBwW7mBh7g.jpg" + }, + "externalIds": { + "facebookId": null, + "imdbId": "tt28510079", + "instagramId": null, + "twitterId": null + }, + "mediaInfo": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 537, + "mediaType": "movie", + "tmdbId": 1156593, + "tvdbId": null, + "imdbId": null, + "status": 3, + "status4k": 1, + "createdAt": "2024-12-29T10:04:16.000Z", + "updatedAt": "2024-12-29T10:04:17.000Z", + "lastSeasonChange": "2024-12-29T10:04:16.000Z", + "mediaAddedAt": null, + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 423, + "externalServiceId4k": null, + "externalServiceSlug": "1156593", + "externalServiceSlug4k": null, + "ratingKey": null, + "ratingKey4k": null, + "requests": [ + { + "id": 16, + "status": 2, + "createdAt": "2024-12-29T10:04:16.000Z", + "updatedAt": "2024-12-29T10:04:16.000Z", + "type": "movie", + "is4k": false, + "serverId": 0, + "profileId": 7, + "rootFolder": "/media/movies", + "languageProfileId": null, + "tags": [], + "isAutoRequest": false, + "media": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 537, + "mediaType": "movie", + "tmdbId": 1156593, + "tvdbId": null, + "imdbId": null, + "status": 3, + "status4k": 1, + "createdAt": "2024-12-29T10:04:16.000Z", + "updatedAt": "2024-12-29T10:04:17.000Z", + "lastSeasonChange": "2024-12-29T10:04:16.000Z", + "mediaAddedAt": null, + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 423, + "externalServiceId4k": null, + "externalServiceSlug": "1156593", + "externalServiceSlug4k": null, + "ratingKey": null, + "ratingKey4k": null, + "serviceUrl": "http://192.168.0.1:7878/movie/1156593" + }, + "requestedBy": { + "permissions": 2, + "id": 1, + "email": "me@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 43972689, + "avatar": "https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "modifiedBy": { + "permissions": 2, + "id": 1, + "email": "me@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 43972689, + "avatar": "https://plex.tv/users/aaaaaaa/avatar?c=aaaaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "seasons": [], + "seasonCount": 0 + } + ], + "issues": [], + "seasons": [], + "serviceUrl": "http://192.168.0.1:7878/movie/1156593" + }, + "watchProviders": [ + { + "iso_3166_1": "AD", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AD", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AE", + "buy": [], + "flatrate": [ + { + "displayPriority": 9, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AL", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 65, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "AU", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=AU", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BB", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BB", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BH", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BM", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BS", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=BS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CA", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 152, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "CH", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CI", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CL", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CL", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CZ", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=CZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 157, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "DK", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DK", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DZ", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=DZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EC", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=EG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ES", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ES", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "FI", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=FI", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "FR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=FR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GB", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GB", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 136, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "GF", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GF", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GH", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GI", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=GT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HK", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HK", + "buy": [], + "flatrate": [ + { + "displayPriority": 5, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HN", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HU", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=HU", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ID", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ID", + "buy": [], + "flatrate": [ + { + "displayPriority": 7, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IL", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IN", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IQ", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IQ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IS", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IS", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=IT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 15, + "logoPath": "/6FDKQWcR6JfmRKLqezSsvGgRuUY.jpg", + "id": 109, + "name": "Timvision" + } + ] + }, + { + "iso_3166_1": "JM", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "JO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "JP", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=JP", + "buy": [], + "flatrate": [ + { + "displayPriority": 4, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KW", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=KW", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LB", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LB", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LC", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LI", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LV", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LV", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LY", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=LY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MC", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MD", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MD", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MK", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MK", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MX", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MX", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MY", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MY", + "buy": [], + "flatrate": [ + { + "displayPriority": 9, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MZ", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=MZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NL", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NO", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NZ", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=NZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "OM", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=OM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PF", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PF", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PH", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PK", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PK", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PL", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PL", + "buy": [], + "flatrate": [ + { + "displayPriority": 5, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PS", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PY", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=PY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "QA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=QA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "RO", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=RO", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "RS", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=RS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SA", + "buy": [], + "flatrate": [ + { + "displayPriority": 23, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SI", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SK", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SK", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SM", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SV", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=SV", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TC", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TH", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TH", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TN", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TR", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TR", + "buy": [], + "flatrate": [ + { + "displayPriority": 6, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TT", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TW", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=TW", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "UG", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=UG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "US", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=US", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 258, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "UY", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=UY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "VA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=VA", + "buy": [], + "flatrate": [ + { + "displayPriority": 0, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "VE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=VE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "YE", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=YE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ZA", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ZA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ZM", + "link": "https://www.themoviedb.org/movie/1156593-culpa-tuya/watch?locale=ZM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + } + ], + "keywords": [ + { + "id": 818, + "name": "based on novel or book" + }, + { + "id": 9663, + "name": "sequel" + } + ] +} diff --git a/tests/components/overseerr/fixtures/requests.json b/tests/components/overseerr/fixtures/requests.json new file mode 100644 index 00000000000..ff422420893 --- /dev/null +++ b/tests/components/overseerr/fixtures/requests.json @@ -0,0 +1,176 @@ +{ + "pageInfo": { + "pages": 2, + "pageSize": 10, + "results": 14, + "page": 1 + }, + "results": [ + { + "id": 16, + "status": 2, + "createdAt": "2024-12-29T10:04:16.000Z", + "updatedAt": "2024-12-29T10:04:16.000Z", + "type": "movie", + "is4k": false, + "serverId": 0, + "profileId": 7, + "rootFolder": "/media/movies", + "languageProfileId": null, + "tags": [], + "isAutoRequest": false, + "media": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 537, + "mediaType": "movie", + "tmdbId": 1156593, + "tvdbId": null, + "imdbId": null, + "status": 3, + "status4k": 1, + "createdAt": "2024-12-29T10:04:16.000Z", + "updatedAt": "2024-12-29T10:04:17.000Z", + "lastSeasonChange": "2024-12-29T10:04:16.000Z", + "mediaAddedAt": null, + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 423, + "externalServiceId4k": null, + "externalServiceSlug": "1156593", + "externalServiceSlug4k": null, + "ratingKey": null, + "ratingKey4k": null, + "serviceUrl": "http://192.168.0.1:7878/movie/1156593" + }, + "seasons": [], + "modifiedBy": { + "permissions": 2, + "id": 1, + "email": "one@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 321321321, + "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "requestedBy": { + "permissions": 2, + "id": 1, + "email": "one@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 321321321, + "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "seasonCount": 0 + }, + { + "id": 14, + "status": 2, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:37:30.000Z", + "type": "tv", + "is4k": false, + "serverId": 0, + "profileId": 7, + "rootFolder": "/media/tv", + "languageProfileId": 1, + "tags": [], + "isAutoRequest": false, + "media": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 535, + "mediaType": "tv", + "tmdbId": 249522, + "tvdbId": 447806, + "imdbId": null, + "status": 4, + "status4k": 1, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:45:00.000Z", + "lastSeasonChange": "2024-12-26T14:37:30.000Z", + "mediaAddedAt": "2024-12-26T14:39:56.000Z", + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 144, + "externalServiceId4k": null, + "externalServiceSlug": "beast-games", + "externalServiceSlug4k": null, + "ratingKey": "10189", + "ratingKey4k": null, + "plexUrl": "https://app.plex.tv/desktop#!/server/aaaa/details?key=%2Flibrary%2Fmetadata%2F10189", + "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaa", + "serviceUrl": "http://192.168.0.2:8989/series/beast-games" + }, + "seasons": [ + { + "id": 4, + "seasonNumber": 1, + "status": 2, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:37:30.000Z" + } + ], + "modifiedBy": { + "permissions": 2, + "id": 1, + "email": "one@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 321321321, + "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "requestedBy": { + "permissions": 2, + "id": 1, + "email": "one@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 321321321, + "avatar": "https://plex.tv/users/aaaaa/avatar?c=aaaaa", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "seasonCount": 1 + } + ] +} diff --git a/tests/components/overseerr/fixtures/tv.json b/tests/components/overseerr/fixtures/tv.json new file mode 100644 index 00000000000..445197de0ad --- /dev/null +++ b/tests/components/overseerr/fixtures/tv.json @@ -0,0 +1,2052 @@ +{ + "createdBy": [ + { + "id": 2282154, + "credit_id": "673fc8e2d7bee5585c559789", + "name": "Jimmy Donaldson", + "original_name": "Jimmy Donaldson", + "gender": 2, + "profile_path": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" + }, + { + "id": 4886515, + "credit_id": "673fc8ecd7bee5585c55979f", + "name": "Tyler Conklin", + "original_name": "Tyler Conklin", + "gender": 2, + "profile_path": null + }, + { + "id": 572350, + "credit_id": "673fc8f4d7bee5585c5597a7", + "name": "Sean Klitzner", + "original_name": "Sean Klitzner", + "gender": 2, + "profile_path": "/rTVGa5hK5N9mhJwrd2oGOWzbeh7.jpg" + }, + { + "id": 5073789, + "credit_id": "673fc8f88337acae076dca7d", + "name": "Mack Hopkins", + "original_name": "Mack Hopkins", + "gender": 2, + "profile_path": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" + } + ], + "episodeRunTime": [], + "firstAirDate": "2024-12-19", + "genres": [ + { + "id": 10764, + "name": "Reality" + } + ], + "relatedVideos": [ + { + "site": "YouTube", + "key": "37ZG9lddxto", + "name": "Official Trailer", + "size": 1080, + "type": "Trailer", + "url": "https://www.youtube.com/watch?v=37ZG9lddxto" + }, + { + "site": "YouTube", + "key": "2lyCZnx71ps", + "name": "Teaser Trailer", + "size": 1080, + "type": "Teaser", + "url": "https://www.youtube.com/watch?v=2lyCZnx71ps" + } + ], + "homepage": "https://www.amazon.com/dp/B0CZ7S3N9Y", + "id": 249522, + "inProduction": true, + "languages": ["da", "en"], + "lastAirDate": "2024-12-26", + "name": "Beast Games", + "networks": [ + { + "id": 1024, + "name": "Prime Video", + "originCountry": "", + "logoPath": "/ifhbNuuVnlwYy5oXA5VIb2YR8AZ.png" + } + ], + "numberOfEpisodes": 10, + "numberOfSeasons": 1, + "originCountry": ["US"], + "originalLanguage": "en", + "originalName": "Beast Games", + "tagline": "1,000 players. 5 million dollars. 1 winner.", + "overview": "I gathered 1,000 people to fight for $5,000,000, the LARGEST cash prize in TV history! We're also giving away a private island, Lamborghinis, and millions more in cash throughout the competition! Go watch to see the greatest show ever made!", + "popularity": 769.189, + "productionCompanies": [ + { + "id": 210099, + "name": "Amazon MGM Studios", + "originCountry": "US", + "logoPath": "/d6HwljzlOzxJ4tXlrpRkNZaZMWL.png" + }, + { + "id": 247865, + "name": "MrBeast", + "originCountry": "US", + "logoPath": "/9jchzJF1IonYRakcyVIu2fKb8Mz.png" + } + ], + "productionCountries": [ + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "contentRatings": { + "results": [ + { + "descriptors": [], + "iso_3166_1": "SG", + "rating": "G" + }, + { + "descriptors": [], + "iso_3166_1": "BR", + "rating": "L" + }, + { + "descriptors": [], + "iso_3166_1": "MX", + "rating": "A" + }, + { + "descriptors": [], + "iso_3166_1": "US", + "rating": "TV-G" + }, + { + "descriptors": [], + "iso_3166_1": "ES", + "rating": "7" + } + ] + }, + "spokenLanguages": [ + { + "englishName": "Danish", + "iso_639_1": "da", + "name": "Dansk" + }, + { + "englishName": "English", + "iso_639_1": "en", + "name": "English" + } + ], + "seasons": [ + { + "airDate": "2024-12-19", + "episodeCount": 10, + "id": 384427, + "name": "Season 1", + "overview": "", + "seasonNumber": 1, + "posterPath": "/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg" + } + ], + "status": "Returning Series", + "type": "Reality", + "voteAverage": 7.523, + "voteCount": 44, + "backdropPath": "/bXJII8e2iIQ7EzDx4KRhSghn2me.jpg", + "lastEpisodeToAir": { + "id": 5802152, + "airDate": "2024-12-26", + "episodeNumber": 3, + "name": "The Solitary Experiment", + "overview": "What would happen if three best friends were trapped in a room, but only two could escape? Watch and see for yourself right now!", + "productionCode": "", + "seasonNumber": 1, + "showId": 249522, + "voteAverage": 4.6, + "stillPath": "/r6LRRaA2l2tMDttWbYl3dXdJUij.jpg" + }, + "nextEpisodeToAir": { + "id": 5802153, + "airDate": "2025-01-02", + "episodeNumber": 4, + "name": "Episode 4", + "overview": "", + "productionCode": "", + "seasonNumber": 1, + "showId": 249522, + "voteAverage": 0, + "stillPath": null + }, + "posterPath": "/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg", + "credits": { + "cast": [ + { + "character": "Self - Host", + "creditId": "65f9449f15a4a1012c0c8d19", + "id": 2282154, + "name": "Jimmy Donaldson", + "order": 0, + "gender": 2, + "profilePath": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" + }, + { + "character": "Self - Co-Host", + "creditId": "6765bca2330bce6ec990e041", + "id": 5131521, + "name": "Chandler Hallow", + "order": 1, + "gender": 2, + "profilePath": "/8MAvWDC4FiiSYlmpZ9p2oCovxl0.jpg" + }, + { + "character": "Self - Co-Host", + "creditId": "6765bcb9330bce6ec990e059", + "id": 5131522, + "name": "Karl Jacobs", + "order": 2, + "gender": 2, + "profilePath": "/9ZNCxiXh4l3i24KXLD67Lqyv04K.jpg" + }, + { + "character": "Self - Co-Host", + "creditId": "6765bcbf87b92a43be5e00bd", + "id": 5131524, + "name": "Nolan Hansen", + "order": 3, + "gender": 2, + "profilePath": "/uyEUcMieLKH6pn9JTPuoI5nURWB.jpg" + }, + { + "character": "Self - Co-Host", + "creditId": "6765bcca919287ef5390dc73", + "id": 5131525, + "name": "Tareq Salameh", + "order": 4, + "gender": 2, + "profilePath": "/bFZn6A8CSn7EPi9MHcIYxTpLAlF.jpg" + }, + { + "character": "Self - Co-Host", + "creditId": "6765bcd1919287ef5390dc7c", + "id": 5073789, + "name": "Mack Hopkins", + "order": 5, + "gender": 2, + "profilePath": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" + }, + { + "character": "Self", + "creditId": "6767dae0ae1b411f405e4af9", + "id": 1126417, + "name": "Arturo del Puerto", + "order": 6, + "gender": 2, + "profilePath": "/tALGmngyUUtxyeQtMSy7KyzjdYc.jpg" + } + ], + "crew": [ + { + "creditId": "65f94625223e20016079bd7c", + "department": "Production", + "id": 2282154, + "job": "Executive Producer", + "name": "Jimmy Donaldson", + "gender": 2, + "profilePath": "/dE6VIMrvZsY5a9gIaWoX40tzYkV.jpg" + }, + { + "creditId": "673fcb2b7b825e685b4e0a34", + "department": "Production", + "id": 4886515, + "job": "Executive Producer", + "name": "Tyler Conklin", + "gender": 2, + "profilePath": null + }, + { + "creditId": "673fcb357b825e685b4e0a37", + "department": "Production", + "id": 572350, + "job": "Executive Producer", + "name": "Sean Klitzner", + "gender": 2, + "profilePath": "/rTVGa5hK5N9mhJwrd2oGOWzbeh7.jpg" + }, + { + "creditId": "673fcb41dae2e6a938254d38", + "department": "Production", + "id": 5073789, + "job": "Executive Producer", + "name": "Mack Hopkins", + "gender": 2, + "profilePath": "/5yaA2crWsdzTf2BFnlZ3ZuvFaL8.jpg" + }, + { + "creditId": "673fcb57dae2e6a938254d4e", + "department": "Production", + "id": 5073813, + "job": "Executive Producer", + "name": "Michael Cruz", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb605cac041cfae26a54", + "department": "Production", + "id": 4851894, + "job": "Executive Producer", + "name": "Matt Apps", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb6b7b825e685b4e0a3d", + "department": "Production", + "id": 4007900, + "job": "Executive Producer", + "name": "Charles Wachter", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb747b825e685b4e0a43", + "department": "Production", + "id": 2292335, + "job": "Executive Producer", + "name": "Keith Geller", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb807b825e685b4e0a4d", + "department": "Production", + "id": 1251868, + "job": "Executive Producer", + "name": "Joe Coleman", + "gender": 2, + "profilePath": null + }, + { + "creditId": "673fcb877b825e685b4e0a53", + "department": "Production", + "id": 1450643, + "job": "Executive Producer", + "name": "Rachel Skidmore", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb91dae2e6a938254d5c", + "department": "Production", + "id": 4338334, + "job": "Executive Producer", + "name": "Chris Keiper", + "gender": 0, + "profilePath": null + }, + { + "creditId": "673fcb9a5cac041cfae26a5c", + "department": "Production", + "id": 5073815, + "job": "Executive Producer", + "name": "Joshua Kulic", + "gender": 0, + "profilePath": null + } + ] + }, + "externalIds": { + "facebookId": null, + "freebaseId": null, + "freebaseMid": null, + "imdbId": "tt31812476", + "instagramId": "beastgamesonprime", + "tvdbId": 447806, + "tvrageId": null, + "twitterId": null + }, + "keywords": [ + { + "id": 271, + "name": "competition" + }, + { + "id": 4325, + "name": "game show" + }, + { + "id": 330122, + "name": "mrbeast" + } + ], + "mediaInfo": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 535, + "mediaType": "tv", + "tmdbId": 249522, + "tvdbId": 447806, + "imdbId": null, + "status": 4, + "status4k": 1, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:45:00.000Z", + "lastSeasonChange": "2024-12-26T14:37:30.000Z", + "mediaAddedAt": "2024-12-26T14:39:56.000Z", + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 144, + "externalServiceId4k": null, + "externalServiceSlug": "beast-games", + "externalServiceSlug4k": null, + "ratingKey": "10189", + "ratingKey4k": null, + "requests": [ + { + "id": 14, + "status": 2, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:37:30.000Z", + "type": "tv", + "is4k": false, + "serverId": 0, + "profileId": 7, + "rootFolder": "/media/tv", + "languageProfileId": 1, + "tags": [], + "isAutoRequest": false, + "media": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 535, + "mediaType": "tv", + "tmdbId": 249522, + "tvdbId": 447806, + "imdbId": null, + "status": 4, + "status4k": 1, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:45:00.000Z", + "lastSeasonChange": "2024-12-26T14:37:30.000Z", + "mediaAddedAt": "2024-12-26T14:39:56.000Z", + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 144, + "externalServiceId4k": null, + "externalServiceSlug": "beast-games", + "externalServiceSlug4k": null, + "ratingKey": "10189", + "ratingKey4k": null, + "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", + "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", + "serviceUrl": "http://192.168.0.2:8989/series/beast-games" + }, + "requestedBy": { + "permissions": 2, + "id": 1, + "email": "me@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 123123, + "avatar": "https://plex.tv/users/123123/avatar?c=123123", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "modifiedBy": { + "permissions": 2, + "id": 1, + "email": "me@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 123123, + "avatar": "https://plex.tv/users/123123/avatar?c=123123", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "seasons": [ + { + "id": 4, + "seasonNumber": 1, + "status": 2, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:37:30.000Z" + } + ], + "seasonCount": 1 + } + ], + "issues": [ + { + "id": 1, + "issueType": 2, + "status": 1, + "problemSeason": 1, + "problemEpisode": 0, + "createdAt": "2024-12-28T14:22:29.000Z", + "updatedAt": "2024-12-28T14:22:54.000Z", + "media": { + "downloadStatus": [], + "downloadStatus4k": [], + "id": 535, + "mediaType": "tv", + "tmdbId": 249522, + "tvdbId": 447806, + "imdbId": null, + "status": 4, + "status4k": 1, + "createdAt": "2024-12-26T14:37:30.000Z", + "updatedAt": "2024-12-26T14:45:00.000Z", + "lastSeasonChange": "2024-12-26T14:37:30.000Z", + "mediaAddedAt": "2024-12-26T14:39:56.000Z", + "serviceId": 0, + "serviceId4k": null, + "externalServiceId": 144, + "externalServiceId4k": null, + "externalServiceSlug": "beast-games", + "externalServiceSlug4k": null, + "ratingKey": "10189", + "ratingKey4k": null, + "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", + "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", + "serviceUrl": "http://192.168.0.2:8989/series/beast-games" + }, + "createdBy": { + "permissions": 2, + "id": 1, + "email": "me@email.com", + "plexUsername": "somebody", + "username": null, + "recoveryLinkExpirationDate": null, + "userType": 1, + "plexId": 123123, + "avatar": "https://plex.tv/users/123123/avatar?c=123123", + "movieQuotaLimit": null, + "movieQuotaDays": null, + "tvQuotaLimit": null, + "tvQuotaDays": null, + "createdAt": "2024-12-16T21:13:58.000Z", + "updatedAt": "2024-12-16T23:59:03.000Z", + "requestCount": 11, + "displayName": "somebody" + }, + "modifiedBy": null, + "comments": [ + { + "id": 2, + "message": "boop", + "createdAt": "2024-12-28T14:22:54.000Z", + "updatedAt": "2024-12-28T14:22:54.000Z" + }, + { + "id": 1, + "message": "test", + "createdAt": "2024-12-28T14:22:29.000Z", + "updatedAt": "2024-12-28T14:22:29.000Z" + } + ] + } + ], + "seasons": [ + { + "id": 577, + "seasonNumber": 1, + "status": 4, + "status4k": 1, + "createdAt": "2024-12-26T14:45:00.000Z", + "updatedAt": "2024-12-26T14:45:00.000Z" + } + ], + "plexUrl": "https://app.plex.tv/desktop#!/server/aaaaaaa/details?key=%2Flibrary%2Fmetadata%2F10189", + "iOSPlexUrl": "plex://preplay/?metadataKey=%2Flibrary%2Fmetadata%2F10189&server=aaaaaaa", + "serviceUrl": "http://192.168.0.2:8989/series/beast-games" + }, + "watchProviders": [ + { + "iso_3166_1": "AD", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AD", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AE", + "buy": [], + "flatrate": [ + { + "displayPriority": 9, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AL", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "AT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 65, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "AU", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=AU", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BB", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BB", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BH", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BM", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "BS", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=BS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CA", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 152, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "CH", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CI", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CL", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CL", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "CZ", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=CZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 157, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "DK", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DK", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "DZ", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=DZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EC", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "EG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=EG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ES", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ES", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "FI", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=FI", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "FR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=FR", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GB", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GB", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 136, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "GF", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GF", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GH", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GI", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "GT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=GT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HK", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HK", + "buy": [], + "flatrate": [ + { + "displayPriority": 5, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HN", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "HU", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=HU", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ID", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ID", + "buy": [], + "flatrate": [ + { + "displayPriority": 7, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IL", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IN", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IQ", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IQ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IS", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IS", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "IT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=IT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 15, + "logoPath": "/6FDKQWcR6JfmRKLqezSsvGgRuUY.jpg", + "id": 109, + "name": "Timvision" + } + ] + }, + { + "iso_3166_1": "JM", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "JO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JO", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "JP", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=JP", + "buy": [], + "flatrate": [ + { + "displayPriority": 4, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KR", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "KW", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=KW", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LB", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LB", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LC", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LI", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LV", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LV", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "LY", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=LY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MC", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MD", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MD", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MK", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MK", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MX", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MX", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MY", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MY", + "buy": [], + "flatrate": [ + { + "displayPriority": 9, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "MZ", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=MZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NL", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NL", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NO", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "NZ", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=NZ", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "OM", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=OM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PF", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PF", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PH", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PH", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PK", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PK", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PL", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PL", + "buy": [], + "flatrate": [ + { + "displayPriority": 5, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PS", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PT", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "PY", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=PY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "QA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=QA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "RO", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=RO", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "RS", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=RS", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SA", + "buy": [], + "flatrate": [ + { + "displayPriority": 23, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SI", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SI", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SK", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SK", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SM", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "SV", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=SV", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TC", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TC", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TH", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TH", + "buy": [], + "flatrate": [ + { + "displayPriority": 3, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TN", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TN", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TR", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TR", + "buy": [], + "flatrate": [ + { + "displayPriority": 6, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TT", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TT", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "TW", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=TW", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "UG", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=UG", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "US", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=US", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 9, + "name": "Amazon Prime Video" + }, + { + "displayPriority": 258, + "logoPath": "/8aBqoNeGGr0oSA85iopgNZUOTOc.jpg", + "id": 2100, + "name": "Amazon Prime Video with Ads" + } + ] + }, + { + "iso_3166_1": "UY", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=UY", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "VA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=VA", + "buy": [], + "flatrate": [ + { + "displayPriority": 0, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "VE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=VE", + "buy": [], + "flatrate": [ + { + "displayPriority": 2, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "YE", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=YE", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ZA", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ZA", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + }, + { + "iso_3166_1": "ZM", + "link": "https://www.themoviedb.org/tv/249522-beast-games/watch?locale=ZM", + "buy": [], + "flatrate": [ + { + "displayPriority": 1, + "logoPath": "/pvske1MyAoymrs5bguRfVqYiM9a.jpg", + "id": 119, + "name": "Amazon Prime Video" + } + ] + } + ] +} diff --git a/tests/components/overseerr/snapshots/test_services.ambr b/tests/components/overseerr/snapshots/test_services.ambr new file mode 100644 index 00000000000..5a0b0ce6586 --- /dev/null +++ b/tests/components/overseerr/snapshots/test_services.ambr @@ -0,0 +1,204 @@ +# serializer version: 1 +# name: test_service_get_requests + dict({ + 'requests': list([ + dict({ + 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), + 'id': 16, + 'is4k': False, + 'media': dict({ + 'adult': False, + 'budget': 0, + 'genres': list([ + dict({ + 'id': 10749, + 'name': 'Romance', + }), + dict({ + 'id': 18, + 'name': 'Drama', + }), + ]), + 'id': 1156593, + 'imdb_id': 'tt28510079', + 'keywords': list([ + dict({ + 'id': 818, + 'name': 'based on novel or book', + }), + dict({ + 'id': 9663, + 'name': 'sequel', + }), + ]), + 'media_info': dict({ + 'created_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), + 'id': 537, + 'imdb_id': None, + 'media_type': , + 'status': , + 'tmdb_id': 1156593, + 'tvdb_id': None, + 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 17, tzinfo=datetime.timezone.utc), + }), + 'original_language': 'es', + 'original_title': 'Culpa tuya', + 'overview': "The love between Noah and Nick seems unwavering despite their parents' attempts to separate them. But his job and her entry into college open up their lives to new relationships that will shake the foundations of both their relationship and the Leister family itself.", + 'popularity': 3958.479, + 'release_date': datetime.date(2024, 12, 26), + 'revenue': 0, + 'runtime': 120, + 'tagline': 'Divided by family. Driven by love.', + 'title': 'Your Fault', + 'vote_average': 7.7, + 'vote_count': 190, + }), + 'modified_by': dict({ + 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', + 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), + 'display_name': 'somebody', + 'email': 'one@email.com', + 'id': 1, + 'movie_quota_days': None, + 'movie_quota_limit': None, + 'plex_id': 321321321, + 'plex_username': 'somebody', + 'request_count': 11, + 'tv_quota_days': None, + 'tv_quota_limit': None, + 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), + }), + 'requested_by': dict({ + 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', + 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), + 'display_name': 'somebody', + 'email': 'one@email.com', + 'id': 1, + 'movie_quota_days': None, + 'movie_quota_limit': None, + 'plex_id': 321321321, + 'plex_username': 'somebody', + 'request_count': 11, + 'tv_quota_days': None, + 'tv_quota_limit': None, + 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), + }), + 'season_count': 0, + 'status': , + 'updated_at': datetime.datetime(2024, 12, 29, 10, 4, 16, tzinfo=datetime.timezone.utc), + }), + dict({ + 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), + 'id': 14, + 'is4k': False, + 'media': dict({ + 'first_air_date': datetime.date(2024, 12, 19), + 'genres': list([ + dict({ + 'id': 10764, + 'name': 'Reality', + }), + ]), + 'id': 249522, + 'keywords': list([ + dict({ + 'id': 271, + 'name': 'competition', + }), + dict({ + 'id': 4325, + 'name': 'game show', + }), + dict({ + 'id': 330122, + 'name': 'mrbeast', + }), + ]), + 'languages': list([ + 'da', + 'en', + ]), + 'last_air_date': datetime.date(2024, 12, 26), + 'last_episode_to_air': dict({ + 'air_date': datetime.date(2024, 12, 26), + 'episode_number': 3, + 'id': 5802152, + 'name': 'The Solitary Experiment', + 'overview': 'What would happen if three best friends were trapped in a room, but only two could escape? Watch and see for yourself right now!', + 'still_path': '/r6LRRaA2l2tMDttWbYl3dXdJUij.jpg', + }), + 'media_info': dict({ + 'created_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), + 'id': 535, + 'imdb_id': None, + 'media_type': , + 'status': , + 'tmdb_id': 249522, + 'tvdb_id': 447806, + 'updated_at': datetime.datetime(2024, 12, 26, 14, 45, tzinfo=datetime.timezone.utc), + }), + 'name': 'Beast Games', + 'next_episode_to_air': dict({ + 'air_date': datetime.date(2025, 1, 2), + 'episode_number': 4, + 'id': 5802153, + 'name': 'Episode 4', + 'overview': '', + 'still_path': 'None', + }), + 'number_of_episodes': 10, + 'number_of_seasons': 1, + 'original_language': 'en', + 'original_name': 'Beast Games', + 'overview': "I gathered 1,000 people to fight for $5,000,000, the LARGEST cash prize in TV history! We're also giving away a private island, Lamborghinis, and millions more in cash throughout the competition! Go watch to see the greatest show ever made!", + 'popularity': 769.189, + 'seasons': list([ + dict({ + 'air_date': datetime.date(2024, 12, 19), + 'episode_count': 10, + 'id': 384427, + 'name': 'Season 1', + 'overview': '', + 'poster_path': '/3itZlypnOcVcqI5xxyO6nvJ52yM.jpg', + 'season_number': 1, + }), + ]), + 'tagline': '1,000 players. 5 million dollars. 1 winner.', + }), + 'modified_by': dict({ + 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', + 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), + 'display_name': 'somebody', + 'email': 'one@email.com', + 'id': 1, + 'movie_quota_days': None, + 'movie_quota_limit': None, + 'plex_id': 321321321, + 'plex_username': 'somebody', + 'request_count': 11, + 'tv_quota_days': None, + 'tv_quota_limit': None, + 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), + }), + 'requested_by': dict({ + 'avatar': 'https://plex.tv/users/aaaaa/avatar?c=aaaaa', + 'created_at': datetime.datetime(2024, 12, 16, 21, 13, 58, tzinfo=datetime.timezone.utc), + 'display_name': 'somebody', + 'email': 'one@email.com', + 'id': 1, + 'movie_quota_days': None, + 'movie_quota_limit': None, + 'plex_id': 321321321, + 'plex_username': 'somebody', + 'request_count': 11, + 'tv_quota_days': None, + 'tv_quota_limit': None, + 'updated_at': datetime.datetime(2024, 12, 16, 23, 59, 3, tzinfo=datetime.timezone.utc), + }), + 'season_count': 1, + 'status': , + 'updated_at': datetime.datetime(2024, 12, 26, 14, 37, 30, tzinfo=datetime.timezone.utc), + }), + ]), + }) +# --- diff --git a/tests/components/overseerr/test_services.py b/tests/components/overseerr/test_services.py new file mode 100644 index 00000000000..a0b87b5deef --- /dev/null +++ b/tests/components/overseerr/test_services.py @@ -0,0 +1,156 @@ +"""Tests for the Overseerr services.""" + +from unittest.mock import AsyncMock + +import pytest +from python_overseerr import OverseerrConnectionError +from syrupy import SnapshotAssertion + +from homeassistant.components.overseerr.const import ( + ATTR_CONFIG_ENTRY_ID, + ATTR_REQUESTED_BY, + ATTR_SORT_ORDER, + ATTR_STATUS, + DOMAIN, +) +from homeassistant.components.overseerr.services import SERVICE_GET_REQUESTS +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError, ServiceValidationError + +from . import setup_integration + +from tests.common import MockConfigEntry + + +async def test_service_get_requests( + hass: HomeAssistant, + mock_overseerr_client: AsyncMock, + mock_config_entry: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test the get_requests service.""" + + await setup_integration(hass, mock_config_entry) + + response = await hass.services.async_call( + DOMAIN, + SERVICE_GET_REQUESTS, + { + ATTR_CONFIG_ENTRY_ID: mock_config_entry.entry_id, + ATTR_STATUS: "approved", + ATTR_SORT_ORDER: "added", + ATTR_REQUESTED_BY: 1, + }, + blocking=True, + return_response=True, + ) + assert response == snapshot + for request in response["requests"]: + assert "requests" not in request["media"]["media_info"] + mock_overseerr_client.get_requests.assert_called_once_with( + status="approved", sort="added", requested_by=1 + ) + + +async def test_service_get_requests_no_meta( + hass: HomeAssistant, + mock_overseerr_client: AsyncMock, + mock_config_entry: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test the get_requests service.""" + mock_overseerr_client.get_movie_details.side_effect = OverseerrConnectionError + mock_overseerr_client.get_tv_details.side_effect = OverseerrConnectionError + + await setup_integration(hass, mock_config_entry) + + response = await hass.services.async_call( + DOMAIN, + SERVICE_GET_REQUESTS, + {ATTR_CONFIG_ENTRY_ID: mock_config_entry.entry_id}, + blocking=True, + return_response=True, + ) + for request in response["requests"]: + assert request["media"] == {} + + +@pytest.mark.parametrize( + ("service", "payload", "function", "exception", "raised_exception", "message"), + [ + ( + SERVICE_GET_REQUESTS, + {}, + "get_requests", + OverseerrConnectionError("Timeout"), + HomeAssistantError, + "Error connecting to the Overseerr instance: Timeout", + ) + ], +) +async def test_services_connection_error( + hass: HomeAssistant, + mock_overseerr_client: AsyncMock, + mock_config_entry: MockConfigEntry, + service: str, + payload: dict[str, str], + function: str, + exception: Exception, + raised_exception: type[Exception], + message: str, +) -> None: + """Test a connection error in the services.""" + + await setup_integration(hass, mock_config_entry) + + getattr(mock_overseerr_client, function).side_effect = exception + + with pytest.raises(raised_exception, match=message): + await hass.services.async_call( + DOMAIN, + service, + {ATTR_CONFIG_ENTRY_ID: mock_config_entry.entry_id} | payload, + blocking=True, + return_response=True, + ) + + +@pytest.mark.parametrize( + ("service", "payload"), + [ + (SERVICE_GET_REQUESTS, {}), + ], +) +async def test_service_entry_availability( + hass: HomeAssistant, + mock_overseerr_client: AsyncMock, + mock_config_entry: MockConfigEntry, + service: str, + payload: dict[str, str], +) -> None: + """Test the services without valid entry.""" + mock_config_entry.add_to_hass(hass) + mock_config_entry2 = MockConfigEntry(domain=DOMAIN) + mock_config_entry2.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + + with pytest.raises(ServiceValidationError, match="Mock Title is not loaded"): + await hass.services.async_call( + DOMAIN, + service, + {ATTR_CONFIG_ENTRY_ID: mock_config_entry2.entry_id} | payload, + blocking=True, + return_response=True, + ) + + with pytest.raises( + ServiceValidationError, match='Integration "overseerr" not found in registry' + ): + await hass.services.async_call( + DOMAIN, + service, + {ATTR_CONFIG_ENTRY_ID: "bad-config_id"} | payload, + blocking=True, + return_response=True, + )