예제 #1
0
    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')
예제 #2
0
    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))
예제 #3
0
    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))
예제 #4
0
    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))
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
파일: views.py 프로젝트: namongk/ecogwiki
    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)
예제 #8
0
파일: views.py 프로젝트: namongk/ecogwiki
    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)
예제 #9
0
파일: views.py 프로젝트: uastory/ecogwiki
    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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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)
예제 #13
0
파일: views.py 프로젝트: ledzpl/ecogwiki
    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)