utils.py
2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import re
from ..datasets import EXTRA, FILENAMES
class JsCode:
def __init__(self, js_code: str):
self.js_code = "--x_x--0_0--" + js_code + "--x_x--0_0--"
def replace(self, pattern: str, repl: str):
self.js_code = re.sub(pattern, repl, self.js_code)
return self
class OrderedSet:
def __init__(self, *args):
self._values = dict()
self.items = []
for a in args:
self.add(a)
def add(self, *items):
for item in items:
if not self._values.get(item, False):
self._values.update({item: True})
self.items.append(item)
def produce_require_dict(js_dependencies, js_host) -> dict:
confs, libraries = [], []
for name in js_dependencies.items:
if name.startswith("https://api.map.baidu.com"):
confs.append("'baidu_map_api{}':'{}'".format(len(name), name))
libraries.append("'baidu_map_api{}'".format(len(name)))
if name in FILENAMES:
f, _ = FILENAMES[name]
confs.append("'{}':'{}{}'".format(name, js_host, f))
libraries.append("'{}'".format(name))
else:
for url, files in EXTRA.items():
if name in files:
f, _ = files[name]
confs.append("'{}':'{}{}'".format(name, url, f))
libraries.append("'{}'".format(name))
break
return dict(config_items=confs, libraries=libraries)
def replace_placeholder(html: str) -> str:
return re.sub('"?--x_x--0_0--"?', "", html)
def replace_placeholder_with_quotes(html: str) -> str:
return re.sub("--x_x--0_0--", "", html)
def _flat(obj):
if hasattr(obj, "js_dependencies"):
return list(obj.js_dependencies)
if isinstance(obj, (list, tuple, set)):
return obj
return (obj,) # tuple
def _expand(dict_generator):
return dict(list(dict_generator))
def _clean_dict(mydict):
for key, value in mydict.items():
if value is not None:
if isinstance(value, dict):
value = _expand(_clean_dict(value))
elif isinstance(value, (list, tuple, set)):
value = list(_clean_array(value))
elif isinstance(value, str) and not value:
# delete key with empty string
continue
yield (key, value)
def _clean_array(myarray):
for value in myarray:
if isinstance(value, dict):
yield _expand(_clean_dict(value))
elif isinstance(value, (list, tuple, set)):
yield list(_clean_array(value))
else:
yield value
def remove_key_with_none_value(incoming_dict):
if isinstance(incoming_dict, dict):
return _expand(_clean_dict(incoming_dict))
elif incoming_dict:
return incoming_dict
else:
return None