2026-02-01 09:31:38 +01:00

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