From f4fed5293abc3b241f6ad29312c606edf0dd8027 Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 28 Apr 2023 13:33:54 +0200 Subject: [PATCH 1/2] Add and use throw_if_invalid function Validates objects and raises an error if they are invalid --- src/main/python/ddadevops/domain/common.py | 5 +++++ .../python/ddadevops/infrastructure/release_mixin/repo.py | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/python/ddadevops/domain/common.py b/src/main/python/ddadevops/domain/common.py index d944d32..a5f1fc8 100644 --- a/src/main/python/ddadevops/domain/common.py +++ b/src/main/python/ddadevops/domain/common.py @@ -18,6 +18,11 @@ class Validateable: def is_valid(self) -> bool: return len(self.validate()) < 1 + + def throw_if_invalid(self): + if not self.is_valid(): + issues = '\n'.join(self.validate()) + raise ValueError(f"Invalid Validateable: {issues}") class DnsRecord(Validateable): diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py index 4ab3ae5..2bfbb37 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py @@ -124,7 +124,5 @@ class ReleaseContextRepository: self.version_repository.get_version(), self.main_branch, ) - if not result.is_valid(): - issues = '\n'.join(result.validate()) - raise ValueError(f"invalid release: {issues}") + result.throw_if_invalid() return result From d801a71b49e795dc69a349d0e7c3ec48c4d3a6a8 Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 28 Apr 2023 13:38:22 +0200 Subject: [PATCH 2/2] Make ReleaseContextRepository stateless --- .../python/ddadevops/infrastructure/release_mixin/repo.py | 7 ++----- src/main/python/ddadevops/release_mixin.py | 5 +++-- src/test/python/release_mixin/test_infrastructure.py | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py index 2bfbb37..308d6c0 100644 --- a/src/main/python/ddadevops/infrastructure/release_mixin/repo.py +++ b/src/main/python/ddadevops/infrastructure/release_mixin/repo.py @@ -106,23 +106,20 @@ class ReleaseTypeRepository: raise ValueError("No valid api passed to ReleaseTypeRepository") -# TODO: Repo has state & repository should exist only for AggregateRoot class ReleaseContextRepository: def __init__( self, version_repository: VersionRepository, release_type_repository: ReleaseTypeRepository, - main_branch: str, ): self.version_repository = version_repository self.release_type_repository = release_type_repository - self.main_branch = main_branch - def get_release(self) -> ReleaseContext: + def get_release(self, main_branch: str) -> ReleaseContext: result = ReleaseContext( self.release_type_repository.get_release_type(), self.version_repository.get_version(), - self.main_branch, + main_branch, ) result.throw_if_invalid() return result diff --git a/src/main/python/ddadevops/release_mixin.py b/src/main/python/ddadevops/release_mixin.py index c992a1f..c7eddb7 100644 --- a/src/main/python/ddadevops/release_mixin.py +++ b/src/main/python/ddadevops/release_mixin.py @@ -9,6 +9,7 @@ class ReleaseMixin(DevopsBuild): def __init__(self, project: Project, release: Release): super().__init__(project, devops=release.devops) self.repo.set_release(self.project, release) + self.main_branch = release.main_branch git_api = GitApi() environment_api = EnvironmentApi() @@ -21,13 +22,13 @@ class ReleaseMixin(DevopsBuild): release_type_repo = ReleaseTypeRepository.from_git(git_api) version_repo = VersionRepository(release.config_file) - self.release_repo = ReleaseContextRepository(version_repo, release_type_repo, release.main_branch) + self.release_repo = ReleaseContextRepository(version_repo, release_type_repo) self.prepare_release_service = PrepareReleaseService() self.tag_and_push_release_service = TagAndPushReleaseService(git_api) def prepare_release(self): - release = self.release_repo.get_release() + release = self.release_repo.get_release(self.main_branch) self.prepare_release_service.write_and_commit_release(release, self.release_repo.version_repository) self.prepare_release_service.write_and_commit_bump(release, self.release_repo.version_repository) diff --git a/src/test/python/release_mixin/test_infrastructure.py b/src/test/python/release_mixin/test_infrastructure.py index 5bfe27d..6233c64 100644 --- a/src/test/python/release_mixin/test_infrastructure.py +++ b/src/test/python/release_mixin/test_infrastructure.py @@ -22,9 +22,9 @@ def test_release_repository(tmp_path): release_type_repo = ReleaseTypeRepository.from_git(MockGitApi('MINOR test')) # test - sut = ReleaseContextRepository(version_repo, release_type_repo, 'main') + sut = ReleaseContextRepository(version_repo, release_type_repo) - release = sut.get_release() + release = sut.get_release('main') assert release is not None