https://pact.io logo
Join Slack
Powered by
# pact-python
  • v

    Val Kolovos

    12/03/2024, 4:24 PM
    With the release of 2.2, is there any plan to update the documentation for v3/v4 matching on docs.pact.io?
    j
    • 2
    • 17
  • v

    Val Kolovos

    12/04/2024, 8:50 PM
    Would it be possible to add a "verify" method to the Verifier specifically for asynchronous message verification that accepted a function instead of having to spin up a separate web server to route to?
    j
    • 2
    • 3
  • a

    Artur Neumann

    12/05/2024, 11:21 AM
    could it be that the pact server is not closed in time, or the same way if a test fails with some
    assert
    So far I have been using the same port for every test for the pact server and when one test fails other random tests also would fail with
    RuntimeError: Pact mock server could not be started for PactHandle(64169).
    I am just changing it to use a random port, so its not an issue anymore for me. But wanted to know if that is a bug or feature?
    j
    • 2
    • 1
  • p

    Pietro Di Bello

    12/17/2024, 11:23 AM
    @Pietro Di Bello has left the channel
  • j

    Joshua Ellis

    12/30/2024, 11:05 PM
    <!here> Hello everyone blobwave People following development on Pact Python may have seen that I have merged this PR which allows for functions to be passed as arguments for provider state handling and message production. This is a significant improvement to the user experience of the
    pact.v3
    preview! Unfortunately, this means that the
    v2.3.0
    release will have breaking changes within the
    pact.v3
    interface. You can view the details of the breaking changes in my recent blog post. I want to thank everyone who has been using
    pact.v3
    and providing feedback, and I hope that the new features help significantly with the user experience, despite the breaking changes.
  • g

    GitHub

    12/31/2024, 12:02 AM
    Release - v2.3.0 New release published by github-actions[bot] BREAKING CHANGE •
    message_handler
    signature has been changed and expanded. •
    set_state
    has been renamed to
    state_handler
    . If using a URL still, the
    body
    keyword argument is now a required parameter. • The provider name must be given as an argument of the
    Verifier
    constructor, instead of the first argument of the
    set_info
    method. BREAKING CHANGE: The
    set_info
    verifier method is removed, with
    add_transport
    needing to be used. Signed-off-by: JP-Ellis josh@jpellis.me •
    pact.v3.util
    has been renamed to
    pact.v3._util
    and is now private. • The PactServer
    __exit__
    arguments no longer have leading underscores. This is typically handled by Python itself and therefore is unlikely to be a change for any user, unless the end user was calling the
    __exit__
    method explicitly and using keyword arguments. Feat • v3: further simplify message interface • v3: add state handler server • v3: integrate message relay server • v3: add message relay and callback servers Fix • deps: update dependency mypy to v1.14.1 • deps: update dependency mypy to v1.14.0 • deps: update ruff to v0.8.4 • deps: update ruff to v0.8.3 • deps: update dependency pytest-cov to v6 Pull Requests What's Changed • chore: update changelog by @JP-Ellis in #826 • chore(deps): update actions/upload-artifact digest to b4b15b8 by @renovate in #817 • chore(deps): update astral-sh/setup-uv action to v3.1.6 by @renovate in #828 • chore(deps): update astral-sh/setup-uv action to v3.1.7 by @renovate in #831 • chore(deps): update dependency mypy to v1.12.0 by @renovate in #830 • chore(deps): update ubuntu:24.04 docker digest to d4f6f70 by @renovate in #827 • chore: fix url by @JP-Ellis in #832 • chore(deps): update ruff to v0.7.0 by @renovate in #833 • chore(deps): update dependency mypy to v1.12.1 by @renovate in #835 • chore(deps): update ubuntu:24.04 docker digest to 99c3519 by @renovate in #834 • chore(deps): update actions/checkout digest to 11bd719 by @renovate in #839 • chore(deps): update pre-commit hook crate-ci/typos to v1.26.1 by @renovate in #838 • chore(deps): update actions/cache digest to 6849a64 by @renovate in #836 • chore(deps): update dependency mypy to v1.13.0 by @renovate in #837 • chore(deps): update pre-commit hook crate-ci/typos to v1.26.8 by @renovate in #841 • chore(deps): update ruff to v0.7.1 by @renovate in #840 • chore(deps): update astral-sh/setup-uv action to v3.2.0 by @renovate in #842 • fix(deps): update dependency pytest-cov to v6 by @renovate in #843 • chore(deps): update pre-commit hook crate-ci/committed to v1.1.0 by @renovate in #845 • chore(deps): update pypa/gh-action-pypi-publish action to v1.11.0 by @renovate in #844 • chore(deps): update softprops/action-gh-release digest to e7a8f85 by @renovate in #847 • chore(deps): update pre-commit hook crate-ci/committed to v1.1.1 by @renovate in #846 • chore(deps): update pre-commit hook crate-ci/typos to v1.27.0 by @renovate in #849 • chore(deps): update ruff to v0.7.2 by @renovate in #848 • chore(deps): update astral-sh/setup-uv action to v3.2.1 by @renovate in #852 • chore(deps): update pypa/gh-action-pypi-publish action to v1.12.0 by @renovate in #851 • chore(deps): update pre-commit hook crate-ci/typos to v1.27.1 by @renovate in #854 • chore(deps): update astral-sh/setup-uv action to v3.2.2 by @renovate in #853 • chore(deps): update pypa/gh-action-pypi-publish action to v1.12.1 by @renovate in #855 • chore(deps): update pypa/gh-action-pypi-publish action to v1.12.2 by @renovate in #857 • chore(deps): update pre-commit hook crate-ci/typos to v1.27.2 by @renovate in #856 • chore(deps): update pre-commit hook crate-ci/typos to v1.27.3 by @renovate in #860 • chore(deps): update ruff to v0.7.3 by @renovate in #859 • chore(deps): update softprops/action-gh-release action to v2.1.0 by @renovate in #861 • chore(deps): update codecov/codecov-action action to v5 by @renovate in #862 • chore(deps): update codecov/codecov-action action to v5.0.2 by @renovate in #866 • chore(deps): update astral-sh/setup-uv action to v3.2.3 by @renovate in #864 • chore(deps): update ubuntu:24.04 docker digest to 278628f by @renovate in #867 • chore(deps): update codecov/codecov-action action to v5.0.3 by @renovate in #868 • chore(deps): update codecov/codecov-action action to v5.0.6 by @renovate in #869 • chore(deps): update codecov/codecov-action action to v5.0.7 by <https://github.com/re… pact-foundation/pact-python
  • r

    Ramon Saraiva

    01/17/2025, 5:09 PM
    hey guys, I have a doubt about the matchers, on consumer expectation, is possible to validate an optional field? For example: "proposal_id" "proposal_id": matchers.SomethingLike("ABC") | None
    m
    s
    • 3
    • 3
  • t

    Tom Lopez

    01/22/2025, 4:04 PM
    @Tom Lopez has left the channel
  • g

    GitHub

    01/23/2025, 12:07 AM
    Release - v2.3.1 New release published by github-actions[bot] Fix • v3: defer setting pact broker source • deps: update ruff to v0.9.2 (#934) • deps: update ruff to v0.9.1 (#930) • deps: update ruff to v0.9.0 (#927) • deps: update ruff to v0.8.6 (#924) • deps: update ruff to v0.8.5 (#921) Pull Requests What's Changed • chore: update changelog by @JP-Ellis in #919 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.0 by @renovate in #920 • fix(deps): update ruff to v0.8.5 by @renovate in #921 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.3 by @renovate in #922 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.4 by @renovate in #923 • fix(deps): update ruff to v0.8.6 by @renovate in #924 • chore(deps): update softprops/action-gh-release action to v2.2.1 by @renovate in #926 • chore(deps): update docker/setup-qemu-action action to v3.3.0 by @renovate in #925 • fix(deps): update ruff to v0.9.0 by @renovate in #927 • chore(deps): update actions/upload-artifact action to v4.6.0 by @renovate in #929 • fix(deps): update ruff to v0.9.1 by @renovate in #930 • fix(deps): update ruff to v0.9.2 by @renovate in #934 • chore(deps): update astral-sh/setup-uv action to v5.2.1 by @renovate in #932 • chore(deps): update codecov/codecov-action action to v5.2.0 by @renovate in #936 • fix(v3): defer setting pact broker source by @JP-Ellis in #935 Full Changelog: v2.3.0...v2.3.1 pact-foundation/pact-python
  • s

    Spencer

    02/11/2025, 3:34 PM
    @Spencer has left the channel
  • v

    Val Kolovos

    02/27/2025, 6:20 PM
    I've been upgrading our repositories to use
    pact-python
    2.3.1, and I have a feature request. It would appear that neither the
    state_handler
    nor the
    message_handler
    functions in the v3
    Verifier
    can be
    async
    functions. Is it possible to allow for that? Should I just create an issue in the github repo?
    j
    • 2
    • 6
  • r

    Ruud Welling

    03/05/2025, 8:05 AM
    Question about pending pacts in
    pact.v3
    : We have our verifier configured with
    include_pending
    enabled. When a consumer publishes a pact on a branch, a webhook triggers the verification and the CI output states > This pact is in pending state for this version of ProviderName because a successful verification result for ProviderName has not yet been published. If this verification fails, it will not cause the overall build to fail. Read more at https://docs.pact.io/go/pending It also shows that the test fails: > has a matching body (FAILED) 2 questions: • I see that the broker shows all results as green, even though some tests failed, is this a bug? • After the change got merged, the pact on main was shown as NOT pending, and caused the build to fail. Why was the pact considered pending when it was still on the branch, but not on main? (there was a previous successful verification on main before for a different version of that pact)
    m
    • 2
    • 2
  • a

    Adam Mitchell

    04/22/2025, 8:21 AM
    Hi All, our teams are in the process of migrating our monolith over to microservices. As part of that process we are introducing gRPC integrations into our system. There doesn't seem to be a plugin available for python as in other languages, has anybody else found a solution to contract testing gRPC with pact?
    m
    j
    a
    • 4
    • 39
  • v

    Vasyl

    04/22/2025, 9:31 PM
    Hi, getting a lo of
    PendingDeprecationWarning: This class will be deprecated Pact Python v3 (see pact-foundation/pact-python#396)
    messages make me try to find V3 release timeframe, but I don't have luck finding it so far. Is there any estimation of when v3 might be available, End of 2025? middle of 2026? 🤔
    j
    • 2
    • 5
  • j

    Jun Yi

    04/28/2025, 3:36 AM
    Hi, I'm currently using Pact Python v3, and I'm trying to implement consumer version selectors with a version for a specific consumer. However, I couldn't find any documentation or guides specifically for version 3. Is it possible to add a consumer version selector in this version of Pact Python? Below is the code I’m currently working with:
    Copy code
    verifier = Verifier().set_info(name=PROVIDER_NAME, url=PROVIDER_URL)
    verifier.broker_source(url=URL(settings.pact_flow_url), token=settings.pact_broker_token)
    verifier.set_state(url=PROVIDER_URL / "_pact" / "callback", teardown=True)
    verifier.filter_consumers(consumer_name)
    verifier.set_publish_options(version=str(version))
    verifier.verify()
    Thanks for your help!
    y
    j
    • 3
    • 4
  • p

    Patrick

    04/28/2025, 12:39 PM
    Hi, At the moment we are looking at Pact Python v3 and we are trying to migrate one provider to Pact Python v3. Only I can't find the option "publish verification results" when we want to run our tests with pact broker. The result is that from every local run on my machine the results are also published to pact broker and that is something we don't want. Is this option available in v3 of is there some other workaround we can use? Thanks for the help. Kind regards, Patrick
    y
    j
    • 3
    • 2
  • l

    Lachlan Newman

    05/01/2025, 11:13 PM
    Hey guys, just wondering, is there a command enabling or disabling the publishing of verification results with the python v3 verifier? i see the command
    set_publish_options
    but what is the behaviour if that function is not called ?
    y
    • 2
    • 1
  • g

    GitHub

    05/07/2025, 3:33 AM
    Release - v2.3.2 New release published by github-actions[bot] ## [2.3.2] 2025-05-05 ### 🚀 Features • (v3) [breaking] Allow more flexible functional arguments
    The signature of functional arguments must form a subset of the
    MessageProducerArgs
    and
    StateHandlerArgs
    typed dictionaries.
    ### 📚 Documentation • Replace commitizen with git cliff • Update blog post • Rename params -> parameters • (example) Elaborate on state handler ### ⚙️ Miscellaneous Tasks • Update pre-commit hooks • Update committed configuration • Add taplo • (ci) Update ubuntu runners • Reduce noise from taiki-e/install-action • (ci) Upload test results to codecov • Add apply_arg utility • (tests) Use consistent return value • (test) Tweak type signature • (examples) Fix state handler args ### Contributors • @JP-Ellis ## Pull Requests ## What's Changed • chore: update changelog by @JP-Ellis in #937 • chore: update pre-commit hooks by @JP-Ellis in #939 • chore: update committed configuration by @JP-Ellis in #940 • docs: replace commitizen with git cliff by @JP-Ellis in #938 • chore: add taplo by @JP-Ellis in #941 • chore(deps): update codecov/codecov-action action to v5.3.0 by @renovate in #944 • chore(deps): update taiki-e/install-action action to v2.47.24 by @renovate in #942 • fix(deps): update ruff to v0.9.3 by @renovate in #943 • chore(deps): update codecov/codecov-action action to v5.3.1 by @renovate in #946 • chore(deps): update taiki-e/install-action action to v2.47.25 by @renovate in #947 • chore(deps): update pre-commit hook igorshubovych/markdownlint-cli to v0.44.0 by @renovate in #948 • chore(deps): update pypa/gh-action-pypi-publish action to v1.12.4 by @renovate in #945 • chore(deps): update taiki-e/install-action action to v2.47.26 by @renovate in #949 • chore(deps): update taiki-e/install-action action to v2.47.28 by @renovate in #950 • chore(deps): update taiki-e/install-action action to v2.47.29 by @renovate in #951 • chore(deps): update taiki-e/install-action action to v2.47.30 by @renovate in #952 • fix(deps): update ruff to v0.9.4 by @renovate in #956 • chore(deps): update taiki-e/install-action action to v2.47.31 by @renovate in #954 • chore(deps): update astral-sh/setup-uv action to v5.2.2 by @renovate in #955 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.5 by @renovate in #957 • chore(deps): update taiki-e/install-action action to v2.48.1 by @renovate in #958 • fix(deps): update dependency mypy to v1.15.0 by @renovate in #960 • chore(deps): update docker/setup-qemu-action action to v3.4.0 by @renovate in #962 • chore(deps): update pre-commit hook biomejs/pre-commit to v1 by @renovate in #961 • fix(deps): update ruff to v0.9.5 by @renovate in #963 • chore(deps): update tests/v3/compatibility_suite/definition digest to cc76eac by @renovate in #573 • chore(deps): update taiki-e/install-action action to v2.48.2 by @renovate in #964 • chore(deps): update taiki-e/install-action action to v2.48.4 by @renovate in #965 • chore(deps): update taiki-e/install-action action to v2.48.5 by @renovate in #966 • fix(deps): update ruff to v0.9.6 by @renovate in #969 • chore(deps): update taiki-e/install-action action to v2.48.6 by @renovate in #968 • chore(deps): update taiki-e/install-action action to v2.48.7 by @renovate in #970 • chore(deps): update taiki-e/install-action action to v2.48.9 by @renovate in #971 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.7 by @renovate in #974 • chore(deps): update pactfoundation/pact-broker:latest docker digest to 1abd7da by @renovate in #973 • chore(deps): update taiki-e/install-action action to v2.48.10 by @renovate in #972 • chore(deps): update taiki-e/install-action action to v2.48.12 by @renovate in #976 • fix(deps): update dependency psutil to v7 by @renovate in #977 • chore(deps): update taiki-e/install-action action to v2.48.13 by @renovate in #978 • chore(deps): update taiki-e/install-action action to v2.48.14 by @renovate in #979 • chore(deps): update actions/cache action to v4.2.1 by @renovate in #980 • chore(deps): update taiki-e/install-action action to v2.48.15 by @renovate in #981 • chore(deps): update pre-commit hook crate-ci/typos to v1.29.8 by @renovate in <https://github.com/pact-foundation/pact-python/pull/982|#… pact-foundation/pact-python
    j
    • 2
    • 1
  • j

    Joshua Ellis

    05/07/2025, 3:37 AM
    Hmm, we just hit the 10GiB total limit for Pact Python on PyPI 😕 So the latest release failed halfway through the release
    r
    • 2
    • 5
  • d

    Dilip Punna

    06/19/2025, 5:02 PM
    https://pact-foundation.slack.com/archives/C5F4KFKR8/p1750352447466509
    j
    • 2
    • 1
  • a

    Adriano Tanoue

    06/23/2025, 8:43 AM
    Hello 👋 - question on query parameters: When creating a contract that has query params, even if I specify those parameters as simple strings, the generated pact makes each parameter into an array:
    Copy code
    query_params = {"count": "1", "skip": "0"}
    interaction.with_query_parameters(query_params)
    
    ...becomes:
    
    "request": {
           "query": {
             "count": [
               "1"
             ],
             "skip": [
               "0"
             ]
           }
    So the actual url path is something like:
    /status?count[0]=1&skip[0]=0
    instead of
    /status?count=1&skip=0
    . Is that by design? Doesn't it make a wrong contract?
    j
    • 2
    • 4
  • z

    Zachary Lysobey

    06/24/2025, 9:42 PM
    @Zachary Lysobey has left the channel
  • d

    David Mason

    07/09/2025, 2:41 PM
    Hello 👋 I'm not sure whether to post this here or in pact-broker. Using pact-python v3 to get pacts from a broker and verify them. Is there a good way to debug which pacts have been sourced from the broker? I've got a pact published by another team in the broker, but I am not verifying it even though all my tests pass and I'm sourcing pacts from the broker using the same provider. I expect it's only selecting one of the pacts for my provider, rather than a list of all of them but cannot see what is happening to confirm. related code snippet
    Copy code
    @pytest.fixture(scope="module")
    def sqs_pact_verifier(pact_dir: str, version: str) -> Verifier:
        verifier = Verifier("my-provider")
    
        if broker_url := os.environ.get("PACT_BROKER_BASE_URL"):
            verifier = verifier.set_publish_options(version=version)
            verifier = verifier.broker_source(broker_url, token=os.environ["PACT_BROKER_TOKEN"]).set_error_on_empty_pact()
    
        return verifier
    
    
    def test_verify_payment_network_request(sqs_pact_verifier: Verifier):
        sqs_pact_verifier.message_handler(run_message_handler).verify()
    I've double checked the versions match, any ideas?
    j
    • 2
    • 4
  • p

    Patrick

    07/14/2025, 10:41 AM
    Hi, we have been working for a while with pact python V3 and now we got a small issue with V3 when we published a contract for the first time to pact broker and we want to verify this contract for the first time (this contract is still in a MR and not deployed to our environments). The consumer version selectors we use are: "mainBranch : True", "deployedOrReleased: True", include_pending and include_wip_since("2025-07-11"). The result of the test is that no pacts were found with these selectors while we expect that the contract must be found because of the selector wip since. When we use pact python V2 and use the same selectors then the pact contract is found in pact broker. So is there something we are doing wrong in this case or is this a bug in V3? Here you can see the related code:
    Copy code
    verifier = (
            Verifier(PROVIDER)
            .add_transport(url=server)
            .state_handler(provider_state_handler, teardown=False)
            .broker_source(url=BROKER_URL, selector=True)
            .consumer_versions('{"mainBranch": true}', '{"deployedOrReleased": true}')
            .include_pending()
            .include_wip_since("2025-07-11")
            .build
        )
    
        if os.getenv("CI"):
            verifier.set_publish_options(
                version=os.getenv("VERSION")
                branch=os.getenv("CI_COMMIT_REF_NAME")
            )
    
        verifier.verify()
    m
    • 2
    • 8
  • g

    GitHub

    07/17/2025, 11:38 AM
    Release - v2.3.3 New release published by github-actions[bot] ## [2.3.3] 2025-07-17 ### 🚀 Features • (v3) Add will_respond_with for sync ### 🐛 Bug Fixes • (v3) Avoid error if there's no mismatch type ### 📚 Documentation • (examples) Add proto module documentation • Add protobuf and grpc links ### ⚙️ Miscellaneous Tasks • (ci) Remove pre-commit cache restore key • Update biome • (examples) Add protobuf example • Add version stub file • (examples) Parametrize protobuf example • (ci) Update runners • Split mypy calls ### Contributors • @JP-Ellis ## Pull Requests ## What's Changed • chore(deps): update codecov/codecov-action action to v5.4.3 by @renovate[bot] in #1062 • chore(deps): update codecov/test-results-action action to v1.1.1 by @renovate[bot] in #1064 • chore(deps): update astral-sh/setup-uv action to v6.1.0 by @renovate[bot] in #1065 • fix(deps): update dependency pytest-asyncio to v1 by @renovate[bot] in #1066 • fix(deps): update ruff to v0.11.12 by @renovate[bot] in #1060 • fix(deps): update dependency mypy to v1.16.0 by @renovate[bot] in #1067 • chore(deps): update taiki-e/install-action action to v2.52.4 by @renovate[bot] in #1061 • chore(deps): update pre-commit hook igorshubovych/markdownlint-cli to v0.45.0 by @renovate[bot] in #1063 • chore(deps): update pre-commit hook crate-ci/typos to v1.33.1 by @renovate[bot] in #1068 • chore(ci): remove pre-commit cache restore key by @JP-Ellis in #1070 • fix(deps): update ruff to v0.11.13 by @renovate[bot] in #1072 • chore(deps): update pactfoundation/pact-broker:latest docker digest to 1cbd614 by @renovate[bot] in #1071 • chore(deps): update taiki-e/install-action action to v2.52.7 by @renovate[bot] in #1073 • chore(deps): update softprops/action-gh-release action to v2.3.2 by @renovate[bot] in #1074 • chore(deps): update tests/v3/compatibility_suite/definition digest to 1acfa1e by @renovate[bot] in #975 • chore(deps): update taiki-e/install-action action to v2.52.8 by @renovate[bot] in #1076 • fix(deps): update dependency mypy to v1.16.1 by @renovate[bot] in #1077 • fix(deps): update ruff to v0.12.0 by @renovate[bot] in #1078 • chore(deps): update pre-commit hook biomejs/pre-commit to v2 by @renovate[bot] in #1079 • chore(deps): update astral-sh/setup-uv action to v6.2.1 by @renovate[bot] in #1081 • chore(deps): update astral-sh/setup-uv action to v6.3.0 by @renovate[bot] in #1083 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.0.2 by @renovate[bot] in #1085 • chore(deps): update taiki-e/install-action action to v2.54.0 by @renovate[bot] in #1086 • chore: udpate biome by @JP-Ellis in #1087 • fix(v3): avoid error if there's no mismatch type by @JP-Ellis in #1088 • feat(v3): add will_respond_with for sync by @JP-Ellis in #1090 • chore(deps): update astral-sh/setup-uv action to v6.3.1 by @renovate[bot] in #1091 • chore(examples): add protobuf example by @JP-Ellis in #1089 • fix(deps): update ruff to v0.12.1 by @renovate[bot] in #1093 • chore(examples): parametrize protobuf example by @JP-Ellis in #1094 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.0.6 by @renovate[bot] in #1095 • chore(deps): update taiki-e/install-action action to v2.54.3 by @renovate[bot] in #1096 • chore(deps): update pre-commit hook crate-ci/typos to v1.34.0 by @renovate[bot] in #1097 • chore(ci): update runners by @JP-Ellis in #1099 • fix(deps): update ruff to v0.12.2 by @renovate[bot] in #1098 • chore(deps): update taiki-e/install-action action to v2.56.7 by @renovate[bot] in #1100 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.1.1 by @renovate[bot] in #1101 • chore(deps): update pactfoundation/pact-broker:latest docker digest to 0106b1f by @renovate[bot] in #1102 • fix(deps): update ruff to v0.12.3 by @renovate[bot] in #1104 • chore(deps): update taiki-e/install-action action to v2.56.13 by @renovate[bot] in #1105 • fix(deps): update dependency mypy to v1.17.0 by @renovate[bot] in #1106 • chore: split mypy calls by @JP-Ellis in #1108 Full Changelog: v2.3.2...v2.3.3 pact-foundation/pact-python
  • g

    GitHub

    07/22/2025, 6:17 AM
    Release - pact-python-cli/2.4.26.1 New release published by github-actions[bot] ## [unreleased] ### ⚙️ Miscellaneous Tasks • Properly extract tag version ### Contributors • @JP-Ellis ## Pull Requests ## What's Changed • docs: update changelog by @JP-Ellis in #1109 • fix(deps): update ruff to v0.12.4 by @renovate[bot] in #1110 • chore: update pre-commit hooks by @JP-Ellis in #1112 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.1.2 by @renovate[bot] in #1114 • chore(deps): update astral-sh/setup-uv action to v6.4.1 by @renovate[bot] in #1111 • chore(deps): update taiki-e/install-action action to v2.56.19 by @renovate[bot] in #1115 • chore: create cli and ffi packages by @JP-Ellis in #1113 • chore: remove macosx deployment target by @JP-Ellis in #1117 • chore(ci): fix cli publish permissions by @JP-Ellis in #1118 • chore(cli): get version from vcs by @JP-Ellis in #1119 • chore(deps): update astral-sh/setup-uv action to v6.4.1 by @renovate[bot] in #1116 Full Changelog: v2.3.3...pact-python-cli/2.4.26.1 pact-foundation/pact-python
  • g

    GitHub

    07/23/2025, 11:31 AM
    Release - pact-python-cli/2.4.26.2 New release published by github-actions[bot] ## [pact-python-cli/2.4.26.2] 2025-07-23 ### 🚀 Features • (cli) Build abi-agnostic wheels ### Contributors • @JP-Ellis ## Pull Requests ## What's Changed • feat(cli): build abi-agnostic wheels by @JP-Ellis in #1121 Full Changelog: pact-python-cli/2.4.26.1...pact-python-cli/2.4.26.2 pact-foundation/pact-python
    🚀 2
    j
    • 2
    • 1
  • g

    GitHub

    07/29/2025, 10:29 AM
    Release - pact-python-ffi/0.4.22.0 New release published by github-actions[bot] ## [pact-python-ffi/0.4.22.0] 2025-07-29 ### 🚀 Features • (ffi) Add standalone ffi package ### ⚙️ Miscellaneous Tasks • Create cli and ffi packages ### Contributors • @JP-Ellis ## Pull Requests ## What's Changed • chore(deps): update astral-sh/setup-uv action to v6.4.2 by @renovate[bot] in #1123 • chore: update gitignore by @JP-Ellis in #1124 • docs: update cli changelog by @JP-Ellis in #1122 • chore(deps): update astral-sh/setup-uv action to v6.4.3 by @renovate[bot] in #1125 • docs(cli): update readme and ensure it is on pypi by @JP-Ellis in #1126 • chore(deps): update pactfoundation/pact-broker:latest docker digest to 05b05a1 by @renovate[bot] in #1127 • chore(deps): update taiki-e/install-action action to v2.57.1 by @renovate[bot] in #1130 • feat(ffi): add standalone ffi package by @JP-Ellis in #1129 Full Changelog: pact-python-cli/2.4.26.2...pact-python-ffi/0.4.22.0 pact-foundation/pact-python
  • g

    GitHub

    08/12/2025, 4:23 AM
    Release - pact-python/3.0.0a1 New release published by github-actions[bot] ## [pact-python/3.0.0a1] 2025-08-12 ### 🚀 Features • Create pact-python-cli package • (cli) Build abi-agnostic wheels • (ffi) Add standalone ffi package • (v3) [breaking] Remove pact.v3.ffi module
    pact.v3.ffi
    is removed, and to be replaced by
    pact_ffi
    . That is,
    pact.v3.ffi.$fn
    should be replaced by
    pact_ffi.$fn
    .
    • [breaking] Prepare for v3 release
    This prepares for version 3. Pact Python v2 will be still accessible under
    pact.v2
    and all imports should be appropriate renamed. Everyone is encouraged to migrate to Pact Python v3.
    • [breaking] Simplify
    given
    The signature of
    Interaction.given
    has been updated. The following changes are required: - Change
    given("state", key="user_id", value=123)
    to
    given("state", user_id=123)
    . This can take an arbitrary number of keyword arguments. If the key is not a valid Python keyword argument, use the dictionary input below. - Change
    given("state", parameters={"user_id": 123})
    to
    given("state", {"user_id": 123})
    .
    • [breaking] Deserialize metadata values
    As the metadata values are now deserialised, the type of the metadata values may change. For example, setting metadata
    user_id=123
    will now pass
    {"user_id": 123}
    through to the function handler. Previously, this would have been
    {"user_id": "123"}
    .
    ### 🐛 Bug Fixes • Matcher type variance • With metadata function signature • [breaking] Use correct datetime default format
    If you relied on the previous default (undocumented) behaviour, prefer specifying the format explicitly now:
    match.datetime(regex="%Y-%m-%dT%H:%M:%S.%f%z")
    .
    • Handle empty state callback • (verifier) [breaking] Propagate branch
    If a branch is set through either
    set_publish_options
    or
    provider_branch
    , the value will be saved and used as a default for both in subsequent calls.
    ### 🚜 Refactor • Functional state handler ### 📚 Documentation • Update changelog for v2.3.3 • (blog) Fix v3 references • Fix v3 references • V3 review • Update git cliff configuration ### ⚙️ Miscellaneous Tasks • Update pre-commit hooks • Use the new
    pact_cli
    package • Remove packaging of pact cli • (ci) Incorporate tests of pact cli • (ci) Use new
    pact-python/*
    tags • (ci) Add build cli pipeline • Exclude hatch_build from mypy checks • (ci) Narrow token permissions • Remove macosx deployment target • (ci) Fix cli publish permissions • Properly extract tag version • Update gitignore • (ci) Fix core package build • Split out dependencies and tests • (ci) Update labels • (ci) Fix labels • (tests) Re-organise tests • Fix bad copy-paste in tests • Log exceptions from apply_args • Improve logging from apply_args • (examples) Start examples overhaul • (ci) Use new examples • Update protobuf examples • (ci) Cancel ci on PRs • Add vscode settings and extensions • Add envrc • Replace yamlfix with yamlfmt • Remove deptry config • Support pre and post release tags • Fix typo ### Contributors • @JP-Ellis • @kevinrvaz ## Pull Requests ## What's Changed • docs: update ffi changelog by @JP-Ellis in #1131 • feat(v3)!: remove pact.v3.ffi module by @JP-Ellis in #1132 • docs(ffi): fix old references to pact.v3.ffi by @JP-Ellis in #1133 • chore(cli): cleanup build script by @JP-Ellis in #1136 • chore(ffi): cleanup build script by @JP-Ellis in #1135 • chore(cli): fix flakey test by @JP-Ellis in #1137 • chore(deps): update pypa/cibuildwheel action to v3.1.2 by @renovate[bot] in #1075 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.1.3 by @renovate[bot] in #1138 • fix(deps): update ruff to v0.12.7 by @renovate[bot] in #1128 • feat!: prepare for v3 release by @JP-Ellis in #1139 • fix(deps): update dependency mypy to v1.17.1 by @renovate[bot] in #1141 • chore(ci): update labels by @JP-Ellis in #1140 • chore(ci): fix labels by @JP-Ellis in #1142 • chore(deps): update pypa/cibuildwheel action to v3.1.3 by @renovate[bot] in #1143 • chore(deps): update taiki-e/install-action action to v2.57.5 by @renovate[bot] in #1144 • chore(deps): update pre-commit hook crate-ci/typos to v1.35.1 by @renovate[bot] in #1145 • chore(deps): update actions/download-artifact action to v5 by @renovate[bot] in #1146 • docs: v3 review by @JP-Ellis in #1147 • chore(deps): fix optional dependencies by @JP-Ellis in #1148 • chore(deps): remove unused optional dependency by @JP-Ellis in #1149 • feat!: simplify
    given
    by @JP-Ellis in #1150 • feat!: with_metadata by @JP-Ellis in #1151 • chore(deps): update actions/cache action to v4.2.4 by @renovate[bot] in #1152 • fix(deps): update ruff to v0.12.8 by @renovate[bot] in #1153 • chore(deps): update pre-commit hook crate-ci/typos to v1.35.2 by @renovate[bot] in #1155 • chore: log exceptions from apply_args by @JP-Ellis in #1157 • chore: improve logging from apply_args by @JP-Ellis in #1158 • fix: use correct datetime default format by @JP-Ellis in #1156 • refactor: functional state handler by @JP-Ellis in #1159 • chore(deps): update pre-commit hook biomejs/pre-commit to v2.1.4 by @renovate[bot] in #1160 • fix: handle empty state callback by @JP-Ellis in #1161 • chore(deps): update pre-commit … pact-foundation/pact-python
    🚀 2
    🎉 4
  • m

    Matt (pactflow.io / pact-js / pact-go)

    08/12/2025, 4:46 AM
    Massive milestone @Joshua Ellis 👏