Add meta.json persistence support

This commit is contained in:
Xevion
2022-05-07 23:57:18 -05:00
parent 407b456dae
commit 4009e6c8a7

View File

@@ -268,25 +268,32 @@ def meta() -> None:
logger.debug('Creating meta.json') logger.debug('Creating meta.json')
IDENTIFIERS_FILE = os.path.join(CHARACTERS_DIR, 'identifiers.xml') IDENTIFIERS_FILE = os.path.join(CHARACTERS_DIR, 'identifiers.xml')
META_FILE = os.path.join(TRUTH_DIR, 'meta.json')
with open(IDENTIFIERS_FILE, 'r') as identifiers_file: with open(IDENTIFIERS_FILE, 'r') as identifiers_file:
speakers: List[str] = etree.parse(identifiers_file).xpath('//SpeakerList/Speaker') speakers: List[str] = etree.parse(identifiers_file).xpath('//SpeakerList/Speaker')
logger.debug(f'{len(speakers)} speakers parsed.') logger.debug(f'{len(speakers)} speakers parsed.')
meta_data = OrderedDict() meta_data: OrderedDict[str, Optional[str]]
if os.path.exists(META_FILE):
with open(META_FILE, 'r') as meta_file:
meta_data = OrderedDict(json.load(meta_file))
else:
meta_data = OrderedDict()
for speaker in speakers: for speaker in speakers:
characters = speaker.xpath('./Characters/Character') or speaker.xpath('./Character') characters = speaker.xpath('./Characters/Character') or speaker.xpath('./Character')
for character in characters: for character in characters:
name = character.text name = character.text
type = character.attrib['type'] meta_type = character.attrib['type']
if type == 'null': if meta_type == 'null':
type = None meta_type = None
if type is not None or name not in meta_data.keys(): if meta_type is not None or name not in meta_data.keys():
meta_data[name] = type meta_data[name] = meta_type
logger.debug(f'Writing {len(meta_data.keys())} meta values to disk.') logger.debug(f'Writing {len(meta_data.keys())} meta values to disk.')
with open(os.path.join(TRUTH_DIR, 'meta.json'), 'w') as meta_file: with open(META_FILE, 'w') as meta_file:
json.dump(meta_data, meta_file, indent=4) json.dump(meta_data, meta_file, indent=4)
logger.debug('Meta file written.') logger.debug('Meta file written.')