Coverage for yield_analysis_sdk\acp.py: 89%
27 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-07-02 19:22 +0800
« prev ^ index » next coverage.py v7.9.1, created at 2025-07-02 19:22 +0800
1from typing import Optional
3from virtuals_acp import ACPJob, ACPJobPhase, ACPMemo, VirtualsACP # type: ignore
5from .type import (
6 AnalysisRequest,
7 VaultRegistrationRequest,
8)
11def extract_analysis_request(memos: list[ACPMemo]) -> Optional[AnalysisRequest]:
12 """
13 Extract AnalysisRequest from memos by trying each negotiation memo until one works.
15 Args:
16 memos: List of ACP memos to process
18 Returns:
19 AnalysisRequest if a valid one is found, otherwise None
20 """
21 if not memos:
22 return None
24 for memo in memos:
25 if memo.next_phase == ACPJobPhase.NEGOTIATION:
26 if memo.content:
27 try:
28 return AnalysisRequest.model_validate_json(memo.content)
29 except Exception:
30 # Continue to next memo if this one fails to parse
31 continue
32 else:
33 # Skip empty memos
34 continue
36 # No valid memo found
37 return None
39def extract_vault_registration_request(
40 memos: list[ACPMemo],
41) -> Optional[VaultRegistrationRequest]:
42 """
43 Extract VaultRegistrationRequest from memos by trying each negotiation memo until one works.
45 Args:
46 memos: List of ACP memos to process
48 Returns:
49 VaultRegistrationRequest if a valid one is found, otherwise None
50 """
51 if not memos:
52 return None
54 for memo in memos:
55 if memo.next_phase == ACPJobPhase.NEGOTIATION:
56 if memo.content:
57 try:
58 return VaultRegistrationRequest.model_validate_json(memo.content)
59 except Exception:
60 # Continue to next memo if this one fails to parse
61 continue
62 else:
63 # Skip empty memos
64 continue
66 # No valid memo found
67 return None