Пример #1
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(
            formatter_class=argparse.RawTextHelpFormatter,
            prog=aetros.const.__prog__ + ' job-pull')
        parser.add_argument(
            'id',
            help=
            "Short or long job id, like ef8009d83a9892968097cec05b9467c685d45453"
        )
        parser.add_argument(
            '--model',
            help="Model name like peter/mnist. Per default from configuration."
        )
        parser.add_argument(
            '-c',
            '--config',
            help=
            "Default aetros.yml in current working directory or directories above."
        )

        parsed_args = parser.parse_args(args)

        if not parsed_args.id:
            parser.print_help()
            sys.exit(1)

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print(
                "No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'."
            )
            sys.exit(2)

        full_id = git_has_remote_job(home_config, model, parsed_args.id)
        if not full_id:
            print("Error: Job not found on remote.")
            sys.exit(1)

        ref = 'refs/aetros/job/' + full_id
        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model +
                                   '.git')

        git_remote_url = 'git@%s:%s.git' % (home_config['host'], model)

        if not os.path.isdir(git_dir):
            subprocess.call([
                home_config['git'], '--bare', 'clone', git_remote_url, git_dir
            ])

        print('Pull job %s of %s' % (parsed_args.id, model))
        setup_git_ssh(home_config)
        subprocess.call([
            home_config['git'], '--bare', '--git-dir', git_dir, 'fetch',
            'origin', ref + ':' + ref
        ])
Пример #2
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, prog=aetros.const.__prog__ + ' job-diff')
        parser.add_argument('id_from', help="Short or long job id like ed4d6a204.")
        parser.add_argument('id_to', nargs='?', help="Short or long job id like d55df24a7 or file path")
        parser.add_argument('limit', nargs='?', help="Limit files to diff")
        parser.add_argument('--model', help="Model name like peter/mnist. Per default from configuration.")
        parser.add_argument('-c', '--config', help="Default aetros.yml in current working directory or directories above.")

        parsed_args = parser.parse_args(args)

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print("No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'.")
            sys.exit(2)

        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model + '.git')

        id_map = {}

        for job_id in [parsed_args.id_from, parsed_args.id_to]:
            if os.path.exists(job_id):
                continue

            full_id = git_has_local_job(home_config, model, job_id)
            id_map[job_id] = full_id
            if not full_id:
                full_id = git_has_remote_job(home_config, model, job_id)
                id_map[job_id] = full_id
                if full_id:
                    print("Pull job %s to local ... " % (job_id, ))
                    ref = 'refs/aetros/job/' + full_id
                    subprocess.call([home_config['git'], '--bare', '--git-dir', git_dir, 'fetch', 'origin', ref+':'+ref])
                else:
                    print("Job %s not found." % (job_id, ))
                    sys.exit(2)

        print("Diff jobs %s and %s of %s." %(parsed_args.id_from, parsed_args.id_to, model))

        from_ref = 'refs/aetros/job/' + id_map[parsed_args.id_from]
        args = [home_config['git'], '--bare', '--git-dir', git_dir]

        if os.path.exists(parsed_args.id_to):
            args += ['--work-tree', os.path.abspath(parsed_args.id_to), 'diff', from_ref]
        else:
            to_ref = 'refs/aetros/job/' + id_map[parsed_args.id_to]
            args += ['diff', from_ref+'...'+to_ref]

        if parsed_args.limit:
            args += ['--', parsed_args.limit]

        subprocess.call(args)
