From 618d8f2da017cb899258c0e7443b28390d622363 Mon Sep 17 00:00:00 2001 From: David Hu Date: Wed, 4 Jan 2012 08:39:19 -0800 Subject: [PATCH] Modify /api/subscribe to accept "sr_name" param to support subscribing subreddits by name. --- r2/r2/controllers/api.py | 2 +- r2/r2/controllers/validator/validator.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/r2/r2/controllers/api.py b/r2/r2/controllers/api.py index 0c8f52197..5d552859e 100644 --- a/r2/r2/controllers/api.py +++ b/r2/r2/controllers/api.py @@ -1747,7 +1747,7 @@ class ApiController(RedditController): @noresponse(VUser(), VModhash(), action = VOneOf('action', ('sub', 'unsub')), - sr = VByName('sr')) + sr = VSubscribeSR('sr', 'sr_name')) def POST_subscribe(self, action, sr): # only users who can make edits are allowed to subscribe. # Anyone can leave. diff --git a/r2/r2/controllers/validator/validator.py b/r2/r2/controllers/validator/validator.py index 47d84ef92..75c670786 100644 --- a/r2/r2/controllers/validator/validator.py +++ b/r2/r2/controllers/validator/validator.py @@ -826,6 +826,24 @@ class VSubmitSR(Validator): return sr +class VSubscribeSR(VByName): + def __init__(self, srid_param, srname_param): + VByName.__init__(self, (srid_param, srname_param)) + + def run(self, sr_id, sr_name): + if sr_id: + return VByName.run(self, sr_id) + elif not sr_name: + return + + try: + sr = Subreddit._by_name(str(sr_name).strip()) + except (NotFound, AttributeError, UnicodeEncodeError): + self.set_error(errors.SUBREDDIT_NOEXIST) + return + + return sr + MIN_PASSWORD_LENGTH = 3 class VPassword(Validator):