Added logging, created basic mod tree

This commit is contained in:
harmacist 2021-03-27 01:02:42 -05:00
parent c1778e3caf
commit 2afa8b4ddb

View File

@ -2,25 +2,47 @@ import zipfile
import json import json
import os import os
import sys import sys
import logging
def get_mod_info(target_file): def get_mod_info(target_file):
with zipfile.ZipFile(target_file) as z: with zipfile.ZipFile(target_file) as z:
return json.loads(z.read('mcmod.info'))[0] info_files = [f for f in z.filelist if not f.is_dir() and '.info' in f.filename.lower()]
return json.loads(z.read(info_files[0]))[0]
def get_modpack_info(target_dir): def get_modpack_info(target_dir):
for f in os.scandir(target_dir): for f in os.scandir(target_dir):
if f.is_file(): if f.is_file():
if '.jar' in f.name.lower(): if '.jar' in f.name.lower():
yield get_mod_info(f.path) try:
yield get_mod_info(f.path)
except (KeyError, IndexError) as e:
logging.warning(f'There is no .info in the file {f.name}!')
logging.debug(f"{e}")
except json.decoder.JSONDecodeError as e:
logging.warning(f"The file {f.name} has a corrupted or malformed .info file - skipping!")
except BaseException as e:
logging.fatal(f"While parsing file {f.name}, encountered the following error: {e}")
raise e
def main(directory='.'): def main(directory='.'):
modpack_info = list(get_modpack_info(directory)) modpack_info = list(get_modpack_info(directory))
print(json.dumps(modpack_info, indent=2)) root_mods = [mp for mp in modpack_info if not mp.get('dependencies')]
# print(json.dumps(modpack_info, indent=2))
# print(json.dumps(root_mods, indent=4))
dependant_mods = [mp for mp in modpack_info if mp.get('dependencies')]
mod_tree = []
for root_mod in root_mods:
mod_tree.append({
root_mod['modid']: [mod['modid'] for mod in dependant_mods if root_mod['modid'] in mod['dependencies']]
})
print(json.dumps(mod_tree, indent=4))
if __name__ == "__main__": if __name__ == "__main__":
args = {arg.lower(): val for arg, val in (a[2:].split('=') for a in sys.argv if '--' in a.lower())} args = {arg.lower(): val for arg, val in (a[2:].split('=') for a in sys.argv if '--' in a.lower())}
main(args.get('modpack_path', '.')) main(r"C:\Users\VY Canis Majoris\OneDrive\Games\Minecraft\Modded Packs\1.12\1.12.2\Sinkhole")