Switched from using os library for path utilites to pathlib
This commit is contained in:
parent
746a396902
commit
2e33439b6c
@ -1,50 +0,0 @@
|
|||||||
import zipfile
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import logging
|
|
||||||
|
|
||||||
|
|
||||||
def get_mod_info(target_file):
|
|
||||||
with zipfile.ZipFile(target_file) as z:
|
|
||||||
info_files = [f for f in z.filelist if not f.is_dir() and '.info' in f.filename.lower()]
|
|
||||||
rtn_json = json.loads(z.read(info_files[0]))[0]
|
|
||||||
rtn_json['path'] = target_file
|
|
||||||
return rtn_json
|
|
||||||
|
|
||||||
|
|
||||||
def get_modpack_info(target_dir):
|
|
||||||
for f in os.scandir(target_dir):
|
|
||||||
if f.is_file():
|
|
||||||
if '.jar' in f.name.lower():
|
|
||||||
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='.'):
|
|
||||||
modpack_info = list(get_modpack_info(directory))
|
|
||||||
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__":
|
|
||||||
args = {arg.lower(): val for arg, val in (a[2:].split('=') for a in sys.argv if '--' in a.lower())}
|
|
||||||
main(r"C:\Users\VY Canis Majoris\AppData\Roaming\.moddedminecraft\1.12\1.12.2\Sinkhole\mods")
|
|
60
GlowstoneDust.py
Normal file
60
GlowstoneDust.py
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import zipfile
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
class MinecraftMod:
|
||||||
|
def __init__(self, fileName, filePath, modid, parentMods=None):
|
||||||
|
self.parentMods = parentMods or []
|
||||||
|
self.fileName = fileName
|
||||||
|
self.filePath = filePath
|
||||||
|
self.modid = modid
|
||||||
|
|
||||||
|
|
||||||
|
def get_mod_info(target_file: Path):
|
||||||
|
with zipfile.ZipFile(target_file) as z:
|
||||||
|
info_files = [f for f in z.filelist if not f.is_dir() and '.info' in f.filename.lower()]
|
||||||
|
rtn_json = json.loads(z.read(info_files[0]))[0]
|
||||||
|
rtn_json['path'] = target_file
|
||||||
|
return MinecraftMod(
|
||||||
|
fileName=z.filename,
|
||||||
|
filePath=z.filename,
|
||||||
|
modid=rtn_json['modid'],
|
||||||
|
parentMods=rtn_json.get('dependencies', [])
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_modpack_info(target_dir: Path):
|
||||||
|
for f in target_dir.glob('*.jar'):
|
||||||
|
try:
|
||||||
|
yield get_mod_info(f)
|
||||||
|
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 unhandled error: {e}")
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
def main(directory=Path('.')):
|
||||||
|
modpack_info = list(get_modpack_info(directory))
|
||||||
|
root_mods = [mp for mp in modpack_info if not mp.parentMods]
|
||||||
|
dependant_mods = [mp for mp in modpack_info if mp.parentMods]
|
||||||
|
|
||||||
|
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.parentMods]
|
||||||
|
})
|
||||||
|
|
||||||
|
print(json.dumps(mod_tree, indent=4))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
args = {arg.lower(): val for arg, val in (a[2:].split('=') for a in sys.argv if '--' in a.lower())}
|
||||||
|
logging.getLogger().setLevel(logging.DEBUG)
|
||||||
|
main(Path(r"C:\Users\VY Canis Majoris\AppData\Roaming\.moddedminecraft\1.12\1.12.2\Sinkhole\mods"))
|
Loading…
x
Reference in New Issue
Block a user