mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 08:39:17 +01:00
135 lines
3.5 KiB
Python
135 lines
3.5 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from typing_extensions import NotRequired, TypedDict
|
|
|
|
JSONDict = dict[str, Any]
|
|
|
|
|
|
class LRCLibAPI:
|
|
class Item(TypedDict):
|
|
"""Lyrics data item returned by the LRCLib API."""
|
|
|
|
id: int
|
|
name: str
|
|
trackName: str
|
|
artistName: str
|
|
albumName: str
|
|
duration: float | None
|
|
instrumental: bool
|
|
plainLyrics: str
|
|
syncedLyrics: str | None
|
|
|
|
|
|
class GeniusAPI:
|
|
"""Genius API data types.
|
|
|
|
This documents *only* the fields that are used in the plugin.
|
|
:attr:`SearchResult` is an exception, since I thought some of the other
|
|
fields might be useful in the future.
|
|
"""
|
|
|
|
class DateComponents(TypedDict):
|
|
year: int
|
|
month: int
|
|
day: int
|
|
|
|
class Artist(TypedDict):
|
|
api_path: str
|
|
header_image_url: str
|
|
id: int
|
|
image_url: str
|
|
is_meme_verified: bool
|
|
is_verified: bool
|
|
name: str
|
|
url: str
|
|
|
|
class Stats(TypedDict):
|
|
unreviewed_annotations: int
|
|
hot: bool
|
|
|
|
class SearchResult(TypedDict):
|
|
annotation_count: int
|
|
api_path: str
|
|
artist_names: str
|
|
full_title: str
|
|
header_image_thumbnail_url: str
|
|
header_image_url: str
|
|
id: int
|
|
lyrics_owner_id: int
|
|
lyrics_state: str
|
|
path: str
|
|
primary_artist_names: str
|
|
pyongs_count: int | None
|
|
relationships_index_url: str
|
|
release_date_components: GeniusAPI.DateComponents
|
|
release_date_for_display: str
|
|
release_date_with_abbreviated_month_for_display: str
|
|
song_art_image_thumbnail_url: str
|
|
song_art_image_url: str
|
|
stats: GeniusAPI.Stats
|
|
title: str
|
|
title_with_featured: str
|
|
url: str
|
|
featured_artists: list[GeniusAPI.Artist]
|
|
primary_artist: GeniusAPI.Artist
|
|
primary_artists: list[GeniusAPI.Artist]
|
|
|
|
class SearchHit(TypedDict):
|
|
result: GeniusAPI.SearchResult
|
|
|
|
class SearchResponse(TypedDict):
|
|
hits: list[GeniusAPI.SearchHit]
|
|
|
|
class Search(TypedDict):
|
|
response: GeniusAPI.SearchResponse
|
|
|
|
|
|
class GoogleCustomSearchAPI:
|
|
class Response(TypedDict):
|
|
"""Search response from the Google Custom Search API.
|
|
|
|
If the search returns no results, the :attr:`items` field is not found.
|
|
"""
|
|
|
|
items: NotRequired[list[GoogleCustomSearchAPI.Item]]
|
|
|
|
class Item(TypedDict):
|
|
"""A Google Custom Search API result item.
|
|
|
|
:attr:`title` field is shown to the user in the search interface, thus
|
|
it gets truncated with an ellipsis for longer queries. For most
|
|
results, the full title is available as ``og:title`` metatag found
|
|
under the :attr:`pagemap` field. Note neither this metatag nor the
|
|
``pagemap`` field is guaranteed to be present in the data.
|
|
"""
|
|
|
|
title: str
|
|
link: str
|
|
pagemap: NotRequired[GoogleCustomSearchAPI.Pagemap]
|
|
|
|
class Pagemap(TypedDict):
|
|
"""Pagemap data with a single meta tags dict in a list."""
|
|
|
|
metatags: list[JSONDict]
|
|
|
|
|
|
class TranslatorAPI:
|
|
class Language(TypedDict):
|
|
"""Language data returned by the translator API."""
|
|
|
|
language: str
|
|
score: float
|
|
|
|
class Translation(TypedDict):
|
|
"""Translation data returned by the translator API."""
|
|
|
|
text: str
|
|
to: str
|
|
|
|
class Response(TypedDict):
|
|
"""Response from the translator API."""
|
|
|
|
detectedLanguage: TranslatorAPI.Language
|
|
translations: list[TranslatorAPI.Translation]
|