annotate toolfactory/galaxyxml/tool/parameters/__init__.py @ 136:94f5560de46d draft

Uploaded
author fubar
date Tue, 13 Apr 2021 00:35:36 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
136
94f5560de46d Uploaded
fubar
parents:
diff changeset
1 import logging
94f5560de46d Uploaded
fubar
parents:
diff changeset
2 from builtins import (
94f5560de46d Uploaded
fubar
parents:
diff changeset
3 object,
94f5560de46d Uploaded
fubar
parents:
diff changeset
4 str
94f5560de46d Uploaded
fubar
parents:
diff changeset
5 )
94f5560de46d Uploaded
fubar
parents:
diff changeset
6
94f5560de46d Uploaded
fubar
parents:
diff changeset
7 from galaxy.tool_util.parser.util import _parse_name
94f5560de46d Uploaded
fubar
parents:
diff changeset
8
94f5560de46d Uploaded
fubar
parents:
diff changeset
9 from galaxyxml import Util
94f5560de46d Uploaded
fubar
parents:
diff changeset
10
94f5560de46d Uploaded
fubar
parents:
diff changeset
11 from lxml import etree
94f5560de46d Uploaded
fubar
parents:
diff changeset
12
94f5560de46d Uploaded
fubar
parents:
diff changeset
13 logging.basicConfig(level=logging.INFO)
94f5560de46d Uploaded
fubar
parents:
diff changeset
14 logger = logging.getLogger(__name__)
94f5560de46d Uploaded
fubar
parents:
diff changeset
15
94f5560de46d Uploaded
fubar
parents:
diff changeset
16
94f5560de46d Uploaded
fubar
parents:
diff changeset
17 class XMLParam(object):
94f5560de46d Uploaded
fubar
parents:
diff changeset
18 name = "node"
94f5560de46d Uploaded
fubar
parents:
diff changeset
19
94f5560de46d Uploaded
fubar
parents:
diff changeset
20 def __init__(self, *args, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
21 # http://stackoverflow.com/a/12118700
94f5560de46d Uploaded
fubar
parents:
diff changeset
22 self.children = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
23 self.parent = None
94f5560de46d Uploaded
fubar
parents:
diff changeset
24 kwargs = {k: v for k, v in list(kwargs.items()) if v is not None}
94f5560de46d Uploaded
fubar
parents:
diff changeset
25 kwargs = Util.coerce(kwargs, kill_lists=True)
94f5560de46d Uploaded
fubar
parents:
diff changeset
26 kwargs = Util.clean_kwargs(kwargs, final=True)
94f5560de46d Uploaded
fubar
parents:
diff changeset
27 self.node = etree.Element(self.name, **kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
28
94f5560de46d Uploaded
fubar
parents:
diff changeset
29 def __getattr__(self, name):
94f5560de46d Uploaded
fubar
parents:
diff changeset
30 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
31 Allow to access keys of the node "attributes" (i.e. the dict
94f5560de46d Uploaded
fubar
parents:
diff changeset
32 self.node.attrib) as attributes.
94f5560de46d Uploaded
fubar
parents:
diff changeset
33 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
34 # https://stackoverflow.com/questions/47299243/recursionerror-when-python-copy-deepcopy
94f5560de46d Uploaded
fubar
parents:
diff changeset
35 if name == "__setstate__":
94f5560de46d Uploaded
fubar
parents:
diff changeset
36 raise AttributeError(name)
94f5560de46d Uploaded
fubar
parents:
diff changeset
37 try:
94f5560de46d Uploaded
fubar
parents:
diff changeset
38 return self.node.attrib[name]
94f5560de46d Uploaded
fubar
parents:
diff changeset
39 except KeyError:
94f5560de46d Uploaded
fubar
parents:
diff changeset
40 raise AttributeError(name)
94f5560de46d Uploaded
fubar
parents:
diff changeset
41
94f5560de46d Uploaded
fubar
parents:
diff changeset
42 def append(self, sub_node):
94f5560de46d Uploaded
fubar
parents:
diff changeset
43 if self.acceptable_child(sub_node):
94f5560de46d Uploaded
fubar
parents:
diff changeset
44 # If one of ours, they aren't etree nodes, they're custom objects
94f5560de46d Uploaded
fubar
parents:
diff changeset
45 if issubclass(type(sub_node), XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
46 self.node.append(sub_node.node)
94f5560de46d Uploaded
fubar
parents:
diff changeset
47 self.children.append(sub_node)
94f5560de46d Uploaded
fubar
parents:
diff changeset
48 self.children[-1].parent = self
94f5560de46d Uploaded
fubar
parents:
diff changeset
49 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
50 raise Exception(
94f5560de46d Uploaded
fubar
parents:
diff changeset
51 "Child was unacceptable to parent (%s is not appropriate for %s)" % (type(self), type(sub_node))
94f5560de46d Uploaded
fubar
parents:
diff changeset
52 )
94f5560de46d Uploaded
fubar
parents:
diff changeset
53 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
54 raise Exception(
94f5560de46d Uploaded
fubar
parents:
diff changeset
55 "Child was unacceptable to parent (%s is not appropriate for %s)" % (type(self), type(sub_node))
94f5560de46d Uploaded
fubar
parents:
diff changeset
56 )
94f5560de46d Uploaded
fubar
parents:
diff changeset
57
94f5560de46d Uploaded
fubar
parents:
diff changeset
58 def validate(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
59 # Very few need validation, but some nodes we may want to have
94f5560de46d Uploaded
fubar
parents:
diff changeset
60 # validation routines on. Should only be called when DONE.
94f5560de46d Uploaded
fubar
parents:
diff changeset
61 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
62 # If any child fails to validate return false.
94f5560de46d Uploaded
fubar
parents:
diff changeset
63 if not child.validate():
94f5560de46d Uploaded
fubar
parents:
diff changeset
64 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
65 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
66
94f5560de46d Uploaded
fubar
parents:
diff changeset
67 def cli(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
68 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
69 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
70 lines.append(child.command_line())
94f5560de46d Uploaded
fubar
parents:
diff changeset
71 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
72
94f5560de46d Uploaded
fubar
parents:
diff changeset
73 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
74 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
75 genetate the command line for the node (and its childres)
94f5560de46d Uploaded
fubar
parents:
diff changeset
76
94f5560de46d Uploaded
fubar
parents:
diff changeset
77 mako_path override the path to the node
94f5560de46d Uploaded
fubar
parents:
diff changeset
78 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
79 return None
94f5560de46d Uploaded
fubar
parents:
diff changeset
80
94f5560de46d Uploaded
fubar
parents:
diff changeset
81
94f5560de46d Uploaded
fubar
parents:
diff changeset
82 class Stdios(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
83 name = "stdio"
94f5560de46d Uploaded
fubar
parents:
diff changeset
84
94f5560de46d Uploaded
fubar
parents:
diff changeset
85 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
86 return isinstance(child, Stdio)
94f5560de46d Uploaded
fubar
parents:
diff changeset
87
94f5560de46d Uploaded
fubar
parents:
diff changeset
88
94f5560de46d Uploaded
fubar
parents:
diff changeset
89 class Stdio(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
90 name = "exit_code"
94f5560de46d Uploaded
fubar
parents:
diff changeset
91
94f5560de46d Uploaded
fubar
parents:
diff changeset
92 def __init__(self, range="1:", level="fatal", **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
93 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
94 super(Stdio, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
95
94f5560de46d Uploaded
fubar
parents:
diff changeset
96
94f5560de46d Uploaded
fubar
parents:
diff changeset
97 class Macros(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
98 name = "macros"
94f5560de46d Uploaded
fubar
parents:
diff changeset
99
94f5560de46d Uploaded
fubar
parents:
diff changeset
100 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
101 return isinstance(child, (Macro, Import))
94f5560de46d Uploaded
fubar
parents:
diff changeset
102
94f5560de46d Uploaded
fubar
parents:
diff changeset
103
94f5560de46d Uploaded
fubar
parents:
diff changeset
104 class Macro(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
105 name = "xml"
94f5560de46d Uploaded
fubar
parents:
diff changeset
106
94f5560de46d Uploaded
fubar
parents:
diff changeset
107 def __init__(self, name):
94f5560de46d Uploaded
fubar
parents:
diff changeset
108 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
109 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
110 passed_kwargs['name'] = params['name']
94f5560de46d Uploaded
fubar
parents:
diff changeset
111 super(Macro, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
112
94f5560de46d Uploaded
fubar
parents:
diff changeset
113 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
114 return issubclass(type(child), XMLParam) and not isinstance(child, Macro)
94f5560de46d Uploaded
fubar
parents:
diff changeset
115
94f5560de46d Uploaded
fubar
parents:
diff changeset
116
94f5560de46d Uploaded
fubar
parents:
diff changeset
117 class Import(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
118 name = "import"
94f5560de46d Uploaded
fubar
parents:
diff changeset
119
94f5560de46d Uploaded
fubar
parents:
diff changeset
120 def __init__(self, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
121 super(Import, self).__init__()
94f5560de46d Uploaded
fubar
parents:
diff changeset
122 self.node.text = value
94f5560de46d Uploaded
fubar
parents:
diff changeset
123
94f5560de46d Uploaded
fubar
parents:
diff changeset
124 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
125 return issubclass(type(child), XMLParam) and not isinstance(child, Macro)
94f5560de46d Uploaded
fubar
parents:
diff changeset
126
94f5560de46d Uploaded
fubar
parents:
diff changeset
127
94f5560de46d Uploaded
fubar
parents:
diff changeset
128 class Expand(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
129 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
130 <expand macro="...">
94f5560de46d Uploaded
fubar
parents:
diff changeset
131 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
132 name = "expand"
94f5560de46d Uploaded
fubar
parents:
diff changeset
133
94f5560de46d Uploaded
fubar
parents:
diff changeset
134 def __init__(self, macro):
94f5560de46d Uploaded
fubar
parents:
diff changeset
135 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
136 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
137 passed_kwargs['macro'] = params['macro']
94f5560de46d Uploaded
fubar
parents:
diff changeset
138 super(Expand, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
139
94f5560de46d Uploaded
fubar
parents:
diff changeset
140 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
141 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
142 need to define empty command line contribution
94f5560de46d Uploaded
fubar
parents:
diff changeset
143 since Expand can be child of Inputs/Outputs
94f5560de46d Uploaded
fubar
parents:
diff changeset
144 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
145 return ""
94f5560de46d Uploaded
fubar
parents:
diff changeset
146
94f5560de46d Uploaded
fubar
parents:
diff changeset
147
94f5560de46d Uploaded
fubar
parents:
diff changeset
148 class ExpandIO(Expand):
94f5560de46d Uploaded
fubar
parents:
diff changeset
149 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
150 macro expasion like for Expand
94f5560de46d Uploaded
fubar
parents:
diff changeset
151 but an additional token with the same name but in upper case is added to
94f5560de46d Uploaded
fubar
parents:
diff changeset
152 the command section. can only be used in Inputs and Outputs
94f5560de46d Uploaded
fubar
parents:
diff changeset
153 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
154 name = "expand"
94f5560de46d Uploaded
fubar
parents:
diff changeset
155
94f5560de46d Uploaded
fubar
parents:
diff changeset
156 def __init__(self, macro):
94f5560de46d Uploaded
fubar
parents:
diff changeset
157 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
158 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
159 passed_kwargs['macro'] = params['macro']
94f5560de46d Uploaded
fubar
parents:
diff changeset
160 super(Expand, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
161
94f5560de46d Uploaded
fubar
parents:
diff changeset
162 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
163 return "@%s@" % self.node.attrib["macro"].upper()
94f5560de46d Uploaded
fubar
parents:
diff changeset
164
94f5560de46d Uploaded
fubar
parents:
diff changeset
165
94f5560de46d Uploaded
fubar
parents:
diff changeset
166 class RequestParamTranslation(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
167 name = "request_param_translation"
94f5560de46d Uploaded
fubar
parents:
diff changeset
168
94f5560de46d Uploaded
fubar
parents:
diff changeset
169 def __init__(self, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
170 self.node = etree.Element(self.name)
94f5560de46d Uploaded
fubar
parents:
diff changeset
171
94f5560de46d Uploaded
fubar
parents:
diff changeset
172 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
173 return isinstance(child, RequestParamTranslation) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
174 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
175
94f5560de46d Uploaded
fubar
parents:
diff changeset
176
94f5560de46d Uploaded
fubar
parents:
diff changeset
177 class RequestParam(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
178 name = "request_param"
94f5560de46d Uploaded
fubar
parents:
diff changeset
179
94f5560de46d Uploaded
fubar
parents:
diff changeset
180 def __init__(self, galaxy_name, remote_name, missing, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
181 # TODO: bulk copy locals into self.attr?
94f5560de46d Uploaded
fubar
parents:
diff changeset
182 self.galaxy_name = galaxy_name
94f5560de46d Uploaded
fubar
parents:
diff changeset
183 # http://stackoverflow.com/a/1408860
94f5560de46d Uploaded
fubar
parents:
diff changeset
184 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
185 super(RequestParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
186
94f5560de46d Uploaded
fubar
parents:
diff changeset
187 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
188 return isinstance(child, AppendParam) and self.galaxy_name == "URL" \
94f5560de46d Uploaded
fubar
parents:
diff changeset
189 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
190
94f5560de46d Uploaded
fubar
parents:
diff changeset
191
94f5560de46d Uploaded
fubar
parents:
diff changeset
192 class AppendParam(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
193 name = "append_param"
94f5560de46d Uploaded
fubar
parents:
diff changeset
194
94f5560de46d Uploaded
fubar
parents:
diff changeset
195 def __init__(self, separator="&amp;", first_separator="?", join="=", **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
196 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
197 super(AppendParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
198
94f5560de46d Uploaded
fubar
parents:
diff changeset
199 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
200 return isinstance(child, AppendParamValue)
94f5560de46d Uploaded
fubar
parents:
diff changeset
201
94f5560de46d Uploaded
fubar
parents:
diff changeset
202
94f5560de46d Uploaded
fubar
parents:
diff changeset
203 class AppendParamValue(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
204 name = "value"
94f5560de46d Uploaded
fubar
parents:
diff changeset
205
94f5560de46d Uploaded
fubar
parents:
diff changeset
206 def __init__(self, name="_export", missing="1", **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
207 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
208 super(AppendParamValue, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
209
94f5560de46d Uploaded
fubar
parents:
diff changeset
210 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
211 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
212
94f5560de46d Uploaded
fubar
parents:
diff changeset
213
94f5560de46d Uploaded
fubar
parents:
diff changeset
214 class EdamOperations(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
215 name = "edam_operations"
94f5560de46d Uploaded
fubar
parents:
diff changeset
216
94f5560de46d Uploaded
fubar
parents:
diff changeset
217 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
218 return issubclass(type(child), EdamOperation) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
219 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
220
94f5560de46d Uploaded
fubar
parents:
diff changeset
221 def has_operation(self, edam_operation):
94f5560de46d Uploaded
fubar
parents:
diff changeset
222 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
223 Check the presence of a given edam_operation.
94f5560de46d Uploaded
fubar
parents:
diff changeset
224
94f5560de46d Uploaded
fubar
parents:
diff changeset
225 :type edam_operation: STRING
94f5560de46d Uploaded
fubar
parents:
diff changeset
226 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
227 for operation in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
228 if operation.node.text == edam_operation:
94f5560de46d Uploaded
fubar
parents:
diff changeset
229 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
230 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
231
94f5560de46d Uploaded
fubar
parents:
diff changeset
232
94f5560de46d Uploaded
fubar
parents:
diff changeset
233 class EdamOperation(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
234 name = "edam_operation"
94f5560de46d Uploaded
fubar
parents:
diff changeset
235
94f5560de46d Uploaded
fubar
parents:
diff changeset
236 def __init__(self, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
237 super(EdamOperation, self).__init__()
94f5560de46d Uploaded
fubar
parents:
diff changeset
238 self.node.text = str(value)
94f5560de46d Uploaded
fubar
parents:
diff changeset
239
94f5560de46d Uploaded
fubar
parents:
diff changeset
240
94f5560de46d Uploaded
fubar
parents:
diff changeset
241 class EdamTopics(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
242 name = "edam_topics"
94f5560de46d Uploaded
fubar
parents:
diff changeset
243
94f5560de46d Uploaded
fubar
parents:
diff changeset
244 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
245 return issubclass(type(child), EdamTopic) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
246 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
247
94f5560de46d Uploaded
fubar
parents:
diff changeset
248 def has_topic(self, edam_topic):
94f5560de46d Uploaded
fubar
parents:
diff changeset
249 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
250 Check the presence of a given edam_topic.
94f5560de46d Uploaded
fubar
parents:
diff changeset
251
94f5560de46d Uploaded
fubar
parents:
diff changeset
252 :type edam_topic: STRING
94f5560de46d Uploaded
fubar
parents:
diff changeset
253 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
254 for topic in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
255 if topic.node.text == edam_topic:
94f5560de46d Uploaded
fubar
parents:
diff changeset
256 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
257 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
258
94f5560de46d Uploaded
fubar
parents:
diff changeset
259
94f5560de46d Uploaded
fubar
parents:
diff changeset
260 class EdamTopic(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
261 name = "edam_topic"
94f5560de46d Uploaded
fubar
parents:
diff changeset
262
94f5560de46d Uploaded
fubar
parents:
diff changeset
263 def __init__(self, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
264 super(EdamTopic, self).__init__()
94f5560de46d Uploaded
fubar
parents:
diff changeset
265 self.node.text = str(value)
94f5560de46d Uploaded
fubar
parents:
diff changeset
266
94f5560de46d Uploaded
fubar
parents:
diff changeset
267
94f5560de46d Uploaded
fubar
parents:
diff changeset
268 class Requirements(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
269 name = "requirements"
94f5560de46d Uploaded
fubar
parents:
diff changeset
270 # This bodes to be an issue -__-
94f5560de46d Uploaded
fubar
parents:
diff changeset
271
94f5560de46d Uploaded
fubar
parents:
diff changeset
272 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
273 return issubclass(type(child), Requirement) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
274 or issubclass(type(child), Container) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
275 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
276
94f5560de46d Uploaded
fubar
parents:
diff changeset
277
94f5560de46d Uploaded
fubar
parents:
diff changeset
278 class Requirement(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
279 name = "requirement"
94f5560de46d Uploaded
fubar
parents:
diff changeset
280
94f5560de46d Uploaded
fubar
parents:
diff changeset
281 def __init__(self, type, value, version=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
282 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
283 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
284 passed_kwargs["version"] = params["version"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
285 passed_kwargs["type"] = params["type"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
286 super(Requirement, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
287 self.node.text = str(value)
94f5560de46d Uploaded
fubar
parents:
diff changeset
288
94f5560de46d Uploaded
fubar
parents:
diff changeset
289
94f5560de46d Uploaded
fubar
parents:
diff changeset
290 class Container(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
291 name = "container"
94f5560de46d Uploaded
fubar
parents:
diff changeset
292
94f5560de46d Uploaded
fubar
parents:
diff changeset
293 def __init__(self, type, value, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
294 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
295 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
296 passed_kwargs["type"] = params["type"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
297 super(Container, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
298 self.node.text = str(value)
94f5560de46d Uploaded
fubar
parents:
diff changeset
299
94f5560de46d Uploaded
fubar
parents:
diff changeset
300
94f5560de46d Uploaded
fubar
parents:
diff changeset
301 class Configfiles(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
302 name = "configfiles"
94f5560de46d Uploaded
fubar
parents:
diff changeset
303
94f5560de46d Uploaded
fubar
parents:
diff changeset
304 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
305 return issubclass(type(child), Configfile) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
306 or issubclass(type(child), ConfigfileDefaultInputs) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
307 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
308
94f5560de46d Uploaded
fubar
parents:
diff changeset
309
94f5560de46d Uploaded
fubar
parents:
diff changeset
310 class Configfile(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
311 name = "configfile"
94f5560de46d Uploaded
fubar
parents:
diff changeset
312
94f5560de46d Uploaded
fubar
parents:
diff changeset
313 def __init__(self, name, text, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
314 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
315 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
316 passed_kwargs["name"] = params["name"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
317 super(Configfile, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
318 self.node.text = etree.CDATA(str(text))
94f5560de46d Uploaded
fubar
parents:
diff changeset
319
94f5560de46d Uploaded
fubar
parents:
diff changeset
320
94f5560de46d Uploaded
fubar
parents:
diff changeset
321 class ConfigfileDefaultInputs(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
322 name = "inputs"
94f5560de46d Uploaded
fubar
parents:
diff changeset
323
94f5560de46d Uploaded
fubar
parents:
diff changeset
324 def __init__(self, name, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
325 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
326 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
327 passed_kwargs["name"] = params["name"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
328 super(ConfigfileDefaultInputs, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
329
94f5560de46d Uploaded
fubar
parents:
diff changeset
330
94f5560de46d Uploaded
fubar
parents:
diff changeset
331 class Inputs(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
332 name = "inputs"
94f5560de46d Uploaded
fubar
parents:
diff changeset
333 # This bodes to be an issue -__-
94f5560de46d Uploaded
fubar
parents:
diff changeset
334
94f5560de46d Uploaded
fubar
parents:
diff changeset
335 def __init__(self, action=None, check_value=None, method=None, target=None, nginx_upload=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
336 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
337 super(Inputs, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
338
94f5560de46d Uploaded
fubar
parents:
diff changeset
339 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
340 return issubclass(type(child), InputParameter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
341 or issubclass(type(child), Expand) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
342 or issubclass(type(child), ExpandIO)
94f5560de46d Uploaded
fubar
parents:
diff changeset
343
94f5560de46d Uploaded
fubar
parents:
diff changeset
344
94f5560de46d Uploaded
fubar
parents:
diff changeset
345 class InputParameter(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
346 def __init__(self, name, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
347 # TODO: look at
94f5560de46d Uploaded
fubar
parents:
diff changeset
348 if "argument" in kwargs and kwargs['argument']:
94f5560de46d Uploaded
fubar
parents:
diff changeset
349 self.flag_identifier = kwargs['argument'].lstrip()
94f5560de46d Uploaded
fubar
parents:
diff changeset
350 self.num_dashes = len(kwargs['argument']) - len(self.flag_identifier)
94f5560de46d Uploaded
fubar
parents:
diff changeset
351 self.mako_identifier = _parse_name(name, kwargs['argument'])
94f5560de46d Uploaded
fubar
parents:
diff changeset
352 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
353 self.flag_identifier = name
94f5560de46d Uploaded
fubar
parents:
diff changeset
354 self.mako_identifier = name
94f5560de46d Uploaded
fubar
parents:
diff changeset
355
94f5560de46d Uploaded
fubar
parents:
diff changeset
356 # We use kwargs instead of the usual locals(), so manually copy the
94f5560de46d Uploaded
fubar
parents:
diff changeset
357 # name to kwargs
94f5560de46d Uploaded
fubar
parents:
diff changeset
358 if name is not None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
359 kwargs = dict([("name", name)] + list(kwargs.items()))
94f5560de46d Uploaded
fubar
parents:
diff changeset
360
94f5560de46d Uploaded
fubar
parents:
diff changeset
361 # Handle positional parameters
94f5560de46d Uploaded
fubar
parents:
diff changeset
362 if "positional" in kwargs and kwargs["positional"]:
94f5560de46d Uploaded
fubar
parents:
diff changeset
363 self.positional = True
94f5560de46d Uploaded
fubar
parents:
diff changeset
364 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
365 self.positional = False
94f5560de46d Uploaded
fubar
parents:
diff changeset
366
94f5560de46d Uploaded
fubar
parents:
diff changeset
367 if "num_dashes" in kwargs:
94f5560de46d Uploaded
fubar
parents:
diff changeset
368 self.num_dashes = kwargs["num_dashes"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
369 del kwargs["num_dashes"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
370 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
371 self.num_dashes = 0
94f5560de46d Uploaded
fubar
parents:
diff changeset
372
94f5560de46d Uploaded
fubar
parents:
diff changeset
373 self.space_between_arg = " "
94f5560de46d Uploaded
fubar
parents:
diff changeset
374
94f5560de46d Uploaded
fubar
parents:
diff changeset
375 # Not sure about this :(
94f5560de46d Uploaded
fubar
parents:
diff changeset
376 # https://wiki.galaxyproject.org/Tools/BestPractices#Parameter_help
94f5560de46d Uploaded
fubar
parents:
diff changeset
377 if "label" in kwargs:
94f5560de46d Uploaded
fubar
parents:
diff changeset
378 # TODO: replace with positional attribute
94f5560de46d Uploaded
fubar
parents:
diff changeset
379 if len(self.flag()) > 0:
94f5560de46d Uploaded
fubar
parents:
diff changeset
380 if kwargs["label"] is None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
381 kwargs["label"] = "Author did not provide help for this parameter... "
94f5560de46d Uploaded
fubar
parents:
diff changeset
382 # if not self.positional and "argument" not in kwargs:
94f5560de46d Uploaded
fubar
parents:
diff changeset
383 # kwargs["argument"] = self.flag()
94f5560de46d Uploaded
fubar
parents:
diff changeset
384
94f5560de46d Uploaded
fubar
parents:
diff changeset
385 super(InputParameter, self).__init__(**kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
386
94f5560de46d Uploaded
fubar
parents:
diff changeset
387 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
388 before = self.command_line_before(mako_path)
94f5560de46d Uploaded
fubar
parents:
diff changeset
389 cli = self.command_line_actual(mako_path)
94f5560de46d Uploaded
fubar
parents:
diff changeset
390 after = self.command_line_after()
94f5560de46d Uploaded
fubar
parents:
diff changeset
391
94f5560de46d Uploaded
fubar
parents:
diff changeset
392 complete = [x for x in (before, cli, after) if x is not None]
94f5560de46d Uploaded
fubar
parents:
diff changeset
393 return "\n".join(complete)
94f5560de46d Uploaded
fubar
parents:
diff changeset
394
94f5560de46d Uploaded
fubar
parents:
diff changeset
395 def command_line_before(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
396 return None
94f5560de46d Uploaded
fubar
parents:
diff changeset
397
94f5560de46d Uploaded
fubar
parents:
diff changeset
398 def command_line_after(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
399 return None
94f5560de46d Uploaded
fubar
parents:
diff changeset
400
94f5560de46d Uploaded
fubar
parents:
diff changeset
401 def command_line_actual(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
402 try:
94f5560de46d Uploaded
fubar
parents:
diff changeset
403 return self.command_line_override
94f5560de46d Uploaded
fubar
parents:
diff changeset
404 except Exception:
94f5560de46d Uploaded
fubar
parents:
diff changeset
405 if self.positional:
94f5560de46d Uploaded
fubar
parents:
diff changeset
406 return self.mako_name(mako_path)
94f5560de46d Uploaded
fubar
parents:
diff changeset
407 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
408 return "%s%s%s" % (self.flag(), self.space_between_arg, self.mako_name(mako_path))
94f5560de46d Uploaded
fubar
parents:
diff changeset
409
94f5560de46d Uploaded
fubar
parents:
diff changeset
410 def mako_name(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
411 if mako_path:
94f5560de46d Uploaded
fubar
parents:
diff changeset
412 path = mako_path + "."
94f5560de46d Uploaded
fubar
parents:
diff changeset
413 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
414 parent_identifiers = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
415 p = self.parent
94f5560de46d Uploaded
fubar
parents:
diff changeset
416 while p is not None and hasattr(p, "mako_identifier"):
94f5560de46d Uploaded
fubar
parents:
diff changeset
417 # exclude None identifiers -- e.g. <when> tags
94f5560de46d Uploaded
fubar
parents:
diff changeset
418 if p.mako_identifier is not None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
419 parent_identifiers.append(p.mako_identifier)
94f5560de46d Uploaded
fubar
parents:
diff changeset
420 p = p.parent
94f5560de46d Uploaded
fubar
parents:
diff changeset
421 if len(parent_identifiers) > 0:
94f5560de46d Uploaded
fubar
parents:
diff changeset
422 parent_identifiers.append("")
94f5560de46d Uploaded
fubar
parents:
diff changeset
423 path = ".".join(parent_identifiers)
94f5560de46d Uploaded
fubar
parents:
diff changeset
424 return "$" + path + self.mako_identifier
94f5560de46d Uploaded
fubar
parents:
diff changeset
425
94f5560de46d Uploaded
fubar
parents:
diff changeset
426 def flag(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
427 flag = "-" * self.num_dashes
94f5560de46d Uploaded
fubar
parents:
diff changeset
428 return flag + self.flag_identifier
94f5560de46d Uploaded
fubar
parents:
diff changeset
429
94f5560de46d Uploaded
fubar
parents:
diff changeset
430
94f5560de46d Uploaded
fubar
parents:
diff changeset
431 class Section(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
432 name = "section"
94f5560de46d Uploaded
fubar
parents:
diff changeset
433
94f5560de46d Uploaded
fubar
parents:
diff changeset
434 def __init__(self, name, title, expanded=None, help=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
435 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
436 super(Section, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
437
94f5560de46d Uploaded
fubar
parents:
diff changeset
438 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
439 cli = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
440 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
441 cli.append(child.command_line(mako_path))
94f5560de46d Uploaded
fubar
parents:
diff changeset
442 return "\n".join(cli)
94f5560de46d Uploaded
fubar
parents:
diff changeset
443
94f5560de46d Uploaded
fubar
parents:
diff changeset
444 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
445 return issubclass(type(child), InputParameter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
446 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
447
94f5560de46d Uploaded
fubar
parents:
diff changeset
448
94f5560de46d Uploaded
fubar
parents:
diff changeset
449 class Repeat(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
450 name = "repeat"
94f5560de46d Uploaded
fubar
parents:
diff changeset
451
94f5560de46d Uploaded
fubar
parents:
diff changeset
452 def __init__(self, name, title, min=None, max=None, default=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
453 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
454 super(Repeat, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
455
94f5560de46d Uploaded
fubar
parents:
diff changeset
456 def command_line_before(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
457 return "#for $i_%s in %s" % (self.name, self.mako_name(mako_path))
94f5560de46d Uploaded
fubar
parents:
diff changeset
458
94f5560de46d Uploaded
fubar
parents:
diff changeset
459 def command_line_after(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
460 return "#end for"
94f5560de46d Uploaded
fubar
parents:
diff changeset
461
94f5560de46d Uploaded
fubar
parents:
diff changeset
462 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
463 return issubclass(type(child), InputParameter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
464 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
465
94f5560de46d Uploaded
fubar
parents:
diff changeset
466 def command_line_actual(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
467 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
468 for c in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
469 lines.append(c.command_line(mako_path="i_%s" % self.name))
94f5560de46d Uploaded
fubar
parents:
diff changeset
470 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
471
94f5560de46d Uploaded
fubar
parents:
diff changeset
472
94f5560de46d Uploaded
fubar
parents:
diff changeset
473 class Conditional(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
474 name = "conditional"
94f5560de46d Uploaded
fubar
parents:
diff changeset
475
94f5560de46d Uploaded
fubar
parents:
diff changeset
476 def __init__(self, name, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
477 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
478 super(Conditional, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
479
94f5560de46d Uploaded
fubar
parents:
diff changeset
480 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
481 if isinstance(child, Expand):
94f5560de46d Uploaded
fubar
parents:
diff changeset
482 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
483 elif len(self.children) == 0 and issubclass(type(child), SelectParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
484 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
485 elif len(self.children) > 0 and issubclass(type(child), When):
94f5560de46d Uploaded
fubar
parents:
diff changeset
486 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
487 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
488 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
489 # return issubclass(type(child), InputParameter) and not isinstance(child, Conditional)
94f5560de46d Uploaded
fubar
parents:
diff changeset
490
94f5560de46d Uploaded
fubar
parents:
diff changeset
491 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
492 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
493 for c in self.children[1:]:
94f5560de46d Uploaded
fubar
parents:
diff changeset
494 if len(c.children) == 0:
94f5560de46d Uploaded
fubar
parents:
diff changeset
495 continue
94f5560de46d Uploaded
fubar
parents:
diff changeset
496 lines.append('#if str(%s) == "%s"' % (self.children[0].mako_name(mako_path), c.value))
94f5560de46d Uploaded
fubar
parents:
diff changeset
497 lines.append(c.cli())
94f5560de46d Uploaded
fubar
parents:
diff changeset
498 lines.append('#end if')
94f5560de46d Uploaded
fubar
parents:
diff changeset
499 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
500
94f5560de46d Uploaded
fubar
parents:
diff changeset
501 def validate(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
502 # Find a way to check if one of the kids is a WHEN
94f5560de46d Uploaded
fubar
parents:
diff changeset
503 pass
94f5560de46d Uploaded
fubar
parents:
diff changeset
504
94f5560de46d Uploaded
fubar
parents:
diff changeset
505
94f5560de46d Uploaded
fubar
parents:
diff changeset
506 class When(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
507 name = "when"
94f5560de46d Uploaded
fubar
parents:
diff changeset
508
94f5560de46d Uploaded
fubar
parents:
diff changeset
509 def __init__(self, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
510 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
511 super(When, self).__init__(None, **params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
512
94f5560de46d Uploaded
fubar
parents:
diff changeset
513 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
514 return issubclass(type(child), InputParameter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
515 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
516
94f5560de46d Uploaded
fubar
parents:
diff changeset
517
94f5560de46d Uploaded
fubar
parents:
diff changeset
518 class Param(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
519 name = "param"
94f5560de46d Uploaded
fubar
parents:
diff changeset
520
94f5560de46d Uploaded
fubar
parents:
diff changeset
521 # This...isn't really valid as-is, and shouldn't be used.
94f5560de46d Uploaded
fubar
parents:
diff changeset
522 def __init__(self, name, argument=None, value=None, optional=None, label=None, help=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
523 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
524 params = dict([("name", params["name"]),
94f5560de46d Uploaded
fubar
parents:
diff changeset
525 ("argument", params["argument"]),
94f5560de46d Uploaded
fubar
parents:
diff changeset
526 ("type", self.type)] + list(params.items()))
94f5560de46d Uploaded
fubar
parents:
diff changeset
527 super(Param, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
528
94f5560de46d Uploaded
fubar
parents:
diff changeset
529 if type(self) == Param:
94f5560de46d Uploaded
fubar
parents:
diff changeset
530 raise Exception("Param class is not an actual parameter type, use a subclass of Param")
94f5560de46d Uploaded
fubar
parents:
diff changeset
531
94f5560de46d Uploaded
fubar
parents:
diff changeset
532 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
533 return issubclass(type(child), InputParameter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
534 or isinstance(child, ValidatorParam) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
535 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
536
94f5560de46d Uploaded
fubar
parents:
diff changeset
537
94f5560de46d Uploaded
fubar
parents:
diff changeset
538 class TextParam(Param):
94f5560de46d Uploaded
fubar
parents:
diff changeset
539 type = "text"
94f5560de46d Uploaded
fubar
parents:
diff changeset
540
94f5560de46d Uploaded
fubar
parents:
diff changeset
541 def __init__(self, name, argument=None, optional=None, value=None, label=None, help=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
542 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
543 super(TextParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
544
94f5560de46d Uploaded
fubar
parents:
diff changeset
545 def command_line_actual(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
546 # TODO same as parent class
94f5560de46d Uploaded
fubar
parents:
diff changeset
547 try:
94f5560de46d Uploaded
fubar
parents:
diff changeset
548 return self.command_line_override
94f5560de46d Uploaded
fubar
parents:
diff changeset
549 except Exception:
94f5560de46d Uploaded
fubar
parents:
diff changeset
550 if self.positional:
94f5560de46d Uploaded
fubar
parents:
diff changeset
551 return self.mako_name(mako_path)
94f5560de46d Uploaded
fubar
parents:
diff changeset
552 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
553 return f"{self.flag()}{self.space_between_arg}'{self.mako_name()}'"
94f5560de46d Uploaded
fubar
parents:
diff changeset
554
94f5560de46d Uploaded
fubar
parents:
diff changeset
555
94f5560de46d Uploaded
fubar
parents:
diff changeset
556 class _NumericParam(Param):
94f5560de46d Uploaded
fubar
parents:
diff changeset
557 def __init__(self, name, value, argument=None, optional=None, min=None, max=None, label=None, help=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
558 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
559 super(_NumericParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
560
94f5560de46d Uploaded
fubar
parents:
diff changeset
561
94f5560de46d Uploaded
fubar
parents:
diff changeset
562 class IntegerParam(_NumericParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
563 type = "integer"
94f5560de46d Uploaded
fubar
parents:
diff changeset
564
94f5560de46d Uploaded
fubar
parents:
diff changeset
565
94f5560de46d Uploaded
fubar
parents:
diff changeset
566 class FloatParam(_NumericParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
567 type = "float"
94f5560de46d Uploaded
fubar
parents:
diff changeset
568
94f5560de46d Uploaded
fubar
parents:
diff changeset
569
94f5560de46d Uploaded
fubar
parents:
diff changeset
570 class BooleanParam(Param):
94f5560de46d Uploaded
fubar
parents:
diff changeset
571 type = "boolean"
94f5560de46d Uploaded
fubar
parents:
diff changeset
572
94f5560de46d Uploaded
fubar
parents:
diff changeset
573 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
574 self, name, argument=None, optional=None, checked=False, truevalue=None, falsevalue=None, label=None, help=None, **kwargs
94f5560de46d Uploaded
fubar
parents:
diff changeset
575 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
576 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
577
94f5560de46d Uploaded
fubar
parents:
diff changeset
578 super(BooleanParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
579 if truevalue is None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
580 # If truevalue and falsevalue are None, then we use "auto", the IUC
94f5560de46d Uploaded
fubar
parents:
diff changeset
581 # recommended default.
94f5560de46d Uploaded
fubar
parents:
diff changeset
582 #
94f5560de46d Uploaded
fubar
parents:
diff changeset
583 # truevalue is set to the parameter's value, and falsevalue is not.
94f5560de46d Uploaded
fubar
parents:
diff changeset
584 #
94f5560de46d Uploaded
fubar
parents:
diff changeset
585 # Unfortunately, mako_identifier is set as a result of the super
94f5560de46d Uploaded
fubar
parents:
diff changeset
586 # call, which we shouldn't call TWICE, so we'll just hack around this :(
94f5560de46d Uploaded
fubar
parents:
diff changeset
587 # params['truevalue'] = '%s%s' % (self.)
94f5560de46d Uploaded
fubar
parents:
diff changeset
588 self.node.attrib["truevalue"] = self.flag()
94f5560de46d Uploaded
fubar
parents:
diff changeset
589
94f5560de46d Uploaded
fubar
parents:
diff changeset
590 if falsevalue is None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
591 self.node.attrib["falsevalue"] = ""
94f5560de46d Uploaded
fubar
parents:
diff changeset
592
94f5560de46d Uploaded
fubar
parents:
diff changeset
593 def command_line_actual(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
594 if hasattr(self, "command_line_override"):
94f5560de46d Uploaded
fubar
parents:
diff changeset
595 return self.command_line_override
94f5560de46d Uploaded
fubar
parents:
diff changeset
596 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
597 return "%s" % self.mako_name(mako_path)
94f5560de46d Uploaded
fubar
parents:
diff changeset
598
94f5560de46d Uploaded
fubar
parents:
diff changeset
599
94f5560de46d Uploaded
fubar
parents:
diff changeset
600 class DataParam(Param):
94f5560de46d Uploaded
fubar
parents:
diff changeset
601 type = "data"
94f5560de46d Uploaded
fubar
parents:
diff changeset
602
94f5560de46d Uploaded
fubar
parents:
diff changeset
603 def __init__(self, name, argument=None, optional=None, format=None, multiple=None, label=None, help=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
604 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
605 super(DataParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
606
94f5560de46d Uploaded
fubar
parents:
diff changeset
607
94f5560de46d Uploaded
fubar
parents:
diff changeset
608 class SelectParam(Param):
94f5560de46d Uploaded
fubar
parents:
diff changeset
609 type = "select"
94f5560de46d Uploaded
fubar
parents:
diff changeset
610
94f5560de46d Uploaded
fubar
parents:
diff changeset
611 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
612 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
613 name,
94f5560de46d Uploaded
fubar
parents:
diff changeset
614 argument=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
615 optional=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
616 data_ref=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
617 display=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
618 multiple=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
619 options=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
620 default=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
621 label=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
622 help=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
623 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
624 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
625 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
626 del params["options"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
627 del params["default"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
628
94f5560de46d Uploaded
fubar
parents:
diff changeset
629 super(SelectParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
630
94f5560de46d Uploaded
fubar
parents:
diff changeset
631 if options is not None and default is not None:
94f5560de46d Uploaded
fubar
parents:
diff changeset
632 if default not in options:
94f5560de46d Uploaded
fubar
parents:
diff changeset
633 raise Exception("Specified a default that isn't in options")
94f5560de46d Uploaded
fubar
parents:
diff changeset
634
94f5560de46d Uploaded
fubar
parents:
diff changeset
635 if options:
94f5560de46d Uploaded
fubar
parents:
diff changeset
636 for k, v in list(sorted(options.items())):
94f5560de46d Uploaded
fubar
parents:
diff changeset
637 selected = k == default
94f5560de46d Uploaded
fubar
parents:
diff changeset
638 self.append(SelectOption(k, v, selected=selected))
94f5560de46d Uploaded
fubar
parents:
diff changeset
639
94f5560de46d Uploaded
fubar
parents:
diff changeset
640 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
641 return issubclass(type(child), SelectOption) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
642 or issubclass(type(child), Options) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
643 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
644
94f5560de46d Uploaded
fubar
parents:
diff changeset
645
94f5560de46d Uploaded
fubar
parents:
diff changeset
646 class SelectOption(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
647 name = "option"
94f5560de46d Uploaded
fubar
parents:
diff changeset
648
94f5560de46d Uploaded
fubar
parents:
diff changeset
649 def __init__(self, value, text, selected=False, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
650 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
651
94f5560de46d Uploaded
fubar
parents:
diff changeset
652 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
653 if selected:
94f5560de46d Uploaded
fubar
parents:
diff changeset
654 passed_kwargs["selected"] = "true"
94f5560de46d Uploaded
fubar
parents:
diff changeset
655 passed_kwargs["value"] = params["value"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
656
94f5560de46d Uploaded
fubar
parents:
diff changeset
657 super(SelectOption, self).__init__(None, **passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
658 self.node.text = str(text)
94f5560de46d Uploaded
fubar
parents:
diff changeset
659
94f5560de46d Uploaded
fubar
parents:
diff changeset
660
94f5560de46d Uploaded
fubar
parents:
diff changeset
661 class Options(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
662 name = "options"
94f5560de46d Uploaded
fubar
parents:
diff changeset
663
94f5560de46d Uploaded
fubar
parents:
diff changeset
664 def __init__(self, from_dataset=None, from_file=None, from_data_table=None, from_parameter=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
665 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
666 super(Options, self).__init__(None, **params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
667
94f5560de46d Uploaded
fubar
parents:
diff changeset
668 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
669 return issubclass(type(child), Column) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
670 or issubclass(type(child), Filter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
671 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
672
94f5560de46d Uploaded
fubar
parents:
diff changeset
673
94f5560de46d Uploaded
fubar
parents:
diff changeset
674 class Column(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
675 name = "column"
94f5560de46d Uploaded
fubar
parents:
diff changeset
676
94f5560de46d Uploaded
fubar
parents:
diff changeset
677 def __init__(self, name, index, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
678 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
679 super(Column, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
680
94f5560de46d Uploaded
fubar
parents:
diff changeset
681
94f5560de46d Uploaded
fubar
parents:
diff changeset
682 class Filter(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
683 name = "filter"
94f5560de46d Uploaded
fubar
parents:
diff changeset
684
94f5560de46d Uploaded
fubar
parents:
diff changeset
685 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
686 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
687 type,
94f5560de46d Uploaded
fubar
parents:
diff changeset
688 column=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
689 name=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
690 ref=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
691 key=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
692 multiple=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
693 separator=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
694 keep=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
695 value=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
696 ref_attribute=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
697 index=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
698 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
699 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
700 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
701 super(Filter, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
702
94f5560de46d Uploaded
fubar
parents:
diff changeset
703
94f5560de46d Uploaded
fubar
parents:
diff changeset
704 class ValidatorParam(InputParameter):
94f5560de46d Uploaded
fubar
parents:
diff changeset
705 name = "validator"
94f5560de46d Uploaded
fubar
parents:
diff changeset
706
94f5560de46d Uploaded
fubar
parents:
diff changeset
707 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
708 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
709 type,
94f5560de46d Uploaded
fubar
parents:
diff changeset
710 message=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
711 filename=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
712 metadata_name=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
713 metadata_column=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
714 line_startswith=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
715 min=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
716 max=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
717 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
718 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
719 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
720 super(ValidatorParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
721
94f5560de46d Uploaded
fubar
parents:
diff changeset
722
94f5560de46d Uploaded
fubar
parents:
diff changeset
723 class Outputs(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
724 name = "outputs"
94f5560de46d Uploaded
fubar
parents:
diff changeset
725
94f5560de46d Uploaded
fubar
parents:
diff changeset
726 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
727 return isinstance(child, OutputData) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
728 or isinstance(child, OutputCollection) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
729 or isinstance(child, Expand) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
730 or isinstance(child, ExpandIO)
94f5560de46d Uploaded
fubar
parents:
diff changeset
731
94f5560de46d Uploaded
fubar
parents:
diff changeset
732
94f5560de46d Uploaded
fubar
parents:
diff changeset
733 class OutputData(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
734 """Copypasta of InputParameter, needs work
94f5560de46d Uploaded
fubar
parents:
diff changeset
735 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
736
94f5560de46d Uploaded
fubar
parents:
diff changeset
737 name = "data"
94f5560de46d Uploaded
fubar
parents:
diff changeset
738
94f5560de46d Uploaded
fubar
parents:
diff changeset
739 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
740 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
741 name,
94f5560de46d Uploaded
fubar
parents:
diff changeset
742 format,
94f5560de46d Uploaded
fubar
parents:
diff changeset
743 format_source=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
744 metadata_source=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
745 label=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
746 from_work_dir=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
747 hidden=False,
94f5560de46d Uploaded
fubar
parents:
diff changeset
748 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
749 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
750 # TODO: validate format_source&metadata_source against something in the
94f5560de46d Uploaded
fubar
parents:
diff changeset
751 # XMLParam children tree.
94f5560de46d Uploaded
fubar
parents:
diff changeset
752 self.mako_identifier = name
94f5560de46d Uploaded
fubar
parents:
diff changeset
753 if "num_dashes" in kwargs:
94f5560de46d Uploaded
fubar
parents:
diff changeset
754 self.num_dashes = kwargs["num_dashes"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
755 del kwargs["num_dashes"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
756 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
757 self.num_dashes = 0
94f5560de46d Uploaded
fubar
parents:
diff changeset
758 self.space_between_arg = " "
94f5560de46d Uploaded
fubar
parents:
diff changeset
759 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
760
94f5560de46d Uploaded
fubar
parents:
diff changeset
761 super(OutputData, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
762
94f5560de46d Uploaded
fubar
parents:
diff changeset
763 def command_line(self, mako_path=None):
94f5560de46d Uploaded
fubar
parents:
diff changeset
764 if hasattr(self, "command_line_override"):
94f5560de46d Uploaded
fubar
parents:
diff changeset
765 return self.command_line_override
94f5560de46d Uploaded
fubar
parents:
diff changeset
766 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
767 return "%s%s%s" % (self.flag(), self.space_between_arg, self.mako_name(mako_path))
94f5560de46d Uploaded
fubar
parents:
diff changeset
768
94f5560de46d Uploaded
fubar
parents:
diff changeset
769 def mako_name(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
770 return "'$" + self.mako_identifier + "'"
94f5560de46d Uploaded
fubar
parents:
diff changeset
771
94f5560de46d Uploaded
fubar
parents:
diff changeset
772 def flag(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
773 flag = "-" * self.num_dashes
94f5560de46d Uploaded
fubar
parents:
diff changeset
774 return flag + self.mako_identifier
94f5560de46d Uploaded
fubar
parents:
diff changeset
775
94f5560de46d Uploaded
fubar
parents:
diff changeset
776 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
777 return isinstance(child, OutputFilter) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
778 or isinstance(child, ChangeFormat) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
779 or isinstance(child, DiscoverDatasets) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
780 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
781
94f5560de46d Uploaded
fubar
parents:
diff changeset
782
94f5560de46d Uploaded
fubar
parents:
diff changeset
783 class OutputFilter(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
784 name = "filter"
94f5560de46d Uploaded
fubar
parents:
diff changeset
785
94f5560de46d Uploaded
fubar
parents:
diff changeset
786 def __init__(self, text, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
787 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
788 del params["text"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
789 super(OutputFilter, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
790 self.node.text = text
94f5560de46d Uploaded
fubar
parents:
diff changeset
791
94f5560de46d Uploaded
fubar
parents:
diff changeset
792 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
793 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
794
94f5560de46d Uploaded
fubar
parents:
diff changeset
795
94f5560de46d Uploaded
fubar
parents:
diff changeset
796 class ChangeFormat(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
797 name = "change_format"
94f5560de46d Uploaded
fubar
parents:
diff changeset
798
94f5560de46d Uploaded
fubar
parents:
diff changeset
799 def __init__(self, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
800 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
801 super(ChangeFormat, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
802
94f5560de46d Uploaded
fubar
parents:
diff changeset
803 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
804 return isinstance(child, ChangeFormatWhen) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
805 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
806
94f5560de46d Uploaded
fubar
parents:
diff changeset
807
94f5560de46d Uploaded
fubar
parents:
diff changeset
808 class ChangeFormatWhen(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
809 name = "when"
94f5560de46d Uploaded
fubar
parents:
diff changeset
810
94f5560de46d Uploaded
fubar
parents:
diff changeset
811 def __init__(self, input, format, value, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
812 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
813 super(ChangeFormatWhen, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
814
94f5560de46d Uploaded
fubar
parents:
diff changeset
815 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
816 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
817
94f5560de46d Uploaded
fubar
parents:
diff changeset
818
94f5560de46d Uploaded
fubar
parents:
diff changeset
819 class OutputCollection(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
820 name = "collection"
94f5560de46d Uploaded
fubar
parents:
diff changeset
821
94f5560de46d Uploaded
fubar
parents:
diff changeset
822 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
823 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
824 name,
94f5560de46d Uploaded
fubar
parents:
diff changeset
825 type=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
826 label=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
827 format_source=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
828 type_source=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
829 structured_like=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
830 inherit_format=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
831 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
832 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
833 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
834 super(OutputCollection, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
835
94f5560de46d Uploaded
fubar
parents:
diff changeset
836 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
837 return isinstance(child, OutputData) or isinstance(child, OutputFilter) or isinstance(child, DiscoverDatasets)
94f5560de46d Uploaded
fubar
parents:
diff changeset
838
94f5560de46d Uploaded
fubar
parents:
diff changeset
839 def command_line_before(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
840 return "<output_collection name = '%s'>" % self.name
94f5560de46d Uploaded
fubar
parents:
diff changeset
841
94f5560de46d Uploaded
fubar
parents:
diff changeset
842 def command_line_after(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
843 return "</output_collection>"
94f5560de46d Uploaded
fubar
parents:
diff changeset
844
94f5560de46d Uploaded
fubar
parents:
diff changeset
845 def command_line_actual(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
846 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
847 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
848 lines.append(child.command_line())
94f5560de46d Uploaded
fubar
parents:
diff changeset
849 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
850
94f5560de46d Uploaded
fubar
parents:
diff changeset
851
94f5560de46d Uploaded
fubar
parents:
diff changeset
852 class DiscoverDatasets(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
853 name = "discover_datasets"
94f5560de46d Uploaded
fubar
parents:
diff changeset
854
94f5560de46d Uploaded
fubar
parents:
diff changeset
855 def __init__(self, pattern, directory=None, format=None, ext=None, visible=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
856 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
857 super(DiscoverDatasets, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
858
94f5560de46d Uploaded
fubar
parents:
diff changeset
859
94f5560de46d Uploaded
fubar
parents:
diff changeset
860 class Tests(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
861 name = "tests"
94f5560de46d Uploaded
fubar
parents:
diff changeset
862
94f5560de46d Uploaded
fubar
parents:
diff changeset
863 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
864 return issubclass(type(child), Test) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
865 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
866
94f5560de46d Uploaded
fubar
parents:
diff changeset
867
94f5560de46d Uploaded
fubar
parents:
diff changeset
868 class Test(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
869 name = "test"
94f5560de46d Uploaded
fubar
parents:
diff changeset
870
94f5560de46d Uploaded
fubar
parents:
diff changeset
871 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
872 return isinstance(child, TestParam) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
873 or isinstance(child, TestOutput) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
874 or isinstance(child, TestOutputCollection) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
875 or isinstance(child, TestRepeat) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
876 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
877
94f5560de46d Uploaded
fubar
parents:
diff changeset
878
94f5560de46d Uploaded
fubar
parents:
diff changeset
879 class TestParam(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
880 name = "param"
94f5560de46d Uploaded
fubar
parents:
diff changeset
881
94f5560de46d Uploaded
fubar
parents:
diff changeset
882 def __init__(self, name, value=None, ftype=None, dbkey=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
883 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
884 super(TestParam, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
885
94f5560de46d Uploaded
fubar
parents:
diff changeset
886
94f5560de46d Uploaded
fubar
parents:
diff changeset
887 class TestOutput(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
888 name = "output"
94f5560de46d Uploaded
fubar
parents:
diff changeset
889
94f5560de46d Uploaded
fubar
parents:
diff changeset
890 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
891 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
892 name=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
893 file=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
894 ftype=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
895 sort=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
896 value=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
897 md5=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
898 checksum=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
899 compare=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
900 lines_diff=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
901 delta=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
902 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
903 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
904 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
905 super(TestOutput, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
906
94f5560de46d Uploaded
fubar
parents:
diff changeset
907
94f5560de46d Uploaded
fubar
parents:
diff changeset
908 class TestOCElement(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
909 name = "element"
94f5560de46d Uploaded
fubar
parents:
diff changeset
910
94f5560de46d Uploaded
fubar
parents:
diff changeset
911 def __init__(self, name=None, file=None, ftype=None, **kwargs):
94f5560de46d Uploaded
fubar
parents:
diff changeset
912 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
913 super(TestOCElement, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
914
94f5560de46d Uploaded
fubar
parents:
diff changeset
915
94f5560de46d Uploaded
fubar
parents:
diff changeset
916 class TestOutputCollection(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
917 name = "output_collection"
94f5560de46d Uploaded
fubar
parents:
diff changeset
918
94f5560de46d Uploaded
fubar
parents:
diff changeset
919 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
920 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
921 name=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
922 ftype=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
923 sort=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
924 value=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
925 compare=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
926 lines_diff=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
927 delta=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
928 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
929 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
930 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
931 super(TestOutputCollection, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
932
94f5560de46d Uploaded
fubar
parents:
diff changeset
933 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
934 return isinstance(child, TestOCElement)
94f5560de46d Uploaded
fubar
parents:
diff changeset
935
94f5560de46d Uploaded
fubar
parents:
diff changeset
936 def command_line_before(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
937 return "<output_collection name = '%s'>" % self.name
94f5560de46d Uploaded
fubar
parents:
diff changeset
938
94f5560de46d Uploaded
fubar
parents:
diff changeset
939 def command_line_after(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
940 return "</output_collection>"
94f5560de46d Uploaded
fubar
parents:
diff changeset
941
94f5560de46d Uploaded
fubar
parents:
diff changeset
942 def command_line_actual(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
943 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
944 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
945 lines.append(child.command_line())
94f5560de46d Uploaded
fubar
parents:
diff changeset
946 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
947
94f5560de46d Uploaded
fubar
parents:
diff changeset
948
94f5560de46d Uploaded
fubar
parents:
diff changeset
949 class TestRepeat(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
950 name = "repeat"
94f5560de46d Uploaded
fubar
parents:
diff changeset
951
94f5560de46d Uploaded
fubar
parents:
diff changeset
952 def __init__(
94f5560de46d Uploaded
fubar
parents:
diff changeset
953 self,
94f5560de46d Uploaded
fubar
parents:
diff changeset
954 name=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
955 ftype=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
956 sort=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
957 value=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
958 compare=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
959 lines_diff=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
960 delta=None,
94f5560de46d Uploaded
fubar
parents:
diff changeset
961 **kwargs,
94f5560de46d Uploaded
fubar
parents:
diff changeset
962 ):
94f5560de46d Uploaded
fubar
parents:
diff changeset
963 params = Util.clean_kwargs(locals().copy())
94f5560de46d Uploaded
fubar
parents:
diff changeset
964 super(TestRepeat, self).__init__(**params)
94f5560de46d Uploaded
fubar
parents:
diff changeset
965
94f5560de46d Uploaded
fubar
parents:
diff changeset
966 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
967 return issubclass(type(child), TestParam) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
968 or issubclass(type(child), TestOutput) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
969 or issubclass(type(child), TestOutputCollection)
94f5560de46d Uploaded
fubar
parents:
diff changeset
970
94f5560de46d Uploaded
fubar
parents:
diff changeset
971 def command_line_before(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
972 return "<repeat name = '%s'>" % self.name
94f5560de46d Uploaded
fubar
parents:
diff changeset
973
94f5560de46d Uploaded
fubar
parents:
diff changeset
974 def command_line_after(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
975 return "</repeat>"
94f5560de46d Uploaded
fubar
parents:
diff changeset
976
94f5560de46d Uploaded
fubar
parents:
diff changeset
977 def command_line_actual(self, mako_path):
94f5560de46d Uploaded
fubar
parents:
diff changeset
978 lines = []
94f5560de46d Uploaded
fubar
parents:
diff changeset
979 for child in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
980 lines.append(child.command_line())
94f5560de46d Uploaded
fubar
parents:
diff changeset
981 return "\n".join(lines)
94f5560de46d Uploaded
fubar
parents:
diff changeset
982
94f5560de46d Uploaded
fubar
parents:
diff changeset
983
94f5560de46d Uploaded
fubar
parents:
diff changeset
984 class Citations(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
985 name = "citations"
94f5560de46d Uploaded
fubar
parents:
diff changeset
986
94f5560de46d Uploaded
fubar
parents:
diff changeset
987 def acceptable_child(self, child):
94f5560de46d Uploaded
fubar
parents:
diff changeset
988 return issubclass(type(child), Citation) \
94f5560de46d Uploaded
fubar
parents:
diff changeset
989 or isinstance(child, Expand)
94f5560de46d Uploaded
fubar
parents:
diff changeset
990
94f5560de46d Uploaded
fubar
parents:
diff changeset
991 def has_citation(self, type, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
992 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
993 Check the presence of a given citation.
94f5560de46d Uploaded
fubar
parents:
diff changeset
994
94f5560de46d Uploaded
fubar
parents:
diff changeset
995 :type type: STRING
94f5560de46d Uploaded
fubar
parents:
diff changeset
996 :type value: STRING
94f5560de46d Uploaded
fubar
parents:
diff changeset
997 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
998 for citation in self.children:
94f5560de46d Uploaded
fubar
parents:
diff changeset
999 if citation.node.attrib['type'] == type \
94f5560de46d Uploaded
fubar
parents:
diff changeset
1000 and citation.node.text == value:
94f5560de46d Uploaded
fubar
parents:
diff changeset
1001 return True
94f5560de46d Uploaded
fubar
parents:
diff changeset
1002 return False
94f5560de46d Uploaded
fubar
parents:
diff changeset
1003
94f5560de46d Uploaded
fubar
parents:
diff changeset
1004
94f5560de46d Uploaded
fubar
parents:
diff changeset
1005 class Citation(XMLParam):
94f5560de46d Uploaded
fubar
parents:
diff changeset
1006 name = "citation"
94f5560de46d Uploaded
fubar
parents:
diff changeset
1007
94f5560de46d Uploaded
fubar
parents:
diff changeset
1008 def __init__(self, type, value):
94f5560de46d Uploaded
fubar
parents:
diff changeset
1009 passed_kwargs = {}
94f5560de46d Uploaded
fubar
parents:
diff changeset
1010 passed_kwargs["type"] = type
94f5560de46d Uploaded
fubar
parents:
diff changeset
1011 super(Citation, self).__init__(**passed_kwargs)
94f5560de46d Uploaded
fubar
parents:
diff changeset
1012 self.node.text = str(value)