def resolve_environment_path()

in composer_local_dev/files.py [0:0]


def resolve_environment_path(env_name: Optional[str]) -> pathlib.Path:
    """
    Provides and validates path to a given environment.
    Environments are defined in current working directory in ``composer``
    directory. If no environment name is given, path to single existing
    environment is returned, in case there is more than one environment
    defined it raises error.
    """
    env_dir = (pathlib.Path.cwd() / "composer").resolve()
    if not env_dir.is_dir():
        raise errors.ComposerCliError(
            constants.ENVIRONMENT_DIR_NOT_FOUND_ERROR.format(
                env_dir=env_dir, create_help=constants.CREATE_MESSAGE_HINT
            )
        )

    envs = get_available_environments(env_dir)
    LOG.info(
        "Found following local environments:\n    %s",
        "\n    ".join(str(env) for env in envs),
    )
    if not envs:
        raise errors.ComposerCliError(
            constants.ENVIRONMENT_DIR_EMPTY_ERROR.format(
                env_dir=env_dir, create_help=constants.CREATE_MESSAGE_HINT
            )
        )

    if env_name:
        LOG.info("Searching for provided local environment name: %s", env_name)
        env_path = env_dir / env_name
        if not env_path.is_dir():
            raise errors.ComposerCliError(
                constants.ENVIRONMENT_PATH_NOT_FOUND_ERROR.format(
                    env_path=env_path, create_help=constants.CREATE_MESSAGE_HINT
                )
            )
        return env_path
    else:
        if len(envs) > 1:
            env_names = sorted(str(env.name) for env in envs)
            env_names = "\n    ".join(env_names)
            raise errors.ComposerCliError(
                constants.ENVIRONMENT_NOT_SELECTED_ERROR.format(
                    env_dir=env_dir, env_names=env_names
                )
            )
        LOG.info(
            "Environment path not provided, defaulting to only "
            "existing environment path: %s",
            envs[0],
        )
        return envs[0]