def step(filenames: List[str], yaml: Optional[str]) -> None: """ Update a step config(s) in valohai.yaml based on Python source file(s). Example: vh yaml step hello.py :param filenames: Path(s) of the Python source code files. """ project = get_project() if project is None: info("no project linked - assuming files are in current directory.") project = Project(data={}, directory=os.getcwd()) project.name = "YAML command simulated project" config_path = project.get_config_filename(yaml_path=yaml) yaml = yaml or project.get_yaml_path() for source_path in filenames: if not os.path.isfile(config_path): update_yaml_from_source(source_path, project, yaml) info(f"{yaml} generated.") create_or_update_requirements(project) elif yaml_needs_update(source_path, project, yaml): update_yaml_from_source(source_path, project, yaml) info(f"{yaml} updated.") create_or_update_requirements(project) else: info(f"{yaml} already up-to-date.")
def package_adhoc_commit(project: Project, validate: bool = True, yaml_path: Optional[str] = None) -> Dict[str, Any]: """ Create an ad-hoc tarball and commit of the project directory. :return: Commit response object from API """ project.refresh_details() directory = project.directory tarball = None try: description = '' try: description = describe_current_commit(directory) except (NoGitRepo, NoCommit): pass except Exception as exc: warn(f'Unable to derive Git description: {exc}') if description: click.echo(f'Packaging {directory} ({description})...') else: click.echo(f'Packaging {directory}...') yaml_path = yaml_path or project.get_yaml_path() tarball = package_directory(directory=directory, progress=True, validate=validate, yaml_path=yaml_path) return create_adhoc_commit_from_tarball(project=project, tarball=tarball, yaml_path=yaml_path, description=description) finally: if tarball: try: os.unlink(tarball) except OSError as err: # pragma: no cover warn(f'Unable to remove temporary file: {err}')
def create_adhoc_commit_from_tarball(*, project: Project, tarball: str, yaml_path: Optional[str] = None, description: str = '') -> Dict[str, Any]: """ Using a precreated ad-hoc tarball, create or retrieve an ad-hoc commit of it on the Valohai host. :param project: Project :param tarball: Tgz tarball path, likely created by the packager :param yaml_path: Optional custom yaml path attached to the command. :param description: Optional description for the commit :return: Commit response object from API """ yaml_path = yaml_path or project.get_yaml_path() commit_obj = _get_pre_existing_commit(tarball) if commit_obj: success(f"Ad-hoc code {commit_obj['identifier']} already uploaded") else: commit_obj = _upload_commit_code(project=project, tarball=tarball, yaml_path=yaml_path, description=description) return commit_obj