68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""Provide the EditableMixin class."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from ....const import API_PATH
|
|
|
|
if TYPE_CHECKING: # pragma: no cover
|
|
import praw.models
|
|
|
|
|
|
class EditableMixin:
|
|
"""Interface for classes that can be edited and deleted."""
|
|
|
|
def delete(self):
|
|
"""Delete the object.
|
|
|
|
Example usage:
|
|
|
|
.. code-block:: python
|
|
|
|
comment = reddit.comment("dkk4qjd")
|
|
comment.delete()
|
|
|
|
submission = reddit.submission("8dmv8z")
|
|
submission.delete()
|
|
|
|
"""
|
|
self._reddit.post(API_PATH["del"], data={"id": self.fullname})
|
|
|
|
def edit(self, body: str) -> praw.models.Comment | praw.models.Submission:
|
|
"""Replace the body of the object with ``body``.
|
|
|
|
:param body: The Markdown formatted content for the updated object.
|
|
|
|
:returns: The current instance after updating its attributes.
|
|
|
|
Example usage:
|
|
|
|
.. code-block:: python
|
|
|
|
comment = reddit.comment("dkk4qjd")
|
|
|
|
# construct the text of an edited comment
|
|
# by appending to the old body:
|
|
edited_body = comment.body + "Edit: thanks for the gold!"
|
|
comment.edit(edited_body)
|
|
|
|
"""
|
|
data = {
|
|
"text": body,
|
|
"thing_id": self.fullname,
|
|
"validate_on_submit": self._reddit.validate_on_submit,
|
|
}
|
|
updated = self._reddit.post(API_PATH["edit"], data=data)[0]
|
|
for attribute in [
|
|
"_fetched",
|
|
"_reddit",
|
|
"_submission",
|
|
"replies",
|
|
"subreddit",
|
|
]:
|
|
if attribute in updated.__dict__:
|
|
delattr(updated, attribute)
|
|
self.__dict__.update(updated.__dict__)
|
|
return self
|