Mercurial > wikked
changeset 256:5667f11fd7c9
Only fetch page fields that we're going to use from the DB.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 03 Apr 2014 20:05:13 -0700 |
parents | c27317412100 |
children | 8098c84efab0 |
files | wikked/views/__init__.py wikked/views/read.py wikked/wiki.py |
diffstat | 3 files changed, 29 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/views/__init__.py Wed Apr 02 19:23:19 2014 -0700 +++ b/wikked/views/__init__.py Thu Apr 03 20:05:13 2014 -0700 @@ -31,7 +31,8 @@ return url[1:] -def get_page_or_none(url, convert_url=True, check_perms=DONT_CHECK, force_resolve=False): +def get_page_or_none(url, fields=None, convert_url=True, + check_perms=DONT_CHECK, force_resolve=False): if convert_url: url = url_from_viewarg(url) @@ -45,7 +46,7 @@ elif force_resolve: g.wiki.resolve(only_urls=[url], force=True) - page = g.wiki.getPage(url) + page = g.wiki.getPage(url, fields=fields) except PageNotFoundError: return None @@ -57,8 +58,10 @@ return page -def get_page_or_404(url, convert_url=True, check_perms=DONT_CHECK, force_resolve=False): - page = get_page_or_none(url, convert_url, check_perms, force_resolve) +def get_page_or_404(url, fields=None, convert_url=True, + check_perms=DONT_CHECK, force_resolve=False): + page = get_page_or_none(url, fields, convert_url, check_perms, + force_resolve) if page is not None: return page app.logger.error("No such page: " + url)
--- a/wikked/views/read.py Wed Apr 02 19:23:19 2014 -0700 +++ b/wikked/views/read.py Thu Apr 03 20:05:13 2014 -0700 @@ -72,6 +72,7 @@ # Normal page. page = get_page_or_404( path, + fields=['url', 'title', 'text', 'meta'], convert_url=False, check_perms=CHECK_FOR_READ, force_resolve=force_resolve) @@ -84,6 +85,7 @@ meta_page_url = '%s:%s' % (endpoint, path) info_page = get_page_or_none( meta_page_url, + fields=['url', 'title', 'text', 'meta'], convert_url=False, check_perms=CHECK_FOR_READ, force_resolve=force_resolve) @@ -95,6 +97,7 @@ # Default page text. info_page = get_page_or_404( endpoint_info.default, + fields=['url', 'title', 'text', 'meta'], convert_url=False, check_perms=CHECK_FOR_READ, force_resolve=force_resolve) @@ -108,7 +111,8 @@ # Get the list of pages to show here. query = {endpoint: [value]} - pages = g.wiki.getPages(meta_query=query) + pages = g.wiki.getPages(meta_query=query, + fields=['url', 'title', 'text', 'meta']) tpl_data = { 'name': endpoint, 'value': value, @@ -146,7 +150,8 @@ @app.route('/api/raw/<path:url>') def api_read_page_raw(url): - page = get_page_or_404(url, check_perms=CHECK_FOR_READ) + page = get_page_or_404(url, check_perms=CHECK_FOR_READ, + fields=['url', 'title', 'text', 'meta']) result = {'meta': get_page_meta(page), 'text': page.raw_text} return jsonify(result) @@ -169,7 +174,8 @@ @app.route('/api/state/<path:url>') def api_get_state(url): - page = get_page_or_404(url, check_perms=CHECK_FOR_READ) + page = get_page_or_404(url, check_perms=CHECK_FOR_READ, + fields=['url', 'title', 'path', 'meta']) state = page.getState() return jsonify({ 'meta': get_page_meta(page, True), @@ -184,10 +190,12 @@ @app.route('/api/outlinks/<path:url>') def api_get_outgoing_links(url): - page = get_page_or_404(url, check_perms=CHECK_FOR_READ) + page = get_page_or_404(url, check_perms=CHECK_FOR_READ, + fields=['url', 'title', 'links']) links = [] for link in page.links: - other = get_page_or_none(link, convert_url=False) + other = get_page_or_none(link, convert_url=False, + fields=['url', 'title', 'meta']) if other is not None and is_page_readable(other): links.append({ 'url': other.url, @@ -207,10 +215,12 @@ @app.route('/api/inlinks/<path:url>') def api_get_incoming_links(url): - page = get_page_or_404(url, check_perms=CHECK_FOR_READ) + page = get_page_or_404(url, check_perms=CHECK_FOR_READ, + fields=['url', 'title', 'meta']) links = [] for link in page.getIncomingLinks(): - other = get_page_or_none(link, convert_url=False) + other = get_page_or_none(link, convert_url=False, + fields=['url', 'title', 'meta']) if other is not None and is_page_readable(other): links.append({ 'url': link,
--- a/wikked/wiki.py Wed Apr 02 19:23:19 2014 -0700 +++ b/wikked/wiki.py Thu Apr 03 20:05:13 2014 -0700 @@ -310,16 +310,17 @@ for url in self.db.getPageUrls(subdir): yield url - def getPages(self, subdir=None, meta_query=None): + def getPages(self, subdir=None, meta_query=None, fields=None): """ Gets all the pages in the wiki, or in the given sub-directory. """ - for page in self.db.getPages(subdir, meta_query): + for page in self.db.getPages(subdir=subdir, meta_query=meta_query, + fields=fields): yield page - def getPage(self, url): + def getPage(self, url, fields=None): """ Gets the page for a given URL. """ - return self.db.getPage(url) + return self.db.getPage(url, fields=fields) def setPage(self, url, page_fields): """ Updates or creates a page for a given URL.