annotate toolfactory/galaxyxml/tool/parameters/__init__.py @ 92:6ce360759c28 draft

Uploaded
author fubar
date Thu, 19 Nov 2020 23:59:50 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
92
6ce360759c28 Uploaded
fubar
parents:
diff changeset
1 from builtins import object
6ce360759c28 Uploaded
fubar
parents:
diff changeset
2 from builtins import str
6ce360759c28 Uploaded
fubar
parents:
diff changeset
3
6ce360759c28 Uploaded
fubar
parents:
diff changeset
4 from galaxyxml import Util
6ce360759c28 Uploaded
fubar
parents:
diff changeset
5
6ce360759c28 Uploaded
fubar
parents:
diff changeset
6 from lxml import etree
6ce360759c28 Uploaded
fubar
parents:
diff changeset
7
6ce360759c28 Uploaded
fubar
parents:
diff changeset
8
6ce360759c28 Uploaded
fubar
parents:
diff changeset
9
6ce360759c28 Uploaded
fubar
parents:
diff changeset
10 class XMLParam(object):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
11 name = "node"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
12
6ce360759c28 Uploaded
fubar
parents:
diff changeset
13 def __init__(self, *args, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
14 # http://stackoverflow.com/a/12118700
6ce360759c28 Uploaded
fubar
parents:
diff changeset
15 self.children = []
6ce360759c28 Uploaded
fubar
parents:
diff changeset
16 kwargs = {k: v for k, v in list(kwargs.items()) if v is not None}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
17 kwargs = Util.coerce(kwargs, kill_lists=True)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
18 kwargs = Util.clean_kwargs(kwargs, final=True)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
19 self.node = etree.Element(self.name, **kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
20
6ce360759c28 Uploaded
fubar
parents:
diff changeset
21 def append(self, sub_node):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
22 if self.acceptable_child(sub_node):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
23 # If one of ours, they aren't etree nodes, they're custom objects
6ce360759c28 Uploaded
fubar
parents:
diff changeset
24 if issubclass(type(sub_node), XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
25 self.node.append(sub_node.node)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
26 self.children.append(sub_node)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
27 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
28 raise Exception(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
29 "Child was unacceptable to parent (%s is not appropriate for %s)" % (type(self), type(sub_node))
6ce360759c28 Uploaded
fubar
parents:
diff changeset
30 )
6ce360759c28 Uploaded
fubar
parents:
diff changeset
31 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
32 raise Exception(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
33 "Child was unacceptable to parent (%s is not appropriate for %s)" % (type(self), type(sub_node))
6ce360759c28 Uploaded
fubar
parents:
diff changeset
34 )
6ce360759c28 Uploaded
fubar
parents:
diff changeset
35
6ce360759c28 Uploaded
fubar
parents:
diff changeset
36 def validate(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
37 # Very few need validation, but some nodes we may want to have
6ce360759c28 Uploaded
fubar
parents:
diff changeset
38 # validation routines on. Should only be called when DONE.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
39 for child in self.children:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
40 # If any child fails to validate return false.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
41 if not child.validate():
6ce360759c28 Uploaded
fubar
parents:
diff changeset
42 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
43 return True
6ce360759c28 Uploaded
fubar
parents:
diff changeset
44
6ce360759c28 Uploaded
fubar
parents:
diff changeset
45 def cli(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
46 lines = []
6ce360759c28 Uploaded
fubar
parents:
diff changeset
47 for child in self.children:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
48 lines.append(child.command_line())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
49 # lines += child.command_line()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
50 return "\n".join(lines)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
51
6ce360759c28 Uploaded
fubar
parents:
diff changeset
52 def command_line(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
53 return None
6ce360759c28 Uploaded
fubar
parents:
diff changeset
54
6ce360759c28 Uploaded
fubar
parents:
diff changeset
55
6ce360759c28 Uploaded
fubar
parents:
diff changeset
56 class RequestParamTranslation(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
57 name = "request_param_translation"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
58
6ce360759c28 Uploaded
fubar
parents:
diff changeset
59 def __init__(self, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
60 self.node = etree.Element(self.name)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
61
6ce360759c28 Uploaded
fubar
parents:
diff changeset
62 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
63 return isinstance(child, RequestParamTranslation)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
64
6ce360759c28 Uploaded
fubar
parents:
diff changeset
65
6ce360759c28 Uploaded
fubar
parents:
diff changeset
66 class RequestParam(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
67 name = "request_param"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
68
6ce360759c28 Uploaded
fubar
parents:
diff changeset
69 def __init__(self, galaxy_name, remote_name, missing, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
70 # TODO: bulk copy locals into self.attr?
6ce360759c28 Uploaded
fubar
parents:
diff changeset
71 self.galaxy_name = galaxy_name
6ce360759c28 Uploaded
fubar
parents:
diff changeset
72 # http://stackoverflow.com/a/1408860
6ce360759c28 Uploaded
fubar
parents:
diff changeset
73 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
74 super(RequestParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
75
6ce360759c28 Uploaded
fubar
parents:
diff changeset
76 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
77 return isinstance(child, AppendParam) and self.galaxy_name == "URL"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
78
6ce360759c28 Uploaded
fubar
parents:
diff changeset
79
6ce360759c28 Uploaded
fubar
parents:
diff changeset
80 class AppendParam(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
81 name = "append_param"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
82
6ce360759c28 Uploaded
fubar
parents:
diff changeset
83 def __init__(self, separator="&", first_separator="?", join="=", **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
84 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
85 super(AppendParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
86
6ce360759c28 Uploaded
fubar
parents:
diff changeset
87 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
88 return isinstance(child, AppendParamValue)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
89
6ce360759c28 Uploaded
fubar
parents:
diff changeset
90
6ce360759c28 Uploaded
fubar
parents:
diff changeset
91 class AppendParamValue(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
92 name = "value"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
93
6ce360759c28 Uploaded
fubar
parents:
diff changeset
94 def __init__(self, name="_export", missing="1", **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
95 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
96 super(AppendParamValue, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
97
6ce360759c28 Uploaded
fubar
parents:
diff changeset
98 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
99 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
100
6ce360759c28 Uploaded
fubar
parents:
diff changeset
101
6ce360759c28 Uploaded
fubar
parents:
diff changeset
102 class EdamOperations(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
103 name = "edam_operations"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
104
6ce360759c28 Uploaded
fubar
parents:
diff changeset
105 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
106 return issubclass(type(child), EdamOperation)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
107
6ce360759c28 Uploaded
fubar
parents:
diff changeset
108 def has_operation(self, edam_operation):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
109 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
110 Check the presence of a given edam_operation.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
111
6ce360759c28 Uploaded
fubar
parents:
diff changeset
112 :type edam_operation: STRING
6ce360759c28 Uploaded
fubar
parents:
diff changeset
113 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
114 for operation in self.children:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
115 if operation.node.text == edam_operation:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
116 return True
6ce360759c28 Uploaded
fubar
parents:
diff changeset
117 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
118
6ce360759c28 Uploaded
fubar
parents:
diff changeset
119
6ce360759c28 Uploaded
fubar
parents:
diff changeset
120 class EdamOperation(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
121 name = "edam_operation"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
122
6ce360759c28 Uploaded
fubar
parents:
diff changeset
123 def __init__(self, value):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
124 super(EdamOperation, self).__init__()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
125 self.node.text = str(value)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
126
6ce360759c28 Uploaded
fubar
parents:
diff changeset
127
6ce360759c28 Uploaded
fubar
parents:
diff changeset
128 class EdamTopics(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
129 name = "edam_topics"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
130
6ce360759c28 Uploaded
fubar
parents:
diff changeset
131 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
132 return issubclass(type(child), EdamTopic)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
133
6ce360759c28 Uploaded
fubar
parents:
diff changeset
134 def has_topic(self, edam_topic):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
135 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
136 Check the presence of a given edam_topic.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
137
6ce360759c28 Uploaded
fubar
parents:
diff changeset
138 :type edam_topic: STRING
6ce360759c28 Uploaded
fubar
parents:
diff changeset
139 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
140 for topic in self.children:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
141 if topic.node.text == edam_topic:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
142 return True
6ce360759c28 Uploaded
fubar
parents:
diff changeset
143 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
144
6ce360759c28 Uploaded
fubar
parents:
diff changeset
145
6ce360759c28 Uploaded
fubar
parents:
diff changeset
146 class EdamTopic(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
147 name = "edam_topic"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
148
6ce360759c28 Uploaded
fubar
parents:
diff changeset
149 def __init__(self, value):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
150 super(EdamTopic, self).__init__()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
151 self.node.text = str(value)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
152
6ce360759c28 Uploaded
fubar
parents:
diff changeset
153
6ce360759c28 Uploaded
fubar
parents:
diff changeset
154 class Requirements(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
155 name = "requirements"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
156 # This bodes to be an issue -__-
6ce360759c28 Uploaded
fubar
parents:
diff changeset
157
6ce360759c28 Uploaded
fubar
parents:
diff changeset
158 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
159 return issubclass(type(child), Requirement) or issubclass(type(child), Container)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
160
6ce360759c28 Uploaded
fubar
parents:
diff changeset
161
6ce360759c28 Uploaded
fubar
parents:
diff changeset
162 class Requirement(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
163 name = "requirement"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
164
6ce360759c28 Uploaded
fubar
parents:
diff changeset
165 def __init__(self, type, value, version=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
166 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
167 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
168 passed_kwargs["version"] = params["version"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
169 passed_kwargs["type"] = params["type"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
170 super(Requirement, self).__init__(**passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
171 self.node.text = str(value)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
172
6ce360759c28 Uploaded
fubar
parents:
diff changeset
173
6ce360759c28 Uploaded
fubar
parents:
diff changeset
174 class Container(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
175 name = "container"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
176
6ce360759c28 Uploaded
fubar
parents:
diff changeset
177 def __init__(self, type, value, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
178 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
179 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
180 passed_kwargs["type"] = params["type"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
181 super(Container, self).__init__(**passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
182 self.node.text = str(value)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
183
6ce360759c28 Uploaded
fubar
parents:
diff changeset
184
6ce360759c28 Uploaded
fubar
parents:
diff changeset
185 class Configfiles(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
186 name = "configfiles"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
187
6ce360759c28 Uploaded
fubar
parents:
diff changeset
188 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
189 return issubclass(type(child), Configfile) or issubclass(type(child), ConfigfileDefaultInputs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
190
6ce360759c28 Uploaded
fubar
parents:
diff changeset
191
6ce360759c28 Uploaded
fubar
parents:
diff changeset
192 class Configfile(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
193 name = "configfile"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
194
6ce360759c28 Uploaded
fubar
parents:
diff changeset
195 def __init__(self, name, text, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
196 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
197 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
198 passed_kwargs["name"] = params["name"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
199 super(Configfile, self).__init__(**passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
200 self.node.text = etree.CDATA(str(text))
6ce360759c28 Uploaded
fubar
parents:
diff changeset
201
6ce360759c28 Uploaded
fubar
parents:
diff changeset
202
6ce360759c28 Uploaded
fubar
parents:
diff changeset
203 class ConfigfileDefaultInputs(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
204 name = "inputs"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
205
6ce360759c28 Uploaded
fubar
parents:
diff changeset
206 def __init__(self, name, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
207 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
208 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
209 passed_kwargs["name"] = params["name"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
210 super(ConfigfileDefaultInputs, self).__init__(**passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
211
6ce360759c28 Uploaded
fubar
parents:
diff changeset
212
6ce360759c28 Uploaded
fubar
parents:
diff changeset
213 class Inputs(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
214 name = "inputs"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
215 # This bodes to be an issue -__-
6ce360759c28 Uploaded
fubar
parents:
diff changeset
216
6ce360759c28 Uploaded
fubar
parents:
diff changeset
217 def __init__(self, action=None, check_value=None, method=None, target=None, nginx_upload=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
218 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
219 super(Inputs, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
220
6ce360759c28 Uploaded
fubar
parents:
diff changeset
221 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
222 return issubclass(type(child), InputParameter)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
223
6ce360759c28 Uploaded
fubar
parents:
diff changeset
224
6ce360759c28 Uploaded
fubar
parents:
diff changeset
225 class InputParameter(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
226 def __init__(self, name, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
227 # TODO: look at
6ce360759c28 Uploaded
fubar
parents:
diff changeset
228 self.mako_identifier = name
6ce360759c28 Uploaded
fubar
parents:
diff changeset
229 # We use kwargs instead of the usual locals(), so manually copy the
6ce360759c28 Uploaded
fubar
parents:
diff changeset
230 # name to kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
231 if name is not None:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
232 kwargs["name"] = name
6ce360759c28 Uploaded
fubar
parents:
diff changeset
233
6ce360759c28 Uploaded
fubar
parents:
diff changeset
234 # Handle positional parameters
6ce360759c28 Uploaded
fubar
parents:
diff changeset
235 if "positional" in kwargs and kwargs["positional"]:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
236 self.positional = True
6ce360759c28 Uploaded
fubar
parents:
diff changeset
237 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
238 self.positional = False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
239
6ce360759c28 Uploaded
fubar
parents:
diff changeset
240 if "num_dashes" in kwargs:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
241 self.num_dashes = kwargs["num_dashes"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
242 del kwargs["num_dashes"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
243 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
244 self.num_dashes = 0
6ce360759c28 Uploaded
fubar
parents:
diff changeset
245
6ce360759c28 Uploaded
fubar
parents:
diff changeset
246 self.space_between_arg = " "
6ce360759c28 Uploaded
fubar
parents:
diff changeset
247
6ce360759c28 Uploaded
fubar
parents:
diff changeset
248 # Not sure about this :(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
249 # https://wiki.galaxyproject.org/Tools/BestPractices#Parameter_help
6ce360759c28 Uploaded
fubar
parents:
diff changeset
250 if "label" in kwargs:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
251 # TODO: replace with positional attribute
6ce360759c28 Uploaded
fubar
parents:
diff changeset
252 if len(self.flag()) > 0:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
253 if kwargs["label"] is None:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
254 kwargs["label"] = "Author did not provide help for this parameter... "
6ce360759c28 Uploaded
fubar
parents:
diff changeset
255 if not self.positional:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
256 kwargs["argument"] = self.flag()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
257
6ce360759c28 Uploaded
fubar
parents:
diff changeset
258 super(InputParameter, self).__init__(**kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
259
6ce360759c28 Uploaded
fubar
parents:
diff changeset
260 def command_line(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
261 before = self.command_line_before()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
262 cli = self.command_line_actual()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
263 after = self.command_line_after()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
264
6ce360759c28 Uploaded
fubar
parents:
diff changeset
265 complete = [x for x in (before, cli, after) if x is not None]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
266 return "\n".join(complete)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
267
6ce360759c28 Uploaded
fubar
parents:
diff changeset
268 def command_line_before(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
269 try:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
270 return self.command_line_before_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
271 except Exception:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
272 return None
6ce360759c28 Uploaded
fubar
parents:
diff changeset
273
6ce360759c28 Uploaded
fubar
parents:
diff changeset
274 def command_line_after(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
275 try:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
276 return self.command_line_after_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
277 except Exception:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
278 return None
6ce360759c28 Uploaded
fubar
parents:
diff changeset
279
6ce360759c28 Uploaded
fubar
parents:
diff changeset
280 def command_line_actual(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
281 try:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
282 return self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
283 except Exception:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
284 if self.positional:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
285 return self.mako_name()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
286 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
287 return "%s%s%s" % (self.flag(), self.space_between_arg, self.mako_name())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
288
6ce360759c28 Uploaded
fubar
parents:
diff changeset
289 def mako_name(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
290 # TODO: enhance logic to check up parents for things like
6ce360759c28 Uploaded
fubar
parents:
diff changeset
291 # repeat>condotion>param
6ce360759c28 Uploaded
fubar
parents:
diff changeset
292 return "$" + self.mako_identifier
6ce360759c28 Uploaded
fubar
parents:
diff changeset
293
6ce360759c28 Uploaded
fubar
parents:
diff changeset
294 def flag(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
295 flag = "-" * self.num_dashes
6ce360759c28 Uploaded
fubar
parents:
diff changeset
296 return flag + self.mako_identifier
6ce360759c28 Uploaded
fubar
parents:
diff changeset
297
6ce360759c28 Uploaded
fubar
parents:
diff changeset
298
6ce360759c28 Uploaded
fubar
parents:
diff changeset
299 class Section(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
300 name = "section"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
301
6ce360759c28 Uploaded
fubar
parents:
diff changeset
302 def __init__(self, name, title, expanded=None, help=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
303 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
304 super(Section, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
305
6ce360759c28 Uploaded
fubar
parents:
diff changeset
306 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
307 return issubclass(type(child), InputParameter)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
308
6ce360759c28 Uploaded
fubar
parents:
diff changeset
309
6ce360759c28 Uploaded
fubar
parents:
diff changeset
310 class Repeat(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
311 name = "repeat"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
312
6ce360759c28 Uploaded
fubar
parents:
diff changeset
313 def __init__(self, name, title, min=None, max=None, default=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
314 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
315 # Allow overriding
6ce360759c28 Uploaded
fubar
parents:
diff changeset
316 self.command_line_before_override = "#for $i in $%s:" % name
6ce360759c28 Uploaded
fubar
parents:
diff changeset
317 self.command_line_after_override = "#end for"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
318 # self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
319 super(Repeat, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
320
6ce360759c28 Uploaded
fubar
parents:
diff changeset
321 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
322 return issubclass(type(child), InputParameter)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
323
6ce360759c28 Uploaded
fubar
parents:
diff changeset
324 def command_line_actual(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
325 if hasattr(self, "command_line_override"):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
326 return self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
327 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
328 return "%s" % self.mako_name()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
329
6ce360759c28 Uploaded
fubar
parents:
diff changeset
330
6ce360759c28 Uploaded
fubar
parents:
diff changeset
331 class Conditional(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
332 name = "conditional"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
333
6ce360759c28 Uploaded
fubar
parents:
diff changeset
334 def __init__(self, name, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
335 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
336 super(Conditional, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
337
6ce360759c28 Uploaded
fubar
parents:
diff changeset
338 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
339 return issubclass(type(child), InputParameter) and not isinstance(child, Conditional)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
340
6ce360759c28 Uploaded
fubar
parents:
diff changeset
341 def validate(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
342 # Find a way to check if one of the kids is a WHEN
6ce360759c28 Uploaded
fubar
parents:
diff changeset
343 pass
6ce360759c28 Uploaded
fubar
parents:
diff changeset
344
6ce360759c28 Uploaded
fubar
parents:
diff changeset
345
6ce360759c28 Uploaded
fubar
parents:
diff changeset
346 class When(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
347 name = "when"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
348
6ce360759c28 Uploaded
fubar
parents:
diff changeset
349 def __init__(self, value):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
350 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
351 super(When, self).__init__(None, **params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
352
6ce360759c28 Uploaded
fubar
parents:
diff changeset
353 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
354 return issubclass(type(child), InputParameter)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
355
6ce360759c28 Uploaded
fubar
parents:
diff changeset
356
6ce360759c28 Uploaded
fubar
parents:
diff changeset
357 class Param(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
358 name = "param"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
359
6ce360759c28 Uploaded
fubar
parents:
diff changeset
360 # This...isn't really valid as-is, and shouldn't be used.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
361 def __init__(self, name, optional=None, label=None, help=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
362 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
363 params["type"] = self.type
6ce360759c28 Uploaded
fubar
parents:
diff changeset
364 super(Param, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
365
6ce360759c28 Uploaded
fubar
parents:
diff changeset
366 if type(self) == Param:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
367 raise Exception("Param class is not an actual parameter type, use a subclass of Param")
6ce360759c28 Uploaded
fubar
parents:
diff changeset
368
6ce360759c28 Uploaded
fubar
parents:
diff changeset
369 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
370 return issubclass(type(child, InputParameter) or isinstance(child), ValidatorParam)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
371
6ce360759c28 Uploaded
fubar
parents:
diff changeset
372
6ce360759c28 Uploaded
fubar
parents:
diff changeset
373 class TextParam(Param):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
374 type = "text"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
375
6ce360759c28 Uploaded
fubar
parents:
diff changeset
376 def __init__(self, name, optional=None, label=None, help=None, value=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
377 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
378 super(TextParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
379
6ce360759c28 Uploaded
fubar
parents:
diff changeset
380 def command_line_actual(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
381 try:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
382 return self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
383 except Exception:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
384 if self.positional:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
385 return self.mako_name()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
386 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
387 return f"{self.flag}{self.space_between_arg}'{self.mako_name()}'"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
388
6ce360759c28 Uploaded
fubar
parents:
diff changeset
389
6ce360759c28 Uploaded
fubar
parents:
diff changeset
390 class _NumericParam(Param):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
391 def __init__(self, name, value, optional=None, label=None, help=None, min=None, max=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
392 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
393 super(_NumericParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
394
6ce360759c28 Uploaded
fubar
parents:
diff changeset
395
6ce360759c28 Uploaded
fubar
parents:
diff changeset
396 class IntegerParam(_NumericParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
397 type = "integer"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
398
6ce360759c28 Uploaded
fubar
parents:
diff changeset
399
6ce360759c28 Uploaded
fubar
parents:
diff changeset
400 class FloatParam(_NumericParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
401 type = "float"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
402
6ce360759c28 Uploaded
fubar
parents:
diff changeset
403
6ce360759c28 Uploaded
fubar
parents:
diff changeset
404 class BooleanParam(Param):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
405 type = "boolean"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
406
6ce360759c28 Uploaded
fubar
parents:
diff changeset
407 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
408 self, name, optional=None, label=None, help=None, checked=False, truevalue=None, falsevalue=None, **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
409 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
410 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
411
6ce360759c28 Uploaded
fubar
parents:
diff changeset
412 super(BooleanParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
413 if truevalue is None:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
414 # If truevalue and falsevalue are None, then we use "auto", the IUC
6ce360759c28 Uploaded
fubar
parents:
diff changeset
415 # recommended default.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
416 #
6ce360759c28 Uploaded
fubar
parents:
diff changeset
417 # truevalue is set to the parameter's value, and falsevalue is not.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
418 #
6ce360759c28 Uploaded
fubar
parents:
diff changeset
419 # Unfortunately, mako_identifier is set as a result of the super
6ce360759c28 Uploaded
fubar
parents:
diff changeset
420 # call, which we shouldn't call TWICE, so we'll just hack around this :(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
421 # params['truevalue'] = '%s%s' % (self.)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
422 self.node.attrib["truevalue"] = self.flag()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
423
6ce360759c28 Uploaded
fubar
parents:
diff changeset
424 if falsevalue is None:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
425 self.node.attrib["falsevalue"] = ""
6ce360759c28 Uploaded
fubar
parents:
diff changeset
426
6ce360759c28 Uploaded
fubar
parents:
diff changeset
427 def command_line_actual(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
428 if hasattr(self, "command_line_override"):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
429 return self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
430 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
431 return "%s" % self.mako_name()
6ce360759c28 Uploaded
fubar
parents:
diff changeset
432
6ce360759c28 Uploaded
fubar
parents:
diff changeset
433
6ce360759c28 Uploaded
fubar
parents:
diff changeset
434 class DataParam(Param):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
435 type = "data"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
436
6ce360759c28 Uploaded
fubar
parents:
diff changeset
437 def __init__(self, name, optional=None, label=None, help=None, format=None, multiple=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
438 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
439 super(DataParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
440
6ce360759c28 Uploaded
fubar
parents:
diff changeset
441
6ce360759c28 Uploaded
fubar
parents:
diff changeset
442 class SelectParam(Param):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
443 type = "select"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
444
6ce360759c28 Uploaded
fubar
parents:
diff changeset
445 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
446 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
447 name,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
448 optional=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
449 label=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
450 help=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
451 data_ref=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
452 display=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
453 multiple=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
454 options=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
455 default=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
456 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
457 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
458 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
459 del params["options"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
460 del params["default"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
461
6ce360759c28 Uploaded
fubar
parents:
diff changeset
462 super(SelectParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
463
6ce360759c28 Uploaded
fubar
parents:
diff changeset
464 if options is not None and default is not None:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
465 if default not in options:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
466 raise Exception("Specified a default that isn't in options")
6ce360759c28 Uploaded
fubar
parents:
diff changeset
467
6ce360759c28 Uploaded
fubar
parents:
diff changeset
468 if options:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
469 for k, v in list(sorted(options.items())):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
470 selected = k == default
6ce360759c28 Uploaded
fubar
parents:
diff changeset
471 self.append(SelectOption(k, v, selected=selected))
6ce360759c28 Uploaded
fubar
parents:
diff changeset
472
6ce360759c28 Uploaded
fubar
parents:
diff changeset
473 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
474 return issubclass(type(child), SelectOption) or issubclass(type(child), Options)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
475
6ce360759c28 Uploaded
fubar
parents:
diff changeset
476
6ce360759c28 Uploaded
fubar
parents:
diff changeset
477 class SelectOption(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
478 name = "option"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
479
6ce360759c28 Uploaded
fubar
parents:
diff changeset
480 def __init__(self, value, text, selected=False, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
481 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
482
6ce360759c28 Uploaded
fubar
parents:
diff changeset
483 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
484 if selected:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
485 passed_kwargs["selected"] = "true"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
486 passed_kwargs["value"] = params["value"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
487
6ce360759c28 Uploaded
fubar
parents:
diff changeset
488 super(SelectOption, self).__init__(None, **passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
489 self.node.text = str(text)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
490
6ce360759c28 Uploaded
fubar
parents:
diff changeset
491
6ce360759c28 Uploaded
fubar
parents:
diff changeset
492 class Options(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
493 name = "options"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
494
6ce360759c28 Uploaded
fubar
parents:
diff changeset
495 def __init__(self, from_dataset=None, from_file=None, from_data_table=None, from_parameter=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
496 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
497 super(Options, self).__init__(None, **params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
498
6ce360759c28 Uploaded
fubar
parents:
diff changeset
499 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
500 return issubclass(type(child), Column) or issubclass(type(child), Filter)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
501
6ce360759c28 Uploaded
fubar
parents:
diff changeset
502
6ce360759c28 Uploaded
fubar
parents:
diff changeset
503 class Column(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
504 name = "column"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
505
6ce360759c28 Uploaded
fubar
parents:
diff changeset
506 def __init__(self, name, index, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
507 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
508 super(Column, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
509
6ce360759c28 Uploaded
fubar
parents:
diff changeset
510
6ce360759c28 Uploaded
fubar
parents:
diff changeset
511 class Filter(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
512 name = "filter"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
513
6ce360759c28 Uploaded
fubar
parents:
diff changeset
514 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
515 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
516 type,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
517 column=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
518 name=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
519 ref=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
520 key=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
521 multiple=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
522 separator=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
523 keep=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
524 value=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
525 ref_attribute=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
526 index=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
527 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
528 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
529 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
530 super(Filter, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
531
6ce360759c28 Uploaded
fubar
parents:
diff changeset
532
6ce360759c28 Uploaded
fubar
parents:
diff changeset
533 class ValidatorParam(InputParameter):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
534 name = "validator"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
535
6ce360759c28 Uploaded
fubar
parents:
diff changeset
536 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
537 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
538 type,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
539 message=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
540 filename=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
541 metadata_name=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
542 metadata_column=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
543 line_startswith=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
544 min=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
545 max=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
546 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
547 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
548 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
549 super(ValidatorParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
550
6ce360759c28 Uploaded
fubar
parents:
diff changeset
551
6ce360759c28 Uploaded
fubar
parents:
diff changeset
552 class Outputs(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
553 name = "outputs"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
554
6ce360759c28 Uploaded
fubar
parents:
diff changeset
555 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
556 return isinstance(child, OutputData) or isinstance(child, OutputCollection)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
557
6ce360759c28 Uploaded
fubar
parents:
diff changeset
558
6ce360759c28 Uploaded
fubar
parents:
diff changeset
559 class OutputData(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
560 """Copypasta of InputParameter, needs work
6ce360759c28 Uploaded
fubar
parents:
diff changeset
561 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
562
6ce360759c28 Uploaded
fubar
parents:
diff changeset
563 name = "data"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
564
6ce360759c28 Uploaded
fubar
parents:
diff changeset
565 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
566 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
567 name,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
568 format,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
569 format_source=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
570 metadata_source=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
571 label=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
572 from_work_dir=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
573 hidden=False,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
574 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
575 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
576 # TODO: validate format_source&metadata_source against something in the
6ce360759c28 Uploaded
fubar
parents:
diff changeset
577 # XMLParam children tree.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
578 self.mako_identifier = name
6ce360759c28 Uploaded
fubar
parents:
diff changeset
579 if "num_dashes" in kwargs:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
580 self.num_dashes = kwargs["num_dashes"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
581 del kwargs["num_dashes"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
582 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
583 self.num_dashes = 0
6ce360759c28 Uploaded
fubar
parents:
diff changeset
584 self.space_between_arg = " "
6ce360759c28 Uploaded
fubar
parents:
diff changeset
585 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
586
6ce360759c28 Uploaded
fubar
parents:
diff changeset
587 super(OutputData, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
588
6ce360759c28 Uploaded
fubar
parents:
diff changeset
589 def command_line(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
590 if hasattr(self, "command_line_override"):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
591 return self.command_line_override
6ce360759c28 Uploaded
fubar
parents:
diff changeset
592 else:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
593 return "%s%s%s" % (self.flag(), self.space_between_arg, self.mako_name())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
594
6ce360759c28 Uploaded
fubar
parents:
diff changeset
595 def mako_name(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
596 return "$" + self.mako_identifier
6ce360759c28 Uploaded
fubar
parents:
diff changeset
597
6ce360759c28 Uploaded
fubar
parents:
diff changeset
598 def flag(self):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
599 flag = "-" * self.num_dashes
6ce360759c28 Uploaded
fubar
parents:
diff changeset
600 return flag + self.mako_identifier
6ce360759c28 Uploaded
fubar
parents:
diff changeset
601
6ce360759c28 Uploaded
fubar
parents:
diff changeset
602 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
603 return isinstance(child, OutputFilter) or isinstance(child, ChangeFormat) or isinstance(child, DiscoverDatasets)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
604
6ce360759c28 Uploaded
fubar
parents:
diff changeset
605
6ce360759c28 Uploaded
fubar
parents:
diff changeset
606 class OutputFilter(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
607 name = "filter"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
608
6ce360759c28 Uploaded
fubar
parents:
diff changeset
609 def __init__(self, text, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
610 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
611 del params["text"]
6ce360759c28 Uploaded
fubar
parents:
diff changeset
612 super(OutputFilter, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
613 self.node.text = text
6ce360759c28 Uploaded
fubar
parents:
diff changeset
614
6ce360759c28 Uploaded
fubar
parents:
diff changeset
615 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
616 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
617
6ce360759c28 Uploaded
fubar
parents:
diff changeset
618
6ce360759c28 Uploaded
fubar
parents:
diff changeset
619 class ChangeFormat(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
620 name = "change_format"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
621
6ce360759c28 Uploaded
fubar
parents:
diff changeset
622 def __init__(self, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
623 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
624 super(ChangeFormat, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
625
6ce360759c28 Uploaded
fubar
parents:
diff changeset
626 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
627 return isinstance(child, ChangeFormatWhen)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
628
6ce360759c28 Uploaded
fubar
parents:
diff changeset
629
6ce360759c28 Uploaded
fubar
parents:
diff changeset
630 class ChangeFormatWhen(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
631 name = "when"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
632
6ce360759c28 Uploaded
fubar
parents:
diff changeset
633 def __init__(self, input, format, value, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
634 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
635 super(ChangeFormatWhen, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
636
6ce360759c28 Uploaded
fubar
parents:
diff changeset
637 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
638 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
639
6ce360759c28 Uploaded
fubar
parents:
diff changeset
640
6ce360759c28 Uploaded
fubar
parents:
diff changeset
641 class OutputCollection(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
642 name = "collection"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
643
6ce360759c28 Uploaded
fubar
parents:
diff changeset
644 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
645 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
646 name,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
647 type=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
648 label=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
649 format_source=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
650 type_source=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
651 structured_like=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
652 inherit_format=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
653 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
654 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
655 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
656 super(OutputCollection, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
657
6ce360759c28 Uploaded
fubar
parents:
diff changeset
658 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
659 return isinstance(child, OutputData) or isinstance(child, OutputFilter) or isinstance(child, DiscoverDatasets)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
660
6ce360759c28 Uploaded
fubar
parents:
diff changeset
661
6ce360759c28 Uploaded
fubar
parents:
diff changeset
662 class DiscoverDatasets(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
663 name = "discover_datasets"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
664
6ce360759c28 Uploaded
fubar
parents:
diff changeset
665 def __init__(self, pattern, directory=None, format=None, ext=None, visible=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
666 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
667 super(DiscoverDatasets, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
668
6ce360759c28 Uploaded
fubar
parents:
diff changeset
669
6ce360759c28 Uploaded
fubar
parents:
diff changeset
670 class Tests(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
671 name = "tests"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
672
6ce360759c28 Uploaded
fubar
parents:
diff changeset
673 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
674 return issubclass(type(child), Test)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
675
6ce360759c28 Uploaded
fubar
parents:
diff changeset
676
6ce360759c28 Uploaded
fubar
parents:
diff changeset
677 class Test(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
678 name = "test"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
679
6ce360759c28 Uploaded
fubar
parents:
diff changeset
680 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
681 return isinstance(child, TestParam) or isinstance(child, TestOutput)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
682
6ce360759c28 Uploaded
fubar
parents:
diff changeset
683
6ce360759c28 Uploaded
fubar
parents:
diff changeset
684 class TestParam(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
685 name = "param"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
686
6ce360759c28 Uploaded
fubar
parents:
diff changeset
687 def __init__(self, name, value=None, ftype=None, dbkey=None, **kwargs):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
688 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
689 super(TestParam, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
690
6ce360759c28 Uploaded
fubar
parents:
diff changeset
691
6ce360759c28 Uploaded
fubar
parents:
diff changeset
692 class TestOutput(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
693 name = "output"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
694
6ce360759c28 Uploaded
fubar
parents:
diff changeset
695 def __init__(
6ce360759c28 Uploaded
fubar
parents:
diff changeset
696 self,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
697 name=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
698 file=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
699 ftype=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
700 sort=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
701 value=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
702 md5=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
703 checksum=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
704 compare=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
705 lines_diff=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
706 delta=None,
6ce360759c28 Uploaded
fubar
parents:
diff changeset
707 **kwargs
6ce360759c28 Uploaded
fubar
parents:
diff changeset
708 ):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
709 params = Util.clean_kwargs(locals().copy())
6ce360759c28 Uploaded
fubar
parents:
diff changeset
710 super(TestOutput, self).__init__(**params)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
711
6ce360759c28 Uploaded
fubar
parents:
diff changeset
712
6ce360759c28 Uploaded
fubar
parents:
diff changeset
713 class Citations(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
714 name = "citations"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
715
6ce360759c28 Uploaded
fubar
parents:
diff changeset
716 def acceptable_child(self, child):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
717 return issubclass(type(child), Citation)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
718
6ce360759c28 Uploaded
fubar
parents:
diff changeset
719 def has_citation(self, type, value):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
720 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
721 Check the presence of a given citation.
6ce360759c28 Uploaded
fubar
parents:
diff changeset
722
6ce360759c28 Uploaded
fubar
parents:
diff changeset
723 :type type: STRING
6ce360759c28 Uploaded
fubar
parents:
diff changeset
724 :type value: STRING
6ce360759c28 Uploaded
fubar
parents:
diff changeset
725 """
6ce360759c28 Uploaded
fubar
parents:
diff changeset
726 for citation in self.children:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
727 if citation.node.attrib["type"] == type and citation.node.text == value:
6ce360759c28 Uploaded
fubar
parents:
diff changeset
728 return True
6ce360759c28 Uploaded
fubar
parents:
diff changeset
729 return False
6ce360759c28 Uploaded
fubar
parents:
diff changeset
730
6ce360759c28 Uploaded
fubar
parents:
diff changeset
731
6ce360759c28 Uploaded
fubar
parents:
diff changeset
732 class Citation(XMLParam):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
733 name = "citation"
6ce360759c28 Uploaded
fubar
parents:
diff changeset
734
6ce360759c28 Uploaded
fubar
parents:
diff changeset
735 def __init__(self, type, value):
6ce360759c28 Uploaded
fubar
parents:
diff changeset
736 passed_kwargs = {}
6ce360759c28 Uploaded
fubar
parents:
diff changeset
737 passed_kwargs["type"] = type
6ce360759c28 Uploaded
fubar
parents:
diff changeset
738 super(Citation, self).__init__(**passed_kwargs)
6ce360759c28 Uploaded
fubar
parents:
diff changeset
739 self.node.text = str(value)