from __future__ import annotations
from typing import TYPE_CHECKING, Mapping, Any, Optional
if TYPE_CHECKING:
from ..client_ASYNC import Client
from .comment_ASYNC import Comment
from .submission import (
Submission as BaseSubmission,
LinkPost as BaseLinkPost,
TextPost as BaseTextPost,
GalleryPost as BaseGalleryPost,
PollPost as BasePollPost,
CrosspostSubmission as BaseCrosspostSubmission,
)
[docs]class Submission(BaseSubmission):
def __init__(self, d: Mapping[str, Any], client: Client) -> None:
super().__init__(d)
self.client: Client = client
("")
[docs] async def reply(self, text: str) -> Comment:
return await self.client.p.submission.reply(self.id, text)
[docs] async def delete(self) -> None:
await self.client.p.submission.delete(self.id)
[docs] async def lock(self) -> None:
await self.client.p.submission.lock(self.id)
[docs] async def unlock(self) -> None:
await self.client.p.submission.unlock(self.id)
[docs] async def distinguish(self) -> Submission:
return await self.client.p.submission.distinguish(self.id)
[docs] async def undistinguish(self) -> Submission:
return await self.client.p.submission.undistinguish(self.id)
[docs] async def sticky(self, slot: Optional[int] = None) -> None:
await self.client.p.submission.sticky(self.id, slot)
[docs] async def unsticky(self) -> None:
await self.client.p.submission.unsticky(self.id)
[docs] async def approve(self) -> None:
await self.client.p.submission.approve(self.id)
[docs] async def remove(self) -> None:
await self.client.p.submission.remove(self.id)
[docs] async def apply_removal_reason(self,
reason_id: Optional[str],
note: Optional[str] = None) -> None:
await self.client.p.submission.apply_removal_reason(self.id, reason_id, note)
[docs] async def send_removal_message(self,
title: str,
message: str,
*,
exposed: bool = False) -> None:
await self.client.p.submission.send_removal_message(self.id, title, message, exposed=exposed)
[docs]class LinkPost(Submission, BaseLinkPost):
pass
[docs]class TextPost(Submission, BaseTextPost):
[docs] async def edit_body(self, text: str) -> TextPost:
return await self.client.p.submission.edit_text_post_body(self.id, text)
[docs]class GalleryPost(Submission, BaseGalleryPost):
pass
[docs]class PollPost(Submission, BasePollPost):
pass
[docs]class CrosspostSubmission(Submission, BaseCrosspostSubmission):
@property
def original(self) -> Optional[Submission]:
return self.__original
def __init__(self, d: Mapping[str, Any], client: Client) -> None:
super().__init__(d, client)
from ..model_loaders.submission_ASYNC import load_submission # Avoid cyclic import
my_load_submission = lambda d: load_submission(d=d, client=client)
self.__original: Optional[Submission] = self._load_original(
d=d,
load_submission=my_load_submission,
)
CrossPost = CrosspostSubmission