from __future__ import annotations import json import re import sys from collections.abc import Generator from http.cookiejar import CookieJar from typing import Any, Optional, Union from urllib.parse import urljoin import click from requests import Request from devine.core.constants import AnyTrack from devine.core.credential import Credential from devine.core.manifests import DASH from devine.core.search_result import SearchResult from devine.core.service import Service from devine.core.titles import Episode, Movie, Movies, Series, Title_T, Titles_T from devine.core.tracks import Chapter, Chapters, Tracks from devine.core.utils.sslciphers import SSLCiphers from devine.core.utils.xml import load_xml class PMTP(Service): """ Service code for Paramount's Paramount+ streaming service (https://paramountplus.com). \b Author: stabbedbybrick Authorization: None for US | Credentials for INTL Robustness: Widevine: L3: 2160p, DDP5.1 \b Tips: - Input should be complete URLs for both shows and movies: https://www.paramountplus.com/movies/video/3vxCeaSHnqJLmatpwS1OzrkdA16h7sN9/ https://www.paramountplus.com/shows/special-ops-lioness/ - Use -r, --region to specify your region. If not used, the default is "us". \b Notes: - Credentials are only required for INTL. """ ALIASES = ("paramountplus", "paramount+") # GEOFENCE = ("us",) TITLE_RE = r"https://www\.paramountplus\.com(/.*?)?/(?Pshows|movies)(/(?P