Source code for aws_ops_alpha.config.app

# -*- coding: utf-8 -*-

"""
Application related configurations.
"""

import typing as T
import dataclasses

from s3pathlib import S3Path

from ..constants import CommonEnvNameEnum, EnvVarNameEnum, AwsTagNameEnum

if T.TYPE_CHECKING:  # pragma: no cover
    from .main import BaseEnv


[docs]@dataclasses.dataclass class AppMixin: """ Application related configurations. :param s3uri_data: an AWS project should always have a delegated s3 folder to store project data. """ aws_account_id: T.Optional[str] = dataclasses.field(default=None) aws_region: T.Optional[str] = dataclasses.field(default=None) s3uri_data: T.Optional[str] = dataclasses.field(default=None) @property def s3dir_data(self) -> S3Path: """ :class:`s3pathlib.S3Path` object of ``s3uri_data`` """ return S3Path.from_s3_uri(self.s3uri_data).to_dir() @property def s3dir_env_data(self: "BaseEnv") -> S3Path: """ Environment specific s3 folder to store project data. """ return self.s3dir_data.joinpath("envs", self.env_name).to_dir() @property def env_vars(self: "BaseEnv") -> T.Dict[str, str]: """ Common environment variable for all computational resources in this environment. It is primarily for "self awareness" (detect who I am, which environment I am in). """ return { EnvVarNameEnum.PARAMETER_NAME.value: self.parameter_name, EnvVarNameEnum.PROJECT_NAME.value: self.project_name, EnvVarNameEnum.ENV_NAME.value: self.env_name, } @property def devops_aws_tags(self: "BaseEnv") -> T.Dict[str, str]: """ Common AWS resources tags for all resources in devops environment. """ return { AwsTagNameEnum.tech_project_name.value: self.project_name, AwsTagNameEnum.tech_env_name.value: CommonEnvNameEnum.devops.value, } @property def workload_aws_tags(self: "BaseEnv") -> T.Dict[str, str]: """ Common AWS resources tags for all resources in workload environment. """ return { AwsTagNameEnum.tech_project_name.value: self.project_name, AwsTagNameEnum.tech_env_name.value: self.env_name, }