コード例 #1
0
    def get(self, request, slug):
        """List all pages in a wiki.
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        if not wiki.has_read_perm(request.user):
            error_msg = "Permission denied"
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = "Internal Server Error"
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        pages = get_wiki_pages(repo)
        wiki_pages_object = []
        for _, page_name in pages.iteritems():
            wiki_page_object = get_wiki_page_object(wiki, page_name)
            wiki_pages_object.append(wiki_page_object)

        # sort pages by name
        wiki_pages_object.sort(
            lambda x, y: cmp(x['name'].lower(), y['name'].lower()))

        return Response({"data": wiki_pages_object})
コード例 #2
0
ファイル: test_utils.py プロジェクト: smallwei2015/seahub
    def test_get(self):
        wiki = Wiki.objects.add('new wiki', self.user.username)
        assert wiki is not None

        seafile_api.post_empty_file(wiki.repo_id, '/', 'home.md',
                                    self.user.username)

        p = get_wiki_page_object(wiki, 'home')
        assert p['updated_at'] is not None
        assert p['last_modifier_name'] is not None
コード例 #3
0
    def post(self, request, slug):
        """ Add a page in a wiki
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        username = request.user.username
        if wiki.username != username:
            error_msg = _('Permission denied.')
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        page_name = request.POST.get('name', '')
        if not page_name:
            error_msg = 'name invalid'
            return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

        page_name = clean_page_name(page_name)
        filename = page_name + ".md"
        filepath = "/" + page_name + ".md"

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = _("Internal Server Error")
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        # check whether file exists
        if get_file_id_by_path(repo.id, filepath):
            error_msg = _('Page "%s" already exists.') % filename
            return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

        try:
            seafile_api.post_empty_file(repo.id, '/', filename,
                                        request.user.username)
        except SearpcError as e:
            logger.error(e)
            error_msg = _('Internal Server Error')
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        wiki_page_object = get_wiki_page_object(wiki, page_name)

        return Response(wiki_page_object)
コード例 #4
0
ファイル: wiki_pages.py プロジェクト: haiwen/seahub
    def post(self, request, slug):
        """ Add a page in a wiki
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        username = request.user.username
        if wiki.username != username:
            error_msg = _('Permission denied.')
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        page_name = request.POST.get('name', '')
        if not page_name:
            error_msg = 'name invalid'
            return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

        page_name = clean_page_name(page_name)
        filename = page_name + ".md"
        filepath = "/" + page_name + ".md"

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = _("Internal Server Error")
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        # check whether file exists
        if get_file_id_by_path(repo.id, filepath):
            error_msg = _('Page "%s" already exists.') % filename
            return api_error(status.HTTP_400_BAD_REQUEST, error_msg)

        try:
            seafile_api.post_empty_file(repo.id, '/',
                                        filename, request.user.username)
        except SearpcError as e:
            logger.error(e)
            error_msg = _('Internal Server Error')
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        wiki_page_object = get_wiki_page_object(wiki, page_name)

        return Response(wiki_page_object)
コード例 #5
0
ファイル: wiki_pages.py プロジェクト: haiwen/seahub
    def get(self, request, slug, page_name="home"):
        """Get content of a wiki
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        if not wiki.has_read_perm(request):
            error_msg = 'Permission denied.'
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        page_name = clean_page_name(page_name)

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = _("Internal Server Error")
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        try:
            wiki_dirent = get_wiki_dirent(repo.id, page_name)
        except WikiPageMissing:
            error_msg = _("Page %s not found.") % page_name
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        url = get_inner_file_url(repo, wiki_dirent.obj_id, wiki_dirent.obj_name)
        file_response = urllib2.urlopen(url)
        content = file_response.read()

        wiki_page_object = get_wiki_page_object(wiki, page_name)

        return Response({
            "meta": wiki_page_object,
            "content": content
        })
コード例 #6
0
    def get(self, request, slug, page_name="home"):
        """Get content of a wiki
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        if not wiki.has_read_perm(request.user):
            error_msg = 'Permission denied.'
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        page_name = clean_page_name(page_name)

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = _("Internal Server Error")
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        try:
            wiki_dirent = get_wiki_dirent(repo.id, page_name)
        except WikiPageMissing:
            error_msg = _("Page %s not found.") % page_name
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        url = get_inner_file_url(repo, wiki_dirent.obj_id, wiki_dirent.obj_name)
        file_response = urllib2.urlopen(url)
        content = file_response.read()

        wiki_page_object = get_wiki_page_object(wiki, page_name)

        return Response({
            "meta": wiki_page_object,
            "content": content
        })
コード例 #7
0
ファイル: wiki_pages.py プロジェクト: haiwen/seahub
    def get(self, request, slug):
        """List all pages in a wiki.
        """
        try:
            wiki = Wiki.objects.get(slug=slug)
        except Wiki.DoesNotExist:
            error_msg = "Wiki not found."
            return api_error(status.HTTP_404_NOT_FOUND, error_msg)

        # perm check
        if not wiki.has_read_perm(request):
            error_msg = "Permission denied"
            return api_error(status.HTTP_403_FORBIDDEN, error_msg)

        try:
            repo = seafile_api.get_repo(wiki.repo_id)
            if not repo:
                error_msg = "Wiki library not found."
                return api_error(status.HTTP_404_NOT_FOUND, error_msg)
        except SearpcError:
            error_msg = "Internal Server Error"
            return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)

        pages = get_wiki_pages(repo)
        wiki_pages_object = []
        for _, page_name in pages.iteritems():
            wiki_page_object = get_wiki_page_object(wiki, page_name)
            wiki_pages_object.append(wiki_page_object)

        # sort pages by name
        wiki_pages_object.sort(lambda x, y: cmp(x['name'].lower(),
                                                y['name'].lower()))

        return Response({
                "data": wiki_pages_object
                })