Beispiel #1
0
    def usage(self):
        message = 'Usage: {}'.format(self.name)

        for arg in self.arg_names:
            message += ' {}'.format(arg)

        Output.error(message)
Beispiel #2
0
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('/', '_')
Beispiel #3
0
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('/', '_')
Beispiel #4
0
 def main(self):
     Output.error('{} does not implement main'.format(self.name))
Beispiel #5
0
Datei: tool.py Projekt: alxm/a2x
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('/', '_')