Пример #3
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, prog=aetros.const.__prog__ + ' job-files')
        parser.add_argument('job_id', help="Short or long job id like ed4d6a204")
        parser.add_argument('folder', nargs='?', help="Limit files list to folder. Default root ./")
        parser.add_argument('-r', action='store_true', help="Recursive files tree")
        parser.add_argument('--model', help="Model name like peter/mnist. Per default from found configuration.")
        parser.add_argument('-c', '--config', help="Default aetros.yml in current working directory or directories above.")

        parsed_args = parser.parse_args(args)

        if not parsed_args.job_id:
            parser.print_help()
            sys.exit()

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print("No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'.")
            sys.exit(2)

        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model + '.git')

        id_map = {}

        for job_id in [parsed_args.job_id]:
            full_id = git_has_local_job(home_config, model, job_id)
            id_map[job_id] = full_id
            if not full_id:
                full_id = git_has_remote_job(home_config, model, job_id)
                id_map[job_id] = full_id
                if full_id:
                    print("Pull job %s to local ... " % (job_id, ))
                    ref = 'refs/aetros/job/' + full_id
                    subprocess.call([home_config['git'], '--bare', '--git-dir', git_dir, 'fetch', 'origin', ref+':'+ref])
                else:
                    print("Job %s not found." % (job_id, ))
                    sys.exit(2)

        ref = 'refs/aetros/job/' + id_map[parsed_args.job_id]

        print("List job files of %s of %s" % (parsed_args.job_id, model))
        args = [home_config['git'], '--bare', '--git-dir', git_dir, 'ls-tree', '--long']
        if parsed_args.r:
            args.append('-r')

        args.append(ref)

        if parsed_args.folder:
            args.append(parsed_args.folder)
        subprocess.call(args)
Пример #4
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, prog=aetros.const.__prog__ + ' job-commits')
        parser.add_argument('job_id', help="Short or long job id like ed4d6a204.")
        parser.add_argument('--model', help="Model name like peter/mnist. Per default from configuration.")
        parser.add_argument('-c', '--config', help="Default aetros.yml in current working directory or directories above.")

        parsed_args = parser.parse_args(args)

        if not parsed_args.job_id:
            parser.print_help()
            sys.exit(1)

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print("No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'.")
            sys.exit(2)

        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model + '.git')

        id_map = {}

        for job_id in [parsed_args.job_id]:
            full_id = git_has_local_job(home_config, model, job_id)
            id_map[job_id] = full_id
            if not full_id:
                full_id = git_has_remote_job(home_config, model, job_id)
                id_map[job_id] = full_id
                if full_id:
                    print("Pull job %s to local ... " % (job_id, ))
                    ref = 'refs/aetros/job/' + full_id
                    subprocess.call([home_config['git'], '--bare', '--git-dir', git_dir, 'fetch', 'origin', ref+':'+ref])
                else:
                    print("Job %s not found." % (job_id, ))
                    sys.exit(2)

        ref = 'refs/aetros/job/' + id_map[parsed_args.job_id]
        args = [home_config['git'], '--bare', '--git-dir', git_dir]
        args += ['log', '--stat', ref]

        subprocess.call(args)
Пример #5
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, prog=aetros.const.__prog__ + ' job-pull')
        parser.add_argument('id', help="Short or long job id, like ef8009d83a9892968097cec05b9467c685d45453")
        parser.add_argument('--model', help="Model name like peter/mnist. Per default from configuration.")
        parser.add_argument('-c', '--config', help="Default aetros.yml in current working directory or directories above.")

        parsed_args = parser.parse_args(args)

        if not parsed_args.id:
            parser.print_help()
            sys.exit(1)

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print("No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'.")
            sys.exit(2)

        full_id = git_has_remote_job(home_config, model, parsed_args.id)
        if not full_id:
            print("Error: Job not found on remote.")
            sys.exit(1)

        ref = 'refs/aetros/job/' + full_id
        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model + '.git')

        git_remote_url = 'git@%s:%s.git' % (home_config['host'], model)

        if not os.path.isdir(git_dir):
            subprocess.call([home_config['git'], '--bare', 'clone', git_remote_url, git_dir])

        print('Pull job %s of %s' % (parsed_args.id, model))
        setup_git_ssh(home_config)
        subprocess.call([home_config['git'], '--bare', '--git-dir', git_dir, 'fetch', 'origin', ref+':'+ref])
