Warning
This document is for an in-development version of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.webapps.galaxy.api.page_revisions
"""
API for updating Galaxy Pages
"""
import logging
from galaxy import exceptions
from galaxy.model.item_attrs import UsesAnnotations
from galaxy.util.sanitize_html import sanitize_html
from galaxy.web import _future_expose_api as expose_api
from galaxy.web.base.controller import (
BaseAPIController,
SharableItemSecurityMixin,
SharableMixin
)
log = logging.getLogger(__name__)
[docs]class PageRevisionsController(BaseAPIController, SharableItemSecurityMixin, UsesAnnotations, SharableMixin):
[docs] @expose_api
def index(self, trans, page_id, **kwd):
"""
index( self, trans, page_id, **kwd )
* GET /api/pages/{page_id}/revisions
return a list of Page revisions
:param page_id: Display the revisions of Page with ID=page_id
:rtype: list
:returns: dictionaries containing different revisions of the page
"""
page = self._get_page(trans, page_id)
self._verify_page_ownership(trans, page)
r = trans.sa_session.query(trans.app.model.PageRevision).filter_by(page_id=trans.security.decode_id(page_id))
out = []
for page in r:
out.append(self.encode_all_ids(trans, page.to_dict(), True))
return out
[docs] @expose_api
def create(self, trans, page_id, payload, **kwd):
"""
create( self, trans, page_id, payload **kwd )
* POST /api/pages/{page_id}/revisions
Create a new revision for a page
:param page_id: Add revision to Page with ID=page_id
:param payload: A dictionary containing::
'title' = New title of the page
'content' = New content of the page
:rtype: dictionary
:returns: Dictionary with 'success' or 'error' element to indicate the result of the request
"""
content = payload.get("content", None)
if not content:
raise exceptions.ObjectAttributeMissingException("content undefined or empty")
page = self._get_page(trans, page_id)
self._verify_page_ownership(trans, page)
if 'title' in payload:
title = payload['title']
else:
title = page.title
content = sanitize_html(content)
page_revision = trans.app.model.PageRevision()
page_revision.title = title
page_revision.page = page
page.latest_revision = page_revision
page_revision.content = content
# Persist
session = trans.sa_session
session.flush()
return page_revision.to_dict(view="element")
def _get_page(self, trans, page_id):
page = None
try:
page = trans.sa_session.query(trans.app.model.Page).get(trans.security.decode_id(page_id))
except Exception:
pass
if not page:
raise exceptions.ObjectNotFound()
return page
def _verify_page_ownership(self, trans, page):
if not self.security_check(trans, page, True, True):
raise exceptions.ItemOwnershipException()