pathfinder-2-sqlite-MIRROR/data/yaml/clean-up-monsters.py

165 lines
4.6 KiB
Python

import yaml
import re
def main():
with open("monsters.yaml", 'r') as content_file:
data = yaml.full_load(content_file)
counter = 0
for i in data:
counter += 1
print("{}\t{}".format(counter, i['name']))
# Set some data points before iteration
i['saves_special'] = {}
# clean up ability mods
for k, v in i['ability_mods'].items():
i['ability_mods'][k] = int(v)
# print(k, i['ability_mods'][k])
# clean up skills
for k, v in i['skills'].items():
i['skills'][k] = int(v)
# print(k, i['ability_mods'][k])
# clean up saves
for k, v in i['saves'].items():
# print(k, v)
i['saves_special'][k] = None
if ',' in v:
# print("WE GOT A COMMA")
i['saves'][k] = v.replace(',', '')
if ';' in v:
# print("WE GOT A SPECIAL")
a = v.split('; ')
# print(a)
i['saves_special'][k] = a[1]
i['saves'][k] = a[0]
elif '(' in v:
#print("we got a parentheses")
#print(v)
a = v.split(' (')
# print(a)
i['saves_special'][k] = a[1]
i['saves'][k] = a[0]
i['saves'][k] = int(i['saves'][k])
# print(k, i['saves'][k])
# clean up immunities
if i['immunities'] == "None":
i['immunities'] = None
else:
tmp = i['immunities']
splits = tmp.split(',')
res = []
for z in splits:
res.append(z.strip())
i['immunities'] = res
# clean up traits with trailing or leading whitespace
traitslist = []
print(i['traits'])
for x in i['traits']:
traitslist.append(x.strip())
print(x.strip())
print(traitslist)
i['traits'] = traitslist
# clean up traits underneath proactive actions with trailing or leading whitespace
print(i['proactive_abilities'])
for x in i['proactive_abilities']:
traitslist = []
if x['traits'] != None:
if len(x['traits']) == 0:
x['traits'] = None
else:
for y in x['traits']:
traitslist.append(y.strip())
print(y.strip())
x['traits'] = traitslist
# clean up senses
senseslist = []
if i['senses'] != None:
if len(i['senses']) == 0:
i['senses'] = None
else:
for x in i['senses']:
senseslist.append(x.strip())
i['senses'] = senseslist
# clean up spell DC
if i['spell_dc'] == "None":
i['spell_dc'] = None
else:
i['spell_dc'] = int(i['spell_dc'])
# clean up innate_spell levels
if 'innate_spells' not in i:
i['innate_spells'] = None
elif i['innate_spells'] == "None":
i['innate_spells'] = None
else:
for x in i['innate_spells']:
x['level'] = int(x['level'])
# clean up resistances
# set Nones to null
if i['resistances'] == "None":
i['resistances'] = None
# remove trailing ;
elif i['resistances'].endswith(";"):
i['resistances'] = i['resistances'][:-1]
#print("\t{}".format(i['resistances']))
if i['resistances'] != None:
#print("{}\t{}".format(counter, i['name']))
#print("\t{}".format(i['resistances']))
res = processResistances(i['resistances'])
i['resistances'] = res
#print(res)
final = yaml.safe_dump(data, allow_unicode=True)
with open("tmp-monsters.yaml", 'w') as f:
f.write(final)
def processResistances(r):
if '(' in r:
# TODO This is what needs to be done
#print("\t\tTODO: Need to process with parentheses")
return r
else:
#print("\t\tNo parentheses")
# split on commas
res = r.split(',')
#print(r.split(','))
#print(res)
results_list = []
for i in res:
#print(i)
#tmp = re.search('(\d+)', i)
#print(tmp.groups())
tmp = re.split('(\d+)', i)
#print(tmp)
tmpres = {"type": tmp[0].strip(), "amount": int(tmp[1])}
results_list.append(tmpres)
return results_list
return "Something went wrong"
if __name__ == "__main__":
main()