Module cdev.commands.environment
Expand source code
from argparse import Namespace
from cdev.constructs.project import EnvironmentDoesNotExist, Project, ProjectError
from core.constructs.output_manager import OutputManager
def environment_cli(
command: str,
parsed_args_namespace: Namespace,
output_manager: OutputManager,
project: Project,
**kwargs,
) -> None:
parsed_args = vars(parsed_args_namespace)
if command == "":
output_manager._console.print(
"You must provide a sub-command. run `cdev environment --help` for more information on available subcommands"
)
elif command == "ls":
list_environments(project, output_manager)
elif command == "info":
environment_information(project, output_manager, parsed_args.get("env"))
elif command == "set":
set_current_environment(project, parsed_args.get("env"), output_manager)
elif command == "create":
create_environment(project, parsed_args.get("env"), output_manager)
elif command == "settings_information":
settings_information(
project,
output_manager,
parsed_args.get("key"),
parsed_args.get("new_value"),
parsed_args.get("all"),
)
def list_environments(project: Project, output: OutputManager) -> None:
"""
Get the current list of environments and the current environment from the Project object.
Must be called when the Project is in the UNINITIALIZED phase.
"""
current_environment_name = project.get_current_environment_name()
all_environment_names = project.get_all_environment_names()
for environment_name in all_environment_names:
if current_environment_name == environment_name:
output._console.print(f"> {environment_name}")
else:
output._console.print(environment_name)
def set_current_environment(
project: Project, new_current_environment: str, output: OutputManager
) -> None:
"""Change the current environment of the project
Args:
new_current_environment (str): new current environment name
output (OutputManager): Output manager
"""
try:
project.set_current_environment(new_current_environment)
except EnvironmentDoesNotExist as e:
output._console.print(
f"Environment {new_current_environment} does not exist in this project"
)
return
except Exception as e:
output._console.print(
f"Uncaught Exception {e} when trying to change current environment"
)
return
output._console.print(f"Set Current Environment -> {new_current_environment}")
def create_environment(
project: Project, new_environment_name: str, output: OutputManager
) -> None:
project.create_environment(new_environment_name)
output._console.print(f"Created Environment -> {new_environment_name}")
def settings_information(
project: Project,
output: OutputManager,
key: str = None,
new_value: str = None,
all: bool = False,
) -> None:
_environment_name = project.get_current_environment_name()
if not new_value:
settings_info = project.get_environment_settings_info(_environment_name)
settings_dict = settings_info.dict()
if key:
# Print desired key
if key not in settings_dict:
raise Exception(
f"Key ({key}) not in settings information for the Environment: {_environment_name}"
)
output._console.print(f"Environment Settings: {_environment_name}")
output._console.print(f" {key} -> {settings_dict.get(key)}")
else:
# Print all values
output._console.print(
f"Current Settings info for Environment: {_environment_name}:"
)
for key, value in settings_dict.items():
output._console.print(f" {key} -> {value}")
else:
if not key:
raise Exception("Must use --new-value with --key")
if not all:
settings_info = project.get_environment_settings_info(_environment_name)
did_confirm = output._console.input(
f"Are you sure you want to update {key} to {new_value} for the environment ({_environment_name}) \[y/n]?: "
)
if did_confirm != "y":
output._console.print("Did not confirm. Aborting operation.")
return
setattr(settings_info, key, new_value)
project.update_environment_settings_info(
new_value=settings_info, environment_name=_environment_name
)
output._console.print(f"Updated {key} -> {new_value}")
else:
did_confirm = output._console.input(
f"Are you sure you want to update {key} to {new_value} for all environments in the project \[y/n]?: "
)
if did_confirm != "y":
output._console.print("Did not confirm. Aborting operation.")
return
for environment_name in project.get_all_environment_names():
settings_info = project.get_environment_settings_info(environment_name)
setattr(settings_info, key, new_value)
project.update_environment_settings_info(
new_value=settings_info, environment_name=environment_name
)
output._console.print(
f"Updated ({environment_name}) {key} -> {new_value}"
)
def environment_information(
project: Project,
output: OutputManager,
environment_name: str = None,
):
_environment_name = environment_name or project.get_current_environment_name()
environment_info = project.get_environment_settings_info(_environment_name)
output._console.print(f"{_environment_name}:")
for key, val in environment_info.dict().items():
output._console.print(f" {key} -> {val}")
Functions
def create_environment(project: Project, new_environment_name: str, output: core.constructs.output_manager.OutputManager) ‑> None
-
Expand source code
def create_environment( project: Project, new_environment_name: str, output: OutputManager ) -> None: project.create_environment(new_environment_name) output._console.print(f"Created Environment -> {new_environment_name}")
def environment_cli(command: str, parsed_args_namespace: argparse.Namespace, output_manager: core.constructs.output_manager.OutputManager, project: Project, **kwargs) ‑> None
-
Expand source code
def environment_cli( command: str, parsed_args_namespace: Namespace, output_manager: OutputManager, project: Project, **kwargs, ) -> None: parsed_args = vars(parsed_args_namespace) if command == "": output_manager._console.print( "You must provide a sub-command. run `cdev environment --help` for more information on available subcommands" ) elif command == "ls": list_environments(project, output_manager) elif command == "info": environment_information(project, output_manager, parsed_args.get("env")) elif command == "set": set_current_environment(project, parsed_args.get("env"), output_manager) elif command == "create": create_environment(project, parsed_args.get("env"), output_manager) elif command == "settings_information": settings_information( project, output_manager, parsed_args.get("key"), parsed_args.get("new_value"), parsed_args.get("all"), )
def environment_information(project: Project, output: core.constructs.output_manager.OutputManager, environment_name: str = None)
-
Expand source code
def environment_information( project: Project, output: OutputManager, environment_name: str = None, ): _environment_name = environment_name or project.get_current_environment_name() environment_info = project.get_environment_settings_info(_environment_name) output._console.print(f"{_environment_name}:") for key, val in environment_info.dict().items(): output._console.print(f" {key} -> {val}")
def list_environments(project: Project, output: core.constructs.output_manager.OutputManager) ‑> None
-
Get the current list of environments and the current environment from the Project object. Must be called when the Project is in the UNINITIALIZED phase.
Expand source code
def list_environments(project: Project, output: OutputManager) -> None: """ Get the current list of environments and the current environment from the Project object. Must be called when the Project is in the UNINITIALIZED phase. """ current_environment_name = project.get_current_environment_name() all_environment_names = project.get_all_environment_names() for environment_name in all_environment_names: if current_environment_name == environment_name: output._console.print(f"> {environment_name}") else: output._console.print(environment_name)
def set_current_environment(project: Project, new_current_environment: str, output: core.constructs.output_manager.OutputManager) ‑> None
-
Change the current environment of the project
Args
new_current_environment
:str
- new current environment name
output
:OutputManager
- Output manager
Expand source code
def set_current_environment( project: Project, new_current_environment: str, output: OutputManager ) -> None: """Change the current environment of the project Args: new_current_environment (str): new current environment name output (OutputManager): Output manager """ try: project.set_current_environment(new_current_environment) except EnvironmentDoesNotExist as e: output._console.print( f"Environment {new_current_environment} does not exist in this project" ) return except Exception as e: output._console.print( f"Uncaught Exception {e} when trying to change current environment" ) return output._console.print(f"Set Current Environment -> {new_current_environment}")
def settings_information(project: Project, output: core.constructs.output_manager.OutputManager, key: str = None, new_value: str = None, all: bool = False) ‑> None
-
Expand source code
def settings_information( project: Project, output: OutputManager, key: str = None, new_value: str = None, all: bool = False, ) -> None: _environment_name = project.get_current_environment_name() if not new_value: settings_info = project.get_environment_settings_info(_environment_name) settings_dict = settings_info.dict() if key: # Print desired key if key not in settings_dict: raise Exception( f"Key ({key}) not in settings information for the Environment: {_environment_name}" ) output._console.print(f"Environment Settings: {_environment_name}") output._console.print(f" {key} -> {settings_dict.get(key)}") else: # Print all values output._console.print( f"Current Settings info for Environment: {_environment_name}:" ) for key, value in settings_dict.items(): output._console.print(f" {key} -> {value}") else: if not key: raise Exception("Must use --new-value with --key") if not all: settings_info = project.get_environment_settings_info(_environment_name) did_confirm = output._console.input( f"Are you sure you want to update {key} to {new_value} for the environment ({_environment_name}) \[y/n]?: " ) if did_confirm != "y": output._console.print("Did not confirm. Aborting operation.") return setattr(settings_info, key, new_value) project.update_environment_settings_info( new_value=settings_info, environment_name=_environment_name ) output._console.print(f"Updated {key} -> {new_value}") else: did_confirm = output._console.input( f"Are you sure you want to update {key} to {new_value} for all environments in the project \[y/n]?: " ) if did_confirm != "y": output._console.print("Did not confirm. Aborting operation.") return for environment_name in project.get_all_environment_names(): settings_info = project.get_environment_settings_info(environment_name) setattr(settings_info, key, new_value) project.update_environment_settings_info( new_value=settings_info, environment_name=environment_name ) output._console.print( f"Updated ({environment_name}) {key} -> {new_value}" )