annotate toolfactory/galaxyxml/__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 from builtins import (
94f5560de46d Uploaded
fubar
parents:
diff changeset
2 object,
94f5560de46d Uploaded
fubar
parents:
diff changeset
3 str
94f5560de46d Uploaded
fubar
parents:
diff changeset
4 )
94f5560de46d Uploaded
fubar
parents:
diff changeset
5
94f5560de46d Uploaded
fubar
parents:
diff changeset
6 from lxml import etree
94f5560de46d Uploaded
fubar
parents:
diff changeset
7
94f5560de46d Uploaded
fubar
parents:
diff changeset
8
94f5560de46d Uploaded
fubar
parents:
diff changeset
9 class GalaxyXML(object):
94f5560de46d Uploaded
fubar
parents:
diff changeset
10 def __init__(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
11 self.root = etree.Element("root")
94f5560de46d Uploaded
fubar
parents:
diff changeset
12
94f5560de46d Uploaded
fubar
parents:
diff changeset
13 def export(self):
94f5560de46d Uploaded
fubar
parents:
diff changeset
14 return etree.tostring(self.root, pretty_print=True, encoding="unicode")
94f5560de46d Uploaded
fubar
parents:
diff changeset
15
94f5560de46d Uploaded
fubar
parents:
diff changeset
16
94f5560de46d Uploaded
fubar
parents:
diff changeset
17 class Util(object):
94f5560de46d Uploaded
fubar
parents:
diff changeset
18 @classmethod
94f5560de46d Uploaded
fubar
parents:
diff changeset
19 def coerce(cls, data, kill_lists=False):
94f5560de46d Uploaded
fubar
parents:
diff changeset
20 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
21 Recursive data sanitisation
94f5560de46d Uploaded
fubar
parents:
diff changeset
22
94f5560de46d Uploaded
fubar
parents:
diff changeset
23 - recurse into lists, dicts, OrderedDict
94f5560de46d Uploaded
fubar
parents:
diff changeset
24 - remove dict/OrderedDict entries with None value
94f5560de46d Uploaded
fubar
parents:
diff changeset
25 - kill_lists: True -> replace lists by their first element
94f5560de46d Uploaded
fubar
parents:
diff changeset
26 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
27 if isinstance(data, dict):
94f5560de46d Uploaded
fubar
parents:
diff changeset
28 return {k: cls.coerce(v, kill_lists=kill_lists) for k, v in list(data.items()) if v is not None}
94f5560de46d Uploaded
fubar
parents:
diff changeset
29 elif isinstance(data, list):
94f5560de46d Uploaded
fubar
parents:
diff changeset
30 if kill_lists:
94f5560de46d Uploaded
fubar
parents:
diff changeset
31 return cls.coerce(data[0])
94f5560de46d Uploaded
fubar
parents:
diff changeset
32 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
33 return [cls.coerce(v, kill_lists=kill_lists) for v in data]
94f5560de46d Uploaded
fubar
parents:
diff changeset
34 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
35 return cls.coerce_value(data)
94f5560de46d Uploaded
fubar
parents:
diff changeset
36
94f5560de46d Uploaded
fubar
parents:
diff changeset
37 @classmethod
94f5560de46d Uploaded
fubar
parents:
diff changeset
38 def coerce_value(cls, obj):
94f5560de46d Uploaded
fubar
parents:
diff changeset
39 """Make everything a string!
94f5560de46d Uploaded
fubar
parents:
diff changeset
40 """
94f5560de46d Uploaded
fubar
parents:
diff changeset
41 if isinstance(obj, bool):
94f5560de46d Uploaded
fubar
parents:
diff changeset
42 if obj:
94f5560de46d Uploaded
fubar
parents:
diff changeset
43 return "true"
94f5560de46d Uploaded
fubar
parents:
diff changeset
44 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
45 return "false"
94f5560de46d Uploaded
fubar
parents:
diff changeset
46 elif isinstance(obj, str):
94f5560de46d Uploaded
fubar
parents:
diff changeset
47 return obj
94f5560de46d Uploaded
fubar
parents:
diff changeset
48 else:
94f5560de46d Uploaded
fubar
parents:
diff changeset
49 return str(obj)
94f5560de46d Uploaded
fubar
parents:
diff changeset
50
94f5560de46d Uploaded
fubar
parents:
diff changeset
51 @classmethod
94f5560de46d Uploaded
fubar
parents:
diff changeset
52 def clean_kwargs(cls, params, final=False):
94f5560de46d Uploaded
fubar
parents:
diff changeset
53 if "kwargs" in params:
94f5560de46d Uploaded
fubar
parents:
diff changeset
54 kwargs = params["kwargs"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
55 for k in kwargs:
94f5560de46d Uploaded
fubar
parents:
diff changeset
56 params[k] = kwargs[k]
94f5560de46d Uploaded
fubar
parents:
diff changeset
57 del params["kwargs"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
58 if "self" in params:
94f5560de46d Uploaded
fubar
parents:
diff changeset
59 del params["self"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
60
94f5560de46d Uploaded
fubar
parents:
diff changeset
61 if "__class__" in params:
94f5560de46d Uploaded
fubar
parents:
diff changeset
62 del params["__class__"]
94f5560de46d Uploaded
fubar
parents:
diff changeset
63
94f5560de46d Uploaded
fubar
parents:
diff changeset
64 # There will be more params, it would be NICE to use a whitelist
94f5560de46d Uploaded
fubar
parents:
diff changeset
65 # instead of a blacklist, but until we have more data let's just
94f5560de46d Uploaded
fubar
parents:
diff changeset
66 # blacklist stuff we see commonly.
94f5560de46d Uploaded
fubar
parents:
diff changeset
67 if final:
94f5560de46d Uploaded
fubar
parents:
diff changeset
68 for blacklist in ("positional",):
94f5560de46d Uploaded
fubar
parents:
diff changeset
69 if blacklist in params:
94f5560de46d Uploaded
fubar
parents:
diff changeset
70 del params[blacklist]
94f5560de46d Uploaded
fubar
parents:
diff changeset
71 return params