@@ -83,8 +83,12 @@ def __post_init__(self) -> None:
8383 'pip install "a2a-sdk[aws]"'
8484 ) from exc
8585
86- if self .session is None :
87- self .session = aioboto3 .Session ()
86+ # Resolve the session once into a non-optional attribute so that
87+ # internal methods can call .client() without optional-access errors.
88+ # The public `session` field remains Optional for API convenience.
89+ self ._resolved_session : aioboto3 .Session = (
90+ self .session or aioboto3 .Session ()
91+ )
8892
8993 logger .debug (
9094 'QueueLifecycleManager created (instance_id=%s, topic=%s).' ,
@@ -152,7 +156,7 @@ async def provision(self) -> QueueProvisionResult:
152156 self .region_name ,
153157 )
154158
155- async with self .session .client (
159+ async with self ._resolved_session .client (
156160 'sqs' , region_name = self .region_name
157161 ) as sqs :
158162 # Step 1: Create the SQS queue.
@@ -198,7 +202,7 @@ async def provision(self) -> QueueProvisionResult:
198202 # Step 4: Subscribe the SQS queue to the SNS topic.
199203 subscription_arn = ''
200204 try :
201- async with self .session .client (
205+ async with self ._resolved_session .client (
202206 'sns' , region_name = self .region_name
203207 ) as sns :
204208 sub_resp = await sns .subscribe (
@@ -216,7 +220,7 @@ async def provision(self) -> QueueProvisionResult:
216220 queue_url ,
217221 )
218222 try :
219- async with self .session .client (
223+ async with self ._resolved_session .client (
220224 'sqs' , region_name = self .region_name
221225 ) as sqs :
222226 await sqs .delete_queue (QueueUrl = queue_url )
@@ -257,7 +261,7 @@ async def teardown(self) -> None:
257261
258262 # Step 1: Unsubscribe from SNS (best-effort).
259263 try :
260- async with self .session .client (
264+ async with self ._resolved_session .client (
261265 'sns' , region_name = self .region_name
262266 ) as sns :
263267 await sns .unsubscribe (SubscriptionArn = result .subscription_arn )
@@ -272,7 +276,7 @@ async def teardown(self) -> None:
272276
273277 # Step 2: Delete the SQS queue.
274278 try :
275- async with self .session .client (
279+ async with self ._resolved_session .client (
276280 'sqs' , region_name = self .region_name
277281 ) as sqs :
278282 await sqs .delete_queue (QueueUrl = result .queue_url )
0 commit comments