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]