Mercurial > wikked
comparison wikked/views/read.py @ 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 | 1e3275ff5dfc |
children | 24d5464274bb |
comparison
equal
deleted
inserted
replaced
255:c27317412100 | 256:5667f11fd7c9 |
---|---|
70 endpoint, value, path = split_url_from_viewarg(url) | 70 endpoint, value, path = split_url_from_viewarg(url) |
71 if endpoint is None: | 71 if endpoint is None: |
72 # Normal page. | 72 # Normal page. |
73 page = get_page_or_404( | 73 page = get_page_or_404( |
74 path, | 74 path, |
75 fields=['url', 'title', 'text', 'meta'], | |
75 convert_url=False, | 76 convert_url=False, |
76 check_perms=CHECK_FOR_READ, | 77 check_perms=CHECK_FOR_READ, |
77 force_resolve=force_resolve) | 78 force_resolve=force_resolve) |
78 | 79 |
79 result = {'meta': get_page_meta(page), 'text': page.text} | 80 result = {'meta': get_page_meta(page), 'text': page.text} |
82 | 83 |
83 # Meta listing page or special endpoint. | 84 # Meta listing page or special endpoint. |
84 meta_page_url = '%s:%s' % (endpoint, path) | 85 meta_page_url = '%s:%s' % (endpoint, path) |
85 info_page = get_page_or_none( | 86 info_page = get_page_or_none( |
86 meta_page_url, | 87 meta_page_url, |
88 fields=['url', 'title', 'text', 'meta'], | |
87 convert_url=False, | 89 convert_url=False, |
88 check_perms=CHECK_FOR_READ, | 90 check_perms=CHECK_FOR_READ, |
89 force_resolve=force_resolve) | 91 force_resolve=force_resolve) |
90 | 92 |
91 endpoint_info = g.wiki.endpoints.get(endpoint) | 93 endpoint_info = g.wiki.endpoints.get(endpoint) |
93 # We have some information about this endpoint... | 95 # We have some information about this endpoint... |
94 if endpoint_info.default and info_page is None: | 96 if endpoint_info.default and info_page is None: |
95 # Default page text. | 97 # Default page text. |
96 info_page = get_page_or_404( | 98 info_page = get_page_or_404( |
97 endpoint_info.default, | 99 endpoint_info.default, |
100 fields=['url', 'title', 'text', 'meta'], | |
98 convert_url=False, | 101 convert_url=False, |
99 check_perms=CHECK_FOR_READ, | 102 check_perms=CHECK_FOR_READ, |
100 force_resolve=force_resolve) | 103 force_resolve=force_resolve) |
101 | 104 |
102 if not endpoint_info.query: | 105 if not endpoint_info.query: |
106 result.update(additional_info) | 109 result.update(additional_info) |
107 return jsonify(result) | 110 return jsonify(result) |
108 | 111 |
109 # Get the list of pages to show here. | 112 # Get the list of pages to show here. |
110 query = {endpoint: [value]} | 113 query = {endpoint: [value]} |
111 pages = g.wiki.getPages(meta_query=query) | 114 pages = g.wiki.getPages(meta_query=query, |
115 fields=['url', 'title', 'text', 'meta']) | |
112 tpl_data = { | 116 tpl_data = { |
113 'name': endpoint, | 117 'name': endpoint, |
114 'value': value, | 118 'value': value, |
115 'safe_value': urllib.quote(value.encode('utf-8')), | 119 'safe_value': urllib.quote(value.encode('utf-8')), |
116 'pages': [get_page_meta(p) for p in pages] | 120 'pages': [get_page_meta(p) for p in pages] |
144 return api_read_page_raw(g.wiki.main_page_url.lstrip('/')) | 148 return api_read_page_raw(g.wiki.main_page_url.lstrip('/')) |
145 | 149 |
146 | 150 |
147 @app.route('/api/raw/<path:url>') | 151 @app.route('/api/raw/<path:url>') |
148 def api_read_page_raw(url): | 152 def api_read_page_raw(url): |
149 page = get_page_or_404(url, check_perms=CHECK_FOR_READ) | 153 page = get_page_or_404(url, check_perms=CHECK_FOR_READ, |
154 fields=['url', 'title', 'text', 'meta']) | |
150 result = {'meta': get_page_meta(page), 'text': page.raw_text} | 155 result = {'meta': get_page_meta(page), 'text': page.raw_text} |
151 return jsonify(result) | 156 return jsonify(result) |
152 | 157 |
153 | 158 |
154 @app.route('/api/query') | 159 @app.route('/api/query') |
167 return api_get_state(g.wiki.main_page_url.lstrip('/')) | 172 return api_get_state(g.wiki.main_page_url.lstrip('/')) |
168 | 173 |
169 | 174 |
170 @app.route('/api/state/<path:url>') | 175 @app.route('/api/state/<path:url>') |
171 def api_get_state(url): | 176 def api_get_state(url): |
172 page = get_page_or_404(url, check_perms=CHECK_FOR_READ) | 177 page = get_page_or_404(url, check_perms=CHECK_FOR_READ, |
178 fields=['url', 'title', 'path', 'meta']) | |
173 state = page.getState() | 179 state = page.getState() |
174 return jsonify({ | 180 return jsonify({ |
175 'meta': get_page_meta(page, True), | 181 'meta': get_page_meta(page, True), |
176 'state': STATE_NAMES[state] | 182 'state': STATE_NAMES[state] |
177 }) | 183 }) |
182 return api_get_outgoing_links(g.wiki.main_page_url.lstrip('/')) | 188 return api_get_outgoing_links(g.wiki.main_page_url.lstrip('/')) |
183 | 189 |
184 | 190 |
185 @app.route('/api/outlinks/<path:url>') | 191 @app.route('/api/outlinks/<path:url>') |
186 def api_get_outgoing_links(url): | 192 def api_get_outgoing_links(url): |
187 page = get_page_or_404(url, check_perms=CHECK_FOR_READ) | 193 page = get_page_or_404(url, check_perms=CHECK_FOR_READ, |
194 fields=['url', 'title', 'links']) | |
188 links = [] | 195 links = [] |
189 for link in page.links: | 196 for link in page.links: |
190 other = get_page_or_none(link, convert_url=False) | 197 other = get_page_or_none(link, convert_url=False, |
198 fields=['url', 'title', 'meta']) | |
191 if other is not None and is_page_readable(other): | 199 if other is not None and is_page_readable(other): |
192 links.append({ | 200 links.append({ |
193 'url': other.url, | 201 'url': other.url, |
194 'title': other.title | 202 'title': other.title |
195 }) | 203 }) |
205 return api_get_incoming_links(g.wiki.main_page_url.lstrip('/')) | 213 return api_get_incoming_links(g.wiki.main_page_url.lstrip('/')) |
206 | 214 |
207 | 215 |
208 @app.route('/api/inlinks/<path:url>') | 216 @app.route('/api/inlinks/<path:url>') |
209 def api_get_incoming_links(url): | 217 def api_get_incoming_links(url): |
210 page = get_page_or_404(url, check_perms=CHECK_FOR_READ) | 218 page = get_page_or_404(url, check_perms=CHECK_FOR_READ, |
219 fields=['url', 'title', 'meta']) | |
211 links = [] | 220 links = [] |
212 for link in page.getIncomingLinks(): | 221 for link in page.getIncomingLinks(): |
213 other = get_page_or_none(link, convert_url=False) | 222 other = get_page_or_none(link, convert_url=False, |
223 fields=['url', 'title', 'meta']) | |
214 if other is not None and is_page_readable(other): | 224 if other is not None and is_page_readable(other): |
215 links.append({ | 225 links.append({ |
216 'url': link, | 226 'url': link, |
217 'title': other.title | 227 'title': other.title |
218 }) | 228 }) |