From 7592a94479a04c1c6abb52e00a19493ddc11fc39 Mon Sep 17 00:00:00 2001 From: Raphael Roberts Date: Sun, 4 Nov 2018 16:47:29 -0600 Subject: [PATCH] made globals/save whitelist instead of blacklist and tested --- ext_open/ext_open.py | 6 ++++-- ext_open/opts.py | 46 ++++++++++++++++++++++++++------------------ ext_open/util.py | 2 +- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/ext_open/ext_open.py b/ext_open/ext_open.py index 87e83c5..b09faa2 100644 --- a/ext_open/ext_open.py +++ b/ext_open/ext_open.py @@ -16,9 +16,11 @@ for ext in exts: for opt in ext['opts']+common: opt = opt.copy() sub_parser.add_argument(*opt.pop('ostring'),**opt) +debug = True if __name__ == '__main__': args = parser.parse_args() - ext = arsg.ext +if not debug and __name__ == "__main__": + ext = args.ext s = searcher.Searcher(ext,args.case_insensitive) if args.update: s.update() @@ -32,7 +34,7 @@ if __name__ == '__main__': if len(matches) == 1: row = matches[0] else: - row = picker(matches + row = picker(matches) path = row[-1] if args.path: print(path) diff --git a/ext_open/opts.py b/ext_open/opts.py index c7067a7..6c8ea41 100644 --- a/ext_open/opts.py +++ b/ext_open/opts.py @@ -6,21 +6,18 @@ class ArgumentHandler: self.args_file = args_file self.exts = set() - - with open(self.args_file) as file: - self.data = json.load(file) + self.reload() for _ext in self.data['exts']: ext = _ext['ext'] self.exts.add(ext) args = _ext['opts'] - - self.set(ext,ArgumentContainer(args)) + self.set(ext,ArgumentContainer(args,self.data['prefix'])) for key,value in self.data.items(): if key != 'exts' and isinstance(value,list): - self.set(key,ArgumentContainer(value)) + self.set(key,ArgumentContainer(value,self.data['prefix'])) self.prefix_char = self.data['prefix_char'] @@ -30,23 +27,26 @@ class ArgumentHandler: 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()}) - valid = set(self.__dict__.keys()) - self.exts - valid -= {'self.args_file'} - for key in valid: + 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 add_ext(self,ext): - self.set(ext,ArgumentContainer([])) - self.exts.add(ext) - def commit(self): backup_name = self.args_file + '.bak' if os.path.exists(backup_name): @@ -62,14 +62,22 @@ class ArgumentHandler: os.rename(backup_name,self.args_file) class ArgumentContainer: - def __init__(self,l_of_args): + 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 = {'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) for arg in self.args) + return self._argnames def to_dict(self): return copy.deepcopy(self.args) @@ -83,5 +91,5 @@ class ArgumentContainer: return str(self) cur = ArgumentHandler('opts.json') -globals().update(cur.data) -common = bools+other +globals().update((key,cur.data[key]) for key in ['bools', 'exe', 'exts', 'other', 'prefix', 'prefix_char']) +common = bools+other \ No newline at end of file diff --git a/ext_open/util.py b/ext_open/util.py index 22c5074..0738fc2 100644 --- a/ext_open/util.py +++ b/ext_open/util.py @@ -18,7 +18,7 @@ def get_drives(): bitmask = windll.kernel32.GetLogicalDrives() for letter in uppercase: if bitmask & 1: - drives.append('{letter}:\\'.format(letter=letter) + drives.append('{letter}:\\'.format(letter=letter)) bitmask >>= 1 return drives