Source code for deploy_tools.models.deployment
from collections import defaultdict
from typing import Annotated
from pydantic import Field
from .module import Module, Release
from .parent import ParentModel
type ReleasesByVersion = dict[str, Release]
type ReleasesByNameAndVersion = dict[str, ReleasesByVersion]
type DefaultVersionsByName = dict[str, str]
type ModulesByName = dict[str, list[Module]]
type ModuleVersionsByName = dict[str, list[str]]
[docs]
class DeploymentSettings(ParentModel):
"""All global configuration settings for the Deployment."""
default_versions: Annotated[
DefaultVersionsByName,
Field(
description="Mapping of [module-name]:[version] to use as default when "
"no version is specified in a `module load` command. If no default is "
"specified, deploy-tools will use natsort to place e.g. 1.2 after all "
"alpha, beta and rc candidates as described here: "
"https://natsort.readthedocs.io/en/7.1.1/examples.html#sorting-more-expressive-versioning-schemes"
),
] = {}
[docs]
class Deployment(ParentModel):
"""Configuration for all Modules and Applications that should be deployed.
This will include any deprecated Modules.
"""
settings: DeploymentSettings
releases: ReleasesByNameAndVersion
[docs]
def get_final_deployed_modules(self) -> ModulesByName:
"""Return modules that are expected to be deployed after a sync command.
This explicitly excludes any deprecated modules.
"""
final_modules: ModulesByName = defaultdict(list)
for name, release_versions in self.releases.items():
modules = [
release.module
for release in release_versions.values()
if not release.deprecated
]
if modules:
final_modules[name] = modules
return final_modules
[docs]
def get_final_deployed_versions(self) -> ModuleVersionsByName:
"""Return module versions that are expected to be deployed after a sync command.
This explicitly excludes any deprecated modules.
"""
final_versions: ModuleVersionsByName = defaultdict(list)
for name, modules in self.get_final_deployed_modules().items():
final_versions[name] = [module.version for module in modules]
return final_versions