Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
return self.distinguish(as_made_by='no')
@restrict_access(scope='modposts')
def unignore_reports(self):
"""Remove ignoring of future reports on this object.
Undoes 'ignore_reports'. Future reports will now cause notifications
and appear in the various moderation listings.
"""
url = self.reddit_session.config['unignore_reports']
data = {'id': self.fullname}
return self.reddit_session.request_json(url, data=data)
class Editable(RedditContentObject):
"""Interface for Reddit content objects that can be edited and deleted."""
@restrict_access(scope='edit')
def delete(self):
"""Delete this object.
:returns: The json response from the server.
"""
url = self.reddit_session.config['del']
data = {'id': self.fullname}
response = self.reddit_session.request_json(url, data=data)
self.reddit_session.evict(self.reddit_session.config['user'])
return response
@restrict_access(scope='edit')
if months > 36:
raise TypeError('months must be no more than 36')
response = self.reddit_session.request(
self.reddit_session.config['gild_user'].format(
username=six.text_type(self)), data={'months': months})
elif months is not None:
raise TypeError('months is not a valid parameter for {0}'
.format(type(self)))
else:
response = self.reddit_session.request(
self.reddit_session.config['gild_thing']
.format(fullname=self.fullname), data=True)
return response.status_code == 200
class Hideable(RedditContentObject):
"""Interface for objects that can be hidden."""
def hide(self, _unhide=False):
"""Hide object in the context of the logged in user.
:param _unhide: If True, unhide the item instead. Use
:meth:`~praw.objects.Hideable.unhide` instead of setting this
manually.
:returns: The json response from the server.
"""
return self.reddit_session.hide(self.fullname, _unhide=_unhide)
def unhide(self):
"""Unhide object in the context of the logged in user.
A fullname is an object's kind mapping like `t3` followed by an
underscore and the object's base36 id, e.g., `t1_c5s96e0`.
"""
by_object = self.reddit_session.config.by_object
return '{0}_{1}'.format(by_object[self.__class__], self.id)
@property
@deprecated('``has_fetched`` will not be a public attribute in PRAW4.')
def has_fetched(self):
"""Return whether the object has been fully fetched from reddit."""
return self._has_fetched
class Moderatable(RedditContentObject):
"""Interface for Reddit content objects that have can be moderated."""
@restrict_access(scope='modposts')
def approve(self):
"""Approve object.
This reverts a removal, resets the report counter, marks it with a
green check mark (only visible to other moderators) on the website view
and sets the approved_by attribute to the logged in user.
:returns: The json response from the server.
"""
url = self.reddit_session.config['approve']
data = {'id': self.fullname}
response = self.reddit_session.request_json(url, data=data)
return self.distinguish(as_made_by='no')
@restrict_access(scope='modposts')
def unignore_reports(self):
"""Remove ignoring of future reports on this object.
Undoes 'ignore_reports'. Future reports will now cause notifications
and appear in the various moderation listings.
"""
url = self.reddit_session.config['unignore_reports']
data = {'id': self.fullname}
return self.reddit_session.request_json(url, data=data)
class Editable(RedditContentObject):
"""Interface for Reddit content objects that can be edited and deleted."""
@restrict_access(scope='edit')
def delete(self):
"""Delete this object.
:returns: The json response from the server.
"""
url = self.reddit_session.config['del']
data = {'id': self.fullname}
response = self.reddit_session.request_json(url, data=data)
self.reddit_session.evict(self.reddit_session.config['user'])
return response
@restrict_access(scope='edit')
data = {'id': self.fullname,
'executed': 'unsaved' if unsave else 'saved'}
response = self.reddit_session.request_json(url, data=data)
self.reddit_session.evict(self.reddit_session.config['saved'])
return response
def unsave(self):
"""Unsave the object.
:returns: The json response from the server.
"""
return self.save(unsave=True)
class Voteable(RedditContentObject):
"""Interface for RedditContentObjects that can be voted on."""
def clear_vote(self):
"""Remove the logged in user's vote on the object.
Running this on an object with no existing vote has no adverse effects.
Note: votes must be cast by humans. That is, API clients proxying a
human's action one-for-one are OK, but bots deciding how to vote on
content or amplifying a human's vote are not. See the reddit rules for
more details on what constitutes vote cheating.
Source for note: http://www.reddit.com/dev/api#POST_api_vote
:returns: The json response from the server.
def __eq__(self, other):
"""Return whether the other instance equals the current."""
return (isinstance(other, RedditContentObject) and
self.fullname == other.fullname)
:returns: The json response from the server.
"""
return self.reddit_session.hide(self.fullname, _unhide=_unhide)
def unhide(self):
"""Unhide object in the context of the logged in user.
:returns: The json response from the server.
"""
return self.hide(_unhide=True)
class Inboxable(RedditContentObject):
"""Interface for objects that appear in the inbox (orangereds)."""
def mark_as_read(self):
"""Mark object as read.
:returns: The json response from the server.
"""
return self.reddit_session._mark_as_read([self.fullname])
def mark_as_unread(self):
"""Mark object as unread.
:returns: The json response from the server.
"""
data = {'id': self.fullname,
'executed': 'unsaved' if unsave else 'saved'}
response = self.reddit_session.request_json(url, data=data)
self.reddit_session.evict(self.reddit_session.config['saved'])
return response
def unsave(self):
"""Unsave the object.
:returns: The json response from the server.
"""
return self.save(unsave=True)
class Voteable(RedditContentObject):
"""Interface for RedditContentObjects that can be voted on."""
def clear_vote(self):
"""Remove the logged in user's vote on the object.
Running this on an object with no existing vote has no adverse effects.
Note: votes must be cast by humans. That is, API clients proxying a
human's action one-for-one are OK, but bots deciding how to vote on
content or amplifying a human's vote are not. See the reddit rules for
more details on what constitutes vote cheating.
Source for note: http://www.reddit.com/dev/api#POST_api_vote
:returns: The json response from the server.
:returns: A Comment object for the newly created comment (reply).
"""
# pylint: disable-msg=W0212
response = self.reddit_session._add_comment(self.fullname, text)
# pylint: enable-msg=W0212
urls = [self.reddit_session.config['inbox']]
if isinstance(self, Comment):
urls.append(self.submission.permalink)
elif isinstance(self, Message):
urls.append(self.reddit_session.config['sent'])
self.reddit_session.evict(urls)
return response
class Messageable(RedditContentObject):
"""Interface for RedditContentObjects that can be messaged."""
_methods = (('send_message', PMMix),)
class Refreshable(RedditContentObject):
"""Interface for objects that can be refreshed."""
def refresh(self):
"""Re-query to update object with latest values.
Note that if this call is made within cache_timeout as specified in
praw.ini then this will return the cached content. Any listing, such
as the submissions on a subreddits top page, will automatically be
urls = [self.reddit_session.config['inbox']]
if isinstance(self, Comment):
urls.append(self.submission._api_link) # pylint: disable=W0212
elif isinstance(self, Message):
urls.append(self.reddit_session.config['sent'])
self.reddit_session.evict(urls)
return response
class Messageable(RedditContentObject):
"""Interface for RedditContentObjects that can be messaged."""
_methods = (('send_message', PMMix),)
class Refreshable(RedditContentObject):
"""Interface for objects that can be refreshed."""
def refresh(self):
"""Re-query to update object with latest values. Return the object.
Any listing, such as the submissions on a subreddits top page, will
automatically be refreshed serverside. Refreshing a submission will
also refresh all its comments.
In the rare case of a submissions's comment[0] being deleted or
removed in between its original retrieval and refresh, or
inconsistencies between different endpoints resulting in this,
an IndexError will be thrown.
"""
unique = self.reddit_session._unique_count # pylint: disable=W0212