Source code for pyytlounge.models

from dataclasses import dataclass
from enum import Enum
import logging
from typing import TypedDict, cast


_logger = logging.getLogger(__name__)


[docs] class State(Enum): """Playback state""" Stopped = -1 Buffering = 0 # unsure, happens between videos Playing = 1 Paused = 2 Starting = 3 # unsure, only seen once Advertisement = 1081
[docs] @staticmethod def parse(state: str) -> "State": """Parse a state value to State enum""" try: return State(int(state)) except ValueError: _logger.warning("Unknown state %s. Assuming stopped state.", state) return State.Stopped
AUTH_VERSION_V1 = 0 CURRENT_AUTH_VERSION = AUTH_VERSION_V1
[docs] class AuthStateData(TypedDict): """Auth state in serialized state""" version: int screenId: str loungeIdToken: str refreshToken: str expiry: int
[docs] @dataclass class AuthState: """Stores information used to authenticate with YouTube. Can be serialized and deserialized for reuse.""" version: int screen_id: str lounge_id_token: str refresh_token: str expiry: int def __init__(self): super().__init__() self.version = CURRENT_AUTH_VERSION self.screen_id = None self.lounge_id_token = None self.refresh_token = None self.expiry = None
[docs] def serialize(self) -> AuthStateData: """Serializes the current state into a dictionary.""" return AuthStateData( version=self.version, screenId=self.screen_id, loungeIdToken=self.lounge_id_token, refreshToken=self.refresh_token, expiry=self.expiry, )
[docs] def deserialize(self, data: dict): """Deserializes state from a dictionary into this object.""" if data["version"] == AUTH_VERSION_V1: v1_data: AuthStateData = cast(AuthStateData, data) self.version = v1_data["version"] self.screen_id = v1_data["screenId"] self.lounge_id_token = v1_data["loungeIdToken"] self.refresh_token = v1_data["refreshToken"] self.expiry = v1_data["expiry"] else: raise ValueError("Unknown authentication data version")
[docs] class DpadCommand(str, Enum): UP = "UP" DOWN = "DOWN" LEFT = "LEFT" RIGHT = "RIGHT" ENTER = "ENTER" BACK = "BACK"
BLACKLISTED_CLIENTS = ["TVHTML5_FOR_KIDS"]