comparison env/lib/python3.7/site-packages/schema_salad/utils.py @ 0:26e78fe6e8c4 draft

"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author shellac
date Sat, 02 May 2020 07:14:21 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:26e78fe6e8c4
1 from __future__ import absolute_import
2
3 import json
4 import os
5 from typing import IO, Any, Dict, Mapping, MutableSequence
6
7 import six
8
9 # move to a regular typing import when Python 3.3-3.6 is no longer supported
10
11
12 def add_dictlist(di, key, val): # type: (Dict[Any, Any], Any, Any) -> None
13 if key not in di:
14 di[key] = []
15 di[key].append(val)
16
17
18 def aslist(l): # type: (Any) -> MutableSequence[Any]
19 """
20 Convenience function to wrap single items and lists.
21
22 Return lists unchanged.
23 """
24
25 if isinstance(l, MutableSequence):
26 return l
27 else:
28 return [l]
29
30
31 # http://rightfootin.blogspot.com/2006/09/more-on-python-flatten.html
32
33
34 def flatten(l, ltypes=(list, tuple)):
35 # type: (Any, Any) -> Any
36 if l is None:
37 return []
38 if not isinstance(l, ltypes):
39 return [l]
40
41 ltype = type(l)
42 lst = list(l)
43 i = 0
44 while i < len(lst):
45 while isinstance(lst[i], ltypes):
46 if not lst[i]:
47 lst.pop(i)
48 i -= 1
49 break
50 else:
51 lst[i : i + 1] = lst[i]
52 i += 1
53 return ltype(lst)
54
55
56 # Check if we are on windows OS
57 def onWindows():
58 # type: () -> (bool)
59 return os.name == "nt"
60
61
62 def convert_to_dict(j4): # type: (Any) -> Any
63 if isinstance(j4, Mapping):
64 return {k: convert_to_dict(v) for k, v in j4.items()}
65 elif isinstance(j4, MutableSequence):
66 return [convert_to_dict(v) for v in j4]
67 else:
68 return j4
69
70
71 def json_dump(
72 obj, # type: Any
73 fp, # type: IO[str]
74 **kwargs # type: Any
75 ): # type: (...) -> None
76 """ Force use of unicode. """
77 if six.PY2:
78 kwargs["encoding"] = "utf-8"
79 json.dump(convert_to_dict(obj), fp, **kwargs)
80
81
82 def json_dumps(
83 obj, # type: Any
84 **kwargs # type: Any
85 ): # type: (...) -> str
86 """ Force use of unicode. """
87 if six.PY2:
88 kwargs["encoding"] = "utf-8"
89 return json.dumps(convert_to_dict(obj), **kwargs)