def usage(self): message = 'Usage: {}'.format(self.name) for arg in self.arg_names: message += ' {}'.format(arg) Output.error(message)
class Tool: def __init__(self, arg_names): quiet = False args = [a.strip() for a in sys.argv[1:]] args = [a for a in args if len(a) > 0] if len(args) > 0 and args[0] == '-q': quiet = True args = args[1:] self.name = os.path.basename(sys.argv[0]) self.output = Output(quiet) self.arg_names = arg_names.split() self.arg_values = args self.arg_db = {} self.args_tail = self.arg_values[len(self.arg_names):] required_num = 0 optional_num = 0 for name in self.arg_names: if name[0] == '[' and name[-1] == ']': optional_num += 1 else: required_num += 1 # Optional args are only allowed after all required args if optional_num > 0: self.usage() if len(self.arg_values) < required_num: self.usage() for name, value in zip(self.arg_names, self.arg_values): self.arg_db[name] = value current_dir = os.path.dirname(__file__) self.dir_a2x = os.path.abspath(os.path.join(current_dir, '..', '..')) self.dir_bin = os.path.join(self.dir_a2x, 'bin') self.dir_cfg = os.path.join(os.environ['HOME'], '.config', 'a2x') self.dir_make = os.path.join(self.dir_a2x, 'make') self.dir_src = os.path.join(self.dir_a2x, 'src') if not os.path.exists(self.dir_cfg): os.makedirs(self.dir_cfg) elif not os.path.isdir(self.dir_cfg): self.output.error('{} is not a dir'.format(self.dir_cfg)) def title(self): self.output.colored('a', Color.LightBlue) self.output.colored('2', Color.LightGreen) self.output.colored('x', Color.Yellow) self.output.colored('{} '.format(self.name[3:]), Color.White) self.output.coloredln(' '.join(self.arg_values), Color.LightGray) def done(self): self.output.coloredln('[ Done ]', Color.LightGreen) def usage(self): message = 'Usage: {}'.format(self.name) for arg in self.arg_names: message += ' {}'.format(arg) self.output.error(message) def get_arg(self, name): if name in self.arg_db: return self.arg_db[name] else: return '' def get_arg_tail(self): return self.args_tail def main(self): self.output.error('{} does not implement main'.format(self.name)) def run(self): self.title() self.main() self.done() def writefile(self, name, contents): self.output.info('Writing file {}'.format(name)) with open(name, 'w') as f: f.write(contents) def readbytes(self, name): with open(name, 'rb') as f: return f.read() def readtext(self, name): with open(name, 'rU') as f: return f.read() def readtextlines(self, name): with open(name, 'rU') as f: return f.readlines() def listdir(self, path): if not os.path.isdir(path): self.output.error('{} is not a dir'.format(path)) return sorted(os.listdir(path)) def shell(self, cmd): self.output.shell(cmd) status, output = subprocess.getstatusoutput(cmd) if not self.output.quiet: for line in output.splitlines(): print(' {}'.format(line)) if status != 0: sys.exit(status) def sanitizeFileNameForCVar(self, FileName): return FileName.replace('.', '_').replace('-', '_').replace('/', '_')
class Tool: def __init__(self, ArgNames, FlagNames=''): required_num = 0 optional_num = 0 has_tail = False arg_names = ArgNames.split() flag_names = ['-q'] + FlagNames.split() self.name = os.path.basename(sys.argv[0]) self.out = Output(self) self.arg_names = arg_names self.arg_db = {} self.flag_names = flag_names self.flag_db = {} arg_values = [a.strip() for a in sys.argv[1:]] arg_values = [a for a in arg_values if len(a) > 0] for value in arg_values: if value in flag_names: self.flag_db[value] = True arg_values = arg_values[1:] else: break for name in arg_names: if has_tail: self.out.error('... must be the last argument') elif name == '...': if optional_num > 0: self.out.error('Cannot have both optional args and ...') has_tail = True elif name[0] == '[' and name[-1] == ']': optional_num += 1 elif optional_num > 0: self.out.error('Cannot have normal args after optional args') else: required_num += 1 if len(arg_values) < required_num: self.usage('All required arguments must be present') if has_tail: arg_names = arg_names[:-1] self.arg_db['...'] = arg_values[required_num:] for name, value in zip(arg_names, arg_values): self.arg_db[name] = value if 'FAUR_PATH' in os.environ: faur_path = os.environ['FAUR_PATH'] else: faur_path = f'{os.path.dirname(__file__)}/../..' self.dir_faur = os.path.realpath( os.path.expandvars(os.path.expanduser(faur_path))) self.dir_bin = f'{self.dir_faur}/bin' self.dir_cfg = f'{os.environ["HOME"]}/.config/faur' self.dir_make = f'{self.dir_faur}/make' self.dir_src = f'{self.dir_faur}/src' if not os.path.exists(self.dir_cfg): os.makedirs(self.dir_cfg) elif not os.path.isdir(self.dir_cfg): self.out.error(f'{self.dir_cfg} is not a dir') def usage(self, ErrorMessage=None): message = '' if ErrorMessage: message += ErrorMessage + '\n' message += f'Usage: {self.name}' for flag in self.flag_names: message += f' [{flag}]' for arg in self.arg_names: message += f' {arg}' self.out.error(message) def get_cmd(self): return ' '.join([os.path.basename(sys.argv[0])] + sys.argv[1:]) def get_arg(self, Name): if Name in self.arg_db: return self.arg_db[Name] else: return '' def get_flag(self, Flag): return Flag in self.flag_db def write_bytes(self, Name, Contents): with open(Name, 'wb') as f: f.write(bytes(Contents)) def write_text(self, Name, Contents): with open(Name, 'w') as f: f.write(Contents) def read_bytes(self, Name): with open(Name, 'rb') as f: return f.read() def read_text(self, Name): with open(Name, 'rU') as f: return f.read() def read_text_lines(self, Name): with open(Name, 'rU') as f: return f.readlines() def list_dir(self, Path): if not os.path.isdir(Path): self.out.error(f'{Path} is not a dir') entries = os.listdir(Path) entries.sort() return entries def check_files_exist(self, *Paths): for f in Paths: if not os.path.exists(f): self.out.error(f'{f} does not exist') def check_files_not_exist(self, *Paths): for f in Paths: if os.path.exists(f): self.out.error(f'{f} already exists') def shell(self, Cmd): self.out.shell(Cmd) status, output = subprocess.getstatusoutput(Cmd) for line in output.splitlines(): self.out.shell(f' {line}') if status != 0: sys.exit(status) def sanitize_c_var(self, Name): return Name.replace('.', '_').replace('-', '_').replace('/', '_')
def main(self): Output.error('{} does not implement main'.format(self.name))
class Tool: def __init__(self, arg_names): quiet = False args = [a.strip() for a in sys.argv[1 : ]] args = [a for a in args if len(a) > 0] if len(args) > 0 and args[0] == '-q': quiet = True args = args[1 : ] self.name = os.path.basename(sys.argv[0]) self.output = Output(quiet) self.arg_names = arg_names.split() self.arg_values = args self.arg_db = {} self.args_tail = self.arg_values[len(self.arg_names) :] required_num = 0 optional_num = 0 for name in self.arg_names: if name[0] == '[' and name[-1] == ']': optional_num += 1 else: required_num += 1 # Optional args are only allowed after all required args if optional_num > 0: self.usage() if len(self.arg_values) < required_num: self.usage() for name, value in zip(self.arg_names, self.arg_values): self.arg_db[name] = value current_dir = os.path.dirname(__file__) self.dir_a2x = os.path.abspath(os.path.join(current_dir, '..', '..')) self.dir_bin = os.path.join(self.dir_a2x, 'bin') self.dir_cfg = os.path.join(os.environ['HOME'], '.config', 'a2x') self.dir_make = os.path.join(self.dir_a2x, 'make') self.dir_src = os.path.join(self.dir_a2x, 'src') if not os.path.exists(self.dir_cfg): os.makedirs(self.dir_cfg) elif not os.path.isdir(self.dir_cfg): self.output.error('{} is not a dir'.format(self.dir_cfg)) def title(self): self.output.colored('a', Color.LightBlue) self.output.colored('2', Color.LightGreen) self.output.colored('x', Color.Yellow) self.output.colored('{} '.format(self.name[3 : ]), Color.White) self.output.coloredln(' '.join(self.arg_values), Color.LightGray) def done(self): self.output.coloredln('[ Done ]', Color.LightGreen) def usage(self): message = 'Usage: {}'.format(self.name) for arg in self.arg_names: message += ' {}'.format(arg) self.output.error(message) def get_arg(self, name): if name in self.arg_db: return self.arg_db[name] else: return '' def get_arg_tail(self): return self.args_tail def main(self): self.output.error('{} does not implement main'.format(self.name)) def run(self): self.title() self.main() self.done() def writefile(self, name, contents): self.output.info('Writing file {}'.format(name)) with open(name, 'w') as f: f.write(contents) def readbytes(self, name): with open(name, 'rb') as f: return f.read() def readtext(self, name): with open(name, 'rU') as f: return f.read() def readtextlines(self, name): with open(name, 'rU') as f: return f.readlines() def listdir(self, path): if not os.path.isdir(path): self.output.error('{} is not a dir'.format(path)) return sorted(os.listdir(path)) def shell(self, cmd): self.output.shell(cmd) status, output = subprocess.getstatusoutput(cmd) if not self.output.quiet: for line in output.splitlines(): print(' {}'.format(line)) if status != 0: sys.exit(status) def sanitizeFileNameForCVar(self, FileName): return FileName.replace('.', '_').replace('-', '_').replace('/', '_')