From 4d9c2e7d63300a972b0af154d2498a425ce60581 Mon Sep 17 00:00:00 2001 From: Andre D Date: Thu, 13 Sep 2012 13:59:43 -0500 Subject: [PATCH] wiki: Add missing json endpoints. - pages list - discussions - settings --- r2/r2/config/templates.py | 4 ++++ r2/r2/controllers/wiki.py | 6 +++--- r2/r2/lib/jsontemplates.py | 12 +++++++++++- r2/r2/lib/pages/wiki.py | 9 +++++---- r2/r2/models/wiki.py | 12 ++++++------ r2/r2/templates/wikipagerevisions.html | 4 ++-- r2/r2/templates/wikipagerevisions.xml | 2 +- 7 files changed, 32 insertions(+), 17 deletions(-) diff --git a/r2/r2/config/templates.py b/r2/r2/config/templates.py index b6b6f2f0d..9101d7c03 100644 --- a/r2/r2/config/templates.py +++ b/r2/r2/config/templates.py @@ -61,6 +61,10 @@ api('wikipagerevisions', WikiJsonTemplate) api('wikiview', WikiViewJsonTemplate) api('wikirevision', WikiRevisionJsonTemplate) +api('wikipagelisting', WikiPageListingJsonTemplate) +api('wikipagediscussions', WikiJsonTemplate) +api('wikipagesettings', WikiSettingsJsonTemplate) + api('flairlist', FlairListJsonTemplate) api('flaircsv', FlairCsvJsonTemplate) diff --git a/r2/r2/controllers/wiki.py b/r2/r2/controllers/wiki.py index f9cde4a38..cb566882a 100644 --- a/r2/r2/controllers/wiki.py +++ b/r2/r2/controllers/wiki.py @@ -167,9 +167,9 @@ class WikiController(RedditController): def GET_wiki_listing(self): def check_hidden(page): return this_may_view(page) - pages = WikiPage.get_listing(c.site, filter_check=check_hidden) - return WikiListing(pages).render() - + pages, linear_pages = WikiPage.get_listing(c.site, filter_check=check_hidden) + return WikiListing(pages, linear_pages).render() + def GET_wiki_redirect(self, page): return redirect_to(str("%s/%s" % (c.wiki_base_url, page)), _code=301) diff --git a/r2/r2/lib/jsontemplates.py b/r2/r2/lib/jsontemplates.py index e4e4caba7..2681707b0 100755 --- a/r2/r2/lib/jsontemplates.py +++ b/r2/r2/lib/jsontemplates.py @@ -583,9 +583,19 @@ class WikiJsonTemplate(JsonTemplate): try: content = thing.content except AttributeError: - content = thing.revisions + content = thing.listing return ObjectTemplate(content.render() if thing else {}) +class WikiPageListingJsonTemplate(ThingJsonTemplate): + def render(self, thing, *a, **kw): + pages = [p.name for p in thing.linear_pages] + return ObjectTemplate(dict(pages=pages)) + +class WikiSettingsJsonTemplate(ThingJsonTemplate): + def render(self, thing, *a, **kw): + return ObjectTemplate(dict(permlevel=thing.permlevel, + editors=thing.mayedit)) + class WikiViewJsonTemplate(ThingJsonTemplate): def render(self, thing, *a, **kw): edit_date = time.mktime(thing.edit_date.timetuple()) if thing.edit_date else None diff --git a/r2/r2/lib/pages/wiki.py b/r2/r2/lib/pages/wiki.py index d70ae977c..06c310051 100644 --- a/r2/r2/lib/pages/wiki.py +++ b/r2/r2/lib/pages/wiki.py @@ -15,8 +15,9 @@ class WikiView(Templated): Templated.__init__(self) class WikiPageListing(Templated): - def __init__(self, pages): + def __init__(self, pages, linear_pages): self.pages = pages + self.linear_pages = linear_pages self.base_url = c.wiki_base_url Templated.__init__(self) @@ -38,7 +39,7 @@ class WikiPageSettings(Templated): class WikiPageRevisions(Templated): def __init__(self, revisions): - self.revisions = revisions + self.listing = revisions Templated.__init__(self) class WikiPageDiscussions(Templated): @@ -125,8 +126,8 @@ class WikiRecent(WikiBase): WikiBase.__init__(self, content, showtitle=True, **context) class WikiListing(WikiBase): - def __init__(self, pages, **context): - content = WikiPageListing(pages) + def __init__(self, pages, linear_pages, **context): + content = WikiPageListing(pages, linear_pages) context['wikiaction'] = ('pages', _("Viewing pages for /r/%s") % c.wiki_id) description = [_("Below is a list of pages in this wiki visible to you in this subreddit.")] WikiBase.__init__(self, content, description=description, showtitle=True, **context) diff --git a/r2/r2/models/wiki.py b/r2/r2/models/wiki.py index 5d056a203..0a97961d4 100644 --- a/r2/r2/models/wiki.py +++ b/r2/r2/models/wiki.py @@ -218,12 +218,13 @@ class WikiPage(tdb_cassandra.Thing): WikiPageEditors._set_values(self._id, {user: ''}) @classmethod - def get_pages(cls, sr, after=None): + def get_pages(cls, sr, after=None, filter_check=None): NUM_AT_A_TIME = 1000 pages = WikiPagesBySR.query([sr._id36], after=after, count=NUM_AT_A_TIME) pages = list(pages) if len(pages) >= NUM_AT_A_TIME: return pages + cls.get_pages(sr, after=pages[-1]) + pages = filter(filter_check, pages) return pages @classmethod @@ -232,8 +233,7 @@ class WikiPage(tdb_cassandra.Thing): Create a tree of pages from their path. """ page_tree = OrderedDict() - pages = cls.get_pages(sr) - pages = filter(filter_check, pages) + pages = cls.get_pages(sr, filter_check=filter_check) pages = sorted(pages, key=lambda page: page.name) for page in pages: p = page.name.split('/') @@ -257,9 +257,9 @@ class WikiPage(tdb_cassandra.Thing): node[0] = page else: cur_node[pagename] = [page, OrderedDict()] - - return page_tree - + + return page_tree, pages + def get_editors(self, properties=None): try: return WikiPageEditors._byID(self._id, properties=properties)._values() or [] diff --git a/r2/r2/templates/wikipagerevisions.html b/r2/r2/templates/wikipagerevisions.html index 73e4bfa34..37df74cad 100644 --- a/r2/r2/templates/wikipagerevisions.html +++ b/r2/r2/templates/wikipagerevisions.html @@ -20,8 +20,8 @@ ## reddit Inc. All Rights Reserved. ############################################################################### -${thing.revisions} -%if c.wiki_page and thing.revisions.things: +${thing.listing} +%if c.wiki_page and thing.listing.things: %endif
diff --git a/r2/r2/templates/wikipagerevisions.xml b/r2/r2/templates/wikipagerevisions.xml index 71b564567..d8ef23630 100644 --- a/r2/r2/templates/wikipagerevisions.xml +++ b/r2/r2/templates/wikipagerevisions.xml @@ -20,4 +20,4 @@ ## reddit Inc. All Rights Reserved. ############################################################################### -${thing.revisions} +${thing.listing}