mirror of
https://github.com/MrSedan/neuro-reply-bot-reworked.git
synced 2026-01-14 13:39:42 +03:00
added: types for api
This commit is contained in:
4
neuroapi/types/__init__.py
Normal file
4
neuroapi/types/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
from ._post import Post
|
||||
from ._image import Image
|
||||
from ._admin import Admin
|
||||
from ._user import User
|
||||
22
neuroapi/types/_admin.py
Normal file
22
neuroapi/types/_admin.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
from ._helpers import *
|
||||
|
||||
|
||||
@dataclass
|
||||
class Admin:
|
||||
id: int
|
||||
user_id: int
|
||||
|
||||
@staticmethod
|
||||
def from_dict(obj: Any) -> 'Admin':
|
||||
assert isinstance(obj, dict)
|
||||
id = from_int(obj.get("id"))
|
||||
user_id = int(from_str(obj.get("user_id")))
|
||||
return Admin(id, user_id)
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
result: dict = {}
|
||||
result["id"] = from_int(self.id)
|
||||
result["user_id"] = from_str(str(self.user_id))
|
||||
return result
|
||||
47
neuroapi/types/_helpers.py
Normal file
47
neuroapi/types/_helpers.py
Normal file
@@ -0,0 +1,47 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Callable, List, TypeVar, Type, cast
|
||||
import dateutil.parser
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
def from_bool(x: Any) -> bool:
|
||||
assert isinstance(x, bool)
|
||||
return x
|
||||
|
||||
|
||||
def from_str(x: Any) -> str:
|
||||
assert isinstance(x, str)
|
||||
return x
|
||||
|
||||
|
||||
def from_union(fs, x):
|
||||
for f in fs:
|
||||
try:
|
||||
return f(x)
|
||||
except:
|
||||
pass
|
||||
assert False
|
||||
|
||||
|
||||
def from_none(x: Any) -> Any:
|
||||
assert x is None
|
||||
return x
|
||||
|
||||
|
||||
def from_list(f: Callable[[Any], T], x: Any) -> List[T]:
|
||||
assert isinstance(x, list)
|
||||
return [f(y) for y in x]
|
||||
|
||||
|
||||
def from_datetime(x: Any) -> datetime:
|
||||
return dateutil.parser.parse(x)
|
||||
|
||||
|
||||
def to_class(c: Type[T], x: Any) -> dict:
|
||||
assert isinstance(x, c)
|
||||
return cast(Any, x).to_dict()
|
||||
|
||||
|
||||
def from_int(x: Any) -> int:
|
||||
assert isinstance(x, int) and not isinstance(x, bool)
|
||||
return x
|
||||
28
neuroapi/types/_image.py
Normal file
28
neuroapi/types/_image.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from dataclasses import dataclass
|
||||
from uuid import UUID
|
||||
from ._helpers import *
|
||||
|
||||
|
||||
@dataclass
|
||||
class Image:
|
||||
message_id: int
|
||||
file_id: str
|
||||
has_spoiler: bool
|
||||
post_uuid: UUID
|
||||
|
||||
@staticmethod
|
||||
def from_dict(obj: Any) -> 'Image':
|
||||
assert isinstance(obj, dict)
|
||||
message_id = from_int(obj.get("message_id"))
|
||||
file_id = from_str(obj.get("file_id"))
|
||||
has_spoiler = from_bool(obj.get("has_spoiler"))
|
||||
post_uuid = UUID(obj.get("post_uuid"))
|
||||
return Image(message_id, file_id, has_spoiler, post_uuid)
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
result: dict = {}
|
||||
result["message_id"] = from_int(self.message_id)
|
||||
result["file_id"] = from_str(self.file_id)
|
||||
result["has_spoiler"] = from_bool(self.has_spoiler)
|
||||
result["post_uuid"] = str(self.post_uuid)
|
||||
return result
|
||||
44
neuroapi/types/_post.py
Normal file
44
neuroapi/types/_post.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from dataclasses import dataclass
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
from typing import Any, List, Optional
|
||||
from ._image import Image
|
||||
from ._helpers import *
|
||||
|
||||
|
||||
@dataclass
|
||||
class Post:
|
||||
uuid: UUID
|
||||
posted: bool
|
||||
text: str
|
||||
media_group_id: int | str
|
||||
timestamp: datetime
|
||||
from_user_id: int
|
||||
images: Optional[List[Image]] = None
|
||||
|
||||
@staticmethod
|
||||
def from_dict(obj: Any) -> 'Post':
|
||||
assert isinstance(obj, dict)
|
||||
uuid = UUID(obj.get("uuid"))
|
||||
posted = from_bool(obj.get("posted"))
|
||||
text = from_str(obj.get("text"))
|
||||
media_group_id = from_str(obj.get("media_group_id")) if obj.get(
|
||||
"media_group_id") is not None else 'None'
|
||||
timestamp = from_datetime(obj.get("timestamp"))
|
||||
from_user_id = int(from_str(obj.get("from_user_id")))
|
||||
images = from_union([lambda x: from_list(
|
||||
Image.from_dict, x), from_none], obj.get("images"))
|
||||
return Post(uuid, posted, text, media_group_id, timestamp, from_user_id, images)
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
result: dict = {}
|
||||
result["uuid"] = str(self.uuid)
|
||||
result["posted"] = from_bool(self.posted)
|
||||
result["text"] = from_str(self.text)
|
||||
result["media_group_id"] = from_str(str(self.media_group_id))
|
||||
result["timestamp"] = self.timestamp.isoformat()
|
||||
result["from_user_id"] = from_str(str(self.from_user_id))
|
||||
if self.images is not None:
|
||||
result["images"] = from_union([lambda x: from_list(
|
||||
lambda x: to_class(Image, x), x), from_none], self.images)
|
||||
return result
|
||||
22
neuroapi/types/_user.py
Normal file
22
neuroapi/types/_user.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Any
|
||||
from ._helpers import *
|
||||
|
||||
|
||||
@dataclass
|
||||
class User:
|
||||
id: int
|
||||
username: str
|
||||
|
||||
@staticmethod
|
||||
def from_dict(obj: Any) -> 'User':
|
||||
assert isinstance(obj, dict)
|
||||
id = int(from_str(obj.get("id")))
|
||||
username = from_str(obj.get("username"))
|
||||
return User(id, username)
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
result: dict = {}
|
||||
result["id"] = from_str(str(self.id))
|
||||
result["username"] = from_str(self.username)
|
||||
return result
|
||||
Reference in New Issue
Block a user