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.forms

"""
API operations on FormDefinition objects.
"""
import logging
from xml.etree.ElementTree import XML

from galaxy import web
from galaxy.forms.forms import form_factory
from galaxy.web.base.controller import BaseAPIController, url_for

log = logging.getLogger(__name__)


[docs]class FormDefinitionAPIController(BaseAPIController):
[docs] @web.expose_api def index(self, trans, **kwd): """ GET /api/forms Displays a collection (list) of forms. """ if not trans.user_is_admin: trans.response.status = 403 return "You are not authorized to view the list of forms." query = trans.sa_session.query(trans.app.model.FormDefinition) rval = [] for form_definition in query: item = form_definition.to_dict(value_mapper={'id': trans.security.encode_id, 'form_definition_current_id': trans.security.encode_id}) item['url'] = url_for('form', id=trans.security.encode_id(form_definition.id)) rval.append(item) return rval
[docs] @web.expose_api def show(self, trans, id, **kwd): """ GET /api/forms/{encoded_form_id} Displays information about a form. """ form_definition_id = id try: decoded_form_definition_id = trans.security.decode_id(form_definition_id) except TypeError: trans.response.status = 400 return "Malformed form definition id ( %s ) specified, unable to decode." % str(form_definition_id) try: form_definition = trans.sa_session.query(trans.app.model.FormDefinition).get(decoded_form_definition_id) except Exception: form_definition = None if not form_definition or not trans.user_is_admin: trans.response.status = 400 return "Invalid form definition id ( %s ) specified." % str(form_definition_id) item = form_definition.to_dict(view='element', value_mapper={'id': trans.security.encode_id, 'form_definition_current_id': trans.security.encode_id}) item['url'] = url_for('form', id=form_definition_id) return item
[docs] @web.expose_api def create(self, trans, payload, **kwd): """ POST /api/forms Creates a new form. """ if not trans.user_is_admin: trans.response.status = 403 return "You are not authorized to create a new form." xml_text = payload.get('xml_text', None) if xml_text is None: trans.response.status = 400 return "Missing required parameter 'xml_text'." # enhance to allow creating from more than just xml form_definition = form_factory.from_elem(XML(xml_text)) trans.sa_session.add(form_definition) trans.sa_session.flush() encoded_id = trans.security.encode_id(form_definition.id) item = form_definition.to_dict(view='element', value_mapper={'id': trans.security.encode_id, 'form_definition_current_id': trans.security.encode_id}) item['url'] = url_for('form', id=encoded_id) return [item]