|
1
|
|
|
from dataclasses import dataclass |
|
2
|
|
|
from typing import Any, Optional |
|
3
|
|
|
from models import from_int, from_str, from_union, from_none, from_bool |
|
4
|
|
|
|
|
5
|
|
|
|
|
6
|
|
|
@dataclass |
|
7
|
|
|
class Stats: |
|
8
|
|
|
joined: int |
|
9
|
|
|
first: int |
|
10
|
|
|
second: int |
|
11
|
|
|
third: int |
|
12
|
|
|
forfeits: int |
|
13
|
|
|
dqs: int |
|
14
|
|
|
|
|
15
|
|
|
@staticmethod |
|
16
|
|
|
def from_dict(obj: Any) -> 'Stats': |
|
17
|
|
|
if not isinstance(obj, dict): |
|
18
|
|
|
return None |
|
19
|
|
|
joined = from_int(obj.get("joined")) |
|
20
|
|
|
first = from_int(obj.get("first")) |
|
21
|
|
|
second = from_int(obj.get("second")) |
|
22
|
|
|
third = from_int(obj.get("third")) |
|
23
|
|
|
forfeits = from_int(obj.get("forfeits")) |
|
24
|
|
|
dqs = from_int(obj.get("dqs")) |
|
25
|
|
|
return Stats(joined, first, second, third, forfeits, dqs) |
|
26
|
|
|
|
|
27
|
|
|
|
|
28
|
|
|
@dataclass |
|
29
|
|
|
class User: |
|
30
|
|
|
id: str |
|
31
|
|
|
full_name: str |
|
32
|
|
|
name: str |
|
33
|
|
|
url: str |
|
34
|
|
|
discriminator: Optional[str] = None |
|
35
|
|
|
stats: Optional[Stats] = None |
|
36
|
|
|
pronouns: Optional[str] = None |
|
37
|
|
|
flair: Optional[str] = None |
|
38
|
|
|
twitch_name: Optional[str] = None |
|
39
|
|
|
twitch_display_name: Optional[str] = None |
|
40
|
|
|
twitch_channel: Optional[str] = None |
|
41
|
|
|
can_moderate: Optional[bool] = None |
|
42
|
|
|
avatar: Optional[str] = None |
|
43
|
|
|
|
|
44
|
|
|
@staticmethod |
|
45
|
|
|
def from_dict(obj: Any) -> 'User': |
|
46
|
|
|
if not isinstance(obj, dict): |
|
47
|
|
|
return None |
|
48
|
|
|
id = from_str(obj.get("id")) |
|
49
|
|
|
full_name = from_str(obj.get("full_name")) |
|
50
|
|
|
name = from_str(obj.get("name")) |
|
51
|
|
|
discriminator = from_union( |
|
52
|
|
|
[from_str, from_none], obj.get("discriminator")) |
|
53
|
|
|
url = from_str(obj.get("url")) |
|
54
|
|
|
avatar = from_union([from_str, from_none], obj.get("avatar")) |
|
55
|
|
|
pronouns = from_union([from_str, from_none], obj.get("pronouns")) |
|
56
|
|
|
flair = from_union([from_str, from_none], obj.get("flair")) |
|
57
|
|
|
twitch_name = from_union([from_str, from_none], obj.get("twitch_name")) |
|
58
|
|
|
twitch_display_name = from_union( |
|
59
|
|
|
[from_str, from_none], obj.get("twitch_display_name")) |
|
60
|
|
|
twitch_channel = from_union( |
|
61
|
|
|
[from_str, from_none], obj.get("twitch_channel")) |
|
62
|
|
|
can_moderate = from_union( |
|
63
|
|
|
[from_bool, from_none], obj.get("can_moderate")) |
|
64
|
|
|
stats = from_union([Stats.from_dict, from_none], obj.get("stats")) |
|
65
|
|
|
return User( |
|
66
|
|
|
id=id, full_name=full_name, name=name, discriminator=discriminator, |
|
67
|
|
|
url=url, avatar=avatar, pronouns=pronouns, flair=flair, |
|
68
|
|
|
twitch_name=twitch_name, twitch_display_name=twitch_display_name, |
|
69
|
|
|
twitch_channel=twitch_channel, can_moderate=can_moderate, |
|
70
|
|
|
stats=stats |
|
71
|
|
|
) |
|
72
|
|
|
|
|
73
|
|
|
|
|
74
|
|
|
def user_from_dict(s: Any) -> User: |
|
75
|
|
|
return User.from_dict(s) |
|
76
|
|
|
|