def represent_html_default(self, page): if page.metadata['content-type'] != 'text/x-markdown': content = WikiPage.remove_metadata(page.body) content_type = '%s; charset=utf-8' % str(page.metadata['content-type']) return Representation(content, content_type) if page.metadata.get('redirect', None) is not None: return Representation(None, None) else: content = { 'page': page, 'message': self.res.get('X-Message', None), } if page.metadata.get('schema', None) == 'Blog': content['posts'] = page.get_posts(20) return TemplateRepresentation(content, self.req, 'wikipage.html')
def represent_html_default(self, page): if page.metadata["content-type"] != "text/x-markdown": content = WikiPage.remove_metadata(page.body) content_type = "%s; charset=utf-8" % str(page.metadata["content-type"]) return Representation(content, content_type) if page.metadata.get("redirect", None) is not None: return Representation(None, None) else: redirected_from = self.req.cookies.get("ecogwiki_redirect_from") self.res.delete_cookie("ecogwiki_redirect_from") content = { "page": page, "message": self.res.headers.get("X-Message", None), "redirected_from": redirected_from, } if page.metadata.get("schema", None) == "Blog": content["posts"] = page.get_posts(count=50) return TemplateRepresentation(content, self.req, self._findTemplateForWikipage(page))
def represent_html_default(self, page): if page.metadata['content-type'] != 'text/x-markdown': content = WikiPage.remove_metadata(page.body) content_type = '%s; charset=utf-8' % str(page.metadata['content-type']) return Representation(content, content_type) if page.metadata.get('redirect', None) is not None: return Representation(None, None) else: redirected_from = self.req.cookies.get('ecogwiki_redirect_from') self.res.delete_cookie('ecogwiki_redirect_from') content = { 'page': page, 'message': self.res.headers.get('X-Message', None), 'redirected_from': redirected_from, } if page.metadata.get('schema', None) == 'Blog': content['posts'] = page.get_posts(count=50) return TemplateRepresentation(content, self.req, self._findTemplateForWikipage(page))
def represent_html_default(self, page): if page.metadata['content-type'] != 'text/x-markdown': content = WikiPage.remove_metadata(page.body) content_type = '%s; charset=utf-8' % str( page.metadata['content-type']) return Representation(content, content_type) if page.metadata.get('redirect', None) is not None: return Representation(None, None) else: redirected_from = self.req.cookies.get('ecogwiki_redirect_from') self.res.delete_cookie('ecogwiki_redirect_from') content = { 'page': page, 'message': self.res.headers.get('X-Message', None), 'redirected_from': redirected_from, } if page.metadata.get('schema', None) == 'Blog': content['posts'] = page.get_posts(count=50) return TemplateRepresentation(content, self.req, self._findTemplateForWikipage(page))
def test_line_starts_with_a_dot(self): page = WikiPage.get_by_title(u'Hello') expected = u'Hello\n.There' actual = WikiPage.remove_metadata(u'Hello\n.There') self.assertEqual(expected, actual)
def test_get_body_only(self): page = WikiPage.get_by_title(u'Hello') expected = u'blahblah' actual = WikiPage.remove_metadata(u'.hello a b c\n.x what?\nblahblah') self.assertEqual(expected, actual)
def get(self, path, head=False): if path == '': self.response.headers['Location'] = '/Home' if len(self.request.query): self.response.headers['Location'] += '?%s' % self.request.query self.response.status = 303 return elif self.request.path_qs.find('%20') != -1: self.response.headers[ 'Location'] = '%s' % self.request.path_qs.replace('%20', '_') self.response.status = 303 return cache.create_prc() title = WikiPage.path_to_title(path) user = get_cur_user() restype = get_restype(self.request) view = self.request.GET.get('view', 'default') page = WikiPage.get_by_title(title) rev = self.request.GET.get('rev', 'latest') if rev == 'list': self.get_revision_list(restype, page, head) return if rev == 'latest': rev = '%d' % page.revision rev = int(rev) if rev != page.revision: page = page.revisions.filter( WikiPageRevision.revision == rev).get() if not page.can_read(user): self.response.status = 403 self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, '403.html', {'page': page}) set_response_body(self.response, html, False) return # custom content-type metadata? if restype == 'default' and view == 'default' and page.metadata[ 'content-type'] != 'text/x-markdown': self.response.headers['Content-Type'] = '%s; charset=utf-8' % str( page.metadata['content-type']) set_response_body(self.response, WikiPage.remove_metadata(page.body), head) return if restype == 'default': if view == 'default': redirect = page.metadata.get('redirect', None) if redirect is not None: self.response.headers[ 'Location'] = '/' + WikiPage.title_to_path(redirect) self.response.status = 303 return template_data = { 'page': page, 'message': self.response.headers.get('X-Message', None), } if page.metadata.get('schema', None) == 'Blog': template_data['posts'] = WikiPage.get_published_posts( page.title, 20) elif page.revision == 0: self.response.status_int = 404 self.response.headers[ 'Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, 'wikipage.html', template_data) set_response_body(self.response, html, head) elif view == 'edit': html = template(self.request, 'wikipage.form.html', { 'page': page, 'conflict': None }) self.response.headers[ 'Content-Type'] = 'text/html; charset=utf-8' set_response_body(self.response, html, head) elif view == 'bodyonly': self.response.headers[ 'Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, 'bodyonly.html', { 'title': page.title, 'body': page.rendered_body, }) set_response_body(self.response, html, head) elif restype == 'atom': pages = WikiPage.get_published_posts(page.title, 20) rendered = render_posts_atom(self.request, page.title, pages) self.response.headers['Content-Type'] = 'text/xml; charset=utf-8' set_response_body(self.response, rendered, head) elif restype == 'txt': self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' set_response_body(self.response, page.body, head) elif restype == 'json': self.response.headers[ 'Content-Type'] = 'application/json; charset=utf-8' pagedict = { 'title': page.title, 'modifier': page.modifier.email() if page.modifier else None, 'updated_at': format_iso_datetime(page.updated_at), 'body': page.body, 'revision': page.revision, 'acl_read': page.acl_read, 'acl_write': page.acl_write, 'data': page.data, } set_response_body(self.response, json.dumps(pagedict), head) else: self.abort(400, 'Unknown type: %s' % restype)
def get(self, path, head=False): if path == '': self.response.headers['Location'] = '/Home' if len(self.request.query): self.response.headers['Location'] += '?%s' % self.request.query self.response.status = 303 return elif self.request.path_qs.find('%20') != -1: self.response.headers['Location'] = '%s' % self.request.path_qs.replace('%20', '_') self.response.status = 303 return cache.create_prc() title = WikiPage.path_to_title(path) user = get_cur_user() restype = get_restype(self.request) view = self.request.GET.get('view', 'default') page = WikiPage.get_by_title(title) rev = self.request.GET.get('rev', 'latest') if rev == 'list': self.get_revision_list(restype, page, head) return if rev == 'latest': rev = '%d' % page.revision rev = int(rev) if rev != page.revision: page = page.revisions.filter(WikiPageRevision.revision == rev).get() if not page.can_read(user): self.response.status = 403 self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, '403.html', {'page': page}) set_response_body(self.response, html, False) return # custom content-type metadata? if restype == 'default' and view == 'default' and page.metadata['content-type'] != 'text/x-markdown': self.response.headers['Content-Type'] = '%s; charset=utf-8' % str(page.metadata['content-type']) set_response_body(self.response, WikiPage.remove_metadata(page.body), head) return if restype == 'default': if view == 'default': redirect = page.metadata.get('redirect', None) if redirect is not None: self.response.headers['Location'] = '/' + WikiPage.title_to_path(redirect) self.response.status = 303 return template_data = { 'page': page, 'message': self.response.headers.get('X-Message', None), } if page.metadata.get('schema', None) == 'Blog': template_data['posts'] = WikiPage.get_published_posts(page.title, 20) elif page.revision == 0: self.response.status_int = 404 self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, 'wikipage.html', template_data) set_response_body(self.response, html, head) elif view == 'edit': html = template(self.request, 'wikipage.form.html', {'page': page, 'conflict': None}) self.response.headers['Content-Type'] = 'text/html; charset=utf-8' set_response_body(self.response, html, head) elif view == 'bodyonly': self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = template(self.request, 'bodyonly.html', { 'title': page.title, 'body': page.rendered_body, }) set_response_body(self.response, html, head) elif restype == 'atom': pages = WikiPage.get_published_posts(page.title, 20) rendered = render_posts_atom(self.request, page.title, pages) self.response.headers['Content-Type'] = 'text/xml; charset=utf-8' set_response_body(self.response, rendered, head) elif restype == 'txt': self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' set_response_body(self.response, page.body, head) elif restype == 'json': self.response.headers['Content-Type'] = 'application/json; charset=utf-8' pagedict = { 'title': page.title, 'modifier': page.modifier.email() if page.modifier else None, 'updated_at': format_iso_datetime(page.updated_at), 'body': page.body, 'revision': page.revision, 'acl_read': page.acl_read, 'acl_write': page.acl_write, 'data': page.data, } set_response_body(self.response, json.dumps(pagedict), head) else: self.abort(400, 'Unknown type: %s' % restype)
def get(self, path, head=False): if path == "": self.response.headers["Location"] = "/Home" self.response.status = 303 return if path.find(" ") != -1: self.response.headers["Location"] = "/%s" % urllib2.quote(path.replace(" ", "_")) self.response.status = 303 return if path.startswith("+") or path.startswith("-"): return self.get_search_result(path, head) if path.startswith("sp."): return self.get_sp(path[3:], head) user = WikiPageHandler._get_cur_user() page = WikiPage.get_by_title(WikiPage.path_to_title(path)) if not page.can_read(user): self.response.status = 403 self.response.headers["Content-Type"] = "text/html; charset=utf-8" html = self._template("403.html", {"page": page}) self._set_response_body(html, False) return restype = self._get_restype() # custom content-type metadata? if restype == "default" and page.metadata["content-type"] != "text/x-markdown": self.response.headers["Content-Type"] = "%s; charset=utf-8" % str(page.metadata["content-type"]) self._set_response_body(WikiPage.remove_metadata(page.body), head) return if restype == "default": redirect = page.metadata.get("redirect", None) if redirect is not None: self.response.headers["Location"] = "/" + WikiPage.title_to_path(redirect) self.response.status = 303 return template_data = {"page": page} if page.metadata.get("schema", None) == "Blog": template_data["posts"] = WikiPage.get_published_posts(page.title, 20) elif page.revision == 0: self.response.status_int = 404 self.response.headers["Content-Type"] = "text/html; charset=utf-8" html = self._template("wikipage.html", template_data) self._set_response_body(html, head) elif restype == "atom": pages = WikiPage.get_published_posts(page.title, 20) rendered = self._render_posts_atom(page.title, pages) self.response.headers["Content-Type"] = "text/xml; charset=utf-8" self._set_response_body(rendered, head) elif restype == "form": html = self._template("wikipage.form.html", {"page": page}) self.response.headers["Content-Type"] = "text/html; charset=utf-8" self._set_response_body(html, head) elif restype == "rawbody": self.response.headers["Content-Type"] = "text/plain; charset=utf-8" self._set_response_body(page.body, head) elif restype == "body": self.response.headers["Content-Type"] = "text/html; charset=utf-8" html = self._template("bodyonly.html", {"page": page}) self._set_response_body(html, head) elif restype == "history": self.response.headers["Content-Type"] = "text/html; charset=utf-8" revisions = page.revisions.order(-WikiPageRevision.created_at) html = self._template("history.html", {"page": page, "revisions": revisions}) self._set_response_body(html, head) elif restype == "json": self.response.headers["Content-Type"] = "application/json" pagedict = { "title": page.title, "modifier": page.modifier.email() if page.modifier else None, "updated_at": format_iso_datetime(page.updated_at), "body": page.body, "revision": page.revision, "acl_read": page.acl_read, "acl_write": page.acl_write, } self._set_response_body(json.dumps(pagedict), head) else: self.abort(400, "Unknown type: %s" % restype)
def test_line_starts_with_a_dot(self): expected = u'Hello\n.There' actual = WikiPage.remove_metadata(u'Hello\n.There') self.assertEqual(expected, actual)
def test_get_body_only(self): expected = u'blahblah' actual = WikiPage.remove_metadata(u'.hello a b c\n.x what?\nblahblah') self.assertEqual(expected, actual)
def test_get_body_only(self): page = WikiPage.get_by_title(u"Hello") expected = u"blahblah" actual = WikiPage.remove_metadata(u".hello a b c\n.x what?\nblahblah") self.assertEqual(expected, actual)
def get(self, path, head=False): if path == '': self.response.headers['Location'] = '/Home' self.response.status = 303 return if path.find(' ') != -1: self.response.headers['Location'] = '/%s' % urllib2.quote(path.replace(' ', '_')) self.response.status = 303 return if path.startswith('+') or path.startswith('-'): return self.get_search_result(path, head) if path.startswith('sp.'): return self.get_sp(path[3:], head) user = WikiPageHandler._get_cur_user() restype = self._get_restype() page = WikiPage.get_by_title(WikiPage.path_to_title(path)) rev = self.request.GET.get('rev', 'latest') if rev == 'latest': rev = '%d' % page.revision rev = int(rev) if rev != page.revision: page = page.revisions.filter(WikiPageRevision.revision==rev).get() if not page.can_read(user): self.response.status = 403 self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = self._template('403.html', {'page': page}) self._set_response_body(html, False) return # custom content-type metadata? if restype == 'default' and page.metadata['content-type'] != 'text/x-markdown': self.response.headers['Content-Type'] = '%s; charset=utf-8' % str(page.metadata['content-type']) self._set_response_body(WikiPage.remove_metadata(page.body), head) return if restype == 'default': redirect = page.metadata.get('redirect', None) if redirect is not None: self.response.headers['Location'] = '/' + WikiPage.title_to_path(redirect) self.response.status = 303 return template_data = {'page': page} if page.metadata.get('schema', None) == 'Blog': template_data['posts'] = WikiPage.get_published_posts(page.title, 20) elif page.revision == 0: self.response.status_int = 404 self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = self._template('wikipage.html', template_data) self._set_response_body(html, head) elif restype == 'atom': pages = WikiPage.get_published_posts(page.title, 20) rendered = self._render_posts_atom(page.title, pages) self.response.headers['Content-Type'] = 'text/xml; charset=utf-8' self._set_response_body(rendered, head) elif restype == 'form': html = self._template('wikipage.form.html', {'page': page}) self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self._set_response_body(html, head) elif restype == 'rawbody': self.response.headers['Content-Type'] = 'text/plain; charset=utf-8' self._set_response_body(page.body, head) elif restype == 'body': self.response.headers['Content-Type'] = 'text/html; charset=utf-8' html = self._template('bodyonly.html', {'page': page}) self._set_response_body(html, head) elif restype == 'history': if type(page) == WikiPageRevision: raise ValueError() self.response.headers['Content-Type'] = 'text/html; charset=utf-8' revisions = page.revisions.order(-WikiPageRevision.created_at) html = self._template('history.html', {'page': page, 'revisions': revisions}) self._set_response_body(html, head) elif restype == 'json': self.response.headers['Content-Type'] = 'application/json' pagedict = { 'title': page.title, 'modifier': page.modifier.email() if page.modifier else None, 'updated_at': format_iso_datetime(page.updated_at), 'body': page.body, 'revision': page.revision, 'acl_read': page.acl_read, 'acl_write': page.acl_write, } self._set_response_body(json.dumps(pagedict), head) else: self.abort(400, 'Unknown type: %s' % restype)