Source code for acore_server.manager

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

"""
todo: doctring
"""

import dataclasses
from functools import cached_property

from s3pathlib import S3Path
from boto_session_manager import BotoSesManager

from .wserver_infra_exports import StackExports
from .server import Server
from .fleet import Fleet


[docs]@dataclasses.dataclass class Manager: """ This manager class is to simplify executing Server workflow methods. See https://github.com/MacHu-GWU/acore_server-project/blob/main/debug/manager_server.py for an example of how to use this class. """ aws_profile: str = dataclasses.field() env_name: str = dataclasses.field() @cached_property def bsm(self) -> "BotoSesManager": return BotoSesManager(profile_name=self.aws_profile) @cached_property def s3dir_env_workflow(self) -> S3Path: return S3Path( f"s3://{self.bsm.aws_account_alias}-{self.bsm.aws_region}-data" f"/projects/acore_server/workflows/{self.env_name}/" ).to_dir() @cached_property def stack_exports(self) -> StackExports: stack_exports = StackExports(env_name=self.env_name) stack_exports.load(cf_client=self.bsm.cloudformation_client) return stack_exports @cached_property def fleet(self) -> Fleet: return Fleet.get(bsm=self.bsm, env_name=self.env_name) @property def blue(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-blue") @property def green(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-green") @property def black(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-black") @property def white(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-white") @property def yellow(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-yellow") @property def orange(self) -> Server: return self.fleet.get_server(server_id=f"{self.env_name}-orange")