Warning
This document is for an old release 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 sqlalchemy import select
from galaxy import web
from galaxy.forms.forms import form_factory
from galaxy.managers.context import ProvidesUserContext
from galaxy.managers.forms import FormManager
from galaxy.model import FormDefinition
from galaxy.model.base import transaction
from galaxy.schema.fields import DecodedDatabaseIdField
from galaxy.util import XML
from galaxy.webapps.base.controller import url_for
from galaxy.webapps.galaxy.api import (
depends,
DependsOnTrans,
Router,
)
from . import BaseGalaxyAPIController
log = logging.getLogger(__name__)
router = Router(tags=["forms"])
[docs]@router.cbv
class FastAPIForms:
form_manager: FormManager = depends(FormManager)
[docs] @router.delete("/api/forms/{id}", require_admin=True)
def delete(self, id: DecodedDatabaseIdField, trans: ProvidesUserContext = DependsOnTrans):
form = self.form_manager.get(trans, id)
self.form_manager.delete(trans, form)
[docs] @router.post("/api/forms/{id}/undelete", require_admin=True)
def undelete(self, id: DecodedDatabaseIdField, trans: ProvidesUserContext = DependsOnTrans):
form = self.form_manager.get(trans, id)
self.form_manager.undelete(trans, form)
[docs]class FormDefinitionAPIController(BaseGalaxyAPIController):
[docs] @web.legacy_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."
rval = []
form_defs = trans.sa_session.scalars(select(FormDefinition))
for form_definition in form_defs:
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.legacy_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 f"Malformed form definition id ( {str(form_definition_id)} ) specified, unable to decode."
try:
form_definition = trans.sa_session.get(FormDefinition, decoded_form_definition_id)
except Exception:
form_definition = None
if not form_definition or not trans.user_is_admin:
trans.response.status = 400
return f"Invalid form definition id ( {str(form_definition_id)} ) specified."
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.legacy_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)
with transaction(trans.sa_session):
trans.sa_session.commit()
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]