141 lines
2.8 KiB
Python
141 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
from typing import Any, Dict, Optional
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class JsonableMixin:
|
|
def to_json(self) -> dict[str, Any]:
|
|
raise NotImplementedError()
|
|
|
|
@classmethod
|
|
def from_json(cls, o: dict[str, Any]) -> 'JsonableMixin':
|
|
raise NotImplementedError()
|
|
|
|
|
|
class QueueItem(JsonableMixin):
|
|
def __init__(self,
|
|
id: int,
|
|
sid: int,
|
|
tid: int,
|
|
played: bool,
|
|
requester_platform: str,
|
|
requester_uid: str,
|
|
requester_display: str,
|
|
) -> None:
|
|
self.id = id
|
|
self.sid = sid
|
|
self.tid = tid
|
|
self.played = played
|
|
self.requester_platform = requester_platform
|
|
self.requester_uid = requester_uid
|
|
self.requester_display = requester_display
|
|
|
|
def to_json(self) -> dict[str, Any]:
|
|
return dict(
|
|
id=self.id,
|
|
sid=self.sid,
|
|
tid=self.tid,
|
|
played=self.played,
|
|
requester_platform=self.requester_platform,
|
|
requester_uid=self.requester_uid,
|
|
requester_display=self.requester_display,
|
|
)
|
|
|
|
@ classmethod
|
|
def from_json(cls, o: dict[str, Any]) -> 'QueueItem':
|
|
return cls(**o)
|
|
|
|
|
|
class DetailModel(BaseModel):
|
|
detail: Optional[str]
|
|
|
|
|
|
class ConfigAppModel(BaseModel):
|
|
root: str
|
|
lang: str
|
|
title: str
|
|
description: str
|
|
streamer: str
|
|
maxqueue: str
|
|
maxbyviewer: str
|
|
obschangekeepms: str
|
|
|
|
|
|
class ConfigModulesModel(BaseModel):
|
|
osuddr4k: str
|
|
osumania4k: str
|
|
osumania7k: str
|
|
osucatch: str
|
|
osutaiko: str
|
|
osustd: str
|
|
ragnarock: str
|
|
|
|
|
|
class ConfigDifficultiesModel(BaseModel):
|
|
osuddr4k: str
|
|
osumania4k: str
|
|
osumania7k: str
|
|
osucatch: str
|
|
osutaiko: str
|
|
osustd: str
|
|
ragnarock: str
|
|
|
|
|
|
class ConfigModel(BaseModel):
|
|
app: ConfigAppModel
|
|
localization: Dict[str, str]
|
|
modules: ConfigModulesModel
|
|
difficulties: ConfigDifficultiesModel
|
|
|
|
|
|
class TwitchCallbackModel(BaseModel):
|
|
access_token: str
|
|
scope: str
|
|
state: str
|
|
token_type: str
|
|
|
|
|
|
class TokenPayloadModel(BaseModel):
|
|
platform: str
|
|
id: str
|
|
login: str
|
|
display: str
|
|
expiration: str
|
|
avatar: Optional[str]
|
|
|
|
|
|
class UserPermissionsModel(BaseModel):
|
|
is_admin: bool
|
|
|
|
|
|
class TokenUserWithPermissionsModel(BaseModel):
|
|
user: TokenPayloadModel
|
|
permissions: UserPermissionsModel
|
|
|
|
|
|
class SongModel(BaseModel):
|
|
title: str
|
|
artist: str
|
|
mapper: str
|
|
difficulty: float
|
|
difficulty_name: str
|
|
preview: str
|
|
thumbnail: str
|
|
gamemode: int
|
|
url_reference: Optional[str]
|
|
tid: int
|
|
sid: int
|
|
id: int
|
|
|
|
|
|
class QueuedSongModel(BaseModel):
|
|
id: int
|
|
sid: int
|
|
played: bool
|
|
requester_platform: str
|
|
requester_uid: str
|
|
requester_display: str
|