File: _typing.py

package info (click to toggle)
beets 2.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,988 kB
  • sloc: python: 46,429; javascript: 8,018; xml: 334; sh: 261; makefile: 125
file content (135 lines) | stat: -rw-r--r-- 3,633 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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]