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.util.form_builder
"""
Classes for generating HTML forms
"""
import logging
from galaxy.util import asbool
log = logging.getLogger(__name__)
[docs]class BaseField:
[docs] def __init__(self, name, value=None, label=None, **kwds):
self.name = name
self.label = label
self.value = value
self.disabled = kwds.get("disabled", False)
if "optional" in kwds:
self.optional = asbool(kwds.get("optional"))
else:
self.optional = kwds.get("required", "optional") == "optional"
self.help = kwds.get("helptext")
[docs] def to_dict(self):
return {
"name": self.name,
"label": self.label,
"disabled": self.disabled,
"optional": self.optional,
"value": self.value,
"help": self.help,
}
[docs]class CheckboxField(BaseField):
"""
A checkbox (boolean input)
"""
[docs] @staticmethod
def is_checked(value):
if value in [True, "True", "true"]:
return True
return False
[docs]class SelectField(BaseField):
"""
A select field.
"""
[docs] def __init__(
self,
name,
multiple=None,
display=None,
field_id=None,
value=None,
selectlist=None,
refresh_on_change=False,
**kwds,
):
super().__init__(name, value, **kwds)
self.field_id = field_id
self.multiple = multiple or False
self.refresh_on_change = refresh_on_change
self.selectlist = selectlist or []
self.options = list()
if display == "checkboxes":
assert multiple, "Checkbox display only supported for multiple select"
elif display == "radio":
assert not (multiple), "Radio display only supported for single select"
elif display is not None:
raise Exception(f"Unknown display type: {display}")
self.display = display
[docs] def add_option(self, label, value, selected=False):
self.options.append((str(label), value, selected))
[docs] def to_dict(self):
d = super().to_dict()
d["type"] = "select"
d["display"] = self.display
d["multiple"] = self.multiple
d["data"] = []
for value in self.selectlist:
d["data"].append({"label": value, "value": value})
d["options"] = [{"label": t[0], "value": t[1]} for t in self.options]
return d
[docs]class AddressField(BaseField):
[docs] @staticmethod
def fields():
return [
("desc", "Short address description", "Required"),
("name", "Name", ""),
("institution", "Institution", ""),
("address", "Address", ""),
("city", "City", ""),
("state", "State/Province/Region", ""),
("postal_code", "Postal Code", ""),
("country", "Country", ""),
("phone", "Phone", ""),
]
[docs] def __init__(self, name, user=None, value=None, security=None, **kwds):
super().__init__(name, value, **kwds)
self.user = user
self.security = security
[docs] def to_dict(self):
d = super().to_dict()
d["type"] = "select"
d["data"] = []
if self.user and self.security:
for a in self.user.addresses:
if not a.deleted:
d["data"].append({"label": a.desc, "value": self.security.encode_id(a.id)})
return d
[docs]class WorkflowField(BaseField):
[docs] def __init__(self, name, user=None, value=None, security=None, **kwds):
super().__init__(name, value, **kwds)
self.user = user
self.value = value
self.security = security
[docs] def to_dict(self):
d = super().to_dict()
d["type"] = "select"
d["data"] = []
if self.user and self.security:
for a in self.user.stored_workflows:
if not a.deleted:
d["data"].append({"label": a.name, "value": self.security.encode_id(a.id)})
return d
[docs]class WorkflowMappingField(BaseField):
[docs] def __init__(self, name, user=None, value=None, **kwds):
super().__init__(name, value, **kwds)
self.user = user
[docs]class HistoryField(BaseField):
[docs] def __init__(self, name, user=None, value=None, security=None, **kwds):
super().__init__(name, value, **kwds)
self.user = user
self.value = value
self.security = security
[docs] def to_dict(self):
d = super().to_dict()
d["type"] = "select"
d["data"] = [{"label": "New History", "value": "new"}]
if self.user and self.security:
for a in self.user.histories:
if not a.deleted:
d["data"].append({"label": a.name, "value": self.security.encode_id(a.id)})
return d