| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- from __future__ import annotations
- from cyber_agent.application.candidate import CandidateAdoptionReceipt
- class ReferenceCandidateRepository:
- def __init__(self, artifacts) -> None:
- self.artifacts = artifacts
- self.versions = {}
- self.adoptions = {}
- self.adoption_calls = 0
- async def put_version(self, request):
- self.versions.setdefault(request.operation_id, request)
- saved = self.versions[request.operation_id]
- return self.artifacts.put(
- artifact_id=f"candidate:{saved.candidate_id}:{saved.revision}",
- version=str(saved.revision),
- kind="candidate.output",
- root_trace_id=saved.root_trace_id,
- uid=saved.uid,
- content=saved.content,
- )
- async def merge(self, request):
- return await self.put_version(request)
- async def load_version(self, candidate_ref):
- return next(
- item.content for item in self.versions.values()
- if item.candidate_id == candidate_ref.candidate_id
- and item.revision == candidate_ref.revision
- )
- async def commit_adoption(self, request):
- self.adoption_calls += 1
- self.adoptions.setdefault(request.operation_id, request.candidate_ref)
- return CandidateAdoptionReceipt(
- operation_id=request.operation_id,
- external_id=f"published:{request.candidate_ref.candidate_id}",
- )
|