Пример #6
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(
            formatter_class=argparse.RawTextHelpFormatter,
            prog=aetros.const.__prog__ + ' job-files')
        parser.add_argument('job_id',
                            help="Short or long job id like ed4d6a204")
        parser.add_argument('folder',
                            nargs='?',
                            help="Limit files list to folder. Default root ./")
        parser.add_argument('-r',
                            action='store_true',
                            help="Recursive files tree")
        parser.add_argument(
            '--model',
            help=
            "Model name like peter/mnist. Per default from found configuration."
        )
        parser.add_argument(
            '-c',
            '--config',
            help=
            "Default aetros.yml in current working directory or directories above."
        )

        parsed_args = parser.parse_args(args)

        if not parsed_args.job_id:
            parser.print_help()
            sys.exit()

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print(
                "No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'."
            )
            sys.exit(2)

        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model +
                                   '.git')

        id_map = {}

        for job_id in [parsed_args.job_id]:
            full_id = git_has_local_job(home_config, model, job_id)
            id_map[job_id] = full_id
            if not full_id:
                full_id = git_has_remote_job(home_config, model, job_id)
                id_map[job_id] = full_id
                if full_id:
                    print("Pull job %s to local ... " % (job_id, ))
                    ref = 'refs/aetros/job/' + full_id
                    subprocess.call([
                        home_config['git'], '--bare', '--git-dir', git_dir,
                        'fetch', 'origin', ref + ':' + ref
                    ])
                else:
                    print("Job %s not found." % (job_id, ))
                    sys.exit(2)

        ref = 'refs/aetros/job/' + id_map[parsed_args.job_id]

        print("List job files of %s of %s" % (parsed_args.job_id, model))
        args = [
            home_config['git'], '--bare', '--git-dir', git_dir, 'ls-tree',
            '--long'
        ]
        if parsed_args.r:
            args.append('-r')

        args.append(ref)

        if parsed_args.folder:
            args.append(parsed_args.folder)
        subprocess.call(args)
Пример #7
0
    def main(self, args):
        import aetros.const

        parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter, prog=aetros.const.__prog__ + ' job-checkout')
        parser.add_argument('job_id', help="Short or long job id like ed4d6a204")
        parser.add_argument('file', nargs='*', help="Checkout only one file.")
        parser.add_argument('--target', '-t', help="Target directory where job files (or a single file) should be saved. Default current folder")
        parser.add_argument('--overwrite', '-p', help="Overwrite existing files.")
        parser.add_argument('--model', help="Model name like peter/mnist. Per default from current directory")
        parser.add_argument('-c', '--config', help="Default aetros.yml in current working directory.")

        parsed_args = parser.parse_args(args)

        if not parsed_args.job_id:
            parser.print_help()
            sys.exit()

        home_config = read_home_config()
        config = find_config(parsed_args.config)
        model = parsed_args.model if parsed_args.model else config['model']

        if not model:
            print("No model defined. Use --model or switch into a directory where you executed 'aetros init model-name'.")
            sys.exit(2)

        target = os.path.normpath(os.path.abspath(parsed_args.target if parsed_args.target else os.getcwd()))
        git_dir = os.path.normpath(home_config['storage_dir'] + '/' + model + '.git')

        if not parsed_args.file and not os.path.exists(target):
            os.makedirs(target)

        if parsed_args.file and not os.path.exists(target):
            os.makedirs(target)

        id_map = {}

        for job_id in [parsed_args.job_id]:
            full_id = git_has_local_job(home_config, model, job_id)
            id_map[job_id] = full_id
            if not full_id:
                full_id = git_has_remote_job(home_config, model, job_id)
                id_map[job_id] = full_id
                if full_id:
                    print("Pull job %s to local ... " % (job_id, ))
                    ref = 'refs/aetros/job/' + full_id
                    subprocess.call([home_config['git'], '--bare', '--git-dir', git_dir, 'fetch', 'origin', ref+':'+ref])
                else:
                    print("Job %s not found." % (job_id, ))
                    sys.exit(2)

        ref = 'refs/aetros/job/' + id_map[parsed_args.job_id]

        if not parsed_args.file:
            print("Checkout all job files %s %s into %s ... " % (model, id_map[parsed_args.job_id], target))
        else:
            print("Checkout job files %s %s into %s ... " % (model, id_map[parsed_args.job_id], target))

        paths = parsed_args.file if parsed_args.file else ['.']

        subprocess.call(
            [home_config['git'], '--bare', '--git-dir', git_dir, '--work-tree', target, 'checkout', ref, '--'] + paths
        )