feat: add profiel required exception; add spans to post
This commit is contained in:
@@ -129,4 +129,8 @@ class NotMultipleChoice(Exception):
|
||||
|
||||
class EmptyOptions(Exception):
|
||||
def __str__(self) -> str:
|
||||
return 'Options cannot be empty (pre-validation)'
|
||||
return 'Options cannot be empty (pre-validation)'
|
||||
|
||||
class ProfileRequired(Exception):
|
||||
def __str__(self) -> str:
|
||||
return 'No profile. Please create your profile first'
|
||||
@@ -54,22 +54,30 @@ class Poll(_Poll):
|
||||
return datetime.strptime(v, '%Y-%m-%dT%H:%M:%S.%f')
|
||||
|
||||
|
||||
class _PostShort(TextObject):
|
||||
class Span(BaseModel):
|
||||
length: int
|
||||
offset: int
|
||||
type: SpanType
|
||||
|
||||
|
||||
class _PostCounts(TextObject):
|
||||
likes_count: int = Field(0, alias='likesCount')
|
||||
comments_count: int = Field(0, alias='commentsCount')
|
||||
reposts_count: int = Field(0, alias='repostsCount')
|
||||
views_count: int = Field(0, alias='viewsCount')
|
||||
|
||||
spans: list[Span] = []
|
||||
|
||||
class PostShort(_PostShort):
|
||||
|
||||
class _PostAuthor(_PostCounts):
|
||||
author: UserPost
|
||||
|
||||
|
||||
class OriginalPost(PostShort):
|
||||
class OriginalPost(_PostAuthor):
|
||||
is_deleted: bool = Field(False, alias='isDeleted')
|
||||
|
||||
|
||||
class _Post(_PostShort):
|
||||
class _Post(_PostCounts):
|
||||
is_liked: bool = Field(False, alias='isLiked')
|
||||
is_reposted: bool = Field(False, alias='isReposted')
|
||||
is_viewed: bool = Field(False, alias='isViewed')
|
||||
@@ -79,13 +87,13 @@ class _Post(_PostShort):
|
||||
attachments: list[PostAttach] = []
|
||||
comments: list[Comment] = []
|
||||
|
||||
original_post: OriginalPost | None = None
|
||||
original_post: OriginalPost | None = None # for reposts
|
||||
|
||||
wall_recipient_id: UUID | None = Field(None, alias='wallRecipientId')
|
||||
wall_recipient: UserPost | None = Field(None, alias='wallRecipient')
|
||||
|
||||
|
||||
class Post(_Post, PostShort):
|
||||
class Post(_Post, _PostAuthor):
|
||||
poll: Poll | None = None
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ from _io import BufferedReader
|
||||
from requests import Session
|
||||
from requests.exceptions import JSONDecodeError
|
||||
|
||||
from itd.exceptions import InvalidToken, InvalidCookie, RateLimitExceeded, Unauthorized, AccountBanned
|
||||
from itd.exceptions import InvalidToken, InvalidCookie, RateLimitExceeded, Unauthorized, AccountBanned, ProfileRequired
|
||||
|
||||
s = Session()
|
||||
|
||||
@@ -41,6 +41,8 @@ def fetch(token: str, method: str, url: str, params: dict = {}, files: dict[str,
|
||||
raise Unauthorized()
|
||||
if res.json().get('error', {}).get('code') == 'ACCOUNT_BANNED':
|
||||
raise AccountBanned()
|
||||
if res.json().get('error', {}).get('code') == 'PROFILE_REQUIRED':
|
||||
raise ProfileRequired()
|
||||
except (JSONDecodeError, AttributeError):
|
||||
pass # todo
|
||||
|
||||
|
||||
Reference in New Issue
Block a user