diff planemo/lib/python3.7/site-packages/galaxy/util/form_builder.py @ 1:56ad4e20f292 draft

"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
author guerler
date Fri, 31 Jul 2020 00:32:28 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/planemo/lib/python3.7/site-packages/galaxy/util/form_builder.py	Fri Jul 31 00:32:28 2020 -0400
@@ -0,0 +1,196 @@
+"""
+Classes for generating HTML forms
+"""
+from __future__ import absolute_import
+from __future__ import print_function
+
+import logging
+
+from galaxy.util import (
+    asbool
+)
+
+log = logging.getLogger(__name__)
+
+
+class BaseField(object):
+    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')
+
+    def to_dict(self):
+        return {
+            'name'      : self.name,
+            'label'     : self.label,
+            'disabled'  : self.disabled,
+            'optional'  : self.optional,
+            'value'     : self.value,
+            'help'      : self.help
+        }
+
+
+class TextField(BaseField):
+    """
+    A standard text input box.
+    """
+    def to_dict(self):
+        d = super(TextField, self).to_dict()
+        d['type'] = 'text'
+        return d
+
+
+class PasswordField(BaseField):
+    """
+    A password input box. text appears as "******"
+    """
+    def to_dict(self):
+        d = super(PasswordField, self).to_dict()
+        d['type'] = 'password'
+        return d
+
+
+class TextArea(BaseField):
+    """
+    A standard text area box.
+    """
+    def to_dict(self):
+        d = super(TextArea, self).to_dict()
+        d['type'] = 'text'
+        d['area'] = True
+        return d
+
+
+class CheckboxField(BaseField):
+    """
+    A checkbox (boolean input)
+    """
+    @staticmethod
+    def is_checked(value):
+        if value in [True, "True", "true"]:
+            return True
+        return False
+
+    def to_dict(self):
+        d = super(CheckboxField, self).to_dict()
+        d['type'] = 'boolean'
+        return d
+
+
+class SelectField(BaseField):
+    """
+    A select field.
+    """
+
+    def __init__(self, name, multiple=None, display=None, field_id=None, value=None, selectlist=None, refresh_on_change=False, **kwds):
+        super(SelectField, self).__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("Unknown display type: %s" % display)
+        self.display = display
+
+    def add_option(self, text, value, selected=False):
+        self.options.append((text, value, selected))
+
+    def to_dict(self):
+        d = super(SelectField, self).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
+
+
+class AddressField(BaseField):
+    @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", "")]
+
+    def __init__(self, name, user=None, value=None, security=None, **kwds):
+        super(AddressField, self).__init__(name, value, **kwds)
+        self.user = user
+        self.security = security
+
+    def to_dict(self):
+        d = super(AddressField, self).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
+
+
+class WorkflowField(BaseField):
+    def __init__(self, name, user=None, value=None, security=None, **kwds):
+        super(WorkflowField, self).__init__(name, value, **kwds)
+        self.user = user
+        self.value = value
+        self.security = security
+
+    def to_dict(self):
+        d = super(WorkflowField, self).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
+
+
+class WorkflowMappingField(BaseField):
+    def __init__(self, name, user=None, value=None, **kwds):
+        super(WorkflowMappingField, self).__init__(name, value, **kwds)
+        self.user = user
+
+
+class HistoryField(BaseField):
+    def __init__(self, name, user=None, value=None, security=None, **kwds):
+        super(HistoryField, self).__init__(name, value, **kwds)
+        self.user = user
+        self.value = value
+        self.security = security
+
+    def to_dict(self):
+        d = super(HistoryField, self).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
+
+
+def get_suite():
+    """Get unittest suite for this module"""
+    import doctest
+    import sys
+    return doctest.DocTestSuite(sys.modules[__name__])