forked from compat-table/compat-table
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupload_parse.py
108 lines (83 loc) · 3.25 KB
/
upload_parse.py
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
106
107
108
import json
import re
from pathlib import Path
RE_OS_VERSION = re.compile(r"(.*) \(.*\)")
envs_filename = "internalEnvs.json"
results_filename = "internalResults.json"
custom_folder = Path("./custom/")
upload_folder = Path("./upload/")
try:
with (custom_folder / envs_filename).open("r") as f:
envs = json.loads(f.read())
except Exception:
print("failed to parse JSON, building envs from zero")
envs = {}
try:
with (custom_folder / results_filename).open("r") as f:
results = json.loads(f.read())
except Exception:
print("failed to parse JSON, building results from zero")
results = {}
for child in upload_folder.iterdir():
if child.name == ".gitignore":
continue
with child.open("r") as f:
child_data = json.loads(f.read())
es_version = child_data["esVersion"]
os_version = child_data["osVersion"]
player_version = child_data["playerVersion"]
child_results = child_data["results"]
id_version = os_version
full_version = os_version
short_version = os_version
# We use \u00A0 as a non-breakable whitespace
try:
if os_version.startswith("Windows"):
major = int(player_version.split(".")[0])
if major >= 10:
short_version = "Windows/Linux/macOS Player\u00A0>=\u00A010"
else:
short_version = "Windows/Linux/macOS Player\u00A0< 10"
id_version = f"QT {player_version}"
full_version = short_version.replace("\u00A0", " ")
else:
short_version = RE_OS_VERSION.match(os_version)[1].replace("BrightSign", "BrightSignOS")
id_version = short_version
full_version = short_version
short_version = short_version.replace(" ", "\u00A0")
except Exception:
short_version = short_version.replace(" ", "\u00A0")
pass
id_version = id_version.replace(" ", "_").replace(".", "_")
if id_env := envs.get(id_version):
if id_env["playerversion"] > player_version:
continue
envs[id_version] = {
"full": full_version,
"short": short_version,
"family": "",
"release": "1970-01-01",
"osversion": os_version,
"playerversion": player_version,
}
if es_version not in results:
results[es_version] = {}
es_results = results[es_version]
for child_test, child_subtests in child_results.items():
if child_test not in es_results:
es_results[child_test] = {"subtests": {}}
if isinstance(child_subtests, bool):
child_subtests = {child_test: child_subtests}
subtest_results = es_results
else:
subtest_results = es_results[child_test]["subtests"]
for child_subtest, child_value in child_subtests.items():
if child_subtest not in subtest_results:
subtest_results[child_subtest] = {}
subtest_results[child_subtest][id_version] = child_value
# Redefine 'envs' in sorted order so 'json.dumps' will dump sorted values
envs = {k: envs[k] for k in sorted(envs)}
with (custom_folder / envs_filename).open("w") as f:
f.write(json.dumps(envs, indent=2))
with (custom_folder / results_filename).open("w") as f:
f.write(json.dumps(results, indent=2))