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 ])
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)
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)
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)
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])
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)
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 )