From faed590d6330452ac64dc2e3f6c8af7d5eecf99f Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:51:53 +0000 Subject: [PATCH] [fern-generated] Update SDK Generated by Fern CLI Version: unknown Generators: - fernapi/fern-python-sdk: 5.12.1 --- .fern/metadata.json | 11 +- .github/workflows/ci.yml | 13 +- poetry.lock | 318 +++---- reference.md | 928 +++++++++---------- src/pipedream/__init__.py | 8 - src/pipedream/actions/client.py | 32 +- src/pipedream/actions/raw_client.py | 36 +- src/pipedream/components/client.py | 28 +- src/pipedream/components/raw_client.py | 32 +- src/pipedream/pipedream.py | 143 +-- src/pipedream/proxy/client.py | 741 ++++++++++----- src/pipedream/proxy/raw_client.py | 782 ++++++++++++---- src/pipedream/triggers/client.py | 32 +- src/pipedream/triggers/raw_client.py | 36 +- src/pipedream/types/component.py | 4 +- src/pipedream/types/configurable_prop_app.py | 2 +- src/pipedream/types/configure_prop_opts.py | 2 +- src/pipedream/types/emitted_event.py | 5 + src/pipedream/types/reload_props_opts.py | 2 +- src/pipedream/workflows/__init__.py | 5 - src/pipedream/workflows/client.py | 271 ------ 21 files changed, 1833 insertions(+), 1598 deletions(-) delete mode 100644 src/pipedream/workflows/__init__.py delete mode 100644 src/pipedream/workflows/client.py diff --git a/.fern/metadata.json b/.fern/metadata.json index 1b82d35..67a822d 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,7 +1,7 @@ { - "cliVersion": "5.37.12", + "cliVersion": "5.17.0", "generatorName": "fernapi/fern-python-sdk", - "generatorVersion": "5.12.11", + "generatorVersion": "5.12.1", "generatorConfig": { "client": { "class_name": "Client", @@ -10,8 +10,9 @@ "exported_filename": "pipedream.py" } }, - "originGitCommit": "320eac6d2809f95097ec1bb8cdb630cf13316b22", - "originGitCommitIsDirty": true, - "invokedBy": "manual", + "originGitCommit": "0154aca6f568afe2b2c183a43a8454aa86412754", + "originGitCommitIsDirty": false, + "invokedBy": "ci", + "ciProvider": "github", "sdkVersion": "2.0.5" } \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fd6ffd..9ab0a27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,8 +50,6 @@ jobs: needs: [compile, test] if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') runs-on: ubuntu-latest - permissions: - id-token: write steps: - name: Checkout repo uses: actions/checkout@v4 @@ -64,7 +62,10 @@ jobs: curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install - - name: Build package - run: poetry --no-interaction -v build - - name: Publish package - uses: pypa/gh-action-pypi-publish@release/v1 + - name: Publish to pypi + run: | + poetry config repositories.remote https://upload.pypi.org/legacy/ + poetry --no-interaction -v publish --build --repository remote --username "$PYPI_USERNAME" --password "$PYPI_PASSWORD" + env: + PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} diff --git a/poetry.lock b/poetry.lock index 4d94723..e069f9e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -6,8 +6,6 @@ version = "2.6.2" description = "Happy Eyeballs for asyncio" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4"}, {file = "aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64"}, @@ -15,133 +13,130 @@ files = [ [[package]] name = "aiohttp" -version = "3.13.5" +version = "3.14.0" description = "Async http client/server framework (asyncio)" optional = true -python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"aiohttp\"" +python-versions = ">=3.10" files = [ - {file = "aiohttp-3.13.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:02222e7e233295f40e011c1b00e3b0bd451f22cf853a0304c3595633ee47da4b"}, - {file = "aiohttp-3.13.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bace460460ed20614fa6bc8cb09966c0b8517b8c58ad8046828c6078d25333b5"}, - {file = "aiohttp-3.13.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f546a4dc1e6a5edbb9fd1fd6ad18134550e096a5a43f4ad74acfbd834fc6670"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c86969d012e51b8e415a8c6ce96f7857d6a87d6207303ab02d5d11ef0cad2274"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b6f6cd1560c5fa427e3b6074bb24d2c64e225afbb7165008903bd42e4e33e28a"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:636bc362f0c5bbc7372bc3ae49737f9e3030dbce469f0f422c8f38079780363d"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a7cbeb06d1070f1d14895eeeed4dac5913b22d7b456f2eb969f11f4b3993796"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca9ef7517fd7874a1a08970ae88f497bf5c984610caa0bf40bd7e8450852b95"}, - {file = "aiohttp-3.13.5-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:019a67772e034a0e6b9b17c13d0a8fe56ad9fb150fc724b7f3ffd3724288d9e5"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f34ecee82858e41dd217734f0c41a532bd066bcaab636ad830f03a30b2a96f2a"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:4eac02d9af4813ee289cd63a361576da36dba57f5a1ab36377bc2600db0cbb73"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4beac52e9fe46d6abf98b0176a88154b742e878fdf209d2248e99fcdf73cd297"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:c180f480207a9b2475f2b8d8bd7204e47aec952d084b2a2be58a782ffcf96074"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2837fb92951564d6339cedae4a7231692aa9f73cbc4fb2e04263b96844e03b4e"}, - {file = "aiohttp-3.13.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9010032a0b9710f58012a1e9c222528763d860ba2ee1422c03473eab47703e7"}, - {file = "aiohttp-3.13.5-cp310-cp310-win32.whl", hash = "sha256:7c4b6668b2b2b9027f209ddf647f2a4407784b5d88b8be4efcc72036f365baf9"}, - {file = "aiohttp-3.13.5-cp310-cp310-win_amd64.whl", hash = "sha256:cd3db5927bf9167d5a6157ddb2f036f6b6b0ad001ac82355d43e97a4bde76d76"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ab7229b6f9b5c1ba4910d6c41a9eb11f543eadb3f384df1b4c293f4e73d44d6"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f14c50708bb156b3a3ca7230b3d820199d56a48e3af76fa21c2d6087190fe3d"}, - {file = "aiohttp-3.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7d2f8616f0ff60bd332022279011776c3ac0faa0f1b463f7bb12326fbc97a1c"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2567b72e1ffc3ab25510db43f355b29eeada56c0a622e58dcdb19530eb0a3cb"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fb0540c854ac9c0c5ad495908fdfd3e332d553ec731698c0e29b1877ba0d2ec6"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c9883051c6972f58bfc4ebb2116345ee2aa151178e99c3f2b2bbe2af712abd13"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2294172ce08a82fb7c7273485895de1fa1186cc8294cfeb6aef4af42ad261174"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc"}, - {file = "aiohttp-3.13.5-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa6d0d932e0f39c02b80744273cd5c388a2d9bc07760a03164f229c8e02662f6"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60869c7ac4aaabe7110f26499f3e6e5696eae98144735b12a9c3d9eae2b51a49"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26d2f8546f1dfa75efa50c3488215a903c0168d253b75fba4210f57ab77a0fb8"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1162a1492032c82f14271e831c8f4b49f2b6078f4f5fc74de2c912fa225d51d"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8b14eb3262fad0dc2f89c1a43b13727e709504972186ff6a99a3ecaa77102b6c"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ca9ac61ac6db4eb6c2a0cd1d0f7e1357647b638ccc92f7e9d8d133e71ed3c6ac"}, - {file = "aiohttp-3.13.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7996023b2ed59489ae4762256c8516df9820f751cf2c5da8ed2fb20ee50abab3"}, - {file = "aiohttp-3.13.5-cp311-cp311-win32.whl", hash = "sha256:77dfa48c9f8013271011e51c00f8ada19851f013cde2c48fca1ba5e0caf5bb06"}, - {file = "aiohttp-3.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:d3a4834f221061624b8887090637db9ad4f61752001eae37d56c52fddade2dc8"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:023ecba036ddd840b0b19bf195bfae970083fd7024ce1ac22e9bba90464620e9"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15c933ad7920b7d9a20de151efcd05a6e38302cbf0e10c9b2acb9a42210a2416"}, - {file = "aiohttp-3.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab2899f9fa2f9f741896ebb6fa07c4c883bfa5c7f2ddd8cf2aafa86fa981b2d2"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60eaa2d440cd4707696b52e40ed3e2b0f73f65be07fd0ef23b6b539c9c0b0b4"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55b3bdd3292283295774ab585160c4004f4f2f203946997f49aac032c84649e9"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2b2355dc094e5f7d45a7bb262fe7207aa0460b37a0d87027dcf21b5d890e7d5"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b38765950832f7d728297689ad78f5f2cf79ff82487131c4d26fe6ceecdc5f8e"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b18f31b80d5a33661e08c89e202edabf1986e9b49c42b4504371daeaa11b47c1"}, - {file = "aiohttp-3.13.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:33add2463dde55c4f2d9635c6ab33ce154e5ecf322bd26d09af95c5f81cfa286"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:327cc432fdf1356fb4fbc6fe833ad4e9f6aacb71a8acaa5f1855e4b25910e4a9"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7c35b0bf0b48a70b4cb4fc5d7bed9b932532728e124874355de1a0af8ec4bc88"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:df23d57718f24badef8656c49743e11a89fd6f5358fa8a7b96e728fda2abf7d3"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:02e048037a6501a5ec1f6fc9736135aec6eb8a004ce48838cb951c515f32c80b"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31cebae8b26f8a615d2b546fee45d5ffb76852ae6450e2a03f42c9102260d6fe"}, - {file = "aiohttp-3.13.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:888e78eb5ca55a615d285c3c09a7a91b42e9dd6fc699b166ebd5dee87c9ccf14"}, - {file = "aiohttp-3.13.5-cp312-cp312-win32.whl", hash = "sha256:8bd3ec6376e68a41f9f95f5ed170e2fcf22d4eb27a1f8cb361d0508f6e0557f3"}, - {file = "aiohttp-3.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:110e448e02c729bcebb18c60b9214a87ba33bac4a9fa5e9a5f139938b56c6cb1"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5029cc80718bbd545123cd8fe5d15025eccaaaace5d0eeec6bd556ad6163d61"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4bb6bf5811620003614076bdc807ef3b5e38244f9d25ca5fe888eaccea2a9832"}, - {file = "aiohttp-3.13.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a84792f8631bf5a94e52d9cc881c0b824ab42717165a5579c760b830d9392ac9"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57653eac22c6a4c13eb22ecf4d673d64a12f266e72785ab1c8b8e5940d0e8090"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5e5f7debc7a57af53fdf5c5009f9391d9f4c12867049d509bf7bb164a6e295b"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c719f65bebcdf6716f10e9eff80d27567f7892d8988c06de12bbbd39307c6e3a"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d97f93fdae594d886c5a866636397e2bcab146fd7a132fd6bb9ce182224452f8"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3df334e39d4c2f899a914f1dba283c1aadc311790733f705182998c6f7cae665"}, - {file = "aiohttp-3.13.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe6970addfea9e5e081401bcbadf865d2b6da045472f58af08427e108d618540"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7becdf835feff2f4f335d7477f121af787e3504b48b449ff737afb35869ba7bb"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:676e5651705ad5d8a70aeb8eb6936c436d8ebbd56e63436cb7dd9bb36d2a9a46"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9b16c653d38eb1a611cc898c41e76859ca27f119d25b53c12875fd0474ae31a8"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:999802d5fa0389f58decd24b537c54aa63c01c3219ce17d1214cbda3c2b22d2d"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec707059ee75732b1ba130ed5f9580fe10ff75180c812bc267ded039db5128c6"}, - {file = "aiohttp-3.13.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d6d44a5b48132053c2f6cd5c8cb14bc67e99a63594e336b0f2af81e94d5530c"}, - {file = "aiohttp-3.13.5-cp313-cp313-win32.whl", hash = "sha256:329f292ed14d38a6c4c435e465f48bebb47479fd676a0411936cc371643225cc"}, - {file = "aiohttp-3.13.5-cp313-cp313-win_amd64.whl", hash = "sha256:69f571de7500e0557801c0b51f4780482c0ec5fe2ac851af5a92cfce1af1cb83"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:eb4639f32fd4a9904ab8fb45bf3383ba71137f3d9d4ba25b3b3f3109977c5b8c"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:7e5dc4311bd5ac493886c63cbf76ab579dbe4641268e7c74e48e774c74b6f2be"}, - {file = "aiohttp-3.13.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:756c3c304d394977519824449600adaf2be0ccee76d206ee339c5e76b70ded25"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecc26751323224cf8186efcf7fbcbc30f4e1d8c7970659daf25ad995e4032a56"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10a75acfcf794edf9d8db50e5a7ec5fc818b2a8d3f591ce93bc7b1210df016d2"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f7a18f258d124cd678c5fe072fe4432a4d5232b0657fca7c1847f599233c83a"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:df6104c009713d3a89621096f3e3e88cc323fd269dbd7c20afe18535094320be"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:241a94f7de7c0c3b616627aaad530fe2cb620084a8b144d3be7b6ecfe95bae3b"}, - {file = "aiohttp-3.13.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c974fb66180e58709b6fc402846f13791240d180b74de81d23913abe48e96d94"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:6e27ea05d184afac78aabbac667450c75e54e35f62238d44463131bd3f96753d"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a79a6d399cef33a11b6f004c67bb07741d91f2be01b8d712d52c75711b1e07c7"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c632ce9c0b534fbe25b52c974515ed674937c5b99f549a92127c85f771a78772"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fceedde51fbd67ee2bcc8c0b33d0126cc8b51ef3bbde2f86662bd6d5a6f10ec5"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f92995dfec9420bb69ae629abf422e516923ba79ba4403bc750d94fb4a6c68c1"}, - {file = "aiohttp-3.13.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20ae0ff08b1f2c8788d6fb85afcb798654ae6ba0b747575f8562de738078457b"}, - {file = "aiohttp-3.13.5-cp314-cp314-win32.whl", hash = "sha256:b20df693de16f42b2472a9c485e1c948ee55524786a0a34345511afdd22246f3"}, - {file = "aiohttp-3.13.5-cp314-cp314-win_amd64.whl", hash = "sha256:f85c6f327bf0b8c29da7d93b1cabb6363fb5e4e160a32fa241ed2dce21b73162"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:1efb06900858bb618ff5cee184ae2de5828896c448403d51fb633f09e109be0a"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fee86b7c4bd29bdaf0d53d14739b08a106fdda809ca5fe032a15f52fae5fe254"}, - {file = "aiohttp-3.13.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:20058e23909b9e65f9da62b396b77dfa95965cbe840f8def6e572538b1d32e36"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cf20a8d6868cb15a73cab329ffc07291ba8c22b1b88176026106ae39aa6df0f"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:330f5da04c987f1d5bdb8ae189137c77139f36bd1cb23779ca1a354a4b027800"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6f1cbf0c7926d315c3c26c2da41fd2b5d2fe01ac0e157b78caefc51a782196cf"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:53fc049ed6390d05423ba33103ded7281fe897cf97878f369a527070bd95795b"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:898703aa2667e3c5ca4c54ca36cd73f58b7a38ef87a5606414799ebce4d3fd3a"}, - {file = "aiohttp-3.13.5-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0494a01ca9584eea1e5fbd6d748e61ecff218c51b576ee1999c23db7066417d8"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6cf81fe010b8c17b09495cbd15c1d35afbc8fb405c0c9cf4738e5ae3af1d65be"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:c564dd5f09ddc9d8f2c2d0a301cd30a79a2cc1b46dd1a73bef8f0038863d016b"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2994be9f6e51046c4f864598fd9abeb4fba6e88f0b2152422c9666dcd4aea9c6"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:157826e2fa245d2ef46c83ea8a5faf77ca19355d278d425c29fda0beb3318037"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a8aca50daa9493e9e13c0f566201a9006f080e7c50e5e90d0b06f53146a54500"}, - {file = "aiohttp-3.13.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3b13560160d07e047a93f23aaa30718606493036253d5430887514715b67c9d9"}, - {file = "aiohttp-3.13.5-cp314-cp314t-win32.whl", hash = "sha256:9a0f4474b6ea6818b41f82172d799e4b3d29e22c2c520ce4357856fced9af2f8"}, - {file = "aiohttp-3.13.5-cp314-cp314t-win_amd64.whl", hash = "sha256:18a2f6c1182c51baa1d28d68fea51513cb2a76612f038853c0ad3c145423d3d9"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:347542f0ea3f95b2a955ee6656461fa1c776e401ac50ebce055a6c38454a0adf"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:178c7b5e62b454c2bc790786e6058c3cc968613b4419251b478c153a4aec32b1"}, - {file = "aiohttp-3.13.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af545c2cffdb0967a96b6249e6f5f7b0d92cdfd267f9d5238d5b9ca63e8edb10"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:206b7b3ef96e4ce211754f0cd003feb28b7d81f0ad26b8d077a5d5161436067f"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ee5e86776273de1795947d17bddd6bb19e0365fd2af4289c0d2c5454b6b1d36b"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:95d14ca7abefde230f7639ec136ade282655431fd5db03c343b19dda72dd1643"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:912d4b6af530ddb1338a66229dac3a25ff11d4448be3ec3d6340583995f56031"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e999f0c88a458c836d5fb521814e92ed2172c649200336a6df514987c1488258"}, - {file = "aiohttp-3.13.5-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39380e12bd1f2fdab4285b6e055ad48efbaed5c836433b142ed4f5b9be71036a"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9efcc0f11d850cefcafdd9275b9576ad3bfb539bed96807663b32ad99c4d4b88"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:147b4f501d0292077f29d5268c16bb7c864a1f054d7001c4c1812c0421ea1ed0"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d147004fede1b12f6013a6dbb2a26a986a671a03c6ea740ddc76500e5f1c399f"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:9277145d36a01653863899c665243871434694bcc3431922c3b35c978061bdb8"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4e704c52438f66fdd89588346183d898bb42167cf88f8b7ff1c0f9fc957c348f"}, - {file = "aiohttp-3.13.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a8a4d3427e8de1312ddf309cc482186466c79895b3a139fed3259fc01dfa9a5b"}, - {file = "aiohttp-3.13.5-cp39-cp39-win32.whl", hash = "sha256:6f497a6876aa4b1a102b04996ce4c1170c7040d83faa9387dd921c16e30d5c83"}, - {file = "aiohttp-3.13.5-cp39-cp39-win_amd64.whl", hash = "sha256:cb979826071c0986a5f08333a36104153478ce6018c58cba7f9caddaf63d5d67"}, - {file = "aiohttp-3.13.5.tar.gz", hash = "sha256:9d98cc980ecc96be6eb4c1994ce35d28d8b1f5e5208a23b421187d1209dbb7d1"}, + {file = "aiohttp-3.14.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:692e409052e7436029bbb32977cd7c5bf806ac5fa4085b973996785ffadad33c"}, + {file = "aiohttp-3.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40af7ebe53c7990e110dc4ad03566b12c3ac996254298a3d39046dd69cfcb2c2"}, + {file = "aiohttp-3.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02cb2ffbb7da32f82e21ad9952669c45bd88a80e0878264c2f59fe1c6fb2badd"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2514cb7195f6d7c219339635bea71ae47d1569b051300d32df9dcfabcdb869"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:30e8b7eeb42d02c120ca90d6c6e076a221a16b70a6dac9ae44c7ab5104cc7fe4"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63e38be0d75a654deaa06be32fb4cab883a4222940be1d05861b6717679cbadb"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1210d4c87cc00128160c7384ab41877a701295b97cffa6362f908a49b6e8a7ca"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a78a77366ed158a0a54b076990e575d7b7cdb728cbfd02711eadab150f2269f"}, + {file = "aiohttp-3.14.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f4d2038c64f36df96cfd3fa0937910e231eafbf897e70a06c155a817bb632fa6"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4714c70067a08b604d0bf3bc4dfdf82e52944afab41d0428d460862763d2f79b"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f79bfd2847513a7ac801bbafd1de02348a37926ac439eeb4bfe96fcff4eada15"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:25e9f1d2465a210d60edb64d7b204a147e85d4c194eecef3d1604fb5ace678ce"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:b5314743ebe926c2fda35d0a298c565c885505f6635c2a30936363404cf274a7"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:28eee8de1d69711c53116df8202f1c2aa0e3f80ef912a88fc18d159d53e7110b"}, + {file = "aiohttp-3.14.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:89ed35666c95d3efe1955056afcde09e62a57a34e2a4398b17f9f6c1564f0b25"}, + {file = "aiohttp-3.14.0-cp310-cp310-win32.whl", hash = "sha256:5e4646e9a6af29af354204011bf5769cb0276ec5b64653e42f90b3e13845169f"}, + {file = "aiohttp-3.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:22a8d06f204e0518a586d770032db3c7043c9ba3693081b3e3ad425e1458d594"}, + {file = "aiohttp-3.14.0-cp310-cp310-win_arm64.whl", hash = "sha256:4acfc34bd4d3c58754fc9f22ff1b5e92aabce68f3d4bf7b71a0b732d9bceb78a"}, + {file = "aiohttp-3.14.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:54bf3522d6f7351e55f89a62d5c2bf138ad557b031670266c5df604ae88e0b5a"}, + {file = "aiohttp-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0746d9fb0ac4fdef643a84494efe3f06d50335dd8c7a530228b86448aae0a803"}, + {file = "aiohttp-3.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f3a96b6d39a4872222beee72e1df41d2ff886ae96152cf3e757ef8c5673ef0e"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d336820adbb914debbc90a1d8c1bfc4bea55996aecf64866a989d35d1f9fd903"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:71b2604c9bfc1b115547d63a094d5244b3f02799833513a99a68aaa7b167c4cb"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:610d68800435903e303ca0542b9d3e4eb72a12ff33a6d471a070c1d81eebd3c2"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:514db9a79337068981ee2137310283a07b4b885c584991097a91a4da419bcb81"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c452d17eeb95d563fc8b936f3050301dbd1d268126c4632d8b70ede9696202ee"}, + {file = "aiohttp-3.14.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ed94a81506e3d1bdbad5108f497a58f2a2354aedb4ca314d5326f07d1fd1ac2d"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1394dce36e0f0d260ac0b555a654de19cb989f3c1b8bdd24f505314dfea18a00"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d1467d1e7b48a73ca7237e0ee4335f3d02b923dbc27b82fd254bc301c97d4026"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6a5f3532125233c261cf61f32df4059cfcf482eb793c7d3db8452e3142028b86"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3ea81eb518a2ecb319d8ec6d1424a37c773f6634bd87d6985eb606b2faac419f"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:32e735c3182de7b64f6941a4ede48b38c7f47d9437bd615dd30b5bda8fa1bc93"}, + {file = "aiohttp-3.14.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c21ca9a1c63d4509158f478aeb9d02914dcc52adc68d1bc9dee2452284ee5996"}, + {file = "aiohttp-3.14.0-cp311-cp311-win32.whl", hash = "sha256:19ca5fc84130675ba11c6ca5c7da5cb65f7bf8a32cdd2b616bf49cd334688aae"}, + {file = "aiohttp-3.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:d488e6e9d3bb8ba5ae7066d5be885ae9670eba021b8c6ccb9a3a568e6b19d6e5"}, + {file = "aiohttp-3.14.0-cp311-cp311-win_arm64.whl", hash = "sha256:8b93618102caf12801638a01a2b478a55410ddd71bd41cfaf6f707953a49ac43"}, + {file = "aiohttp-3.14.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b29518c9c2ec7e373e68259206a137c7f4f5439c58baaec4b5ab3ab799850a4e"}, + {file = "aiohttp-3.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dbec68ce61b64cb73cab4d33df9433427b1713c8bcccb181dce695c1b6f8e87c"}, + {file = "aiohttp-3.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3cdf534aa455593e589302990c5097aa5c92c06c4262a20da22934f9186a5fff"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cb6c657104393b5fbff01a5f59b2023db74058a8077d94475d6c25d03882a108"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:46fbbec4e4fab7428d4396a3823f9320e4560aa3113b89eeebce712c27c9ed5a"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2c2c7e05dd5335b298085abf45ddf98673934c3ee1c083d0b9ea13d4186ad500"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3c7139100fbaae76515b73051d8f0aa3a3ff02e415eec8a8eee8e2223d9ba955"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78d6f9286a629ce52728430afe18f8ed2b6c39a1fddb3802d7244b9983910ad2"}, + {file = "aiohttp-3.14.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cc3c3e12cdaeb92d7dcf13db00e9f6b1956b910e47256e696df1cfa946d02159"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4d6a998191f5ebe3b8c28463ff72bc030250008b3193c402464efadd08b5ca02"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0fc2b75ae8d169d853be2862d960be8550da6c5c65711d5476407eb3fdb006bd"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:16eee56bcc72d04600bc56c1759982c2385ec0b41d3fd3521f836bf64a0957ef"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5a2e7ca615c3ddc15b82687e05a624e5f5cba3f1d6c20cb81172d70ea498451e"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f0b7b8bbbec3ce9467ee0ebe334622fd90624f593edd3136c567811453fc4fae"}, + {file = "aiohttp-3.14.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ba10966d4f03dd96a14365be4b8e37c327c76f11c3ca867116966cdd9f98066"}, + {file = "aiohttp-3.14.0-cp312-cp312-win32.whl", hash = "sha256:101df7779c80c0636014a6b2c6642acd3efb5b355d48347c9d7dfb720aee9430"}, + {file = "aiohttp-3.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:b0a5747586d4467efd1f932710b269131c9717a872dce082cd92a00c1c13123a"}, + {file = "aiohttp-3.14.0-cp312-cp312-win_arm64.whl", hash = "sha256:5f1c5be60add78fabb4aacd13c5a348ae79d2fcbfc7fa78da8f1eb192273b370"}, + {file = "aiohttp-3.14.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:25400d710641a8040bf022a8a99f579e581ffa1c5bd42c33255d7d6f3957c127"}, + {file = "aiohttp-3.14.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:c5492b9929826e07cc3fcb9739ae87aab05dff6b5e67a9b73fd1700c6d008981"}, + {file = "aiohttp-3.14.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3366751d68d237c621264233a32f3078bbc21b7904ab90a77e03d21390c742c6"}, + {file = "aiohttp-3.14.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:57ea07d28695a7a40304d42251892a8df765e5588c10ee32afeddcd5df33c0a2"}, + {file = "aiohttp-3.14.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:076cb014191ae2e65d949e1ad01f1dcfe33e32789b5172510f3e79c79fc04d50"}, + {file = "aiohttp-3.14.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2f3fc37054564dee64a855b5b092d87ec35dcddfaabf7dacb1c8a2b1f83dc0a9"}, + {file = "aiohttp-3.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8fcaef74d2ab0f607d7ff85a0d15e21bb5a258c4a58df1908396eb50d7f4ed3c"}, + {file = "aiohttp-3.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e4c01b0bfc6209590960e68eac083cd22d5d87c21f974dd6208cafa5d3542bc8"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f12eb7896e81caf403a2b18c9406426f1207361e7239c057ab29c076d4257e83"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6c79a044cacf360ec46738d863d2f41c9300d2a06ef4a7402ea0df306a350e61"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85e0675f47be4eff0636bf88c02140ea89168ae0df3ff1f3f464e9de9610d277"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7b33e751cab03fdc960095b1e326cb5a03f5ee577d6ded59f3d1c100f8668882"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26d9224c6dd7f5c749aba4f61315a894601448b28d94d12f4dea0903e26d2096"}, + {file = "aiohttp-3.14.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6281aecdf2732940f4fe06bd6adec5ae4d59b78b080b8e3a6b81467301010988"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:23e8314e7aed8576fbe33314d218bd81447a3adbc91dc36f1163bf583cd3084c"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3b54fbff46127aeafdd764cecd0d99fa2f24a0e37ea5c18a7c3a4ac450df1db3"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b27d89af91a555f58e08e4902dbcbc48862fd40095720ca705990476bd93b7ac"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:25d2326a4967bf705a9f9913a13005e93b6020ad8a9f6bd6bd78850d5171332e"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:a1d209375c503472b3c0a340cdf3c55fcd82e84b46dda7caeaced59faba373ec"}, + {file = "aiohttp-3.14.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:666c7c5036df57b693026398b69b41874a1931ac5b3485fd910e57bfac253869"}, + {file = "aiohttp-3.14.0-cp313-cp313-win32.whl", hash = "sha256:23f094a1ef64823fd35854ddf5c7a80a078162f37f9d2f7c6142b51a6affa456"}, + {file = "aiohttp-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:e03abdaa17d553f17e1d1d06bb266b3970106c78051d06795723e748d8e49d11"}, + {file = "aiohttp-3.14.0-cp313-cp313-win_arm64.whl", hash = "sha256:acdb400538cf4769543548bb5d1eb23d39bed4f96554a6078cb728c7cb2c268b"}, + {file = "aiohttp-3.14.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:363ef9e91014e7891679bfb2ac0a7c6ea93435dbbfd10ecf41b9f06fcf506c5f"}, + {file = "aiohttp-3.14.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:884a4edbdad77be9d0ef36142c8b504351b170df0bf62b51e784fadabf311c42"}, + {file = "aiohttp-3.14.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:70ea956f6cc4a37620966b56c2e205d88ca3e6d85ec063277e414b1035cddad3"}, + {file = "aiohttp-3.14.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:ea3b9806c89f61da22fddf1f12dd524fb368e5e28f1261fbdafe5c3cd8ce893b"}, + {file = "aiohttp-3.14.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a071be341c2bd9b0188e62d173509f024e0a35b1c342c53c50f8daaeda8c3bd8"}, + {file = "aiohttp-3.14.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:198cfe61bf253b19da1fb3e0fa122249dc4f14c12709493fed8054aa0411cc76"}, + {file = "aiohttp-3.14.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9dc203d6ce6b9106d54e2a93f41dfdfebfbca2d99962ba503bfd3e5921a6549e"}, + {file = "aiohttp-3.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9e19d17ab02bf16832a2c8c0d55a486792c5b1645665652ee9531aebcc30cb72"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d925fba0c14d5b498a8028b0107beebdfd16c5d48d702ff54f879cb017aaaca3"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d33e61021222ce7f9792bcac870d6f58d8adfceda33ab857b01264f4560f2c5f"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:44eca38755d0105bb32f47d085f5dd449846a449e1245fc105889e3279dcf8e3"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f13087e06f68fea4941c21a0c541c00553aa16e4f8fd7bbe2b198df761e964d6"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ff82be7f1ef73634cb77890a770743239bc3d487b848669be1c599889336dc0a"}, + {file = "aiohttp-3.14.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a150c0875ac8fd87f1c398650841308a30d65facf7416b12dbdb9cfdcbe5a48c"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:edc01ea4e1ec5a1649a28866262bf24195889ff7b27bdd947029a6086741de9b"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:540632bf882ff8fc88f2e1697be0761578e89e0d79fb4a8a6d65dc5da7e729d4"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:860a86bc2c80237f5dff52edcf427e10a8d8352271fd84845429a3e60199e02c"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5cbd50e6a50d6b99283a826b18cbdebf65b0797689a7535cb0e9dd37be0f63c3"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:20144819e99db593e22bbd2f3f2691a5e149f879142d6b8670254708853ff4fb"}, + {file = "aiohttp-3.14.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:26b6d79aa54cb4ed50cc7d41ed14e99e0f1fc8e7c2d42f2e05b37aea897b2b52"}, + {file = "aiohttp-3.14.0-cp314-cp314-win32.whl", hash = "sha256:106ed074a856f3e21d186b8579e2c8afb6da598e267cdaab01059e13db2fc44d"}, + {file = "aiohttp-3.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:4f770846edae8f00ecc57af825bce811f787f87a7dcf0e90d191790efe5b31f7"}, + {file = "aiohttp-3.14.0-cp314-cp314-win_arm64.whl", hash = "sha256:acf1581c4f21ed4b80a2dded504d87b055a071a84d5737ea966435f768275ac6"}, + {file = "aiohttp-3.14.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6aa1a40f9cbb3da9f80714c5966b8946c21e6a2530d809b9498b33161e3c8733"}, + {file = "aiohttp-3.14.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b62af5a8cc96a194eaa01a9ed7b34a3ffa58d3d8daaa1a0d7a749353ad12d228"}, + {file = "aiohttp-3.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6eb63b1417efaf7d1002a6ad034a40d44376afcc16508a57f8e74b49ad26a095"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c20b9ad156a79eb97be5cf9e069eec01d2f0dc8472ffbd75299a8b2d4c2cbbde"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:40ae7b0642c25632c7eabc4a04754012691864d2a1b93becf7cddb76027b838a"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:95f5217e76a046b9f228a101717ef8d42b1eb3d9d196d15202db5bf41df88936"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1a4a9f17e85b80878c176695c1998c790e83731d8271881e5d356488652a1f9e"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:145262119b07d7f95abc1839add35ba2bfc84551d4b4660ca11542c0b215455b"}, + {file = "aiohttp-3.14.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:49a33ded29b0b2fa7a367a02cf0fb89af602bb87542a16177ec8ce1c9c51d12a"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2cc736a9c9fc2bc4dd71fd404815741b6573df27c3f985948ec4076989ac57de"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b4141a3e5342ee3053a9cab54d25b64ed28289c1041e4c54b3d99839314d90ce"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e30871b2d58996cb81aac52d2b1d15ac05257131ef0f90f18c2115a380fbfe7c"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:667b881d083ccae3900ea5a241e17e5007ca78844c53ed389bb63d48f729d9c7"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:b584dfe615d151e9b8f0a8ecb3aee6147f2927ec5b95ba25fe621f5377510928"}, + {file = "aiohttp-3.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6199707cc40e0e9cd39c36fbc97bec416c704e1d0ddce03412bb3b3e6a90ccd0"}, + {file = "aiohttp-3.14.0-cp314-cp314t-win32.whl", hash = "sha256:a8d93334d4961c9d566b1f046c81dee475b7c21eb730728d38237bfa70d1c8e6"}, + {file = "aiohttp-3.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2d2ffe9b614f50f069068b3b52e73414e4107fc10b7efc939a76acff9251fdd2"}, + {file = "aiohttp-3.14.0-cp314-cp314t-win_arm64.whl", hash = "sha256:7a3fc4358e65826c515350f199c210de747cf669998211b1ee6c2e46de364b24"}, + {file = "aiohttp-3.14.0.tar.gz", hash = "sha256:2882de819734c715fd1b9c11c97e09fa020d14438203d1d354d8ed1702791c9b"}, ] [package.dependencies] @@ -152,10 +147,11 @@ attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" propcache = ">=0.2.0" +typing_extensions = {version = ">=4.4", markers = "python_version < \"3.13\""} yarl = ">=1.17.0,<2.0" [package.extras] -speedups = ["Brotli (>=1.2) ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi (>=1.2) ; platform_python_implementation != \"CPython\""] +speedups = ["Brotli (>=1.2)", "aiodns (>=3.3.0)", "backports.zstd", "brotlicffi (>=1.2)"] [[package]] name = "aiosignal" @@ -163,8 +159,6 @@ version = "1.4.0" description = "aiosignal: a list of registered asynchronous callbacks" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e"}, {file = "aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7"}, @@ -180,7 +174,6 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -192,7 +185,6 @@ version = "4.13.0" description = "High-level concurrency and networking framework on top of asyncio or Trio" optional = false python-versions = ">=3.10" -groups = ["main"] files = [ {file = "anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708"}, {file = "anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc"}, @@ -212,8 +204,6 @@ version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"aiohttp\" and python_version == \"3.10\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -225,8 +215,6 @@ version = "26.1.0" description = "Classes Without Boilerplate" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, @@ -238,8 +226,6 @@ version = "1.2.0" description = "Backport of asyncio.Runner, a context manager that controls event loop life cycle." optional = false python-versions = "<3.11,>=3.8" -groups = ["dev"] -markers = "python_version == \"3.10\"" files = [ {file = "backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5"}, {file = "backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162"}, @@ -251,7 +237,6 @@ version = "2026.5.20" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897"}, {file = "certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d"}, @@ -263,8 +248,6 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["dev"] -markers = "sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -276,8 +259,6 @@ version = "1.3.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] -markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, @@ -295,7 +276,6 @@ version = "2.1.2" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec"}, {file = "execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd"}, @@ -310,8 +290,6 @@ version = "1.8.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b37f6d31b3dcea7deb5e9696e529a6aa4a898adc33db82da12e4c60a7c4d2011"}, {file = "frozenlist-1.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef2b7b394f208233e471abc541cc6991f907ffd47dc72584acee3147899d6565"}, @@ -451,7 +429,6 @@ version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -463,7 +440,6 @@ version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -485,7 +461,6 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -498,7 +473,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -510,8 +485,6 @@ version = "0.1.8" description = "Aiohttp transport for HTTPX" optional = true python-versions = ">=3.8" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "httpx_aiohttp-0.1.8-py3-none-any.whl", hash = "sha256:b7bd958d1331f3759a38a0ba22ad29832cb63ca69498c17735228055bf78fa7e"}, {file = "httpx_aiohttp-0.1.8.tar.gz", hash = "sha256:756c5e74cdb568c3248ba63fe82bfe8bbe64b928728720f7eaac64b3cf46f308"}, @@ -523,14 +496,13 @@ httpx = ">=0.27.0" [[package]] name = "idna" -version = "3.16" +version = "3.18" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ - {file = "idna-3.16-py3-none-any.whl", hash = "sha256:cc246e3a3f89580c3a951b5ad298ca4638078b2cdd4f115654332b5c26daded5"}, - {file = "idna-3.16.tar.gz", hash = "sha256:d7a6da03db833450fca25d2358ac9ff06cd624577a4aea3a596d5c0f77b8e03d"}, + {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, + {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, ] [package.extras] @@ -542,7 +514,6 @@ version = "2.3.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.10" -groups = ["dev"] files = [ {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, @@ -554,8 +525,6 @@ version = "6.7.1" description = "multidict implementation" optional = true python-versions = ">=3.9" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c93c3db7ea657dd4637d57e74ab73de31bccefe144d3d4ce370052035bc85fb5"}, {file = "multidict-6.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:974e72a2474600827abaeda71af0c53d9ebbc3c2eb7da37b37d7829ae31232d8"}, @@ -714,7 +683,6 @@ version = "1.13.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, @@ -768,7 +736,6 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -780,7 +747,6 @@ version = "26.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e"}, {file = "packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"}, @@ -792,7 +758,6 @@ version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -808,8 +773,6 @@ version = "0.5.2" description = "Accelerated property cache" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5a81be28596d6559f6131ef33e10200de6e17643b3c74ce03f9eb103be6ae8b"}, {file = "propcache-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29cbaac5ea0212663e6845e04b5e188d5a6ae6dd919810ac835bf1d3b42c3f4c"}, @@ -940,7 +903,6 @@ version = "2.13.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, @@ -954,7 +916,7 @@ typing-inspection = ">=0.4.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] +timezone = ["tzdata"] [[package]] name = "pydantic-core" @@ -962,7 +924,6 @@ version = "2.46.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, @@ -1095,7 +1056,6 @@ version = "2.20.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, @@ -1110,7 +1070,6 @@ version = "9.0.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.10" -groups = ["dev"] files = [ {file = "pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9"}, {file = "pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c"}, @@ -1134,7 +1093,6 @@ version = "1.4.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.10" -groups = ["dev"] files = [ {file = "pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1"}, {file = "pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42"}, @@ -1155,7 +1113,6 @@ version = "3.8.0" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.9" -groups = ["dev"] files = [ {file = "pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88"}, {file = "pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1"}, @@ -1176,7 +1133,6 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["dev"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1191,7 +1147,6 @@ version = "0.11.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "ruff-0.11.5-py3-none-linux_armv6l.whl", hash = "sha256:2561294e108eb648e50f210671cc56aee590fb6167b594144401532138c66c7b"}, {file = "ruff-0.11.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ac12884b9e005c12d0bd121f56ccf8033e1614f736f766c118ad60780882a077"}, @@ -1219,7 +1174,6 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["dev"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -1231,8 +1185,6 @@ version = "2.4.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, @@ -1289,7 +1241,6 @@ version = "2.9.0.20260518" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.10" -groups = ["dev"] files = [ {file = "types_python_dateutil-2.9.0.20260518-py3-none-any.whl", hash = "sha256:d6a9c5bd0de61460c8fdef8ab2b400f956a1a1075cce08d4e2b4434e478c50b8"}, {file = "types_python_dateutil-2.9.0.20260518.tar.gz", hash = "sha256:51f02dc03b61c7f6a07df45797d4dfe8a1aa47f0b7db9ad89f6fd3a1a70e1b51"}, @@ -1301,7 +1252,6 @@ version = "4.15.0" description = "Backported and Experimental Type Hints for Python 3.9+" optional = false python-versions = ">=3.9" -groups = ["main", "dev"] files = [ {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, @@ -1313,7 +1263,6 @@ version = "0.4.2" description = "Runtime typing introspection tools" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, @@ -1328,17 +1277,16 @@ version = "2.7.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.10" -groups = ["dev"] files = [ {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, ] [package.extras] -brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +brotli = ["brotli (>=1.2.0)", "brotlicffi (>=1.2.0.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] +zstd = ["backports-zstd (>=1.0.0)"] [[package]] name = "yarl" @@ -1346,8 +1294,6 @@ version = "1.24.2" description = "Yet another URL library" optional = true python-versions = ">=3.10" -groups = ["main"] -markers = "extra == \"aiohttp\"" files = [ {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5249a113065c2b7a958bc699759e359cd61cfc81e3069662208f48f191b7ed12"}, {file = "yarl-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f4425fa244fbf530b006d0c5f79ce920114cfff5b4f5f6056e669f8e160fdc0"}, @@ -1464,6 +1410,6 @@ propcache = ">=0.2.1" aiohttp = ["aiohttp", "httpx-aiohttp"] [metadata] -lock-version = "2.1" +lock-version = "2.0" python-versions = "^3.10" content-hash = "747cf6806d0d2a32dda32c0f4beb23d48047dee5fab394a6dbe55935c60b949a" diff --git a/reference.md b/reference.md index 12e322c..b64acb0 100644 --- a/reference.md +++ b/reference.md @@ -53,7 +53,7 @@ client.app_categories.list()
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -119,7 +119,7 @@ client.app_categories.retrieve(
**id:** `str` — The ID of the app category to retrieve - +
@@ -127,7 +127,7 @@ client.app_categories.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -205,7 +205,7 @@ client.apps.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -213,7 +213,7 @@ client.apps.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -221,7 +221,7 @@ client.apps.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -229,7 +229,7 @@ client.apps.list(
**q:** `typing.Optional[str]` — A search query to filter the apps - +
@@ -237,7 +237,7 @@ client.apps.list(
**sort_key:** `typing.Optional[AppsListRequestSortKey]` — The key to sort the apps by - +
@@ -245,7 +245,7 @@ client.apps.list(
**sort_direction:** `typing.Optional[AppsListRequestSortDirection]` — The direction to sort the apps - +
@@ -253,7 +253,7 @@ client.apps.list(
**category_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` — Only return apps in these categories - +
@@ -261,7 +261,7 @@ client.apps.list(
**has_components:** `typing.Optional[bool]` — Only return apps that have components (actions or triggers) - +
@@ -269,7 +269,7 @@ client.apps.list(
**has_actions:** `typing.Optional[bool]` — Only return apps that have actions - +
@@ -277,7 +277,7 @@ client.apps.list(
**has_triggers:** `typing.Optional[bool]` — Only return apps that have triggers - +
@@ -285,7 +285,7 @@ client.apps.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -351,7 +351,7 @@ client.apps.retrieve(
**app_id:** `str` — The name slug or ID of the app (e.g., 'slack', 'github') - +
@@ -359,7 +359,7 @@ client.apps.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -432,15 +432,15 @@ client.accounts.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**external_user_id:** `typing.Optional[str]` - +**external_user_id:** `typing.Optional[str]` +
@@ -448,7 +448,7 @@ client.accounts.list(
**oauth_app_id:** `typing.Optional[str]` — The OAuth app ID to filter by, if applicable - +
@@ -456,7 +456,7 @@ client.accounts.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -464,7 +464,7 @@ client.accounts.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -472,7 +472,7 @@ client.accounts.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -480,7 +480,7 @@ client.accounts.list(
**app:** `typing.Optional[str]` — The app slug or ID to filter accounts by. - +
@@ -488,7 +488,7 @@ client.accounts.list(
**include_credentials:** `typing.Optional[bool]` — Whether to retrieve the account's credentials or not - +
@@ -496,7 +496,7 @@ client.accounts.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -566,7 +566,7 @@ client.accounts.create(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -574,7 +574,7 @@ client.accounts.create(
**app_slug:** `str` — The app slug for the account - +
@@ -582,7 +582,7 @@ client.accounts.create(
**cfmap_json:** `str` — JSON string containing the custom fields mapping - +
@@ -590,15 +590,15 @@ client.accounts.create(
**connect_token:** `str` — The connect token for authentication - +
-**external_user_id:** `typing.Optional[str]` - +**external_user_id:** `typing.Optional[str]` +
@@ -606,7 +606,7 @@ client.accounts.create(
**oauth_app_id:** `typing.Optional[str]` — The OAuth app ID to filter by, if applicable - +
@@ -614,7 +614,7 @@ client.accounts.create(
**name:** `typing.Optional[str]` — Optional name for the account - +
@@ -622,7 +622,7 @@ client.accounts.create(
**account_id:** `typing.Optional[str]` — An existing account ID to reconnect. When provided, the account's credentials are updated instead of creating a new account. Must belong to the same external user and project environment as the connect token, and match the app identified by app_slug. - +
@@ -630,7 +630,7 @@ client.accounts.create(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -697,15 +697,15 @@ client.accounts.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**account_id:** `str` - +**account_id:** `str` +
@@ -713,7 +713,7 @@ client.accounts.retrieve(
**include_credentials:** `typing.Optional[bool]` — Whether to retrieve the account's credentials or not - +
@@ -721,7 +721,7 @@ client.accounts.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -787,15 +787,15 @@ client.accounts.delete(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**account_id:** `str` - +**account_id:** `str` +
@@ -803,7 +803,7 @@ client.accounts.delete(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -869,23 +869,123 @@ client.accounts.delete_by_app(
**project_id:** `str` — The project ID, which starts with `proj_`. + +
+ + +
+
+**app_id:** `str` +
-**app_id:** `str` +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+ + + + +
client.accounts.list_by_external_user(...) -> typing.List[Account]
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +#### 📝 Description + +
+
+ +
+
+ +List all connected accounts for a specific external user. Equivalent to GET /accounts with external_user_id filter but uses path-based routing. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from pipedream import Pipedream +from pipedream.environment import PipedreamEnvironment + +client = Pipedream( + client_id="", + client_secret="", + environment=PipedreamEnvironment.PROD, +) + +client.accounts.list_by_external_user( + external_user_id="external_user_id", + include_credentials=True, + app="app", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**project_id:** `str` — The project ID, which starts with `proj_`. + +
+
+ +
+
+ +**external_user_id:** `str` + +
+
+ +
+
+ +**include_credentials:** `typing.Optional[bool]` + +
+
+ +
+
+ +**app:** `typing.Optional[str]` + +
+
+ +
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +
@@ -952,15 +1052,15 @@ client.users.delete_external_user(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**external_user_id:** `str` - +**external_user_id:** `str` +
@@ -968,7 +1068,7 @@ client.users.delete_external_user(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1037,7 +1137,7 @@ client.users.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -1045,7 +1145,7 @@ client.users.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -1053,7 +1153,7 @@ client.users.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -1061,7 +1161,7 @@ client.users.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -1069,7 +1169,7 @@ client.users.list(
**q:** `typing.Optional[str]` — Filter users by external_id (partial match) - +
@@ -1077,7 +1177,7 @@ client.users.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1150,7 +1250,7 @@ client.components.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -1158,7 +1258,7 @@ client.components.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -1166,7 +1266,7 @@ client.components.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -1174,7 +1274,7 @@ client.components.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -1182,7 +1282,7 @@ client.components.list(
**q:** `typing.Optional[str]` — A search query to filter the components - +
@@ -1190,15 +1290,15 @@ client.components.list(
**app:** `typing.Optional[str]` — The ID or name slug of the app to filter the components - +
-**registry:** `typing.Optional[ComponentsListRequestRegistry]` — The registry to retrieve components from. Defaults to 'all' ('public', 'private', or 'all') - +**registry:** `typing.Optional[ComponentsListRequestRegistry]` — The registry to retrieve components from +
@@ -1206,7 +1306,7 @@ client.components.list(
**component_type:** `typing.Optional[ComponentType]` — The type of the component to filter the components - +
@@ -1214,7 +1314,7 @@ client.components.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1262,8 +1362,8 @@ client = Pipedream( ) client.components.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) ``` @@ -1281,23 +1381,23 @@ client.components.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**component_id:** `str` — The key that uniquely identifies the component (e.g., 'slack-send-message') - +**component_id:** `str` — The key that uniquely identifies the component +
-**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve (for example '1.0.0') - +**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve +
@@ -1305,7 +1405,7 @@ client.components.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1373,15 +1473,15 @@ client.components.configure_prop(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ConfigurePropOpts` - +**request:** `ConfigurePropOpts` +
@@ -1389,7 +1489,7 @@ client.components.configure_prop(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1456,15 +1556,15 @@ client.components.reload_props(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ReloadPropsOpts` - +**request:** `ReloadPropsOpts` +
@@ -1472,7 +1572,7 @@ client.components.reload_props(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1544,7 +1644,7 @@ client.actions.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -1552,7 +1652,7 @@ client.actions.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -1560,7 +1660,7 @@ client.actions.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -1568,7 +1668,7 @@ client.actions.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -1576,7 +1676,7 @@ client.actions.list(
**q:** `typing.Optional[str]` — A search query to filter the actions - +
@@ -1584,15 +1684,15 @@ client.actions.list(
**app:** `typing.Optional[str]` — The ID or name slug of the app to filter the actions - +
-**registry:** `typing.Optional[ActionsListRequestRegistry]` — The registry to retrieve actions from. Defaults to 'all' ('public', 'private', or 'all') - +**registry:** `typing.Optional[ActionsListRequestRegistry]` — The registry to retrieve actions from +
@@ -1600,7 +1700,7 @@ client.actions.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1648,8 +1748,8 @@ client = Pipedream( ) client.actions.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) ``` @@ -1667,23 +1767,23 @@ client.actions.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**component_id:** `str` — The key that uniquely identifies the component (e.g., 'slack-send-message') - +**component_id:** `str` — The key that uniquely identifies the component +
-**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve (for example '1.0.0') - +**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve +
@@ -1691,7 +1791,7 @@ client.actions.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1759,15 +1859,15 @@ client.actions.configure_prop(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ConfigurePropOpts` - +**request:** `ConfigurePropOpts` +
@@ -1775,7 +1875,7 @@ client.actions.configure_prop(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1842,15 +1942,15 @@ client.actions.reload_props(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ReloadPropsOpts` - +**request:** `ReloadPropsOpts` +
@@ -1858,7 +1958,7 @@ client.actions.reload_props(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -1925,7 +2025,7 @@ client.actions.run(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -1933,7 +2033,7 @@ client.actions.run(
**id:** `str` — The action component ID - +
@@ -1941,23 +2041,23 @@ client.actions.run(
**external_user_id:** `str` — The external user ID - +
-**version:** `typing.Optional[str]` — Optional action component version (in SemVer format, for example '1.0.0'), defaults to latest - +**version:** `typing.Optional[str]` — Action component semantic version +
-**configured_props:** `typing.Optional[ConfiguredProps]` - +**configured_props:** `typing.Optional[ConfiguredProps]` +
@@ -1965,15 +2065,15 @@ client.actions.run(
**dynamic_props_id:** `typing.Optional[str]` — The ID for dynamic props - +
-**stash_id:** `typing.Optional[RunActionOptsStashId]` - +**stash_id:** `typing.Optional[RunActionOptsStashId]` +
@@ -1981,7 +2081,7 @@ client.actions.run(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2053,7 +2153,7 @@ client.triggers.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -2061,7 +2161,7 @@ client.triggers.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -2069,7 +2169,7 @@ client.triggers.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -2077,7 +2177,7 @@ client.triggers.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -2085,7 +2185,7 @@ client.triggers.list(
**q:** `typing.Optional[str]` — A search query to filter the triggers - +
@@ -2093,15 +2193,15 @@ client.triggers.list(
**app:** `typing.Optional[str]` — The ID or name slug of the app to filter the triggers - +
-**registry:** `typing.Optional[TriggersListRequestRegistry]` — The registry to retrieve triggers from. Defaults to 'all' ('public', 'private', or 'all') - +**registry:** `typing.Optional[TriggersListRequestRegistry]` — The registry to retrieve triggers from +
@@ -2109,7 +2209,7 @@ client.triggers.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2157,8 +2257,8 @@ client = Pipedream( ) client.triggers.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) ``` @@ -2176,23 +2276,23 @@ client.triggers.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**component_id:** `str` — The key that uniquely identifies the component (e.g., 'slack-send-message') - +**component_id:** `str` — The key that uniquely identifies the component +
-**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve (for example '1.0.0') - +**version:** `typing.Optional[str]` — Optional semantic version of the component to retrieve +
@@ -2200,7 +2300,7 @@ client.triggers.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2268,15 +2368,15 @@ client.triggers.configure_prop(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ConfigurePropOpts` - +**request:** `ConfigurePropOpts` +
@@ -2284,7 +2384,7 @@ client.triggers.configure_prop(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2351,15 +2451,15 @@ client.triggers.reload_props(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**request:** `ReloadPropsOpts` - +**request:** `ReloadPropsOpts` +
@@ -2367,7 +2467,7 @@ client.triggers.reload_props(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2434,7 +2534,7 @@ client.triggers.deploy(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -2442,7 +2542,7 @@ client.triggers.deploy(
**id:** `str` — The trigger component ID - +
@@ -2450,23 +2550,23 @@ client.triggers.deploy(
**external_user_id:** `str` — The external user ID - +
-**version:** `typing.Optional[str]` — Optional trigger component version (in SemVer format, for example '1.0.0'), defaults to latest - +**version:** `typing.Optional[str]` — Trigger component semantic version +
-**configured_props:** `typing.Optional[ConfiguredProps]` - +**configured_props:** `typing.Optional[ConfiguredProps]` +
@@ -2474,7 +2574,7 @@ client.triggers.deploy(
**dynamic_props_id:** `typing.Optional[str]` — The ID for dynamic props - +
@@ -2482,7 +2582,7 @@ client.triggers.deploy(
**workflow_id:** `typing.Optional[str]` — Optional ID of a workflow to receive trigger events - +
@@ -2490,7 +2590,7 @@ client.triggers.deploy(
**webhook_url:** `typing.Optional[str]` — Optional webhook URL to receive trigger events - +
@@ -2498,7 +2598,7 @@ client.triggers.deploy(
**emit_on_deploy:** `typing.Optional[bool]` — Whether the trigger should emit events during the deploy hook execution. Defaults to true if not specified. - +
@@ -2506,7 +2606,7 @@ client.triggers.deploy(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2577,7 +2677,7 @@ client.deployed_triggers.list(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -2585,7 +2685,7 @@ client.deployed_triggers.list(
**external_user_id:** `str` — Your end user ID, for whom you deployed the trigger - +
@@ -2593,7 +2693,7 @@ client.deployed_triggers.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -2601,7 +2701,7 @@ client.deployed_triggers.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -2609,7 +2709,7 @@ client.deployed_triggers.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -2617,7 +2717,7 @@ client.deployed_triggers.list(
**emitter_type:** `typing.Optional[EmitterType]` — Filter deployed triggers by emitter type (defaults to 'source' if not provided) - +
@@ -2625,7 +2725,7 @@ client.deployed_triggers.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2692,15 +2792,15 @@ client.deployed_triggers.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -2708,7 +2808,7 @@ client.deployed_triggers.retrieve(
**external_user_id:** `str` — Your end user ID, for whom you deployed the trigger - +
@@ -2716,7 +2816,7 @@ client.deployed_triggers.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2783,15 +2883,15 @@ client.deployed_triggers.update(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -2799,7 +2899,7 @@ client.deployed_triggers.update(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -2807,15 +2907,15 @@ client.deployed_triggers.update(
**active:** `typing.Optional[bool]` — Whether the trigger should be active - +
-**configured_props:** `typing.Optional[ConfiguredProps]` - +**configured_props:** `typing.Optional[ConfiguredProps]` +
@@ -2823,7 +2923,7 @@ client.deployed_triggers.update(
**name:** `typing.Optional[str]` — The name of the trigger - +
@@ -2831,7 +2931,7 @@ client.deployed_triggers.update(
**emit_on_deploy:** `typing.Optional[bool]` — Whether the trigger should emit events during deployment - +
@@ -2839,7 +2939,7 @@ client.deployed_triggers.update(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -2907,15 +3007,15 @@ client.deployed_triggers.delete(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -2923,7 +3023,7 @@ client.deployed_triggers.delete(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -2931,7 +3031,7 @@ client.deployed_triggers.delete(
**ignore_hook_errors:** `typing.Optional[bool]` — Whether to ignore errors during deactivation hook - +
@@ -2939,7 +3039,7 @@ client.deployed_triggers.delete(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3007,15 +3107,15 @@ client.deployed_triggers.list_events(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -3023,7 +3123,7 @@ client.deployed_triggers.list_events(
**external_user_id:** `str` — Your end user ID, for whom you deployed the trigger - +
@@ -3031,7 +3131,7 @@ client.deployed_triggers.list_events(
**n:** `typing.Optional[int]` — The number of events to retrieve (defaults to 20 if not provided) - +
@@ -3039,7 +3139,7 @@ client.deployed_triggers.list_events(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3106,15 +3206,15 @@ client.deployed_triggers.list_workflows(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -3122,7 +3222,7 @@ client.deployed_triggers.list_workflows(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3130,7 +3230,7 @@ client.deployed_triggers.list_workflows(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3200,15 +3300,15 @@ client.deployed_triggers.update_workflows(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -3216,7 +3316,7 @@ client.deployed_triggers.update_workflows(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3224,7 +3324,7 @@ client.deployed_triggers.update_workflows(
**workflow_ids:** `typing.List[str]` — Array of workflow IDs to set - +
@@ -3232,7 +3332,7 @@ client.deployed_triggers.update_workflows(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3299,15 +3399,15 @@ client.deployed_triggers.list_webhooks(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -3315,7 +3415,7 @@ client.deployed_triggers.list_webhooks(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3323,7 +3423,7 @@ client.deployed_triggers.list_webhooks(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3393,15 +3493,15 @@ client.deployed_triggers.update_webhooks(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
@@ -3409,7 +3509,7 @@ client.deployed_triggers.update_webhooks(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3417,7 +3517,7 @@ client.deployed_triggers.update_webhooks(
**webhook_urls:** `typing.List[str]` — Array of webhook URLs to set - +
@@ -3425,7 +3525,7 @@ client.deployed_triggers.update_webhooks(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3493,23 +3593,23 @@ client.deployed_triggers.retrieve_webhook(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
-**webhook_id:** `str` - +**webhook_id:** `str` +
@@ -3517,7 +3617,7 @@ client.deployed_triggers.retrieve_webhook(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3525,7 +3625,7 @@ client.deployed_triggers.retrieve_webhook(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3593,23 +3693,23 @@ client.deployed_triggers.regenerate_webhook_signing_key(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**trigger_id:** `str` - +**trigger_id:** `str` +
-**webhook_id:** `str` - +**webhook_id:** `str` +
@@ -3617,7 +3717,7 @@ client.deployed_triggers.regenerate_webhook_signing_key(
**external_user_id:** `str` — The external user ID who owns the trigger - +
@@ -3625,7 +3725,7 @@ client.deployed_triggers.regenerate_webhook_signing_key(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3690,7 +3790,7 @@ client.project_environment.retrieve_webhook()
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -3698,7 +3798,7 @@ client.project_environment.retrieve_webhook()
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3764,7 +3864,7 @@ client.project_environment.update_webhook(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -3772,7 +3872,7 @@ client.project_environment.update_webhook(
**url:** `str` — The webhook URL to set - +
@@ -3780,7 +3880,7 @@ client.project_environment.update_webhook(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3844,7 +3944,7 @@ client.project_environment.delete_webhook()
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -3852,7 +3952,7 @@ client.project_environment.delete_webhook()
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3916,7 +4016,7 @@ client.project_environment.regenerate_webhook_signing_key()
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -3924,7 +4024,7 @@ client.project_environment.regenerate_webhook_signing_key()
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -3994,7 +4094,7 @@ client.projects.list(
**after:** `typing.Optional[str]` — The cursor to start from for pagination - +
@@ -4002,7 +4102,7 @@ client.projects.list(
**before:** `typing.Optional[str]` — The cursor to end before for pagination - +
@@ -4010,7 +4110,7 @@ client.projects.list(
**limit:** `typing.Optional[int]` — The maximum number of results to return - +
@@ -4018,7 +4118,7 @@ client.projects.list(
**q:** `typing.Optional[str]` — A search query to filter the projects - +
@@ -4026,7 +4126,7 @@ client.projects.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4092,7 +4192,7 @@ client.projects.create(
**name:** `str` — Name of the project - +
@@ -4100,7 +4200,7 @@ client.projects.create(
**app_name:** `typing.Optional[str]` — Display name for the Connect application - +
@@ -4108,7 +4208,7 @@ client.projects.create(
**support_email:** `typing.Optional[str]` — Support email displayed to end users - +
@@ -4116,7 +4216,7 @@ client.projects.create(
**connect_require_key_auth_test:** `typing.Optional[bool]` — Send a test request to the upstream API when adding Connect accounts for key-based apps - +
@@ -4124,7 +4224,7 @@ client.projects.create(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4190,7 +4290,7 @@ client.projects.retrieve(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4198,7 +4298,7 @@ client.projects.retrieve(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4264,7 +4364,7 @@ client.projects.delete(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4272,7 +4372,7 @@ client.projects.delete(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4338,7 +4438,7 @@ client.projects.update(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4346,7 +4446,7 @@ client.projects.update(
**name:** `typing.Optional[str]` — Name of the project - +
@@ -4354,7 +4454,7 @@ client.projects.update(
**app_name:** `typing.Optional[str]` — Display name for the Connect application - +
@@ -4362,7 +4462,7 @@ client.projects.update(
**support_email:** `typing.Optional[str]` — Support email displayed to end users - +
@@ -4370,7 +4470,7 @@ client.projects.update(
**connect_require_key_auth_test:** `typing.Optional[bool]` — Send a test request to the upstream API when adding Connect accounts for key-based apps - +
@@ -4378,7 +4478,7 @@ client.projects.update(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4445,7 +4545,7 @@ client.projects.update_logo(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4453,7 +4553,7 @@ client.projects.update_logo(
**logo:** `str` — Data URI containing the new Base64 encoded image - +
@@ -4461,7 +4561,7 @@ client.projects.update_logo(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4525,7 +4625,7 @@ client.projects.retrieve_info()
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4533,7 +4633,7 @@ client.projects.retrieve_info()
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4600,15 +4700,15 @@ client.file_stash.download_file(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
-**s_3_key:** `str` - +**s_3_key:** `str` +
@@ -4616,7 +4716,7 @@ client.file_stash.download_file(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4685,7 +4785,7 @@ client.proxy.get(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4693,7 +4793,7 @@ client.proxy.get(
**url_64:** `str` — Base64-encoded target URL - +
@@ -4701,7 +4801,7 @@ client.proxy.get(
**external_user_id:** `str` — The external user ID for the proxy request - +
@@ -4709,7 +4809,7 @@ client.proxy.get(
**account_id:** `str` — The account ID to use for authentication - +
@@ -4717,7 +4817,7 @@ client.proxy.get(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4788,7 +4888,7 @@ client.proxy.post(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4796,7 +4896,7 @@ client.proxy.post(
**url_64:** `str` — Base64-encoded target URL - +
@@ -4804,7 +4904,7 @@ client.proxy.post(
**external_user_id:** `str` — The external user ID for the proxy request - +
@@ -4812,7 +4912,7 @@ client.proxy.post(
**account_id:** `str` — The account ID to use for authentication - +
@@ -4820,7 +4920,7 @@ client.proxy.post(
**request:** `typing.Dict[str, typing.Any]` — Request body to forward to the target API - +
@@ -4828,7 +4928,7 @@ client.proxy.post(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -4899,7 +4999,7 @@ client.proxy.put(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -4907,7 +5007,7 @@ client.proxy.put(
**url_64:** `str` — Base64-encoded target URL - +
@@ -4915,7 +5015,7 @@ client.proxy.put(
**external_user_id:** `str` — The external user ID for the proxy request - +
@@ -4923,7 +5023,7 @@ client.proxy.put(
**account_id:** `str` — The account ID to use for authentication - +
@@ -4931,7 +5031,7 @@ client.proxy.put(
**request:** `typing.Dict[str, typing.Any]` — Request body to forward to the target API - +
@@ -4939,7 +5039,7 @@ client.proxy.put(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5007,7 +5107,7 @@ client.proxy.delete(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -5015,7 +5115,7 @@ client.proxy.delete(
**url_64:** `str` — Base64-encoded target URL - +
@@ -5023,7 +5123,7 @@ client.proxy.delete(
**external_user_id:** `str` — The external user ID for the proxy request - +
@@ -5031,7 +5131,7 @@ client.proxy.delete(
**account_id:** `str` — The account ID to use for authentication - +
@@ -5039,7 +5139,7 @@ client.proxy.delete(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5110,7 +5210,7 @@ client.proxy.patch(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -5118,7 +5218,7 @@ client.proxy.patch(
**url_64:** `str` — Base64-encoded target URL - +
@@ -5126,7 +5226,7 @@ client.proxy.patch(
**external_user_id:** `str` — The external user ID for the proxy request - +
@@ -5134,7 +5234,7 @@ client.proxy.patch(
**account_id:** `str` — The account ID to use for authentication - +
@@ -5142,7 +5242,7 @@ client.proxy.patch(
**request:** `typing.Dict[str, typing.Any]` — Request body to forward to the target API - +
@@ -5150,7 +5250,7 @@ client.proxy.patch(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5217,7 +5317,7 @@ client.tokens.create(
**project_id:** `str` — The project ID, which starts with `proj_`. - +
@@ -5225,7 +5325,7 @@ client.tokens.create(
**external_user_id:** `str` — Your end user ID, for whom you're creating the token - +
@@ -5233,7 +5333,7 @@ client.tokens.create(
**allowed_origins:** `typing.Optional[typing.List[str]]` — List of allowed origins for CORS - +
@@ -5241,7 +5341,7 @@ client.tokens.create(
**error_redirect_uri:** `typing.Optional[str]` — URI to redirect to on error - +
@@ -5249,7 +5349,7 @@ client.tokens.create(
**expires_in:** `typing.Optional[int]` — Token TTL in seconds (max 14400 = 4 hours). Defaults to 4 hours if not specified. - +
@@ -5257,7 +5357,7 @@ client.tokens.create(
**scope:** `typing.Optional[str]` — Space-separated scopes to restrict token permissions. Defaults to 'connect:*' if not specified. See https://pipedream.com/docs/connect/api-reference/authentication#connect-token-scopes for more information. - +
@@ -5265,7 +5365,7 @@ client.tokens.create(
**success_redirect_uri:** `typing.Optional[str]` — URI to redirect to on success - +
@@ -5273,7 +5373,7 @@ client.tokens.create(
**webhook_uri:** `typing.Optional[str]` — Webhook URI for notifications - +
@@ -5281,7 +5381,7 @@ client.tokens.create(
**allow_progressive_scopes:** `typing.Optional[bool]` — When true, end users may authorize a subset of the app's OAuth scopes; only the app's functional scopes (needed for the post-OAuth test request) are enforced. Defaults to false. - +
@@ -5289,7 +5389,7 @@ client.tokens.create(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5357,8 +5457,8 @@ client.tokens.validate(
-**ctok:** `ConnectToken` - +**ctok:** `ConnectToken` +
@@ -5366,7 +5466,7 @@ client.tokens.validate(
**app_id:** `str` — The app ID to validate against - +
@@ -5374,7 +5474,7 @@ client.tokens.validate(
**account_id:** `typing.Optional[str]` — An existing account ID to reconnect. Must belong to the app identified by app_id. - +
@@ -5382,7 +5482,7 @@ client.tokens.validate(
**oauth_app_id:** `typing.Optional[str]` — The OAuth app ID to validate against (if the token is for an OAuth app) - +
@@ -5390,7 +5490,7 @@ client.tokens.validate(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5458,7 +5558,7 @@ client.usage.list(
**start_ts:** `int` — Usage window start timestamp (seconds) - +
@@ -5466,7 +5566,7 @@ client.usage.list(
**end_ts:** `int` — Usage window end timestamp (seconds) - +
@@ -5474,7 +5574,7 @@ client.usage.list(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5541,24 +5641,24 @@ client.oauth_tokens.create(
-**grant_type:** `typing.Literal` - +**grant_type:** `typing.Literal` +
-**client_id:** `str` - +**client_id:** `str` +
-**client_secret:** `str` - +**client_secret:** `str` +
@@ -5566,104 +5666,7 @@ client.oauth_tokens.create(
**scope:** `typing.Optional[str]` — Optional space-separated scopes for the access token. Defaults to `*`. - -
- - -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
- - - - - - -
- - -## Workflows -
client.workflows.invoke(...) -
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from pipedream import Pipedream, PipedreamEnvironment -from pipedream.workflows.client import HTTPAuthType - -client = Pipedream( - client_id="", - client_secret="", - environment=PipedreamEnvironment.PROD, -) -response = client.workflows.invoke( - url_or_endpoint="https://your-workflow.m.pipedream.net", - method="POST", - body={"key": "value"}, - headers={"Content-Type": "application/json"}, - auth_type=HTTPAuthType.NONE, -) - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**url_or_endpoint:** `str` — The URL of the workflow's HTTP interface or the ID of the endpoint - -
-
- -
-
- -**method:** `str` — HTTP method to use (default: "POST") - -
-
- -
-
- -**body:** `typing.Optional[typing.Any]` — Request body data - -
-
- -
-
- -**headers:** `typing.Optional[typing.Dict[str, str]]` — HTTP headers to include - -
-
- -
-
- -**auth_type:** `HTTPAuthType` — Type of authorization (default: HTTPAuthType.NONE) - +
@@ -5671,7 +5674,7 @@ response = client.workflows.invoke(
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - +
@@ -5682,96 +5685,3 @@ response = client.workflows.invoke(
-
client.workflows.invoke_for_external_user(...) -
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from pipedream import Pipedream, PipedreamEnvironment - -client = Pipedream( - client_id="", - client_secret="", - environment=PipedreamEnvironment.PROD, -) -response = client.workflows.invoke_for_external_user( - url_or_endpoint="en2r1n8a98np7", - external_user_id="user_123", - method="POST", - body={"message": "Hello from external user"}, - headers={"Content-Type": "application/json"}, -) - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**url_or_endpoint:** `str` — The URL of the workflow's HTTP interface or the ID of the endpoint - -
-
- -
-
- -**external_user_id:** `str` — The external user ID for whom the workflow is being invoked - -
-
- -
-
- -**method:** `str` — HTTP method to use (default: "POST") - -
-
- -
-
- -**body:** `typing.Optional[typing.Any]` — Request body data - -
-
- -
-
- -**headers:** `typing.Optional[typing.Dict[str, str]]` — HTTP headers to include - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
diff --git a/src/pipedream/__init__.py b/src/pipedream/__init__.py index 090033e..9e9e73e 100644 --- a/src/pipedream/__init__.py +++ b/src/pipedream/__init__.py @@ -162,7 +162,6 @@ triggers, usage, users, - workflows, ) from ._default_clients import DefaultAioHttpClient, DefaultAsyncHttpxClient from .actions import ActionsListRequestRegistry @@ -172,7 +171,6 @@ from .pipedream import AsyncPipedream, Pipedream from .triggers import TriggersListRequestRegistry from .version import __version__ - from .workflows.client import AsyncWorkflowsClient, WorkflowsClient _dynamic_imports: typing.Dict[str, str] = { "Account": ".types", "AccountCredentials": ".types", @@ -186,7 +184,6 @@ "AppsListRequestSortDirection": ".apps", "AppsListRequestSortKey": ".apps", "AsyncPipedream": ".pipedream", - "AsyncWorkflowsClient": ".workflows.client", "BackendClientOpts": ".types", "BadRequestError": ".errors", "ClientOpts": ".types", @@ -325,7 +322,6 @@ "Webhook": ".types", "WebhookWithOptionalSigningKey": ".types", "WebhookWithSigningKey": ".types", - "WorkflowsClient": ".workflows.client", "__version__": ".version", "accounts": ".accounts", "actions": ".actions", @@ -342,7 +338,6 @@ "triggers": ".triggers", "usage": ".usage", "users": ".users", - "workflows": ".workflows", } @@ -380,7 +375,6 @@ def __dir__(): "AppsListRequestSortDirection", "AppsListRequestSortKey", "AsyncPipedream", - "AsyncWorkflowsClient", "BackendClientOpts", "BadRequestError", "ClientOpts", @@ -519,7 +513,6 @@ def __dir__(): "Webhook", "WebhookWithOptionalSigningKey", "WebhookWithSigningKey", - "WorkflowsClient", "__version__", "accounts", "actions", @@ -536,5 +529,4 @@ def __dir__(): "triggers", "usage", "users", - "workflows", ] diff --git a/src/pipedream/actions/client.py b/src/pipedream/actions/client.py index d4cdf9d..4f0b9c8 100644 --- a/src/pipedream/actions/client.py +++ b/src/pipedream/actions/client.py @@ -66,7 +66,7 @@ def list( The ID or name slug of the app to filter the actions registry : typing.Optional[ActionsListRequestRegistry] - The registry to retrieve actions from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve actions from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -116,10 +116,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -139,8 +139,8 @@ def retrieve( client_secret="YOUR_CLIENT_SECRET", ) client.actions.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) """ _response = self._raw_client.retrieve(component_id, version=version, request_options=request_options) @@ -176,7 +176,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -256,7 +256,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -322,7 +322,7 @@ def run( The external user ID version : typing.Optional[str] - Optional action component version (in SemVer format, for example '1.0.0'), defaults to latest + Action component semantic version configured_props : typing.Optional[ConfiguredProps] @@ -412,7 +412,7 @@ async def list( The ID or name slug of the app to filter the actions registry : typing.Optional[ActionsListRequestRegistry] - The registry to retrieve actions from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve actions from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -471,10 +471,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -499,8 +499,8 @@ async def retrieve( async def main() -> None: await client.actions.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) @@ -539,7 +539,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -627,7 +627,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -701,7 +701,7 @@ async def run( The external user ID version : typing.Optional[str] - Optional action component version (in SemVer format, for example '1.0.0'), defaults to latest + Action component semantic version configured_props : typing.Optional[ConfiguredProps] diff --git a/src/pipedream/actions/raw_client.py b/src/pipedream/actions/raw_client.py index e9bcf94..49fee15 100644 --- a/src/pipedream/actions/raw_client.py +++ b/src/pipedream/actions/raw_client.py @@ -65,7 +65,7 @@ def list( The ID or name slug of the app to filter the actions registry : typing.Optional[ActionsListRequestRegistry] - The registry to retrieve actions from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve actions from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -157,10 +157,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -239,7 +239,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -283,6 +283,9 @@ def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -339,7 +342,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -370,6 +373,9 @@ def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -426,7 +432,7 @@ def run( The external user ID version : typing.Optional[str] - Optional action component version (in SemVer format, for example '1.0.0'), defaults to latest + Action component semantic version configured_props : typing.Optional[ConfiguredProps] @@ -531,7 +537,7 @@ async def list( The ID or name slug of the app to filter the actions registry : typing.Optional[ActionsListRequestRegistry] - The registry to retrieve actions from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve actions from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -626,10 +632,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -708,7 +714,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -752,6 +758,9 @@ async def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -808,7 +817,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -839,6 +848,9 @@ async def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -895,7 +907,7 @@ async def run( The external user ID version : typing.Optional[str] - Optional action component version (in SemVer format, for example '1.0.0'), defaults to latest + Action component semantic version configured_props : typing.Optional[ConfiguredProps] diff --git a/src/pipedream/components/client.py b/src/pipedream/components/client.py index 883856b..4759c18 100644 --- a/src/pipedream/components/client.py +++ b/src/pipedream/components/client.py @@ -66,7 +66,7 @@ def list( The ID or name slug of the app to filter the components registry : typing.Optional[ComponentsListRequestRegistry] - The registry to retrieve components from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve components from component_type : typing.Optional[ComponentType] The type of the component to filter the components @@ -127,10 +127,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -150,8 +150,8 @@ def retrieve( client_secret="YOUR_CLIENT_SECRET", ) client.components.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) """ _response = self._raw_client.retrieve(component_id, version=version, request_options=request_options) @@ -187,7 +187,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -267,7 +267,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -359,7 +359,7 @@ async def list( The ID or name slug of the app to filter the components registry : typing.Optional[ComponentsListRequestRegistry] - The registry to retrieve components from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve components from component_type : typing.Optional[ComponentType] The type of the component to filter the components @@ -429,10 +429,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -457,8 +457,8 @@ async def retrieve( async def main() -> None: await client.components.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) @@ -497,7 +497,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -585,7 +585,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion diff --git a/src/pipedream/components/raw_client.py b/src/pipedream/components/raw_client.py index e122c9f..027abc3 100644 --- a/src/pipedream/components/raw_client.py +++ b/src/pipedream/components/raw_client.py @@ -65,7 +65,7 @@ def list( The ID or name slug of the app to filter the components registry : typing.Optional[ComponentsListRequestRegistry] - The registry to retrieve components from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve components from component_type : typing.Optional[ComponentType] The type of the component to filter the components @@ -162,10 +162,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -244,7 +244,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -288,6 +288,9 @@ def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -344,7 +347,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -375,6 +378,9 @@ def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -446,7 +452,7 @@ async def list( The ID or name slug of the app to filter the components registry : typing.Optional[ComponentsListRequestRegistry] - The registry to retrieve components from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve components from component_type : typing.Optional[ComponentType] The type of the component to filter the components @@ -546,10 +552,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -628,7 +634,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -672,6 +678,9 @@ async def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -728,7 +737,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -759,6 +768,9 @@ async def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) diff --git a/src/pipedream/pipedream.py b/src/pipedream/pipedream.py index 53f491d..ed51914 100644 --- a/src/pipedream/pipedream.py +++ b/src/pipedream/pipedream.py @@ -1,131 +1,86 @@ +# This file was auto-generated by Fern from our API Definition. + import os import typing import httpx - from .client import AsyncClient, Client from .core.logging import LogConfig, Logger +from .environment import PipedreamEnvironment from .types.project_environment import ProjectEnvironment -from .workflows.client import AsyncWorkflowsClient, WorkflowsClient - -_PROD_BASE_URL = "https://api.pipedream.com" class Pipedream(Client): - + @typing.overload def __init__( self, *, - access_token: typing.Optional[str] = os.getenv("PIPEDREAM_ACCESS_TOKEN"), + base_url: typing.Optional[str] = None, + environment: PipedreamEnvironment = PipedreamEnvironment.PROD, + project_id: str, + project_environment: typing.Optional[ProjectEnvironment] = os.getenv("PIPEDREAM_PROJECT_ENVIRONMENT"), + headers: typing.Optional[typing.Dict[str, str]] = None, + timeout: typing.Optional[float] = None, + max_retries: typing.Optional[int] = None, + follow_redirects: typing.Optional[bool] = True, + httpx_client: typing.Optional[httpx.Client] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, client_id: typing.Optional[str] = os.getenv("PIPEDREAM_CLIENT_ID"), client_secret: typing.Optional[str] = os.getenv("PIPEDREAM_CLIENT_SECRET"), - project_id: typing.Optional[str] = os.getenv("PIPEDREAM_PROJECT_ID"), - project_environment: typing.Optional[ProjectEnvironment] = os.getenv( - "PIPEDREAM_PROJECT_ENVIRONMENT", - "production", - ), + ): ... + @typing.overload + def __init__( + self, + *, base_url: typing.Optional[str] = None, - workflow_domain: typing.Optional[str] = None, + environment: PipedreamEnvironment = PipedreamEnvironment.PROD, + project_id: str, + project_environment: typing.Optional[ProjectEnvironment] = os.getenv("PIPEDREAM_PROJECT_ENVIRONMENT"), headers: typing.Optional[typing.Dict[str, str]] = None, timeout: typing.Optional[float] = None, max_retries: typing.Optional[int] = None, follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.Client] = None, logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, - ): - if not project_id: - raise ValueError("Project ID is required") - - resolved_base_url = base_url or os.environ.get("PIPEDREAM_BASE_URL") or _PROD_BASE_URL - resolved_workflow_domain = ( - workflow_domain or os.environ.get("PIPEDREAM_WORKFLOW_DOMAIN") or "m.pipedream.net" - ) - - common_kwargs: typing.Dict[str, typing.Any] = dict( - base_url=resolved_base_url, - project_id=project_id, - project_environment=project_environment, - headers=headers, - timeout=timeout, - max_retries=max_retries, - follow_redirects=follow_redirects, - httpx_client=httpx_client, - logging=logging, - ) - - if access_token: - super().__init__(token=(lambda: access_token), **common_kwargs) - else: - super().__init__(client_id=client_id, client_secret=client_secret, **common_kwargs) - - self.workflows = WorkflowsClient( - client_wrapper=self._client_wrapper, - workflow_domain=resolved_workflow_domain, - ) - - @property - def raw_access_token(self) -> typing.Optional[str]: - """ - Returns an access token that can be used to authenticate API requests - """ - return self._client_wrapper._get_token() + token: typing.Callable[[], str], + ): ... + def __init__(self, **kwargs: typing.Any): + super().__init__(**kwargs) class AsyncPipedream(AsyncClient): - + @typing.overload def __init__( self, *, - access_token: typing.Optional[str] = os.getenv("PIPEDREAM_ACCESS_TOKEN"), + base_url: typing.Optional[str] = None, + environment: PipedreamEnvironment = PipedreamEnvironment.PROD, + project_id: str, + project_environment: typing.Optional[ProjectEnvironment] = os.getenv("PIPEDREAM_PROJECT_ENVIRONMENT"), + headers: typing.Optional[typing.Dict[str, str]] = None, + timeout: typing.Optional[float] = None, + max_retries: typing.Optional[int] = None, + follow_redirects: typing.Optional[bool] = True, + httpx_client: typing.Optional[httpx.AsyncClient] = None, + logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, client_id: typing.Optional[str] = os.getenv("PIPEDREAM_CLIENT_ID"), client_secret: typing.Optional[str] = os.getenv("PIPEDREAM_CLIENT_SECRET"), - project_id: typing.Optional[str] = os.getenv("PIPEDREAM_PROJECT_ID"), - project_environment: typing.Optional[ProjectEnvironment] = os.getenv( - "PIPEDREAM_PROJECT_ENVIRONMENT", - "production", - ), + ): ... + @typing.overload + def __init__( + self, + *, base_url: typing.Optional[str] = None, - workflow_domain: typing.Optional[str] = None, + environment: PipedreamEnvironment = PipedreamEnvironment.PROD, + project_id: str, + project_environment: typing.Optional[ProjectEnvironment] = os.getenv("PIPEDREAM_PROJECT_ENVIRONMENT"), headers: typing.Optional[typing.Dict[str, str]] = None, timeout: typing.Optional[float] = None, max_retries: typing.Optional[int] = None, follow_redirects: typing.Optional[bool] = True, httpx_client: typing.Optional[httpx.AsyncClient] = None, logging: typing.Optional[typing.Union[LogConfig, Logger]] = None, - ): - if not project_id: - raise ValueError("Project ID is required") - - resolved_base_url = base_url or os.environ.get("PIPEDREAM_BASE_URL") or _PROD_BASE_URL - resolved_workflow_domain = ( - workflow_domain or os.environ.get("PIPEDREAM_WORKFLOW_DOMAIN") or "m.pipedream.net" - ) - - common_kwargs: typing.Dict[str, typing.Any] = dict( - base_url=resolved_base_url, - project_id=project_id, - project_environment=project_environment, - headers=headers, - timeout=timeout, - max_retries=max_retries, - follow_redirects=follow_redirects, - httpx_client=httpx_client, - logging=logging, - ) - - if access_token: - super().__init__(token=(lambda: access_token), **common_kwargs) - else: - super().__init__(client_id=client_id, client_secret=client_secret, **common_kwargs) - - self.workflows = AsyncWorkflowsClient( - client_wrapper=self._client_wrapper, - workflow_domain=resolved_workflow_domain, - ) - - @property - def raw_access_token(self) -> typing.Optional[str]: - """ - Returns an access token that can be used to authenticate API requests - """ - return self._client_wrapper._get_token() + token: typing.Callable[[], str], + ): ... + def __init__(self, **kwargs: typing.Any): + super().__init__(**kwargs) diff --git a/src/pipedream/proxy/client.py b/src/pipedream/proxy/client.py index 1bff6ce..38bbf5c 100644 --- a/src/pipedream/proxy/client.py +++ b/src/pipedream/proxy/client.py @@ -1,85 +1,14 @@ -import base64 +# This file was auto-generated by Fern from our API Definition. + import typing -from collections.abc import AsyncIterator, Iterator -from urllib.parse import parse_qs, urlencode, urlparse, urlunparse from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -from ..types.proxy_response import ProxyResponse from .raw_client import AsyncRawProxyClient, RawProxyClient # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) -_SyncResult = typing.Union[ProxyResponse, typing.Iterator[bytes], None] -_AsyncResult = typing.Union[ProxyResponse, typing.AsyncIterator[bytes], None] - - -def _add_params_to_url(url: str, params: typing.Dict[str, typing.Any]) -> str: - parsed = urlparse(url) - existing_params = parse_qs(parsed.query) - for key, value in params.items(): - existing_params[key] = value if isinstance(value, list) else [value] - new_query = urlencode(existing_params, doseq=True) - return urlunparse(parsed._replace(query=new_query)) - - -def _prepare_request( - url: str, - *, - headers: typing.Optional[typing.Dict[str, typing.Any]], - params: typing.Optional[typing.Dict[str, typing.Any]], -) -> typing.Tuple[str, RequestOptions]: - if params: - url = _add_params_to_url(url, params) - url_64 = base64.urlsafe_b64encode(url.encode()).decode() - downstream_headers = { - f"x-pd-proxy-{name}": value for name, value in (headers or {}).items() - } - return url_64, RequestOptions(additional_headers=downstream_headers) - - -def _consume_sync(ctx: typing.ContextManager) -> _SyncResult: - """ - Open the raw proxy context, peek at the response payload, and either - return the parsed ProxyResponse (fully-buffered JSON) or a generator that - streams the binary body and closes the underlying response when exhausted. - """ - raw = ctx.__enter__() - data = raw.data - if not isinstance(data, Iterator): - ctx.__exit__(None, None, None) - return data - - def _stream() -> typing.Iterator[bytes]: - try: - yield from data - finally: - ctx.__exit__(None, None, None) - - return _stream() - - -async def _consume_async(ctx: typing.AsyncContextManager) -> _AsyncResult: - """ - Async counterpart of `_consume_sync` — returns either a parsed - ProxyResponse or an async generator that streams the binary body. - """ - raw = await ctx.__aenter__() - data = raw.data - if not isinstance(data, AsyncIterator): - await ctx.__aexit__(None, None, None) - return data - - async def _stream() -> typing.AsyncIterator[bytes]: - try: - async for chunk in data: - yield chunk - finally: - await ctx.__aexit__(None, None, None) - - return _stream() - class ProxyClient: def __init__(self, *, client_wrapper: SyncClientWrapper): @@ -98,20 +27,19 @@ def with_raw_response(self) -> RawProxyClient: def get( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _SyncResult: + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Iterator[bytes]: """ - Forward an authenticated GET request to an external API using an external user's account credentials. + Forward an authenticated GET request to an external API using an external user's account credentials Parameters ---------- - url : str - Target URL + url_64 : str + Base64-encoded target URL external_user_id : str The external user ID for the proxy request @@ -119,137 +47,257 @@ def get( account_id : str The account ID to use for authentication - headers : typing.Optional[typing.Dict[str, typing.Any]] - Additional headers to include in the request - - params : typing.Optional[typing.Dict[str, typing.Any]] - Query parameters to include in the request + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. Returns ------- - typing.Union[ProxyResponse, typing.Iterator[bytes], None] - ProxyResponse for JSON content, Iterator[bytes] for binary content, None for empty bodies. + typing.Iterator[bytes] + proxy request successful Examples -------- - from pipedream import Pipedream, PipedreamEnvironment + from pipedream import Pipedream client = Pipedream( - client_id="", - client_secret="", - environment=PipedreamEnvironment.PROD, + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) client.proxy.get( - url="https://example.com/api/endpoint", + url_64="url_64", external_user_id="external_user_id", account_id="account_id", - headers={"Extra-Downstream-Header": "some value"}, - params={"limit": 10}, ) """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return _consume_sync( - self._raw_client.get( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request_options=request_options, - ) - ) + with self._raw_client.get( + url_64, external_user_id=external_user_id, account_id=account_id, request_options=request_options + ) as r: + yield from r.data def post( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _SyncResult: - """ - Forward an authenticated POST request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Iterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return _consume_sync( - self._raw_client.post( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated POST request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[bytes] + proxy request successful + + Examples + -------- + from pipedream import Pipedream + + client = Pipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + client.proxy.post( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + """ + with self._raw_client.post( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + yield from r.data def put( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _SyncResult: - """ - Forward an authenticated PUT request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Iterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return _consume_sync( - self._raw_client.put( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated PUT request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[bytes] + proxy request successful + + Examples + -------- + from pipedream import Pipedream + + client = Pipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + client.proxy.put( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + """ + with self._raw_client.put( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + yield from r.data - def patch( + def delete( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _SyncResult: + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Iterator[bytes]: """ - Forward an authenticated PATCH request to an external API using an external user's account credentials. - """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return _consume_sync( - self._raw_client.patch( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated DELETE request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[bytes] + proxy request successful + + Examples + -------- + from pipedream import Pipedream + + client = Pipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + client.proxy.delete( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + ) + """ + with self._raw_client.delete( + url_64, external_user_id=external_user_id, account_id=account_id, request_options=request_options + ) as r: + yield from r.data - def delete( + def patch( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _SyncResult: - """ - Forward an authenticated DELETE request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.Iterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return _consume_sync( - self._raw_client.delete( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request_options=request_options, - ) + Forward an authenticated PATCH request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[bytes] + proxy request successful + + Examples + -------- + from pipedream import Pipedream + + client = Pipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + client.proxy.patch( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + """ + with self._raw_client.patch( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + yield from r.data class AsyncProxyClient: @@ -269,116 +317,319 @@ def with_raw_response(self) -> AsyncRawProxyClient: async def get( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _AsyncResult: + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.AsyncIterator[bytes]: """ - Forward an authenticated GET request to an external API using an external user's account credentials. - """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return await _consume_async( - self._raw_client.get( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request_options=request_options, - ) + Forward an authenticated GET request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[bytes] + proxy request successful + + Examples + -------- + import asyncio + + from pipedream import AsyncPipedream + + client = AsyncPipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + + async def main() -> None: + await client.proxy.get( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + ) + + + asyncio.run(main()) + """ + async with self._raw_client.get( + url_64, external_user_id=external_user_id, account_id=account_id, request_options=request_options + ) as r: + async for _chunk in r.data: + yield _chunk + async def post( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _AsyncResult: - """ - Forward an authenticated POST request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.AsyncIterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return await _consume_async( - self._raw_client.post( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated POST request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[bytes] + proxy request successful + + Examples + -------- + import asyncio + + from pipedream import AsyncPipedream + + client = AsyncPipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + + async def main() -> None: + await client.proxy.post( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + + + asyncio.run(main()) + """ + async with self._raw_client.post( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + async for _chunk in r.data: + yield _chunk + async def put( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _AsyncResult: - """ - Forward an authenticated PUT request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.AsyncIterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return await _consume_async( - self._raw_client.put( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated PUT request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[bytes] + proxy request successful + + Examples + -------- + import asyncio + + from pipedream import AsyncPipedream + + client = AsyncPipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) - async def patch( + + async def main() -> None: + await client.proxy.put( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + + + asyncio.run(main()) + """ + async with self._raw_client.put( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + async for _chunk in r.data: + yield _chunk + + async def delete( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - body: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _AsyncResult: + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.AsyncIterator[bytes]: """ - Forward an authenticated PATCH request to an external API using an external user's account credentials. - """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return await _consume_async( - self._raw_client.patch( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request=body or {}, - request_options=request_options, - ) + Forward an authenticated DELETE request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[bytes] + proxy request successful + + Examples + -------- + import asyncio + + from pipedream import AsyncPipedream + + client = AsyncPipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) - async def delete( + + async def main() -> None: + await client.proxy.delete( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + ) + + + asyncio.run(main()) + """ + async with self._raw_client.delete( + url_64, external_user_id=external_user_id, account_id=account_id, request_options=request_options + ) as r: + async for _chunk in r.data: + yield _chunk + + async def patch( self, - url: str, + url_64: str, *, external_user_id: str, account_id: str, - headers: typing.Optional[typing.Dict[str, typing.Any]] = None, - params: typing.Optional[typing.Dict[str, typing.Any]] = None, - ) -> _AsyncResult: - """ - Forward an authenticated DELETE request to an external API using an external user's account credentials. + request: typing.Dict[str, typing.Any], + request_options: typing.Optional[RequestOptions] = None, + ) -> typing.AsyncIterator[bytes]: """ - url_64, request_options = _prepare_request(url, headers=headers, params=params) - return await _consume_async( - self._raw_client.delete( - url_64, - external_user_id=external_user_id, - account_id=account_id, - request_options=request_options, - ) + Forward an authenticated PATCH request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[bytes] + proxy request successful + + Examples + -------- + import asyncio + + from pipedream import AsyncPipedream + + client = AsyncPipedream( + project_id="YOUR_PROJECT_ID", + client_id="YOUR_CLIENT_ID", + client_secret="YOUR_CLIENT_SECRET", ) + + + async def main() -> None: + await client.proxy.patch( + url_64="url_64", + external_user_id="external_user_id", + account_id="account_id", + request={"string": {"key": "value"}}, + ) + + + asyncio.run(main()) + """ + async with self._raw_client.patch( + url_64, + external_user_id=external_user_id, + account_id=account_id, + request=request, + request_options=request_options, + ) as r: + async for _chunk in r.data: + yield _chunk diff --git a/src/pipedream/proxy/raw_client.py b/src/pipedream/proxy/raw_client.py index d9fc875..1af958d 100644 --- a/src/pipedream/proxy/raw_client.py +++ b/src/pipedream/proxy/raw_client.py @@ -1,9 +1,9 @@ +# This file was auto-generated by Fern from our API Definition. + import contextlib import typing from json.decoder import JSONDecodeError -from pydantic import ValidationError - from ..core.api_error import ApiError from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.http_response import AsyncHttpResponse, HttpResponse @@ -12,25 +12,11 @@ from ..core.pydantic_utilities import parse_obj_as from ..core.request_options import RequestOptions from ..errors.too_many_requests_error import TooManyRequestsError -from ..types.proxy_response import ProxyResponse +from pydantic import ValidationError # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) -_ProxyData = typing.Optional[typing.Union[ProxyResponse, typing.Iterator[bytes]]] -_AsyncProxyData = typing.Optional[typing.Union[ProxyResponse, typing.AsyncIterator[bytes]]] - - -def _is_json_content_type(content_type: str) -> bool: - return "application/json" in content_type or not content_type - - -def _decode_error_body(_response: typing.Any) -> typing.Any: - error_content_type = _response.headers.get("content-type", "").lower() - if "application/json" in error_content_type: - return _response.json() - return _response.text - class RawProxyClient: def __init__(self, *, client_wrapper: SyncClientWrapper): @@ -44,9 +30,9 @@ def get( external_user_id: str, account_id: str, request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Iterator[HttpResponse[_ProxyData]]: + ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: """ - Forward an authenticated GET request to an external API using an external user's account credentials. + Forward an authenticated GET request to an external API using an external user's account credentials Parameters ---------- @@ -64,7 +50,7 @@ def get( Returns ------- - typing.Iterator[HttpResponse[typing.Optional[typing.Union[ProxyResponse, typing.Iterator[bytes]]]]] + typing.Iterator[HttpResponse[typing.Iterator[bytes]]] proxy request successful """ with self._client_wrapper.httpx_client.stream( @@ -76,7 +62,41 @@ def get( }, request_options=request_options, ) as _response: - yield _handle_sync_response(_response, request_options) + + def _stream() -> HttpResponse[typing.Iterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return HttpResponse( + response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)) + ) + _response.read() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield _stream() @contextlib.contextmanager def post( @@ -85,11 +105,32 @@ def post( *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Iterator[HttpResponse[_ProxyData]]: + ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: """ - Forward an authenticated POST request to an external API using an external user's account credentials. + Forward an authenticated POST request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[HttpResponse[typing.Iterator[bytes]]] + proxy request successful """ with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", @@ -99,11 +140,47 @@ def post( "account_id": account_id, }, json=request, - headers={"content-type": "application/json"}, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) as _response: - yield _handle_sync_response(_response, request_options) + + def _stream() -> HttpResponse[typing.Iterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return HttpResponse( + response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)) + ) + _response.read() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield _stream() @contextlib.contextmanager def put( @@ -112,11 +189,32 @@ def put( *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Iterator[HttpResponse[_ProxyData]]: + ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: """ - Forward an authenticated PUT request to an external API using an external user's account credentials. + Forward an authenticated PUT request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[HttpResponse[typing.Iterator[bytes]]] + proxy request successful """ with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", @@ -126,61 +224,207 @@ def put( "account_id": account_id, }, json=request, - headers={"content-type": "application/json"}, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) as _response: - yield _handle_sync_response(_response, request_options) + + def _stream() -> HttpResponse[typing.Iterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return HttpResponse( + response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)) + ) + _response.read() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield _stream() @contextlib.contextmanager - def patch( + def delete( self, url_64: str, *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Iterator[HttpResponse[_ProxyData]]: + ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: """ - Forward an authenticated PATCH request to an external API using an external user's account credentials. + Forward an authenticated DELETE request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[HttpResponse[typing.Iterator[bytes]]] + proxy request successful """ with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", - method="PATCH", + method="DELETE", params={ "external_user_id": external_user_id, "account_id": account_id, }, - json=request, - headers={"content-type": "application/json"}, request_options=request_options, - omit=OMIT, ) as _response: - yield _handle_sync_response(_response, request_options) + + def _stream() -> HttpResponse[typing.Iterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return HttpResponse( + response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)) + ) + _response.read() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield _stream() @contextlib.contextmanager - def delete( + def patch( self, url_64: str, *, external_user_id: str, account_id: str, + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.Iterator[HttpResponse[_ProxyData]]: + ) -> typing.Iterator[HttpResponse[typing.Iterator[bytes]]]: """ - Forward an authenticated DELETE request to an external API using an external user's account credentials. + Forward an authenticated PATCH request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.Iterator[HttpResponse[typing.Iterator[bytes]]] + proxy request successful """ with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", - method="DELETE", + method="PATCH", params={ "external_user_id": external_user_id, "account_id": account_id, }, + json=request, + headers={ + "content-type": "application/json", + }, request_options=request_options, + omit=OMIT, ) as _response: - yield _handle_sync_response(_response, request_options) + + def _stream() -> HttpResponse[typing.Iterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return HttpResponse( + response=_response, data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)) + ) + _response.read() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield _stream() class AsyncRawProxyClient: @@ -195,9 +439,28 @@ async def get( external_user_id: str, account_id: str, request_options: typing.Optional[RequestOptions] = None, - ) -> typing.AsyncIterator[AsyncHttpResponse[_AsyncProxyData]]: + ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: """ - Forward an authenticated GET request to an external API using an external user's account credentials. + Forward an authenticated GET request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]] + proxy request successful """ async with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", @@ -208,7 +471,42 @@ async def get( }, request_options=request_options, ) as _response: - yield await _handle_async_response(_response, request_options) + + async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return AsyncHttpResponse( + response=_response, + data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), + ) + await _response.aread() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield await _stream() @contextlib.asynccontextmanager async def post( @@ -217,11 +515,32 @@ async def post( *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.AsyncIterator[AsyncHttpResponse[_AsyncProxyData]]: + ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: """ - Forward an authenticated POST request to an external API using an external user's account credentials. + Forward an authenticated POST request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]] + proxy request successful """ async with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", @@ -231,11 +550,48 @@ async def post( "account_id": account_id, }, json=request, - headers={"content-type": "application/json"}, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) as _response: - yield await _handle_async_response(_response, request_options) + + async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return AsyncHttpResponse( + response=_response, + data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), + ) + await _response.aread() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield await _stream() @contextlib.asynccontextmanager async def put( @@ -244,11 +600,32 @@ async def put( *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.AsyncIterator[AsyncHttpResponse[_AsyncProxyData]]: + ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: """ - Forward an authenticated PUT request to an external API using an external user's account credentials. + Forward an authenticated PUT request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]] + proxy request successful """ async with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", @@ -258,170 +635,207 @@ async def put( "account_id": account_id, }, json=request, - headers={"content-type": "application/json"}, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) as _response: - yield await _handle_async_response(_response, request_options) + + async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return AsyncHttpResponse( + response=_response, + data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), + ) + await _response.aread() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield await _stream() @contextlib.asynccontextmanager - async def patch( + async def delete( self, url_64: str, *, external_user_id: str, account_id: str, - request: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.AsyncIterator[AsyncHttpResponse[_AsyncProxyData]]: + ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: """ - Forward an authenticated PATCH request to an external API using an external user's account credentials. + Forward an authenticated DELETE request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]] + proxy request successful """ async with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", - method="PATCH", + method="DELETE", params={ "external_user_id": external_user_id, "account_id": account_id, }, - json=request, - headers={"content-type": "application/json"}, request_options=request_options, - omit=OMIT, ) as _response: - yield await _handle_async_response(_response, request_options) + + async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return AsyncHttpResponse( + response=_response, + data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), + ) + await _response.aread() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield await _stream() @contextlib.asynccontextmanager - async def delete( + async def patch( self, url_64: str, *, external_user_id: str, account_id: str, + request: typing.Dict[str, typing.Any], request_options: typing.Optional[RequestOptions] = None, - ) -> typing.AsyncIterator[AsyncHttpResponse[_AsyncProxyData]]: + ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]]: """ - Forward an authenticated DELETE request to an external API using an external user's account credentials. + Forward an authenticated PATCH request to an external API using an external user's account credentials + + Parameters + ---------- + url_64 : str + Base64-encoded target URL + + external_user_id : str + The external user ID for the proxy request + + account_id : str + The account ID to use for authentication + + request : typing.Dict[str, typing.Any] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. You can pass in configuration such as `chunk_size`, and more to customize the request and response. + + Returns + ------- + typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[bytes]]] + proxy request successful """ async with self._client_wrapper.httpx_client.stream( f"v1/connect/{encode_path_param(self._client_wrapper._project_id)}/proxy/{encode_path_param(url_64)}", - method="DELETE", + method="PATCH", params={ "external_user_id": external_user_id, "account_id": account_id, }, + json=request, + headers={ + "content-type": "application/json", + }, request_options=request_options, + omit=OMIT, ) as _response: - yield await _handle_async_response(_response, request_options) - - -def _handle_sync_response( - _response: typing.Any, request_options: typing.Optional[RequestOptions] -) -> HttpResponse[_ProxyData]: - try: - if 200 <= _response.status_code < 300: - content_type = _response.headers.get("content-type", "").lower() - if _is_json_content_type(content_type): - _response.read() - if not _response.text.strip(): - return HttpResponse(response=_response, data=None) - _data = typing.cast( - ProxyResponse, - parse_obj_as( - type_=ProxyResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None - return HttpResponse( - response=_response, - data=(_chunk for _chunk in _response.iter_bytes(chunk_size=_chunk_size)), - ) - _response.read() - if _response.status_code == 429: - raise TooManyRequestsError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_decode_error_body(_response), - ), - ), - ) - _response_body = _decode_error_body(_response) - except JSONDecodeError: - raise ApiError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response.text, - ) - except ValidationError as e: - raise ParsingError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response.json(), - cause=e, - ) - raise ApiError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response_body, - ) - - -async def _handle_async_response( - _response: typing.Any, request_options: typing.Optional[RequestOptions] -) -> AsyncHttpResponse[_AsyncProxyData]: - try: - if 200 <= _response.status_code < 300: - content_type = _response.headers.get("content-type", "").lower() - if _is_json_content_type(content_type): - await _response.aread() - if not _response.text.strip(): - return AsyncHttpResponse(response=_response, data=None) - _data = typing.cast( - ProxyResponse, - parse_obj_as( - type_=ProxyResponse, # type: ignore - object_=_response.json(), - ), - ) - return AsyncHttpResponse(response=_response, data=_data) - _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None - return AsyncHttpResponse( - response=_response, - data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), - ) - await _response.aread() - if _response.status_code == 429: - raise TooManyRequestsError( - headers=dict(_response.headers), - body=typing.cast( - typing.Optional[typing.Any], - parse_obj_as( - type_=typing.Optional[typing.Any], # type: ignore - object_=_decode_error_body(_response), - ), - ), - ) - _response_body = _decode_error_body(_response) - except JSONDecodeError: - raise ApiError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response.text, - ) - except ValidationError as e: - raise ParsingError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response.json(), - cause=e, - ) - raise ApiError( - status_code=_response.status_code, - headers=dict(_response.headers), - body=_response_body, - ) + + async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[bytes]]: + try: + if 200 <= _response.status_code < 300: + _chunk_size = request_options.get("chunk_size", None) if request_options is not None else None + return AsyncHttpResponse( + response=_response, + data=(_chunk async for _chunk in _response.aiter_bytes(chunk_size=_chunk_size)), + ) + await _response.aread() + if _response.status_code == 429: + raise TooManyRequestsError( + headers=dict(_response.headers), + body=typing.cast( + typing.Any, + parse_obj_as( + type_=typing.Any, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + except ValidationError as e: + raise ParsingError( + status_code=_response.status_code, + headers=dict(_response.headers), + body=_response.json(), + cause=e, + ) + raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json) + + yield await _stream() diff --git a/src/pipedream/triggers/client.py b/src/pipedream/triggers/client.py index 2055714..5d12df7 100644 --- a/src/pipedream/triggers/client.py +++ b/src/pipedream/triggers/client.py @@ -65,7 +65,7 @@ def list( The ID or name slug of the app to filter the triggers registry : typing.Optional[TriggersListRequestRegistry] - The registry to retrieve triggers from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve triggers from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -115,10 +115,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -138,8 +138,8 @@ def retrieve( client_secret="YOUR_CLIENT_SECRET", ) client.triggers.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) """ _response = self._raw_client.retrieve(component_id, version=version, request_options=request_options) @@ -175,7 +175,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -255,7 +255,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -323,7 +323,7 @@ def deploy( The external user ID version : typing.Optional[str] - Optional trigger component version (in SemVer format, for example '1.0.0'), defaults to latest + Trigger component semantic version configured_props : typing.Optional[ConfiguredProps] @@ -422,7 +422,7 @@ async def list( The ID or name slug of the app to filter the triggers registry : typing.Optional[TriggersListRequestRegistry] - The registry to retrieve triggers from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve triggers from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -481,10 +481,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -509,8 +509,8 @@ async def retrieve( async def main() -> None: await client.triggers.retrieve( - component_id="component_id", - version="1.2.3", + component_id="slack-send-message", + version="1.0.0", ) @@ -549,7 +549,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -637,7 +637,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -713,7 +713,7 @@ async def deploy( The external user ID version : typing.Optional[str] - Optional trigger component version (in SemVer format, for example '1.0.0'), defaults to latest + Trigger component semantic version configured_props : typing.Optional[ConfiguredProps] diff --git a/src/pipedream/triggers/raw_client.py b/src/pipedream/triggers/raw_client.py index 7b26a45..a8c6ca2 100644 --- a/src/pipedream/triggers/raw_client.py +++ b/src/pipedream/triggers/raw_client.py @@ -65,7 +65,7 @@ def list( The ID or name slug of the app to filter the triggers registry : typing.Optional[TriggersListRequestRegistry] - The registry to retrieve triggers from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve triggers from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -157,10 +157,10 @@ def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -239,7 +239,7 @@ def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -283,6 +283,9 @@ def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -339,7 +342,7 @@ def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -370,6 +373,9 @@ def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -428,7 +434,7 @@ def deploy( The external user ID version : typing.Optional[str] - Optional trigger component version (in SemVer format, for example '1.0.0'), defaults to latest + Trigger component semantic version configured_props : typing.Optional[ConfiguredProps] @@ -541,7 +547,7 @@ async def list( The ID or name slug of the app to filter the triggers registry : typing.Optional[TriggersListRequestRegistry] - The registry to retrieve triggers from. Defaults to 'all' ('public', 'private', or 'all') + The registry to retrieve triggers from request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -636,10 +642,10 @@ async def retrieve( Parameters ---------- component_id : str - The key that uniquely identifies the component (e.g., 'slack-send-message') + The key that uniquely identifies the component version : typing.Optional[str] - Optional semantic version of the component to retrieve (for example '1.0.0') + Optional semantic version of the component to retrieve request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -718,7 +724,7 @@ async def configure_prop( The name of the prop to configure version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -762,6 +768,9 @@ async def configure_prop( "prev_context": prev_context, "query": query, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -818,7 +827,7 @@ async def reload_props( The external user ID version : typing.Optional[str] - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version blocking : typing.Optional[bool] Whether this operation should block until completion @@ -849,6 +858,9 @@ async def reload_props( ), "dynamic_props_id": dynamic_props_id, }, + headers={ + "content-type": "application/json", + }, request_options=request_options, omit=OMIT, ) @@ -907,7 +919,7 @@ async def deploy( The external user ID version : typing.Optional[str] - Optional trigger component version (in SemVer format, for example '1.0.0'), defaults to latest + Trigger component semantic version configured_props : typing.Optional[ConfiguredProps] diff --git a/src/pipedream/types/component.py b/src/pipedream/types/component.py index d707695..12078fe 100644 --- a/src/pipedream/types/component.py +++ b/src/pipedream/types/component.py @@ -17,12 +17,12 @@ class Component(UniversalBaseModel): name: str = pydantic.Field() """ - The human-readable name of the component, e.g. 'GitLab: List Commits' + The human-readable name of the component """ version: str = pydantic.Field() """ - The latest version of the component, in SemVer format. + The latest version of the component, in semantic versioning format. """ configurable_props: typing.List[ConfigurableProp] diff --git a/src/pipedream/types/configurable_prop_app.py b/src/pipedream/types/configurable_prop_app.py index f620770..9e95f13 100644 --- a/src/pipedream/types/configurable_prop_app.py +++ b/src/pipedream/types/configurable_prop_app.py @@ -12,7 +12,7 @@ class ConfigurablePropApp(UniversalBaseModel): type: typing.Literal["app"] = "app" app: str = pydantic.Field() """ - The name slug of the app, e.g. 'github', 'slack', etc. This is used to identify the app for which the account is being configured. + The name slug of the app, used to identify the app for which the account is being configured. """ name: str = pydantic.Field() diff --git a/src/pipedream/types/configure_prop_opts.py b/src/pipedream/types/configure_prop_opts.py index 1712ac7..0e94d9a 100644 --- a/src/pipedream/types/configure_prop_opts.py +++ b/src/pipedream/types/configure_prop_opts.py @@ -19,7 +19,7 @@ class ConfigurePropOpts(UniversalBaseModel): version: typing.Optional[str] = pydantic.Field(default=None) """ - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version """ external_user_id: str = pydantic.Field() diff --git a/src/pipedream/types/emitted_event.py b/src/pipedream/types/emitted_event.py index 0ce4f3d..920f389 100644 --- a/src/pipedream/types/emitted_event.py +++ b/src/pipedream/types/emitted_event.py @@ -31,6 +31,11 @@ class EmittedEvent(UniversalBaseModel): The event's unique ID """ + sum: typing.Optional[str] = pydantic.Field(default=None) + """ + A short summary of the event's payload + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: diff --git a/src/pipedream/types/reload_props_opts.py b/src/pipedream/types/reload_props_opts.py index 34399b8..a0369dc 100644 --- a/src/pipedream/types/reload_props_opts.py +++ b/src/pipedream/types/reload_props_opts.py @@ -19,7 +19,7 @@ class ReloadPropsOpts(UniversalBaseModel): version: typing.Optional[str] = pydantic.Field(default=None) """ - Optional component version (in SemVer format, for example '1.0.0'), defaults to latest + Component semantic version """ external_user_id: str = pydantic.Field() diff --git a/src/pipedream/workflows/__init__.py b/src/pipedream/workflows/__init__.py deleted file mode 100644 index 395047f..0000000 --- a/src/pipedream/workflows/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -from .client import AsyncWorkflowsClient, WorkflowsClient - -__all__ = ["AsyncWorkflowsClient", "WorkflowsClient"] \ No newline at end of file diff --git a/src/pipedream/workflows/client.py b/src/pipedream/workflows/client.py deleted file mode 100644 index 1f31604..0000000 --- a/src/pipedream/workflows/client.py +++ /dev/null @@ -1,271 +0,0 @@ -import enum -import re -import typing - -import httpx - -from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper -from ..core.request_options import RequestOptions - -# this is used as the default value for optional parameters -OMIT = typing.cast(typing.Any, ...) - -_DEFAULT_WORKFLOW_DOMAIN = "m.pipedream.net" -_ENDPOINT_ID_RE = re.compile(r"^e(n|o)[a-z0-9-]+$") - - -class HTTPAuthType(enum.Enum): - """Authentication types for workflow invocation.""" - - NONE = "none" - STATIC_BEARER = "static_bearer_token" - OAUTH = "oauth" - - -def _is_endpoint_id(url_or_endpoint: str) -> bool: - return bool(_ENDPOINT_ID_RE.match(url_or_endpoint)) - - -def _build_workflow_url(url_or_endpoint: str, *, workflow_domain: str) -> str: - if not url_or_endpoint: - raise ValueError("URL or endpoint ID is required") - - if url_or_endpoint.startswith(("http://", "https://")): - return url_or_endpoint - - if "." in url_or_endpoint and not _is_endpoint_id(url_or_endpoint): - return f"https://{url_or_endpoint}" - - if not _is_endpoint_id(url_or_endpoint): - raise ValueError(f"Invalid endpoint ID format: {url_or_endpoint}") - - return f"https://{url_or_endpoint}.{workflow_domain}" - - -def _prepare_headers( - headers: typing.Optional[typing.Dict[str, str]], - auth_type: HTTPAuthType, -) -> typing.Dict[str, str]: - request_headers = dict(headers) if headers else {} - if auth_type == HTTPAuthType.NONE: - # Suppress the default bearer token added by the client wrapper. - request_headers["Authorization"] = "" - return request_headers - - -def _add_external_user_id_header( - headers: typing.Optional[typing.Dict[str, str]], - external_user_id: str, -) -> typing.Dict[str, str]: - if not external_user_id: - raise ValueError("external_user_id is required") - request_headers = dict(headers) if headers else {} - request_headers["X-PD-External-User-ID"] = external_user_id - return request_headers - - -class WorkflowsClient: - def __init__( - self, - *, - client_wrapper: SyncClientWrapper, - workflow_domain: str = _DEFAULT_WORKFLOW_DOMAIN, - ): - self._client_wrapper = client_wrapper - self._workflow_domain = workflow_domain - - def invoke( - self, - url_or_endpoint: str, - *, - method: str = "POST", - body: typing.Optional[typing.Any] = None, - headers: typing.Optional[typing.Dict[str, str]] = None, - auth_type: HTTPAuthType = HTTPAuthType.NONE, - request_options: typing.Optional[RequestOptions] = None, - ) -> httpx.Response: - """ - Invoke a workflow via its HTTP interface URL or endpoint ID. - - Parameters - ---------- - url_or_endpoint : str - The full URL of the workflow's HTTP interface or the endpoint ID. - - method : str - HTTP method to use (default: "POST"). - - body : typing.Optional[typing.Any] - Request body. Dict/list values are serialized as JSON; other types are sent as raw form data. - - headers : typing.Optional[typing.Dict[str, str]] - Additional HTTP headers to include. - - auth_type : HTTPAuthType - Authentication mode (default: HTTPAuthType.NONE). - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - httpx.Response - Response returned by the invoked workflow. - - Examples - -------- - from pipedream import Pipedream, PipedreamEnvironment - from pipedream.workflows.client import HTTPAuthType - - client = Pipedream( - client_id="", - client_secret="", - environment=PipedreamEnvironment.PROD, - ) - response = client.workflows.invoke( - url_or_endpoint="https://your-workflow.m.pipedream.net", - method="POST", - body={"key": "value"}, - headers={"Content-Type": "application/json"}, - auth_type=HTTPAuthType.NONE, - ) - """ - workflow_url = _build_workflow_url(url_or_endpoint, workflow_domain=self._workflow_domain) - request_headers = _prepare_headers(headers, auth_type) - - response = self._client_wrapper.httpx_client.request( - workflow_url, - method=method, - data=body, - json=body, - headers=request_headers, - request_options=request_options, - ) - response.raise_for_status() - return response - - def invoke_for_external_user( - self, - url_or_endpoint: str, - *, - external_user_id: str, - method: str = "POST", - body: typing.Optional[typing.Any] = None, - headers: typing.Optional[typing.Dict[str, str]] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> httpx.Response: - """ - Invoke a workflow on behalf of a Pipedream Connect end-user. - - Forces OAuth authentication and adds the `X-PD-External-User-ID` header. - - Parameters - ---------- - url_or_endpoint : str - The full URL of the workflow's HTTP interface or the endpoint ID. - - external_user_id : str - The external user ID for whom the workflow is being invoked. - - method : str - HTTP method to use (default: "POST"). - - body : typing.Optional[typing.Any] - Request body. Dict/list values are serialized as JSON; other types are sent as raw form data. - - headers : typing.Optional[typing.Dict[str, str]] - Additional HTTP headers to include. - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - httpx.Response - Response returned by the invoked workflow. - - Examples - -------- - from pipedream import Pipedream, PipedreamEnvironment - - client = Pipedream( - client_id="", - client_secret="", - environment=PipedreamEnvironment.PROD, - ) - response = client.workflows.invoke_for_external_user( - url_or_endpoint="en2r1n8a98np7", - external_user_id="user_123", - method="POST", - body={"message": "Hello from external user"}, - headers={"Content-Type": "application/json"}, - ) - """ - return self.invoke( - url_or_endpoint, - method=method, - body=body, - headers=_add_external_user_id_header(headers, external_user_id), - auth_type=HTTPAuthType.OAUTH, - request_options=request_options, - ) - - -class AsyncWorkflowsClient: - def __init__( - self, - *, - client_wrapper: AsyncClientWrapper, - workflow_domain: str = _DEFAULT_WORKFLOW_DOMAIN, - ): - self._client_wrapper = client_wrapper - self._workflow_domain = workflow_domain - - async def invoke( - self, - url_or_endpoint: str, - *, - method: str = "POST", - body: typing.Optional[typing.Any] = None, - headers: typing.Optional[typing.Dict[str, str]] = None, - auth_type: HTTPAuthType = HTTPAuthType.NONE, - request_options: typing.Optional[RequestOptions] = None, - ) -> httpx.Response: - """ - Async counterpart of `WorkflowsClient.invoke`. - """ - workflow_url = _build_workflow_url(url_or_endpoint, workflow_domain=self._workflow_domain) - request_headers = _prepare_headers(headers, auth_type) - - response = await self._client_wrapper.httpx_client.request( - workflow_url, - method=method, - data=body, - json=body, - headers=request_headers, - request_options=request_options, - ) - response.raise_for_status() - return response - - async def invoke_for_external_user( - self, - url_or_endpoint: str, - *, - external_user_id: str, - method: str = "POST", - body: typing.Optional[typing.Any] = None, - headers: typing.Optional[typing.Dict[str, str]] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> httpx.Response: - """ - Async counterpart of `WorkflowsClient.invoke_for_external_user`. - """ - return await self.invoke( - url_or_endpoint, - method=method, - body=body, - headers=_add_external_user_id_header(headers, external_user_id), - auth_type=HTTPAuthType.OAUTH, - request_options=request_options, - )