comparison env/lib/python3.9/site-packages/galaxy/util/form_builder.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 """
2 Classes for generating HTML forms
3 """
4
5 import logging
6
7 from galaxy.util import (
8 asbool
9 )
10
11 log = logging.getLogger(__name__)
12
13
14 class BaseField:
15 def __init__(self, name, value=None, label=None, **kwds):
16 self.name = name
17 self.label = label
18 self.value = value
19 self.disabled = kwds.get('disabled', False)
20 if 'optional' in kwds:
21 self.optional = asbool(kwds.get('optional'))
22 else:
23 self.optional = kwds.get('required', 'optional') == 'optional'
24 self.help = kwds.get('helptext')
25
26 def to_dict(self):
27 return {
28 'name' : self.name,
29 'label' : self.label,
30 'disabled' : self.disabled,
31 'optional' : self.optional,
32 'value' : self.value,
33 'help' : self.help
34 }
35
36
37 class TextField(BaseField):
38 """
39 A standard text input box.
40 """
41 def to_dict(self):
42 d = super().to_dict()
43 d['type'] = 'text'
44 return d
45
46
47 class PasswordField(BaseField):
48 """
49 A password input box. text appears as "******"
50 """
51 def to_dict(self):
52 d = super().to_dict()
53 d['type'] = 'password'
54 return d
55
56
57 class TextArea(BaseField):
58 """
59 A standard text area box.
60 """
61 def to_dict(self):
62 d = super().to_dict()
63 d['type'] = 'text'
64 d['area'] = True
65 return d
66
67
68 class CheckboxField(BaseField):
69 """
70 A checkbox (boolean input)
71 """
72 @staticmethod
73 def is_checked(value):
74 if value in [True, "True", "true"]:
75 return True
76 return False
77
78 def to_dict(self):
79 d = super().to_dict()
80 d['type'] = 'boolean'
81 return d
82
83
84 class SelectField(BaseField):
85 """
86 A select field.
87 """
88
89 def __init__(self, name, multiple=None, display=None, field_id=None, value=None, selectlist=None, refresh_on_change=False, **kwds):
90 super().__init__(name, value, **kwds)
91 self.field_id = field_id
92 self.multiple = multiple or False
93 self.refresh_on_change = refresh_on_change
94 self.selectlist = selectlist or []
95 self.options = list()
96 if display == "checkboxes":
97 assert multiple, "Checkbox display only supported for multiple select"
98 elif display == "radio":
99 assert not(multiple), "Radio display only supported for single select"
100 elif display is not None:
101 raise Exception("Unknown display type: %s" % display)
102 self.display = display
103
104 def add_option(self, text, value, selected=False):
105 self.options.append((text, value, selected))
106
107 def to_dict(self):
108 d = super().to_dict()
109 d['type'] = 'select'
110 d['display'] = self.display
111 d['multiple'] = self.multiple
112 d['data'] = []
113 for value in self.selectlist:
114 d['data'].append({'label': value, 'value': value})
115 d['options'] = [{'label': t[0], 'value': t[1]} for t in self.options]
116 return d
117
118
119 class AddressField(BaseField):
120 @staticmethod
121 def fields():
122 return [("desc", "Short address description", "Required"),
123 ("name", "Name", ""),
124 ("institution", "Institution", ""),
125 ("address", "Address", ""),
126 ("city", "City", ""),
127 ("state", "State/Province/Region", ""),
128 ("postal_code", "Postal Code", ""),
129 ("country", "Country", ""),
130 ("phone", "Phone", "")]
131
132 def __init__(self, name, user=None, value=None, security=None, **kwds):
133 super().__init__(name, value, **kwds)
134 self.user = user
135 self.security = security
136
137 def to_dict(self):
138 d = super().to_dict()
139 d['type'] = 'select'
140 d['data'] = []
141 if self.user and self.security:
142 for a in self.user.addresses:
143 if not a.deleted:
144 d['data'].append({'label': a.desc, 'value': self.security.encode_id(a.id)})
145 return d
146
147
148 class WorkflowField(BaseField):
149 def __init__(self, name, user=None, value=None, security=None, **kwds):
150 super().__init__(name, value, **kwds)
151 self.user = user
152 self.value = value
153 self.security = security
154
155 def to_dict(self):
156 d = super().to_dict()
157 d['type'] = 'select'
158 d['data'] = []
159 if self.user and self.security:
160 for a in self.user.stored_workflows:
161 if not a.deleted:
162 d['data'].append({'label': a.name, 'value': self.security.encode_id(a.id)})
163 return d
164
165
166 class WorkflowMappingField(BaseField):
167 def __init__(self, name, user=None, value=None, **kwds):
168 super().__init__(name, value, **kwds)
169 self.user = user
170
171
172 class HistoryField(BaseField):
173 def __init__(self, name, user=None, value=None, security=None, **kwds):
174 super().__init__(name, value, **kwds)
175 self.user = user
176 self.value = value
177 self.security = security
178
179 def to_dict(self):
180 d = super().to_dict()
181 d['type'] = 'select'
182 d['data'] = [{'label': 'New History', 'value': 'new'}]
183 if self.user and self.security:
184 for a in self.user.histories:
185 if not a.deleted:
186 d['data'].append({'label': a.name, 'value': self.security.encode_id(a.id)})
187 return d
188
189
190 def get_suite():
191 """Get unittest suite for this module"""
192 import doctest
193 import sys
194 return doctest.DocTestSuite(sys.modules[__name__])