Coverage for yield_analysis_sdk\acp.py: 82%
51 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-07-01 22:39 +0800
« prev ^ index » next coverage.py v7.9.1, created at 2025-07-01 22:39 +0800
1from typing import Optional
2from virtuals_acp import VirtualsACP, ACPJob, ACPJobPhase, ACPMemo # type: ignore
3from .type import (
4 AnalysisRequest,
5 AnalysisResponse,
6 VaultRegistrationRequest,
7 VaultRegistrationResponse,
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
40def extract_analysis_response(memos: list[ACPMemo]) -> Optional[AnalysisResponse]:
41 """
42 Extract AnalysisResponse from memos by trying each negotiation memo until one works.
44 Args:
45 memos: List of ACP memos to process
47 Returns:
48 AnalysisResponse if a valid one is found, otherwise None
49 """
50 if not memos:
51 return None
53 for memo in memos:
54 if memo.next_phase == ACPJobPhase.COMPLETED:
55 if memo.content:
56 try:
57 return AnalysisResponse.model_validate_json(memo.content)
58 except Exception:
59 # Continue to next memo if this one fails to parse
60 continue
61 else:
62 # Skip empty memos
63 continue
65 # No valid memo found
66 return None
69def extract_vault_registration_request(
70 memos: list[ACPMemo],
71) -> Optional[VaultRegistrationRequest]:
72 """
73 Extract VaultRegistrationRequest from memos by trying each negotiation memo until one works.
75 Args:
76 memos: List of ACP memos to process
78 Returns:
79 VaultRegistrationRequest if a valid one is found, otherwise None
80 """
81 if not memos:
82 return None
84 for memo in memos:
85 if memo.next_phase == ACPJobPhase.NEGOTIATION:
86 if memo.content:
87 try:
88 return VaultRegistrationRequest.model_validate_json(memo.content)
89 except Exception:
90 # Continue to next memo if this one fails to parse
91 continue
92 else:
93 # Skip empty memos
94 continue
96 # No valid memo found
97 return None
100def extract_vault_registration_response(
101 memos: list[ACPMemo],
102) -> Optional[VaultRegistrationResponse]:
103 """
104 Extract VaultRegistrationResponse from memos by trying each negotiation memo until one works.
106 Args:
107 memos: List of ACP memos to process
109 Returns:
110 VaultRegistrationResponse if a valid one is found, otherwise None
111 """
113 if not memos:
114 return None
116 for memo in memos:
117 if memo.next_phase == ACPJobPhase.COMPLETED:
118 if memo.content:
119 try:
120 return VaultRegistrationResponse.model_validate_json(memo.content)
121 except Exception:
122 # Continue to next memo if this one fails to parse
123 continue
124 else:
125 # Skip empty memos
126 continue
128 # No valid memo found
129 return None