def test_first_publish(self): page = WikiPage.get_by_title(u'Hello') page.update_content(u'Hello', 0) self.assertEqual(0, len(WikiPage.get_published_posts(None, 20))) page.update_content(u'.pub\nHello', 1) self.assertIsNotNone(page.published_at) self.assertIsNone(page.published_to) self.assertEqual(1, len(WikiPage.get_published_posts(None, 20)))
def test_first_publish(self): page = WikiPage.get_by_title(u'Hello') page.update_content(u'Hello', 0, '') self.assertEqual(0, len(WikiPage.get_published_posts(None, 20))) page.update_content(u'.pub\nHello', 1, '') self.assertIsNotNone(page.published_at) self.assertIsNone(page.published_to) self.assertEqual(1, len(WikiPage.get_published_posts(None, 20)))
def test_unpublish_newest(self): newest = WikiPage.get_by_title(u'Hello 3') newest.update_content(u'Hello 3', 1) newer, older = WikiPage.get_published_posts(None, 20) self.assertEqual(u'Hello 2', older.newer_title) self.assertEqual(u'Hello 1', newer.older_title)
def test_unpublish_newest(self): newest = WikiPage.get_by_title(u'Hello 3') newest.update_content(u'Hello 3', 1, '') newer, older = WikiPage.get_published_posts(None, 20) self.assertEqual(u'Hello 2', older.newer_title) self.assertEqual(u'Hello 1', newer.older_title)
def get_posts(self, user, head): restype = get_restype(self.request) rendered = None if restype == 'default': if rendered is None: pages = WikiPage.get_published_posts(None, 200) rendered = template(self.request, 'wiki_sp_posts.html', {'pages': pages}) self.response.headers['Content-Type'] = 'text/html; charset=utf-8' set_response_body(self.response, rendered, head) elif restype == 'atom': if rendered is None: pages = WikiPage.get_published_posts(None, 20) rendered = render_posts_atom(self.request, None, pages) self.response.headers['Content-Type'] = 'text/xml; charset=utf-8' set_response_body(self.response, rendered, head) else: self.abort(400, 'Unknown type: %s' % restype)
def get_sp_posts(self, user, head): restype = self._get_restype() email = user.email() if user is not None else "None" rendered = None if restype == "default": if rendered is None: pages = WikiPage.get_published_posts(None, 200) rendered = self._template("wiki_sp_posts.html", {"pages": pages}) self.response.headers["Content-Type"] = "text/html; charset=utf-8" self._set_response_body(rendered, head) elif restype == "atom": if rendered is None: pages = WikiPage.get_published_posts(None, 20) rendered = self._render_posts_atom(None, pages) self.response.headers["Content-Type"] = "text/xml; charset=utf-8" self._set_response_body(rendered, head) else: self.abort(400, "Unknown type: %s" % restype)
def get_sp_posts(self, user, head): restype = self._get_restype() email = user.email() if user is not None else 'None' rendered = None if restype == 'default': if rendered is None: pages = WikiPage.get_published_posts(None, 200) rendered = self._template('wiki_sp_posts.html', {'pages': pages}) self.response.headers['Content-Type'] = 'text/html; charset=utf-8' self._set_response_body(rendered, head) elif restype == 'atom': if rendered is None: pages = WikiPage.get_published_posts(None, 20) rendered = self._render_posts_atom(None, pages) self.response.headers['Content-Type'] = 'text/xml; charset=utf-8' self._set_response_body(rendered, head) else: self.abort(400, 'Unknown type: %s' % restype)
def test_second_publish(self): page1 = WikiPage.get_by_title(u'Hello 1') page1.update_content(u'.pub\nHello 1', 0) page2 = WikiPage.get_by_title(u'Hello 2') page2.update_content(u'.pub\nHello 2', 0) posts = WikiPage.get_published_posts(None, 20) self.assertEqual(2, len(posts)) self.assertEqual(page2.title, posts[1].newer_title) self.assertEqual(page1.title, posts[0].older_title)
def test_second_publish(self): page1 = WikiPage.get_by_title(u'Hello 1') page1.update_content(u'.pub\nHello 1', 0, '') page2 = WikiPage.get_by_title(u'Hello 2') page2.update_content(u'.pub\nHello 2', 0, '') posts = WikiPage.get_published_posts(None, 20) self.assertEqual(2, len(posts)) self.assertEqual(page2.title, posts[1].newer_title) self.assertEqual(page1.title, posts[0].older_title)
def test_delete_published_page(self): self._login('*****@*****.**', 'a', is_admin=True) page1 = WikiPage.get_by_title(u'Hello 1') page1.update_content(u'.pub\nHello 1', 0) page2 = WikiPage.get_by_title(u'Hello 2') page2.update_content(u'.pub\nHello 2', 0) page3 = WikiPage.get_by_title(u'Hello 3') page3.update_content(u'.pub\nHello 3', 0) middle = WikiPage.get_by_title(u'Hello 2') middle.delete(users.get_current_user()) newer, older = WikiPage.get_published_posts(None, 20) self.assertEqual(u'Hello 3', older.newer_title) self.assertEqual(u'Hello 1', newer.older_title)
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 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)