|
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