From d30740afab1f30f04aa9faa259ff13191c06cc78 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 04:54:35 +0000 Subject: [PATCH 01/15] chore(tests): bump steady to v0.19.4 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 5827de97..afa43984 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.3 -- steady --version + npm exec --package=@stdy/cli@0.19.4 -- steady --version - npm exec --package=@stdy/cli@0.19.3 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-query-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.4 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.3 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-query-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.19.4 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index 3d52a18e..cda47da3 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.3 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-query-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.4 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" echo exit 1 From 5f296c83432a13bd412845f4d31a7f086a174e95 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 05:03:37 +0000 Subject: [PATCH 02/15] chore(tests): bump steady to v0.19.5 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index afa43984..2f1753e4 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.4 -- steady --version + npm exec --package=@stdy/cli@0.19.5 -- steady --version - npm exec --package=@stdy/cli@0.19.4 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.5 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.4 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.19.5 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index cda47da3..626826e5 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.4 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.5 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" echo exit 1 From a8b9d7f1540ab7080991c8317e712b0a09aa0d3c Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 04:58:51 +0000 Subject: [PATCH 03/15] chore(internal): update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 95ceb189..3824f4c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .prism.log +.stdy.log _dev __pycache__ From 5b0209cbd977349465e594c67d9f331e3466786b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 05:07:12 +0000 Subject: [PATCH 04/15] chore(tests): bump steady to v0.19.6 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 2f1753e4..8d9cac24 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.5 -- steady --version + npm exec --package=@stdy/cli@0.19.6 -- steady --version - npm exec --package=@stdy/cli@0.19.5 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.5 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.19.6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index 626826e5..a16b7e37 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.5 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.6 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" echo exit 1 From 1c3f9a12635a02dd3074068be6e540a82a1c5a6a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 24 Mar 2026 22:49:46 +0000 Subject: [PATCH 05/15] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 716164b6..1782a2e6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 220 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-09df225c4fd3265d31ac1bc16ac2774cac8691a201954cfb010e50f06b5ab486.yml -openapi_spec_hash: 75ec4898861584506d099bec5c6f0d2a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-1ec735f7e62a53b7cbeecfc0b383ec25dbe9f51e2f43ba71e42cfb2154be678a.yml +openapi_spec_hash: c287d26ea4eada69d78d90bf0405b307 config_hash: 89303a38c78d93021ba8a584462375bd From c022258ae83dc218cb347b2f4fa1bbe9f9c01392 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 03:25:11 +0000 Subject: [PATCH 06/15] chore(ci): skip lint on metadata-only changes Note that we still want to run tests, as these depend on the metadata. --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40249fee..08fb1087 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: timeout-minutes: 10 name: lint runs-on: ${{ github.repository == 'stainless-sdks/conductor-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork + if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') steps: - uses: actions/checkout@v6 @@ -38,7 +38,7 @@ jobs: run: ./scripts/lint build: - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork + if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') timeout-minutes: 10 name: build permissions: From 7b21104b7a2c1037b48813de3641775af0ea1ba8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 03:25:52 +0000 Subject: [PATCH 07/15] chore(tests): bump steady to v0.19.7 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 8d9cac24..fc783eb8 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.6 -- steady --version + npm exec --package=@stdy/cli@0.19.7 -- steady --version - npm exec --package=@stdy/cli@0.19.6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.6 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index a16b7e37..baf80d9a 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.6 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" echo exit 1 From f264eeb5bfc0eda46c966a8c29414aa160ce89b5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 06:30:05 +0000 Subject: [PATCH 08/15] feat(internal): implement indices array format for query and form serialization --- scripts/mock | 4 ++-- scripts/test | 2 +- src/conductor/_qs.py | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index fc783eb8..e730c7fc 100755 --- a/scripts/mock +++ b/scripts/mock @@ -24,7 +24,7 @@ if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout npm exec --package=@stdy/cli@0.19.7 -- steady --version - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index baf80d9a..3b603f2f 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-form-array-format=repeat --validator-query-array-format=repeat --validator-form-object-format=dots --validator-query-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots${NC}" echo exit 1 diff --git a/src/conductor/_qs.py b/src/conductor/_qs.py index ada6fd3f..de8c99bc 100644 --- a/src/conductor/_qs.py +++ b/src/conductor/_qs.py @@ -101,7 +101,10 @@ def _stringify_item( items.extend(self._stringify_item(key, item, opts)) return items elif array_format == "indices": - raise NotImplementedError("The array indices format is not supported yet") + items = [] + for i, item in enumerate(value): + items.extend(self._stringify_item(f"{key}[{i}]", item, opts)) + return items elif array_format == "brackets": items = [] key = key + "[]" From 0ae145cfefe1fe2a250731711912854a76364b89 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 08:33:38 +0000 Subject: [PATCH 09/15] chore(tests): bump steady to v0.20.1 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index e730c7fc..5084ca12 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.19.7 -- steady --version + npm exec --package=@stdy/cli@0.20.1 -- steady --version - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.19.7 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index 3b603f2f..246dd50c 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.19.7 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.1 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots${NC}" echo exit 1 From fe9fe54e34704891c9463c00fbad35f50693d390 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 08:39:40 +0000 Subject: [PATCH 10/15] chore(tests): bump steady to v0.20.2 --- scripts/mock | 6 +++--- scripts/test | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mock b/scripts/mock index 5084ca12..439a2c67 100755 --- a/scripts/mock +++ b/scripts/mock @@ -22,9 +22,9 @@ echo "==> Starting mock server with URL ${URL}" # Run steady mock on the given spec if [ "$1" == "--daemon" ]; then # Pre-install the package so the download doesn't eat into the startup timeout - npm exec --package=@stdy/cli@0.20.1 -- steady --version + npm exec --package=@stdy/cli@0.20.2 -- steady --version - npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" &> .stdy.log & + npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" &> .stdy.log & # Wait for server to come online via health endpoint (max 30s) echo -n "Waiting for server" @@ -48,5 +48,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stdy/cli@0.20.1 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" + npm exec --package=@stdy/cli@0.20.2 -- steady --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots "$URL" fi diff --git a/scripts/test b/scripts/test index 246dd50c..fef460b9 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! steady_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the steady command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.1 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stdy/cli@0.20.2 -- steady path/to/your.openapi.yml --host 127.0.0.1 -p 4010 --validator-query-array-format=repeat --validator-form-array-format=repeat --validator-query-object-format=dots --validator-form-object-format=dots${NC}" echo exit 1 From d10df3592b34e7edfbfcd1c31059645caca40e45 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 01:42:54 +0000 Subject: [PATCH 11/15] feat(api): api update --- .stats.yml | 4 ++-- src/conductor/types/qbd/credit_memo.py | 7 +++++++ src/conductor/types/qbd/credit_memo_create_params.py | 7 +++++++ src/conductor/types/qbd/invoice.py | 7 +++++++ src/conductor/types/qbd/invoice_create_params.py | 7 +++++++ src/conductor/types/qbd/purchase_order.py | 7 +++++++ src/conductor/types/qbd/purchase_order_create_params.py | 7 +++++++ src/conductor/types/qbd/sales_receipt.py | 7 +++++++ src/conductor/types/qbd/sales_receipt_create_params.py | 7 +++++++ tests/api_resources/qbd/test_credit_memos.py | 2 ++ tests/api_resources/qbd/test_invoices.py | 2 ++ tests/api_resources/qbd/test_purchase_orders.py | 2 ++ tests/api_resources/qbd/test_sales_receipts.py | 2 ++ 13 files changed, 66 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 1782a2e6..c8b0568c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 220 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-1ec735f7e62a53b7cbeecfc0b383ec25dbe9f51e2f43ba71e42cfb2154be678a.yml -openapi_spec_hash: c287d26ea4eada69d78d90bf0405b307 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-f2373ceb0221955bd836b2987c0b79b120a12186e852637094d279985fbb31d9.yml +openapi_spec_hash: ded02afc8af2cac03591e7a4b3961dc3 config_hash: 89303a38c78d93021ba8a584462375bd diff --git a/src/conductor/types/qbd/credit_memo.py b/src/conductor/types/qbd/credit_memo.py index 4f1a5a78..11db7033 100644 --- a/src/conductor/types/qbd/credit_memo.py +++ b/src/conductor/types/qbd/credit_memo.py @@ -677,6 +677,13 @@ class LineGroup(BaseModel): group. """ + service_date: Optional[date] = FieldInfo(alias="serviceDate", default=None) + """ + The date on which the service for this credit memo line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + should_print_items_in_group: bool = FieldInfo(alias="shouldPrintItemsInGroup") """ Indicates whether the individual items in this credit memo line group and their diff --git a/src/conductor/types/qbd/credit_memo_create_params.py b/src/conductor/types/qbd/credit_memo_create_params.py index 0d5e22e5..52d38575 100644 --- a/src/conductor/types/qbd/credit_memo_create_params.py +++ b/src/conductor/types/qbd/credit_memo_create_params.py @@ -330,6 +330,13 @@ class LineGroup(TypedDict, total=False): group. """ + service_date: Annotated[Union[str, date], PropertyInfo(alias="serviceDate", format="iso8601")] + """ + The date on which the service for this credit memo line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + unit_of_measure: Annotated[str, PropertyInfo(alias="unitOfMeasure")] """The unit-of-measure used for the `quantity` in this credit memo line group. diff --git a/src/conductor/types/qbd/invoice.py b/src/conductor/types/qbd/invoice.py index 906bee3b..03d9e23f 100644 --- a/src/conductor/types/qbd/invoice.py +++ b/src/conductor/types/qbd/invoice.py @@ -677,6 +677,13 @@ class LineGroup(BaseModel): group. """ + service_date: Optional[date] = FieldInfo(alias="serviceDate", default=None) + """ + The date on which the service for this invoice line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + should_print_items_in_group: bool = FieldInfo(alias="shouldPrintItemsInGroup") """ Indicates whether the individual items in this invoice line group and their diff --git a/src/conductor/types/qbd/invoice_create_params.py b/src/conductor/types/qbd/invoice_create_params.py index bf887426..ba15013a 100644 --- a/src/conductor/types/qbd/invoice_create_params.py +++ b/src/conductor/types/qbd/invoice_create_params.py @@ -397,6 +397,13 @@ class LineGroup(TypedDict, total=False): group. """ + service_date: Annotated[Union[str, date], PropertyInfo(alias="serviceDate", format="iso8601")] + """ + The date on which the service for this invoice line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + unit_of_measure: Annotated[str, PropertyInfo(alias="unitOfMeasure")] """The unit-of-measure used for the `quantity` in this invoice line group. diff --git a/src/conductor/types/qbd/purchase_order.py b/src/conductor/types/qbd/purchase_order.py index e2517e7a..04d4a457 100644 --- a/src/conductor/types/qbd/purchase_order.py +++ b/src/conductor/types/qbd/purchase_order.py @@ -619,6 +619,13 @@ class LineGroup(BaseModel): group. """ + service_date: Optional[date] = FieldInfo(alias="serviceDate", default=None) + """ + The date on which the service for this purchase order line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + should_print_items_in_group: bool = FieldInfo(alias="shouldPrintItemsInGroup") """ Indicates whether the individual items in this purchase order line group and diff --git a/src/conductor/types/qbd/purchase_order_create_params.py b/src/conductor/types/qbd/purchase_order_create_params.py index c3694272..cf10e219 100644 --- a/src/conductor/types/qbd/purchase_order_create_params.py +++ b/src/conductor/types/qbd/purchase_order_create_params.py @@ -246,6 +246,13 @@ class LineGroup(TypedDict, total=False): group. """ + service_date: Annotated[Union[str, date], PropertyInfo(alias="serviceDate", format="iso8601")] + """ + The date on which the service for this purchase order line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + unit_of_measure: Annotated[str, PropertyInfo(alias="unitOfMeasure")] """The unit-of-measure used for the `quantity` in this purchase order line group. diff --git a/src/conductor/types/qbd/sales_receipt.py b/src/conductor/types/qbd/sales_receipt.py index 99be87d9..a615cd2f 100644 --- a/src/conductor/types/qbd/sales_receipt.py +++ b/src/conductor/types/qbd/sales_receipt.py @@ -1030,6 +1030,13 @@ class LineGroup(BaseModel): group. """ + service_date: Optional[date] = FieldInfo(alias="serviceDate", default=None) + """ + The date on which the service for this sales receipt line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + should_print_items_in_group: bool = FieldInfo(alias="shouldPrintItemsInGroup") """ Indicates whether the individual items in this sales receipt line group and diff --git a/src/conductor/types/qbd/sales_receipt_create_params.py b/src/conductor/types/qbd/sales_receipt_create_params.py index ed03392b..bdba659f 100644 --- a/src/conductor/types/qbd/sales_receipt_create_params.py +++ b/src/conductor/types/qbd/sales_receipt_create_params.py @@ -506,6 +506,13 @@ class LineGroup(TypedDict, total=False): group. """ + service_date: Annotated[Union[str, date], PropertyInfo(alias="serviceDate", format="iso8601")] + """ + The date on which the service for this sales receipt line group was or will be + performed, in ISO 8601 format (YYYY-MM-DD). This is particularly relevant for + service items. + """ + unit_of_measure: Annotated[str, PropertyInfo(alias="unitOfMeasure")] """The unit-of-measure used for the `quantity` in this sales receipt line group. diff --git a/tests/api_resources/qbd/test_credit_memos.py b/tests/api_resources/qbd/test_credit_memos.py index 2d958ca0..0a19f0f8 100644 --- a/tests/api_resources/qbd/test_credit_memos.py +++ b/tests/api_resources/qbd/test_credit_memos.py @@ -71,6 +71,7 @@ def test_method_create_with_all_params(self, client: Conductor) -> None: "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], @@ -511,6 +512,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncConductor) "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], diff --git a/tests/api_resources/qbd/test_invoices.py b/tests/api_resources/qbd/test_invoices.py index 5a5787bc..242c2a33 100644 --- a/tests/api_resources/qbd/test_invoices.py +++ b/tests/api_resources/qbd/test_invoices.py @@ -79,6 +79,7 @@ def test_method_create_with_all_params(self, client: Conductor) -> None: "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], @@ -543,6 +544,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncConductor) "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], diff --git a/tests/api_resources/qbd/test_purchase_orders.py b/tests/api_resources/qbd/test_purchase_orders.py index 87e5a7b9..0ae0271f 100644 --- a/tests/api_resources/qbd/test_purchase_orders.py +++ b/tests/api_resources/qbd/test_purchase_orders.py @@ -56,6 +56,7 @@ def test_method_create_with_all_params(self, client: Conductor) -> None: ], "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], @@ -482,6 +483,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncConductor) ], "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], diff --git a/tests/api_resources/qbd/test_sales_receipts.py b/tests/api_resources/qbd/test_sales_receipts.py index 7e4a2cbc..ea278527 100644 --- a/tests/api_resources/qbd/test_sales_receipts.py +++ b/tests/api_resources/qbd/test_sales_receipts.py @@ -101,6 +101,7 @@ def test_method_create_with_all_params(self, client: Conductor) -> None: "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], @@ -598,6 +599,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncConductor) "inventory_site_id": "80000001-1234567890", "inventory_site_location_id": "80000001-1234567890", "quantity": 5, + "service_date": parse_date("2024-03-15"), "unit_of_measure": "Each", } ], From f036b60dcedb8720bdc8c1975679cdd49d77261f Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Thu, 2 Apr 2026 01:46:48 +0000 Subject: [PATCH 12/15] feat(api): api update --- .stats.yml | 4 ++-- src/conductor/types/qbd/non_inventory_item.py | 2 +- src/conductor/types/qbd/other_charge_item.py | 2 +- src/conductor/types/qbd/service_item.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.stats.yml b/.stats.yml index c8b0568c..9b7f3a06 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 220 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-f2373ceb0221955bd836b2987c0b79b120a12186e852637094d279985fbb31d9.yml -openapi_spec_hash: ded02afc8af2cac03591e7a4b3961dc3 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/conductor%2Fconductor-2e591208a875b09a6f16e02de08c8b3943ff52f87ec6decec9d89c8fea7f936d.yml +openapi_spec_hash: d082d7df064bbe33df8111ad92d0e067 config_hash: 89303a38c78d93021ba8a584462375bd diff --git a/src/conductor/types/qbd/non_inventory_item.py b/src/conductor/types/qbd/non_inventory_item.py index 015a32b2..34454ebb 100644 --- a/src/conductor/types/qbd/non_inventory_item.py +++ b/src/conductor/types/qbd/non_inventory_item.py @@ -188,7 +188,7 @@ class SalesAndPurchaseDetails(BaseModel): expense_account: Optional[SalesAndPurchaseDetailsExpenseAccount] = FieldInfo(alias="expenseAccount", default=None) """The expense account used to track costs from purchases of this item.""" - income_account: SalesAndPurchaseDetailsIncomeAccount = FieldInfo(alias="incomeAccount") + income_account: Optional[SalesAndPurchaseDetailsIncomeAccount] = FieldInfo(alias="incomeAccount", default=None) """The income account used to track revenue from sales of this item.""" preferred_vendor: Optional[SalesAndPurchaseDetailsPreferredVendor] = FieldInfo( diff --git a/src/conductor/types/qbd/other_charge_item.py b/src/conductor/types/qbd/other_charge_item.py index 433da0be..bca10b06 100644 --- a/src/conductor/types/qbd/other_charge_item.py +++ b/src/conductor/types/qbd/other_charge_item.py @@ -187,7 +187,7 @@ class SalesAndPurchaseDetails(BaseModel): expense_account: Optional[SalesAndPurchaseDetailsExpenseAccount] = FieldInfo(alias="expenseAccount", default=None) """The expense account used to track costs from purchases of this item.""" - income_account: SalesAndPurchaseDetailsIncomeAccount = FieldInfo(alias="incomeAccount") + income_account: Optional[SalesAndPurchaseDetailsIncomeAccount] = FieldInfo(alias="incomeAccount", default=None) """The income account used to track revenue from sales of this item.""" preferred_vendor: Optional[SalesAndPurchaseDetailsPreferredVendor] = FieldInfo( diff --git a/src/conductor/types/qbd/service_item.py b/src/conductor/types/qbd/service_item.py index 2736a234..7a3fbd37 100644 --- a/src/conductor/types/qbd/service_item.py +++ b/src/conductor/types/qbd/service_item.py @@ -188,7 +188,7 @@ class SalesAndPurchaseDetails(BaseModel): expense_account: Optional[SalesAndPurchaseDetailsExpenseAccount] = FieldInfo(alias="expenseAccount", default=None) """The expense account used to track costs from purchases of this item.""" - income_account: SalesAndPurchaseDetailsIncomeAccount = FieldInfo(alias="incomeAccount") + income_account: Optional[SalesAndPurchaseDetailsIncomeAccount] = FieldInfo(alias="incomeAccount", default=None) """The income account used to track revenue from sales of this item.""" preferred_vendor: Optional[SalesAndPurchaseDetailsPreferredVendor] = FieldInfo( From a1dc57a7a2e84b790fe8c780cdf69b170dbf0ea4 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 05:03:52 +0000 Subject: [PATCH 13/15] fix(client): preserve hardcoded query params when merging with user params --- src/conductor/_base_client.py | 4 +++ tests/test_client.py | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/conductor/_base_client.py b/src/conductor/_base_client.py index d11bfe35..c0b90dc3 100644 --- a/src/conductor/_base_client.py +++ b/src/conductor/_base_client.py @@ -540,6 +540,10 @@ def _build_request( files = cast(HttpxRequestFiles, ForceMultipartDict()) prepared_url = self._prepare_url(options.url) + # preserve hard-coded query params from the url + if params and prepared_url.query: + params = {**dict(prepared_url.params.items()), **params} + prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0]) if "_" in prepared_url.host: # work around https://github.com/encode/httpx/discussions/2880 kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")} diff --git a/tests/test_client.py b/tests/test_client.py index cd1b7df5..b141b7c5 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -421,6 +421,30 @@ def test_default_query_option(self) -> None: client.close() + def test_hardcoded_query_params_in_url(self, client: Conductor) -> None: + request = client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/foo?beta=true", + params={"limit": "10", "page": "abc"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} + + request = client._build_request( + FinalRequestOptions( + method="get", + url="/files/a%2Fb?beta=true", + params={"limit": "10"}, + ) + ) + assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" + def test_request_extra_json(self, client: Conductor) -> None: request = client._build_request( FinalRequestOptions( @@ -1297,6 +1321,30 @@ async def test_default_query_option(self) -> None: await client.close() + async def test_hardcoded_query_params_in_url(self, async_client: AsyncConductor) -> None: + request = async_client._build_request(FinalRequestOptions(method="get", url="/foo?beta=true")) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true"} + + request = async_client._build_request( + FinalRequestOptions( + method="get", + url="/foo?beta=true", + params={"limit": "10", "page": "abc"}, + ) + ) + url = httpx.URL(request.url) + assert dict(url.params) == {"beta": "true", "limit": "10", "page": "abc"} + + request = async_client._build_request( + FinalRequestOptions( + method="get", + url="/files/a%2Fb?beta=true", + params={"limit": "10"}, + ) + ) + assert request.url.raw_path == b"/files/a%2Fb?beta=true&limit=10" + def test_request_extra_json(self, client: Conductor) -> None: request = client._build_request( FinalRequestOptions( From 60122296e0417366b4b4bb735ff3c4918298edd2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 08:41:46 +0000 Subject: [PATCH 14/15] fix: ensure file data are only sent as 1 parameter --- src/conductor/_utils/_utils.py | 5 +++-- tests/test_extract_files.py | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/conductor/_utils/_utils.py b/src/conductor/_utils/_utils.py index eec7f4a1..63b8cd60 100644 --- a/src/conductor/_utils/_utils.py +++ b/src/conductor/_utils/_utils.py @@ -86,8 +86,9 @@ def _extract_items( index += 1 if is_dict(obj): try: - # We are at the last entry in the path so we must remove the field - if (len(path)) == index: + # Remove the field if there are no more dict keys in the path, + # only "" traversal markers or end. + if all(p == "" for p in path[index:]): item = obj.pop(key) else: item = obj[key] diff --git a/tests/test_extract_files.py b/tests/test_extract_files.py index b6eee83a..3b2f766f 100644 --- a/tests/test_extract_files.py +++ b/tests/test_extract_files.py @@ -35,6 +35,15 @@ def test_multiple_files() -> None: assert query == {"documents": [{}, {}]} +def test_top_level_file_array() -> None: + query = {"files": [b"file one", b"file two"], "title": "hello"} + assert extract_files(query, paths=[["files", ""]]) == [ + ("files[]", b"file one"), + ("files[]", b"file two"), + ] + assert query == {"title": "hello"} + + @pytest.mark.parametrize( "query,paths,expected", [ From 0ca7655dbeadae8c03d47b5bbf08969ada10253e Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 11 Apr 2026 08:42:08 +0000 Subject: [PATCH 15/15] release: 1.76.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ pyproject.toml | 2 +- src/conductor/_version.py | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index cb464946..df3aaa16 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.75.0" + ".": "1.76.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f862736..125b286d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,33 @@ # Changelog +## 1.76.0 (2026-04-11) + +Full Changelog: [v1.75.0...v1.76.0](https://github.com/conductor-is/quickbooks-desktop-python/compare/v1.75.0...v1.76.0) + +### Features + +* **api:** api update ([f036b60](https://github.com/conductor-is/quickbooks-desktop-python/commit/f036b60dcedb8720bdc8c1975679cdd49d77261f)) +* **api:** api update ([d10df35](https://github.com/conductor-is/quickbooks-desktop-python/commit/d10df3592b34e7edfbfcd1c31059645caca40e45)) +* **internal:** implement indices array format for query and form serialization ([f264eeb](https://github.com/conductor-is/quickbooks-desktop-python/commit/f264eeb5bfc0eda46c966a8c29414aa160ce89b5)) + + +### Bug Fixes + +* **client:** preserve hardcoded query params when merging with user params ([a1dc57a](https://github.com/conductor-is/quickbooks-desktop-python/commit/a1dc57a7a2e84b790fe8c780cdf69b170dbf0ea4)) +* ensure file data are only sent as 1 parameter ([6012229](https://github.com/conductor-is/quickbooks-desktop-python/commit/60122296e0417366b4b4bb735ff3c4918298edd2)) + + +### Chores + +* **ci:** skip lint on metadata-only changes ([c022258](https://github.com/conductor-is/quickbooks-desktop-python/commit/c022258ae83dc218cb347b2f4fa1bbe9f9c01392)) +* **internal:** update gitignore ([a8b9d7f](https://github.com/conductor-is/quickbooks-desktop-python/commit/a8b9d7f1540ab7080991c8317e712b0a09aa0d3c)) +* **tests:** bump steady to v0.19.4 ([d30740a](https://github.com/conductor-is/quickbooks-desktop-python/commit/d30740afab1f30f04aa9faa259ff13191c06cc78)) +* **tests:** bump steady to v0.19.5 ([5f296c8](https://github.com/conductor-is/quickbooks-desktop-python/commit/5f296c83432a13bd412845f4d31a7f086a174e95)) +* **tests:** bump steady to v0.19.6 ([5b0209c](https://github.com/conductor-is/quickbooks-desktop-python/commit/5b0209cbd977349465e594c67d9f331e3466786b)) +* **tests:** bump steady to v0.19.7 ([7b21104](https://github.com/conductor-is/quickbooks-desktop-python/commit/7b21104b7a2c1037b48813de3641775af0ea1ba8)) +* **tests:** bump steady to v0.20.1 ([0ae145c](https://github.com/conductor-is/quickbooks-desktop-python/commit/0ae145cfefe1fe2a250731711912854a76364b89)) +* **tests:** bump steady to v0.20.2 ([fe9fe54](https://github.com/conductor-is/quickbooks-desktop-python/commit/fe9fe54e34704891c9463c00fbad35f50693d390)) + ## 1.75.0 (2026-03-20) Full Changelog: [v1.74.0...v1.75.0](https://github.com/conductor-is/quickbooks-desktop-python/compare/v1.74.0...v1.75.0) diff --git a/pyproject.toml b/pyproject.toml index 3637ee0d..ae457c20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "conductor-py" -version = "1.75.0" +version = "1.76.0" description = "The official Python library for the conductor API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/conductor/_version.py b/src/conductor/_version.py index 7fe4d14f..4130f9f6 100644 --- a/src/conductor/_version.py +++ b/src/conductor/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "conductor" -__version__ = "1.75.0" # x-release-please-version +__version__ = "1.76.0" # x-release-please-version