Beispiel #1
0
 def unfriend(self):
     """Unfriend the user."""
     return _modify_relationship('friend', unlink=True)(
         self.reddit_session.user, self)
Beispiel #2
0
 def friend(self):
     """Friend the user."""
     return _modify_relationship('friend')(self.reddit_session.user, self)
Beispiel #3
0
class Subreddit(Messageable):
    """A class for Subreddits."""
    ban = _modify_relationship('banned', is_sub=True)
    unban = _modify_relationship('banned', unlink=True, is_sub=True)
    make_contributor = _modify_relationship('contributor', is_sub=True)
    remove_contributor = _modify_relationship('contributor', unlink=True,
                                              is_sub=True)
    make_moderator = _modify_relationship('moderator', is_sub=True)
    remove_moderator = _modify_relationship('moderator', unlink=True,
                                            is_sub=True)

    # Generic listing selectors
    get_comments = _get_section('comments')
    get_controversial = _get_sorter('controversial')
    get_hot = _get_sorter('')
    get_new = _get_sorter('new')
    get_top = _get_sorter('top')

    # Explicit listing selectors
    get_controversial_from_all = _get_sorter('controversial', t='all')
    get_controversial_from_day = _get_sorter('controversial', t='day')
    get_controversial_from_hour = _get_sorter('controversial', t='hour')
    get_controversial_from_month = _get_sorter('controversial', t='month')
    get_controversial_from_week = _get_sorter('controversial', t='week')
    get_controversial_from_year = _get_sorter('controversial', t='year')
    get_new_by_date = _get_sorter('new', sort='new')
    get_new_by_rising = _get_sorter('new', sort='rising')
    get_top_from_all = _get_sorter('top', t='all')
    get_top_from_day = _get_sorter('top', t='day')
    get_top_from_hour = _get_sorter('top', t='hour')
    get_top_from_month = _get_sorter('top', t='month')
    get_top_from_week = _get_sorter('top', t='week')
    get_top_from_year = _get_sorter('top', t='year')

    def __init__(self, reddit_session, subreddit_name=None, json_dict=None,
                 fetch=False):
        # Special case for when my_reddits is called as no name is returned so
        # we have to extract the name from the URL.  The URLs are returned as:
        # /r/reddit_name/
        if not subreddit_name:
            subreddit_name = json_dict['url'].split('/')[2]

        info_url = reddit_session.config['subreddit_about'] % subreddit_name
        super(Subreddit, self).__init__(reddit_session, json_dict, fetch,
                                        info_url)
        self.display_name = subreddit_name
        self._url = reddit_session.config['subreddit'] % subreddit_name

    @limit_chars()
    def __unicode__(self):
        """Display this subreddit's name."""
        return self.display_name

    def add_flair_template(self, *args, **kwargs):
        """Adds a flair template to this subreddit."""
        return self.reddit_session.add_flair_template(self, *args, **kwargs)

    def clear_all_flair(self):
        """Helper method to remove all flair on this subreddit."""
        csv = [{'user': x['user']} for x in self.flair_list()]
        if csv:
            return self.set_flair_csv(csv)
        else:
            return

    def clear_flair_templates(self, *args, **kwargs):
        """Clear flair templates for this subreddit."""
        return self.reddit_session.clear_flair_templates(self, *args, **kwargs)

    def flair_list(self, *args, **kwargs):
        """Return a list of flair for this subreddit."""
        return self.reddit_session.flair_list(self, *args, **kwargs)

    def get_banned(self, *args, **kwargs):
        """Get banned users for this subreddit."""
        return self.reddit_session.get_banned(self, *args, **kwargs)

    def get_settings(self, *args, **kwargs):
        """Get the settings for this subreddit."""
        return self.reddit_session.get_settings(self, *args, **kwargs)

    def get_contributors(self, *args, **kwargs):
        """Get contributors for this subreddit."""
        return self.reddit_session.get_contributors(self, *args, **kwargs)

    def get_flair(self, *args, **kwargs):
        """Gets the flair for a user on this subreddit."""
        return self.reddit_session.get_flair(self, *args, **kwargs)

    def get_moderators(self, *args, **kwargs):
        """Get moderators for this subreddit."""
        return self.reddit_session.get_moderators(self, *args, **kwargs)

    def get_modqueue(self, *args, **kwargs):
        """Get the modqueue on this subreddit."""
        return self.reddit_session.get_modqueue(self, *args, **kwargs)

    def get_reports(self, *args, **kwargs):
        """Get the reported submissions on this subreddit."""
        return self.reddit_session.get_reports(self, *args, **kwargs)

    def get_spam(self, *args, **kwargs):
        """Get the spam-filtered items on this subreddit."""
        return self.reddit_session.get_spam(self, *args, **kwargs)

    def get_stylesheet(self, *args, **kwargs):
        """Get the stylesheet and associated images for this subreddit."""
        return self.reddit_session.get_stylesheet(self, *args, **kwargs)

    def search(self, query, *args, **kwargs):
        """Search this subreddit."""
        return self.reddit_session.search(query, self, *args, **kwargs)

    def set_flair(self, *args, **kwargs):
        """Set flair for a particular user or submission on this subreddit."""
        return self.reddit_session.set_flair(self, *args, **kwargs)

    def set_flair_csv(self, *args, **kwargs):
        """Set flair for a group of users all at once on this subreddit."""
        return self.reddit_session.set_flair_csv(self, *args, **kwargs)

    def set_settings(self, *args, **kwargs):
        """Set the settings for this subreddit."""
        return self.reddit_session.set_settings(self, *args, **kwargs)

    def set_stylesheet(self, *args, **kwargs):
        """Set stylesheet for this sub-reddit."""
        return self.reddit_session.set_stylesheet(self, *args, **kwargs)

    def submit(self, *args, **kwargs):
        """Submit a new link to this subreddit."""
        return self.reddit_session.submit(self, *args, **kwargs)

    def subscribe(self):
        """Subscribe to this subreddit."""
        # pylint: disable-msg=W0212
        return self.reddit_session._subscribe(self.content_id)

    def unsubscribe(self):
        """Unsubscribe from this subreddit."""
        # pylint: disable-msg=W0212
        return self.reddit_session._subscribe(self.content_id,
                                              unsubscribe=True)

    def update_settings(self, *args, **kwargs):
        """Update only the settings provided for this subreddit."""
        return self.reddit_session.update_settings(self, *args, **kwargs)
