# HG changeset patch # User Ludovic Chabant # Date 1396580713 25200 # Node ID 5667f11fd7c971094d92fb9980c5340b5c7b74d9 # Parent c273174121004fd8a48fffebbd93f388a1113810 Only fetch page fields that we're going to use from the DB. diff -r c27317412100 -r 5667f11fd7c9 wikked/views/__init__.py --- 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) diff -r c27317412100 -r 5667f11fd7c9 wikked/views/read.py --- 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/') 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/') 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/') 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/') 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, diff -r c27317412100 -r 5667f11fd7c9 wikked/wiki.py --- 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.