Navigation Menu

Skip to content

Commit

Permalink
Added get_flair, batch 100 items in set_flair_csv, and version bump.
Browse files Browse the repository at this point in the history
  • Loading branch information
bboe committed Apr 2, 2012
1 parent 2088325 commit a4c7c1a
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 14 deletions.
25 changes: 18 additions & 7 deletions reddit/__init__.py
Expand Up @@ -31,7 +31,7 @@
from reddit.settings import CONFIG


VERSION = '1.3.1'
VERSION = '1.3.2'
UA_STRING = '%%s PRAW/%s Python/%s %s' % (VERSION,
sys.version.split()[0],
platform.platform(True))
Expand Down Expand Up @@ -339,6 +339,14 @@ def get_contributors(self, subreddit):
return self.request_json(self.config['contributors'] %
six.text_type(subreddit))

@reddit.decorators.require_login
def get_flair(self, subreddit, redditor):
"""Gets the flair for a user on subreddit."""
url_data = {'name': six.text_type(redditor)}
data = self.request_json(self.config['flairlist'] %
six.text_type(subreddit), url_data=url_data)
return data['users'][0]

@reddit.decorators.require_login
def get_moderators(self, subreddit):
"""Get the list of moderators for a subreddit."""
Expand Down Expand Up @@ -407,9 +415,12 @@ def set_flair_csv(self, subreddit, flair_mapping):
raise reddit.errors.ClientException('flair_mapping must '
'contain `user` key')
lines.append(','.join([mapping.get(x, '') for x in item_order]))
params = {'r': six.text_type(subreddit),
'flair_csv': '\n'.join(lines)}
response = self.request_json(self.config['flaircsv'], params)
response = []
while len(lines):
params = {'r': six.text_type(subreddit),
'flair_csv': '\n'.join(lines[:100])}
response.extend(self.request_json(self.config['flaircsv'], params))
lines = lines[100:]
stale_url = self.config['flairlist'] % six.text_type(subreddit)
# pylint: disable-msg=E1101,W0212
reddit.helpers._request.evict([stale_url])
Expand Down Expand Up @@ -491,13 +502,13 @@ def compose_message(self, recipient, subject, message, captcha=None):
with either '/r/' or '#'.
"""
if isinstance(recipient, reddit.objects.Subreddit):
to = '/r/%s' % recipient.display_name
recipient = '/r/%s' % recipient.display_name
else:
to = six.text_type(recipient)
recipient = six.text_type(recipient)

params = {'text': message,
'subject': subject,
'to': to,
'to': recipient,
'user': self.user.name}
if captcha:
params.update(captcha)
Expand Down
4 changes: 4 additions & 0 deletions reddit/objects.py
Expand Up @@ -692,6 +692,10 @@ 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)
Expand Down
33 changes: 27 additions & 6 deletions reddit/reddit_test.py
Expand Up @@ -324,19 +324,28 @@ def setUp(self):
self.subreddit = self.r.get_subreddit(self.sr)

def test_add_flair_by_subreddit_name(self):
self.r.set_flair(self.sr, self.r.user, 'flair')
flair_text = 'Flair: %s' % uuid.uuid4()
self.r.set_flair(self.sr, self.r.user, flair_text)
flair = self.r.get_flair(self.sr, self.r.user)
self.assertEqual(flair['flair_text'], flair_text)
self.assertEqual(flair['flair_css_class'], None)

def test_add_flair_to_invalid_user(self):
self.assertRaises(errors.APIException, self.subreddit.set_flair, 'b')

def test_add_flair_by_name(self):
self.subreddit.set_flair(self.r.user.name, 'Awesome Mod (Name)', 'css')

def test_add_flair_by_user(self):
self.subreddit.set_flair(self.r.user, 'Awesome Mod (User)', 'css')
flair_text = 'Flair: %s' % uuid.uuid4()
flair_css = 'a%d' % random.randint(0, 1024)
self.subreddit.set_flair(self.r.user, flair_text, flair_css)
flair = self.subreddit.get_flair(self.r.user)
self.assertEqual(flair['flair_text'], flair_text)
self.assertEqual(flair['flair_css_class'], flair_css)

def test_clear_user_flair(self):
self.subreddit.set_flair(self.r.user)
flair = self.subreddit.get_flair(self.r.user)
self.assertEqual(flair['flair_text'], None)
self.assertEqual(flair['flair_css_class'], None)

def test_flair_csv_and_flair_list(self):
# Clear all flair
Expand All @@ -352,6 +361,18 @@ def test_flair_csv_and_flair_list(self):
self.assertEqual([], flair_diff(flair_mapping,
list(self.subreddit.flair_list())))

def test_flair_csv_many(self):
users = ('bboe', 'pyapitestuser2', 'pyapitestuser3')
flair_text_a = 'Flair: %s' % uuid.uuid4()
flair_text_b = 'Flair: %s' % uuid.uuid4()
flair_mapping = [{'user':'bboe', 'flair_text': flair_text_a}] * 99
for user in users:
flair_mapping.append({'user': user, 'flair_text': flair_text_b})
self.subreddit.set_flair_csv(flair_mapping)
for user in users:
flair = self.subreddit.get_flair(user)
self.assertEqual(flair['flair_text'], flair_text_b)

def test_flair_csv_optional_args(self):
flair_mapping = [{'user': 'bboe', 'flair_text': 'bboe'},
{'user': 'pyapitestuser3', 'flair_css_class': 'blah'}]
Expand Down Expand Up @@ -430,7 +451,7 @@ def test_modmail_compose(self):
if msg.subject == subject:
break
else:
self.fail('Could not find the message we just sent to outself.')
self.fail('Could not find the message we just sent to ourself.')

def test_mark_as_read(self):
oth = Reddit(USER_AGENT)
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -5,7 +5,7 @@

setup(
name='reddit',
version='1.3.1',
version='1.3.2',
author='Timothy Mellor',
author_email='timothy.mellor+pip@gmail.com',
maintainer='Bryce Boe',
Expand Down

0 comments on commit a4c7c1a

Please sign in to comment.