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})
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
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)
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 })
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 })
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 })