Source code for galaxy.webapps.galaxy.api.page_revisions

"""
API for updating Galaxy Pages
"""
import logging
from galaxy.web import _future_expose_api as expose_api
from galaxy.web.base.controller import SharableItemSecurityMixin, BaseAPIController, SharableMixin
from galaxy import exceptions
from galaxy.model.item_attrs import UsesAnnotations
from galaxy.util.sanitize_html import sanitize_html

log = logging.getLogger( __name__ )


[docs]class PageRevisionsController( BaseAPIController, SharableItemSecurityMixin, UsesAnnotations, SharableMixin ): @expose_api
[docs] 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
@expose_api
[docs] 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, 'utf-8', 'text/html' ) 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()