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 })