-
Notifications
You must be signed in to change notification settings - Fork 0
/
fixup_pagejson.py
180 lines (136 loc) · 4.79 KB
/
fixup_pagejson.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import asyncio
import glob
import json
import shutil
import os
def collapse_pkgs(p):
mods = p['modules']
# map everything to one package
d = []
for v in mods.values():
d += v
p['modules'] = { p['title']: d }
def x13_dead_end_drive(p):
p['modules'] = {
'Spanish': [ m for v in p['modules'].values() for m in v ]
}
def x1914_glorys_end(p):
p['modules'] = {
"Glory's End": p['modules']["1.0 Glory's End"],
'When Eagles Fight': p['modules']['1.0 When Eagles Fight']
}
def apuren_el(p):
p['title'] = '¡' + p['title']
def arriba_espana(p):
p['title'] = '¡Arriba España!'
def assault_of_the_dead(p):
p['modules']['Alternate Version'] = p['modules']['1.0 Alternate Version']
del p['modules']['1.0 Alternate Version']
def battle_of_corinth(p):
jatc = p['modules']['Jackson at the Crossroads, v 1.0']
del p['modules']['Jackson at the Crossroads, v 1.0']
p['modules'] = {
'Jackson at the Crossroads': jatc,
'Corinth': [ m for v in p['modules'].values() for m in v ]
}
def yggdrasil(p):
p['modules']['Dark Eclipse'] += p['modules'].pop('Dark Eclipse v2.0')
def wacht_am_rhein(p):
p['title'] = "'" + p['title']
p['modules'] = {
'North is up Orientation': [
*p['modules']["1.0 North is up Orientation"],
*p['modules']["1.1 North is up Orientation"]
],
'East is up Orientation': [
*p['modules']["1.42 East is up Orientation"],
*p['modules']["1.3 East is up Orientation"]
]
}
fixups = {
# 0-9
'13 Dead End Drive': x13_dead_end_drive,
'1914': collapse_pkgs,
"1914: Glory's End / When Eagles Fight": x1914_glorys_end,
'1936: Guerra Civil': collapse_pkgs,
'1985: Under an Iron Sky': collapse_pkgs,
'300: Earth & Water': collapse_pkgs,
# A
'A las Barricadas! (2nd Edition)': collapse_pkgs,
'Aces of Valor': collapse_pkgs,
'Across Suez': collapse_pkgs,
'Age of Dogfights: WW1': collapse_pkgs,
'Age of Muskets Volume I: Tomb for an Empire': collapse_pkgs,
'Aegean Strike': collapse_pkgs,
'Air Superiority': collapse_pkgs,
'Airborne in My Pocket': collapse_pkgs,
'Alien Frontiers': collapse_pkgs,
'All Things Zombie: The Boardgame': collapse_pkgs,
'Ancient Civilizations of the Inner Sea': collapse_pkgs,
'Andean Abyss': collapse_pkgs,
'Apuren el corralito!: The 2nd Battle of Alihuatá, December 1933': apuren_el,
'Arcole 1796': collapse_pkgs,
'Ardennes II': collapse_pkgs,
'The Ardennes Offensive: The Battle of the Bulge, December 1944': collapse_pkgs,
'Arena: Roma II': collapse_pkgs,
'Arracourt': collapse_pkgs,
'Arriba Espana!': arriba_espana,
'Ashes: Rise of the Phoenixborn': collapse_pkgs,
'Assault of the Dead: Tactics': assault_of_the_dead,
'Atlanta': collapse_pkgs,
'Attack Sub': collapse_pkgs,
'Austerlitz': collapse_pkgs,
'Austerlitz 1805': collapse_pkgs,
'Axis & Allies': collapse_pkgs,
'Axis & Allies Naval Miniatures: War at Sea': collapse_pkgs,
# B
'Balkan Front': collapse_pkgs,
'Band of Brothers': collapse_pkgs,
'BAOR': collapse_pkgs,
'The Battle of Corinth: Standoff at the Tennessee, October 3-4, 1862': battle_of_corinth,
'The Blitzkrieg Legend: The Battle for France, 1940': collapse_pkgs,
# C
'The Caucasus Campaign: The Russo-German War in the Caucasus, 1942': collapse_pkgs,
'Crossing the Line: Aachen 1944': collapse_pkgs,
# U
'UND1C1': collapse_pkgs,
'Universe Risk': collapse_pkgs,
'Utopia Engine': collapse_pkgs,
# V
'Valor and Victory': collapse_pkgs,
'Victory in Vietnam': collapse_pkgs,
# W
"Wacht am Rhein': The Battle of the Bulge, 16 Dec 44-2 Jan 45": wacht_am_rhein,
'War At Sea': collapse_pkgs,
'The War At Sea (first edition)': collapse_pkgs,
'WARLINE: Maneuver Strategy & Tactics': collapse_pkgs,
# Y
'Ye Gods!': collapse_pkgs,
'Yggdrasil': yggdrasil,
# Z
'Zeppelin Raider': collapse_pkgs,
'Zürich 1799': collapse_pkgs
}
# # map each package individually
# for k, v in pmap.items():
# d = mods.setdefault(v, [])
# d += mods.pop(k)
async def fixup_page(path):
print(path)
with open(path, 'r') as f:
p = json.load(f)
fixup = fixups.get(p['title'], None)
if fixup is not None:
fixup(p)
with open(path, 'w') as f:
json.dump(p, f, indent=2)
async def run():
ipath = 'data/pagejson'
opath = 'data/pagejson_fixed'
shutil.copytree(ipath, opath, dirs_exist_ok=True)
async with asyncio.TaskGroup() as tg:
for f in glob.glob(f"{opath}/[0-9]*.json"):
tg.create_task(fixup_page(f))
print('')
if __name__ == '__main__':
asyncio.run(run())