mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-25 14:58:27 -05:00
Add /api/flairlist.json.
This commit is contained in:
@@ -49,3 +49,5 @@ api('account', AccountJsonTemplate)
|
||||
api('organiclisting', OrganicListingJsonTemplate)
|
||||
api('reddittraffic', TrafficJsonTemplate)
|
||||
api('takedownpane', TakedownJsonTemplate)
|
||||
|
||||
api('flairlist', FlairListJsonTemplate)
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
# CondeNet, Inc. All Rights Reserved.
|
||||
################################################################################
|
||||
from reddit_base import RedditController, MinimalController, set_user_cookie
|
||||
from reddit_base import paginated_listing
|
||||
|
||||
from pylons.i18n import _
|
||||
from pylons import c, request
|
||||
@@ -2051,6 +2052,13 @@ class ApiController(RedditController):
|
||||
c.site._commit()
|
||||
jquery.refresh()
|
||||
|
||||
@paginated_listing(max_page_size=1000)
|
||||
@validate(VFlairManager(),
|
||||
user = VOptionalExistingUname('name'))
|
||||
def GET_flairlist(self, num, after, reverse, count, user):
|
||||
flair = FlairList(num, after, reverse, user)
|
||||
return BoringPage(_("API"), content = flair).render()
|
||||
|
||||
@validatedForm(VAdmin(),
|
||||
award = VByName("fullname"),
|
||||
description = VLength("description", max_length=1000),
|
||||
|
||||
@@ -444,34 +444,41 @@ def ratelimit_throttled():
|
||||
abort(503, 'service temporarily unavailable')
|
||||
|
||||
|
||||
def paginated_listing(default_page_size=25, max_page_size=100):
|
||||
def decorator(fn):
|
||||
@validate(num=VLimit('limit', default=default_page_size,
|
||||
max_limit=max_page_size),
|
||||
after=VByName('after'),
|
||||
before=VByName('before'),
|
||||
count=VCount('count'),
|
||||
target=VTarget("target"),
|
||||
show=VLength('show', 3))
|
||||
def new_fn(self, before, **env):
|
||||
if c.render_style == "htmllite":
|
||||
c.link_target = env.get("target")
|
||||
elif "target" in env:
|
||||
del env["target"]
|
||||
|
||||
if "show" in env and env['show'] == 'all':
|
||||
c.ignore_hide_rules = True
|
||||
kw = build_arg_list(fn, env)
|
||||
|
||||
#turn before into after/reverse
|
||||
kw['reverse'] = False
|
||||
if before:
|
||||
kw['after'] = before
|
||||
kw['reverse'] = True
|
||||
|
||||
return fn(self, **kw)
|
||||
return new_fn
|
||||
return decorator
|
||||
|
||||
#TODO i want to get rid of this function. once the listings in front.py are
|
||||
#moved into listingcontroller, we shouldn't have a need for this
|
||||
#anymore
|
||||
def base_listing(fn):
|
||||
@validate(num = VLimit('limit'),
|
||||
after = VByName('after'),
|
||||
before = VByName('before'),
|
||||
count = VCount('count'),
|
||||
target = VTarget("target"),
|
||||
show = VLength('show', 3))
|
||||
def new_fn(self, before, **env):
|
||||
if c.render_style == "htmllite":
|
||||
c.link_target = env.get("target")
|
||||
elif "target" in env:
|
||||
del env["target"]
|
||||
return paginated_listing()(fn)
|
||||
|
||||
if "show" in env and env['show'] == 'all':
|
||||
c.ignore_hide_rules = True
|
||||
kw = build_arg_list(fn, env)
|
||||
|
||||
#turn before into after/reverse
|
||||
kw['reverse'] = False
|
||||
if before:
|
||||
kw['after'] = before
|
||||
kw['reverse'] = True
|
||||
|
||||
return fn(self, **kw)
|
||||
return new_fn
|
||||
|
||||
class MinimalController(BaseController):
|
||||
|
||||
|
||||
@@ -359,10 +359,15 @@ class VCount(Validator):
|
||||
|
||||
|
||||
class VLimit(Validator):
|
||||
def __init__(self, param, default=25, max_limit=100, **kw):
|
||||
self.default = default
|
||||
self.max_limit = max_limit
|
||||
Validator.__init__(self, param, **kw)
|
||||
|
||||
def run(self, limit):
|
||||
default = c.user.pref_numsites
|
||||
if c.render_style in ("compact", api_type("compact")):
|
||||
default = 25 # TODO: ini param?
|
||||
default = self.default # TODO: ini param?
|
||||
|
||||
if limit is None:
|
||||
return default
|
||||
|
||||
@@ -455,3 +455,23 @@ class TrafficJsonTemplate(JsonTemplate):
|
||||
res[ival] = [[time.mktime(date.timetuple())] + list(data)
|
||||
for date, data in getattr(thing, ival+"_data")]
|
||||
return ObjectTemplate(res)
|
||||
|
||||
class FlairListJsonTemplate(JsonTemplate):
|
||||
def render(self, thing, *a, **kw):
|
||||
def row_to_json(row):
|
||||
if hasattr(row, 'user'):
|
||||
return dict(user=row.user.name, flair_text=row.flair_text,
|
||||
flair_css_class=row.flair_css_class)
|
||||
else:
|
||||
# prev/next link
|
||||
return dict(after=row.after, reverse=row.reverse)
|
||||
|
||||
json_rows = [row_to_json(row) for row in thing.flair]
|
||||
result = dict(users=[row for row in json_rows if 'user' in row])
|
||||
for row in json_rows:
|
||||
if 'after' in row:
|
||||
if row['reverse']:
|
||||
result['prev'] = row['after']
|
||||
else:
|
||||
result['next'] = row['after']
|
||||
return ObjectTemplate(result)
|
||||
|
||||
Reference in New Issue
Block a user