import importlib import os from os import path FORMATS = ''' bootinfo parcels powerpc supermario '''.split() class WrongFormat(Exception): pass def build_dir(p): for fmt in FORMATS: mod = importlib.import_module('..%s_build' % fmt, __name__) try: data = mod.build(p) except WrongFormat: continue print(fmt) return data raise WrongFormat def build(p): parent = path.dirname(path.abspath(p)) name = path.basename(path.abspath(p)) # try building the file from a directory for np in [p + '.src', p]: try: data = build_dir(np) except WrongFormat: pass else: break else: # fall back on just reading the file (boring, I know!) with open(p, 'rb') as f: data = f.read() return data def dump(binary, dest_path, toplevel=False): if not toplevel: with open(dest_path, 'wb') as f: f.write(binary) dest_path += '.src' for fmt in FORMATS: mod = importlib.import_module('..%s_dump' % fmt, __name__) try: arg = binary if isinstance(arg, tuple) and fmt != 'bootinfo': arg = arg[0] # strip found resource fork mod.dump(arg, dest_path) print(fmt) break except WrongFormat: pass