Exemple #1
0
    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)))
Exemple #2
0
    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)))
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
    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)
Exemple #13
0
    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)
Exemple #14
0
    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)
Exemple #15
0
    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)