Beispiel #4
0
 def unfriend(self):
     """Unfriend the user."""
     return _modify_relationship('friend', unlink=True)(
         self.reddit_session.user, self)
Beispiel #5
0
 def friend(self):
     """Friend the user."""
     return _modify_relationship('friend')(self.reddit_session.user, self)
Beispiel #6
0
class Subreddit(RedditContentObject):
    """A class for Subreddits."""

    ban = _modify_relationship('banned', is_sub=True)
    unban = _modify_relationship('banned', unlink=True, is_sub=True)
    make_contributor = _modify_relationship('contributor', is_sub=True)
    remove_contributor = _modify_relationship('contributor', unlink=True,
                                              is_sub=True)
    make_moderator = _modify_relationship('moderator', is_sub=True)
    remove_moderator = _modify_relationship('moderator', unlink=True,
                                            is_sub=True)

    get_hot = _get_sorter('')
    get_controversial = _get_sorter('controversial', time='day')
    get_new = _get_sorter('new', sort='rising')
    get_top = _get_sorter('top', time='day')
    get_new_by_date = _get_sorter('new', sort='new')

    def __init__(self, reddit_session, subreddit_name=None, json_dict=None,
                 fetch=False):
        info_url = (reddit_session.config['subreddit_about'] %
                    subreddit_name)
        super(Subreddit, self).__init__(reddit_session, json_dict, fetch,
                                        info_url)

        # Special case for when my_reddits is called as no name is returned so
        # we have to extract the name from the URL.  The URLs are returned as:
        # /r/reddit_name/
        if not subreddit_name:
            subreddit_name = self.url.split('/')[2]

        self.display_name = subreddit_name
        self._url = reddit_session.config['subreddit'] % subreddit_name

    @limit_chars()
    def __str__(self):
        """Display the subreddit name."""
        return self.display_name.encode('utf8')

    @require_login
    def _subscribe(self, unsubscribe=False):
        """Perform the (un)subscribe to the subreddit."""
        action = 'unsub' if unsubscribe else 'sub'
        params = {'sr': self.content_id,
                  'action': action,
                  'uh': self.reddit_session.modhash,
                  'api_type': 'json'}
        url = self.reddit_session.config['subscribe']
        return self.reddit_session.request_json(url, params)

    def add_flair_template(self, *args, **kwargs):
        """Adds a flair template to the subreddit."""
        return self.reddit_session.add_flair_template(self, *args, **kwargs)

    def clear_all_flair(self):
        """Helper method to remove all currently set flair."""
        csv = [{'user': x['user']} for x in self.flair_list()]
        if csv:
            return self.set_flair_csv(csv)
        else:
            return

    def clear_flair_templates(self, *args, **kwargs):
        """Clear flair templates for this subreddit."""
        return self.reddit_session.clear_flair_templates(self, *args, **kwargs)

    def get_banned(self, *args, **kwargs):
        """Get banned users for this subreddit."""
        return self.reddit_session.get_banned(self, *args, **kwargs)

    def get_contributors(self, *args, **kwargs):
        """Get contributors for this subreddit."""
        return self.reddit_session.get_contributors(self, *args, **kwargs)

    def get_moderators(self, *args, **kwargs):
        """Get moderators for this subreddit."""
        return self.reddit_session.get_moderators(self, *args, **kwargs)

    def get_reports(self, *args, **kwargs):
        """Get the reported submissions on the given subreddit."""
        return self.reddit_session.get_reports(self, *args, **kwargs)

    def flair_list(self, *args, **kwargs):
        """Return a list of flair for this subreddit."""
        return self.reddit_session.flair_list(self, *args, **kwargs)

    def set_flair(self, *args, **kwargs):
        """Set flair for a particular user."""
        return self.reddit_session.set_flair(self, *args, **kwargs)

    def set_flair_csv(self, *args, **kwargs):
        """Set flair for a group of users all at once."""
        return self.reddit_session.set_flair_csv(self, *args, **kwargs)

    def submit(self, *args, **kwargs):
        """Submit a new link."""
        return self.reddit_session.submit(self, *args, **kwargs)

    def subscribe(self):
        """Subscribe to the given subreddit."""
        return self._subscribe()

    def unsubscribe(self):
        """Unsubscribe from the given subreddit."""
        return self._subscribe(unsubscribe=True)