Source code for galaxy.webapps.galaxy.api.forms
"""
API operations on FormDefinition objects.
"""
import logging
from galaxy.web.base.controller import BaseAPIController, url_for
from galaxy import web
from galaxy.forms.forms import form_factory
from xml.etree.ElementTree import XML
log = logging.getLogger( __name__ )
[docs]class FormDefinitionAPIController( BaseAPIController ):
@web.expose_api
[docs] 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 )#.filter( trans.app.model.FormDefinition.table.c.deleted == False )
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
@web.expose_api
[docs] 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:
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
@web.expose_api
[docs] 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 ]