|
|
from config import ROOTimport copyimport jsonimport osimport shutil
class ArgumentHandler: def __init__(self,args_file):
self.args_file = args_file self.exts = set() self.reload()
for _ext in self.data['exts']:
ext = _ext['ext'] self.exts.add(ext) args = _ext['opts'] self.set(ext,ArgumentContainer(args,self.data['prefix_char']))
for key,value in self.data.items(): if key != 'exts' and isinstance(value,list): self.set(key,ArgumentContainer(value,self.data['prefix_char']))
self.prefix_char = self.data['prefix_char']
def get(self,item): return self.__dict__[item]
def set(self,item,value): self.__dict__[item] = value
def add_ext(self,ext): self.set(ext,ArgumentContainer([])) self.exts.add(ext)
def reload(self): with open(self.args_file) as file: self.data = json.load(file)
def save(self): data = [] for ext in self.exts: data.append({'ext':ext,'opts':self.get(ext).to_dict()}) self.data['exts'] = data for key in ['bools', 'exe', 'exts', 'prefix', 'prefix_char']: value = self.get(key) if isinstance(value,str): self.data[key] = value elif isinstance(value,ArgumentContainer): self.data[key] = value.to_dict()
def commit(self): backup_name = self.args_file + '.bak' if os.path.exists(backup_name): os.remove(backup_name) shutil.copy(self.args_file,backup_name) with open(self.args_file,'w') as file: json.dump(self.data,file)
def revert(self): backup_name = self.args_file + '.bak' if os.path.exists(backup_name): os.remove(self.args_file) os.rename(backup_name,self.args_file)
class ArgumentContainer: def __init__(self,l_of_args,prefix): self.args = l_of_args self._argnames = None self.prefix = prefix
def add_argument(self,*args,**kwargs): new_arg = {'ostring': args,} new_arg.update(kwargs) self.args.append(new_arg) self._argnames = None
@property def argnames(self): if self._argnames is None: self._argnames = set(max(arg['ostring'],key=len).lstrip(self.prefix).replace('-','_') for arg in self.args) return self._argnames
def to_dict(self): return copy.deepcopy(self.args)
def __str__(self): ostrings = (opt['ostring'] for opt in self.args) f_ostrings = ('({})'.format(', '.join(ostring)) for ostring in ostrings) return '[{}]'.format(', '.join(f_ostrings))
def __repr__(self): return str(self)
cur = ArgumentHandler(os.path.join(ROOT,'opts.json'))globals().update((key,cur.data[key]) for key in ['bools', 'exe', 'exts', 'other', 'prefix', 'prefix_char'])common = bools+otherexe += bools
|