|
80 | 80 | from contextlib import nullcontext |
81 | 81 | from datetime import date |
82 | 82 | from pathlib import Path |
83 | | -from typing import TYPE_CHECKING, Any, Literal, TypedDict, overload |
| 83 | +from typing import TYPE_CHECKING, Any, Callable, Literal, TypedDict, overload |
84 | 84 |
|
85 | 85 | from typing_extensions import Self |
86 | 86 | from yarl import URL |
@@ -183,6 +183,11 @@ def __init__(self, name: str, host: str | None = None) -> None: |
183 | 183 | self._state_handler: StateCallback | nullcontext[None] = nullcontext() |
184 | 184 | self._disable_ssl_verification = False |
185 | 185 | self._request_timeout = 5000 |
| 186 | + # Using a broker source requires knowing the provider name, which is |
| 187 | + # only provided to the FFI just before verification. As such, we store |
| 188 | + # the broker source as a hook to be called just before verification, and |
| 189 | + # after the provider name is set. |
| 190 | + self._broker_source_hook: Callable[[], None] | None = None |
186 | 191 |
|
187 | 192 | def __str__(self) -> str: |
188 | 193 | """ |
@@ -1193,13 +1198,15 @@ def broker_source( |
1193 | 1198 | password, |
1194 | 1199 | token, |
1195 | 1200 | ) |
1196 | | - pact.v3.ffi.verifier_broker_source( |
| 1201 | + |
| 1202 | + self._broker_source_hook = lambda: pact.v3.ffi.verifier_broker_source( |
1197 | 1203 | self._handle, |
1198 | 1204 | str(url.with_user(None).with_password(None)), |
1199 | 1205 | username, |
1200 | 1206 | password, |
1201 | 1207 | token, |
1202 | 1208 | ) |
| 1209 | + |
1203 | 1210 | return self |
1204 | 1211 |
|
1205 | 1212 | def verify(self) -> Self: |
@@ -1233,6 +1240,9 @@ def verify(self) -> Self: |
1233 | 1240 | transport["scheme"], |
1234 | 1241 | ) |
1235 | 1242 |
|
| 1243 | + if self._broker_source_hook: |
| 1244 | + self._broker_source_hook() |
| 1245 | + |
1236 | 1246 | with self._message_producer, self._state_handler: |
1237 | 1247 | pact.v3.ffi.verifier_execute(self._handle) |
1238 | 1248 | logger.debug("Verifier executed") |
@@ -1381,18 +1391,20 @@ def build(self) -> Verifier: |
1381 | 1391 | Returns: |
1382 | 1392 | The Verifier instance with the broker source added. |
1383 | 1393 | """ |
1384 | | - pact.v3.ffi.verifier_broker_source_with_selectors( |
1385 | | - self._verifier._handle, # noqa: SLF001 |
1386 | | - self._url, |
1387 | | - self._username, |
1388 | | - self._password, |
1389 | | - self._token, |
1390 | | - self._include_pending, |
1391 | | - self._include_wip_since, |
1392 | | - self._provider_tags or [], |
1393 | | - self._provider_branch, |
1394 | | - self._consumer_versions or [], |
1395 | | - self._consumer_tags or [], |
| 1394 | + self._verifier._broker_source_hook = ( # noqa: SLF001 |
| 1395 | + lambda: pact.v3.ffi.verifier_broker_source_with_selectors( |
| 1396 | + self._verifier._handle, # noqa: SLF001 |
| 1397 | + self._url, |
| 1398 | + self._username, |
| 1399 | + self._password, |
| 1400 | + self._token, |
| 1401 | + self._include_pending, |
| 1402 | + self._include_wip_since, |
| 1403 | + self._provider_tags or [], |
| 1404 | + self._provider_branch, |
| 1405 | + self._consumer_versions or [], |
| 1406 | + self._consumer_tags or [], |
| 1407 | + ) |
1396 | 1408 | ) |
1397 | 1409 | self._built = True |
1398 | 1410 | return self._verifier |
|
0 commit comments