diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 3fc0d7fd..e0f2f635 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -12,6 +12,9 @@ jobs: publish: name: publish runs-on: ubuntu-latest + permissions: + contents: read + id-token: write steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -24,5 +27,3 @@ jobs: - name: Publish to PyPI run: | bash ./bin/publish-pypi - env: - PYPI_TOKEN: ${{ secrets.PAYI_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index 90f32161..14aeae5f 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -19,4 +19,3 @@ jobs: bash ./bin/check-release-environment env: RELEASE_PLEASE_TOKEN: ${{ secrets.RELEASE_PLEASE_TOKEN }} - PYPI_TOKEN: ${{ secrets.PAYI_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/api.md b/api.md index 525f1ce7..b3f8d4e2 100644 --- a/api.md +++ b/api.md @@ -22,11 +22,11 @@ from payi.types import ( CostData, CostDetails, DefaultResponse, + Limit, LimitHistoryResponse, LimitResponse, RequestsData, TotalCostData, - LimitListResponse, ) ``` @@ -35,7 +35,7 @@ Methods: - client.limits.create(\*\*params) -> LimitResponse - client.limits.retrieve(limit_id) -> LimitResponse - client.limits.update(limit_id, \*\*params) -> LimitResponse -- client.limits.list(\*\*params) -> SyncCursorPage[LimitListResponse] +- client.limits.list(\*\*params) -> SyncCursorPage[Limit] - client.limits.delete(limit_id) -> DefaultResponse - client.limits.reset(limit_id, \*\*params) -> LimitHistoryResponse @@ -59,6 +59,7 @@ Types: from payi.types import ( BulkIngestRequest, BulkIngestResponse, + FunctionCallInfo, IngestRequest, IngestResponse, PayICommonModelsAPIRouterHeaderInfo, @@ -76,6 +77,8 @@ Types: ```python from payi.types import ( + CategoryResourceMappedResource, + CategoryResourcePriceUnits, CategoryResourceResponse, CategoryResponse, CategoryDeleteResponse, diff --git a/bin/check-release-environment b/bin/check-release-environment index 98d98fbc..7edad7c9 100644 --- a/bin/check-release-environment +++ b/bin/check-release-environment @@ -6,10 +6,6 @@ if [ -z "${RELEASE_PLEASE_TOKEN}" ]; then errors+=("The RELEASE_PLEASE_TOKEN secret has not been set. Create a fine-grained GitHub PAT and add it as a repository secret.") fi -if [ -z "${PYPI_TOKEN}" ]; then - errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") -fi - lenErrors=${#errors[@]} if [[ lenErrors -gt 0 ]]; then diff --git a/bin/publish-pypi b/bin/publish-pypi index e72ca2fa..58957004 100644 --- a/bin/publish-pypi +++ b/bin/publish-pypi @@ -4,4 +4,8 @@ set -eux rm -rf dist mkdir -p dist uv build -uv publish --token=$PYPI_TOKEN +if [ -n "${PYPI_TOKEN:-}" ]; then + uv publish --token=$PYPI_TOKEN +else + uv publish +fi diff --git a/scripts/mock b/scripts/mock index 70694fad..7b871f5f 100755 --- a/scripts/mock +++ b/scripts/mock @@ -11,7 +11,7 @@ elif [ -n "$STAINLESS_OPENAPI_SPEC_URL" ]; then URL="$STAINLESS_OPENAPI_SPEC_URL" else # Embedded OpenAPI spec (base64-encoded, gzipped) - EMBEDDED_SPEC="H4sIAAAAAAAAA+1dW3PbuJL+KyzuPu3K0jiTs7PlN0fJzFHl5rUnMw9zUiqYhCSOKZIHAH2JS/99CwBBgjcRpCiJsvslkSUA3QD68qHRAJ7tMMIBijz7wv55/NP4rT2yvWAR2hfPNvOYj+0L+wo9nXn2yHYxdYgXMS8M1LfW5dXMHtn3mFD57f25vRnZEWIrypuYoMib3J9PIhI+Pk1QwFYkjDyHf7XGlKIlFsWikDJBES2pffGXfakKWtf43zGmjNrfRzaN12tEnuwL+7OqO+LsE8RZmrn2hU2S4uO0hbEqe3k1++Pc5rwRtMYME07p2Q7Qmvfx8QxF3tkdfhL9ty/sFUYuJuVek/DeczGxLmO2wgHzHEHcHgnSHsGufcFIjEc2dVZ4jUSvniJOgjLiBUt7sxllVK/4uJxdEc/Bl/RsihhehqSZB8/BFqKWk5WvpTay8SNaR2IiVfm5IF/PxzWmYUwcbMoHycob8aHK1/Gh6J/dOGHUxIUqbNGksBELLmLoRxhUUf/krT12NntPGwhPw/UaWRRzgWLYtXyPMitcWD6vb83eW5IuNWVJ1Ju55yMr+TR/U8HdN4rJ2ex9A2+8lCVKGZHmxb+gNT5/83M1ySmi2IiqxUu2oBxTPHcQxXPP3UKZ82ZKOynbjnqNICr6fyT2zZCFrHiJCy9geIlJno3zLaRvGI5M6SZljbpOGY7mVYQvHSeMA2Yy5knRVkOOZJ26Ef8ULpdesDx771F06zcxkJSyklrbeKiydtKUn71DFH8jnqnl/3Y9M+3sirGIXky4FxxHSf2xE67tzXfuMGgUBlR6wDc//cT/y5P8+tEe2U4YMBwI94iiyE8czuRvyos8a3z8J8EL+8L+j4kTrqMwwAGjE/krnVyhp9mYG6wwGH8OXezT8WXkXYcxwyTzldcJR/Zms9mM7LdVPL1DrnLKe2ROzNBl5H0gJCQpO+dldr4FKGarkHg/sLvfwcpYEdwUkM0DHd9il4TO3WTNq0yexX8zdzNxwoDjI1wJdP68sd7JejVQZ6pq10OdB5o0MdYKV8OchCkl6hyndYQul8mwK/gDoAlAE4AmAE0AmgA0vQrQlHpdQE37RE1nlBGM1ruBJ+tGNtIGQ6VVAEkBkgIkBUgKkBQgKUBSgKRODUl5wX141zH6NBN1LcGFEXqSFVR5gE4AnQA6AXQC6ATQCaATQKfThE5nDx5bnalJ3ykgpeMpizdrqYlrE6LSQNafHltBpArgFsAtgFsAtwBuAdwCuDVsuPUjJnhsngnOi1s95IPzdg6fFH44VPU6UZQxlgRUBagKUBWgKkBVw0NVkH7eD6gSJ/m8SfLf/fkkN8XVyOprhIPLWQ2suk7rb8dVspFxWlweCqzGVIdDO4fAbi8PUQGCAgQFCAoQFCCo00FQ0v8CfOoTPrk48sOntWj6OfuDa8pm4qwQE7R9zDnsiq+mK8SsqdaMEczitbRK28BWnu/B7AACegP0BugN0BugN0BvgN4AvR0YveH1LXZd4Ru64bYPWQNGiC0rD2ANwBqANQBrANYArAFYA7AGYK0JrHlrnqc1WeIggVldQdtvWgtGqG0mKGvVALwBeAPwBuANwBuANwBvAN5eEXhLHKon53CJc+Brmv1YQFzMQr5vab8XgdcSs9yvNTljDvPuUxX5d4yrkcBtGPoYBTkVoCFhc0QdHLhSb9o3IZxUY01l70b2IiRrxORXP7/JNeXEhIaksa1UlY+iPMh3Yh+xkGhi8X8x5jM0vkJLL+AgYCp6onCcUqlPHmUnIseTZwUSNxMF07oIt0Jl1FqExEKWBm1Lop6WFeME0l7ruJzC+iBZR+WFSStkvsA6IY0SojJkzeKsvC2z8iVk1q9hHAxIwyWTPmbYRLXfi5KaLlsocIWyhwvLYzTT+ZKSSyLFSaz3bEaCPh2IoCckECFIMMzwmnaYu+LolL7IAbShCfzPZVZ+Dcmt57o4AMWrd62TZ/Wxozb6vpU8M0S5HqbRkAUJ19v8brVKHkEjM/dGCmGnShoap6D1oPVD0vpRESRnjq6MkdNwoa69yNLEux4nA0beESO/JkMFOHwAhqG4MVdjGaYEIwGxa82AI0q8BnctoozvQvepPIUpyNl/LNLAP0sW+CzrlP/rvw9Jm1M/cjy5HZIZ2W+q7IRUgH2qZls2jxgHH2oIfCjIryKPYhmGSx+P7zFh+HHynGCrDf/1b+zwRIrk02bih5IpOnlWHzeTKL71PbrChJdUnzfyAkSa3YB4keRd4GnWz6KJ/02wwvcCGX7cnnyBLdVObQaGbE02Nv6tQL3OC6Q96CHxor/rEu/zm6k7tJTMZQ8tKQkYTIYK3AYJ2SSQTQLZJJBNAtkkp5VNoiOV4WDp08kpOSyQlbd2FwFlT3C28fLuHKq9qWQFsC1gW8C2gG0B2wK2BWwL2BawLWBbQ2xL0MMVwa7ndAa01+jBUk2YgdjrjCYgV0CugFwBuQJyBeQKyBWQKyBXQK6torLXfeLXLrFYALMAZgHMApgFMAtgFsAsgFkAsy8DzHrBEtNKUDkTv1gf7nnjxTe6xU8okL/WA0lZsP71SHBa4LTAab1Qp1U+urN/dyANzh4P4tSTGsC5G8USuMFubnByG/t3LX3hu9i/s1I/V+MHeaG0TFel6OmYeSbBGVeaFDdrzGH4GIA66XwNRaW28DREvVL+nk5cvPACLwmD5mDAZnIXeVUXS328mtVcKcV/SW6TUr646pT8x8irxZ55JLLt3Cqn4EgKXeJkd5GXo9HmBPtpn8Qf+gn2j5FXeWgdTnme0PH5spFIT84H+IFbCiszPU02Qx6pT1YCHyPvfVrzWHak6fz7l1If96xOcnSF6vQJsk3oHAcSlDjTzAaYjKEfDB+O6eqEiibPCj5szAFSS6O3xEy3eAx5fv21QkeDTZU0Ch1Nyp/aHTtgUE5KkUcVV/OVNTG9IrOdMsqmh4RAdlNJFlrJaIFegl7ue20QN7jHb5GLOihlLKq9KKWUXep1KXLQZYicyf0vQyrowDIErFNP8N8LKEOBuPu3AP6ftX3ayqVAO1sXBpp9sxTZ7YZulpTqL4oqiLcG6aMyNa+YGVptUtOOyv3xvZlXvh3LExFKFrA/4/r7CovmqRMSvH/LcsPJ7Nm0lskYW9YDGrvPnkNCGi7Y+JJGXzCbhgSPP987fHPz1sdrtWB+pYavzfD0YASNgiDXmMUkUBtFUmWK20X1NjALh2gGsK+AyAuwgLB/dfz9q8x0wvbVcGxhKxAo5LrKnn2SP1Tueye/VZis9JdqKyWogRofTI3fxe4Ss88oQEvMn7xt3owWEwh63Hb7t0pb0g3gT4nQVW3yqt+2om5RyHLCYOEtY6JOS+0vt6cgNFON0z3kMjbQO0qco05xBFPHuja8DVOgtyZ+b/IsPZLnVu1r1rlAqY5uukVZ7QUbnGADcpY0xNHTYe9XgFD2vV9QJXZpFK3al8iA2VHFrp37ysX+D+bIvmnDdAhHlqc3eEcG6mm4zV6loelGe7WGykbAMdDxe7xAsQ+ytyNe4Td8RJiw5KXv1j7Eusrqb3EnuVLDdCwZiwfxKhm5PZ7vqiKyD//R+RCNuV8B5T6xYKBuZAimuPJYdpWBueaFaz2gaOpYDjD3Rhxm76WJyEXu8lQ+LBZYPF1piQpWYlTqKGiRQl7yjHn8lOug/K4Yt396lMmXxcD5tr1qK4xwgOQLyivERKM+5qRplYJ8jXBwOau5BWu6Qsyaag3UHtmUzYx5Ba385dXsj/P6N1fhMia4jAnutYB7LeBeixd8rwVcxlR3kF/6zOFgnNO5f6IIdPD6FruuMPptIc6HrGoTuMmKAq4BXAO4BnAN4BrANYBrANfsC9d4a7TEdJK8md4phPObVrcJ4MwEOa0G4BzAOYBzAOcAzgGcAzgHcM6+cE5uSlvBm+u0ZhO4SUsCqAFQA6AGQA2AGgA1AGoA1PQFahTgmDwnn5rTX6sxTZoAm/xsRU0psElBgyTYjLWtyWuKcs+JsDkGIfF1PyfgddaGosVDVeBBprdWGxKCaewLNgrH/+rivkyzILJy5SHApMi1bP6IduPoipMbCdCd09YdhbAmz2qhuxFvzIov50rajuiiFYSsVTmnEACoVDgtStDxkdbSgGyllwJfpR8AEQAigJk7BTN3EADxmq3a0dUaAMzpa3aiHx6/3y9TaRUkF2sC+XGTfay5F0QFw2sUO4mUJy++b7snRNsCOJ5Sk8I+RM36Iy20C43mZU4yeKdgJnKCpyZB9aD0BZiN0zEbVXc+1Ch9eu2DUvdwYbEVtjSFqboIAjT/FWv+gPQN3kZq8zZSBRZQ24I1N2VmP9ff79vyUl+4MfOw4L/+rsxk/rJnOOAe3K73Z9aoUe4NRbPnEpvu0kz38fd4nWb5+Y6ypOz3uZB6egOJlNXqzqEv1WzPGqj0YKFE++cN27n01HhsWdRndqi3m/q/tL2pfxieExTphLFw6VrSGrVId+w03dCentnysM9R37Jo2i6r7s3+nxI7OFJoonoyeKFSbaxpwhOYm6Gbm3LIrcbipCE3s9dLj29mBq88oBkD1ozWD3Z7gUPEzX/zJCZtVxz+qdGtmaqrO/T7NNM+r2YpoUS+sox8UDhQuNejcPLaUhlPaqFrlcEtjjf59djJAadikGpL4EucqJpKJo6ugSfxmA0/knLoB20SmieCqsFODdhO7QKZW5mZHJwelJkBBQIFOs5b2Ha7reDyg68GIeRZ9jbsqT36Kg8on0AqR51Gq7EHfT4dfd7JIdY+xJzzfqCSoJKgkvtysV0Wz80KHOCHIWkv6BTo1NFg6/YzmcZbvCmIbTyeWZAzg5sUDpEfcWAParLPHMH5TLB6YPXqrd6Gk1IVs5bFx8+eQ0IaLtj4kkZfMJuGBI8/3ztcFm99vH6frLUzBQ1v/8aOuJYhZxDlr+XXvYLY98VVSULhNyObecw3K0kZYrFOujZXuqKyDBIY0UnxT3NhrvOuK+JVyL/SB4D/tPUVsfpsaBEYFJnPjaOsXXph0rMkb9xoENQDhvt52JCnkZiO5QL5FOuu4q+Ei+9NYzwNKX+hDqmhSqsH3F+P7DBm8gMLGfK5r94+3LJeH/sYnDGpSnIfI+VlP43L/vXbtt0wY02TU3y+tjBHmmg3zkteDdZe8AkHS7ayL85HRRwxsteYUrTcSbuN+iflvNCrZIeTr7m8MJjz1w0pQ2t+D572ZqP8mMA2+YdgVf0hEWGu9ho9KjmmzQOW0moeLo0Xg7FFj9q4BvH6Nm+e3TDmw8slckUwXYW+a1K+wj5po9JCrLkxKE/YhyBeJ/P1O28wbb5ingwfrEynYhdL+TtvIrVhm9rZN31Ec3dxTl69rJbqsuh2EcdGz5QXSMPi4u3RLtOYyBlabnWGJUU4tLy2ULze5bI/uarzBXLwVonwjYbgG0YFpvp6ULaX4dw6joMavz6Q5G4Dpu6WqcKJt37o3Ik1YvJpjh8ZJgHybX5vqoOxK35dIM8XH8I7/s89JiQOzGFleGeyqNloJM2KK0bMSqvOtiqdDYhZtWSkzAqnqNXgbOwuIpC3ZwUZcEKqqYyBM3OSuHtnsdY9fkp2lwZzIm44Vm2O79ad0z/9NWznCwr6XN12nIqXMgWl3hf7eLzR/hh5L3mgte4db4y33w3wwkZ8Sxbc4cf/Y+TdOCF5Sea8SsRzfdz3OJdsVxFtqIuImmGGKtmEyrv6e5kYIGyA3LQpsKpvZIzsZShA8V3kqVCVWKE3dsMwsJTbNWksnXLRWSjUulp0y2Rh3XWUdRu7dYC19Ii9LN1eykSMksMcbpdojwytta/aMXS8zR6lOrd9jikvLRaRAf66ENv/xTuIRhXPuRQHkm+v996FarHmMmFmG9KSJt6hP1FLh9RY1rqL2lEl7fdkuHAQr0W4I5GYUdblCBMHB4zHdHjE5g4T9o/00y/pp/OftNnM1N/8cufeNn962dIxvbi2wPWjeDVunlxj3Mh4vnjHh2fkv8nbCJ27JxOT8r5+O/MFP9Conqb2u7cZa7iPofcO+vJRpzkO+Ne6LOpq1U/XtnSqAUAcB48Vz3X2fgzw2MP/YgFch2E9yHRzJvRT+T1FiM0T3QpTnc9+zGdeNk6zXtlUmQyX163Hqch8T6tLw+3MmzTFS2ESsaNiug+T7bwk+wz1oKTN/qoOkTh9e2Qj3w8fGpuXDU1jQnDgPOntxLSZuWL6XkHk1F6bSoybhq6BrGk7dA1yprVqJjgJnsGK2S5wRiUqtpGqbJySFwIvA7YiYeQ5urY2ZHaZq5NRwTXnyajk0UBg3eA90HfYJaFzZz56Q+vDu9i/mwVLAdgrkZF2KXgceEa7eqbhtlF2G7jJ9ON7fr/MzqtA1Y+KqapJUO3+AKcc2W+CHp8oHLhzFs75fz5i3NLNc3HaNmm6vHe8sYVHKJuz8A4HfTXGu+ljmc61W7v8ndS5NI9zx9A+Vmu+fAQmJp6pqVCvxkhcSDCiYcDxmUoSb99G95ry5dk+N1gzGfunaHsWLMLKbKry+zmqG6UwWKqXxtlbFbGwKoqD6v4iDhwh2g7y/f3w9GtCYop8vwVnhp616vRAsw1rbLZsJhW6PRRBBdd3zB9USrd7JmJMMTGdlcLKxLy8cdg2rdFikbKtGf5QuBHh3MveRsdPnNAI/O0GXUpaVkAuvUZxEFnGa3UKaK/d+i0Mlz6/147hx9PFlZpZ3ue03CM/3r+kAUAGgAwAGQAyAGQAyMcDyH34sG91lr3m9OYaPXprHod9c/72l7f/+/P/vP1lxH2W/PKnUaOtyh3X3L213cbga4SDy5k5qErSYwyDuobSebrxzm/BXRA+BK9Xkrae8S0eiOHbb41QUJQyy59JdmzmplV6sR+NJ6b32+t+WM72RIvs5o5g8oOBjawfyre8sOPBhsu5Fhu2fYtGlTSDRPQvEb3Mm8xYSlW6YR/XbOB2PT/drWPZ7lt1toQnfp2LAJy4LEr8qV9nsLcsmRIt44TNHNOG5zX5brZ5Dd5t5H4N/KfcmYd5y2YU4T5XObPAxY/ZRUJVsQR+iHKHvnaRNIMDeZXRLcOQ1ho9zgXUmxdjR22iGLwVifF2bkaO8S6t7DsIVpoR9eGKeA7OQmKUIdJDVG9PQlNttZDDvHvOhBYclasZkQ2E5X122iPf+oPdxQ4bx1VBCPcmhPoMGeVDdRBZFf7dPX7dMcDetAUkhbqc11lOFW1Edy6OCHb6OUBTVK1KBtcoirA717u7q6h8Fk1WHejm5/rnESbzVRjrBxbbYC9nhQhyGCbzW8/3+WiYJdQissRzcT/gI5tXIeE26od8D9HCsDXOLb9Ah9zL25AMY0LoR0zwLpNzndEcX/LGtC/UDAkZfqDzW5mz1hs5PQuuiuZSbGjyXWuGH/uiWtglLdPtxd/ViHj9DmDaOwMo3kKkdINmvvuOfD/Zv9hV1W+eKMNr9eeNIFC5tUHj2/k+d/9N/JVZTHIe8RqmsTeJB8yr9NK3qlHXEqOXfngr0rpdxNCPMJBIasldkGG+dH6p0jxufIXl8TqGa6tdj21p17F2GM/tC+viZnnT2rrYm6Gstbtt+vcwOT1tL5Rvbi5MlDaqx4nFde2WGp3CcY3tPeCpAP2G3RLKu/biOpWTNmJvAJZ6SdbjZ1sQz8nQjsT+jpbndo7C/I24cEKE9fa5qqqZ/G1cJzc7zlxxCfeNlAJ+Obnid+bO3+g/feBnecRhHiGgO6QTtk1YNM4bLCwaTSgYp1u2zklUx6H6SDLNSVs2O9+TpU9niUksIN9jE8fL5H5rKYCwv3Ssih3eqgCmG8s717HK3zFbmz0gwhOMdkzKRSJzZKdGuptCfYaa0we002ztsXjhRFwl3IZbtjvcsl0xr6/x4OCQEKBiqlml8kO1Jcum56vLu8Y/igLF689N49laYaP41eMZZcgLfEzpWYDWSdAsemKr5EF22fxT4jVFNEgnsumGdY2CT0VUzwFRM543fMViZ7abwkkF7pfUhHtRqgfuuaHATkw89nTDtVG2foWe5rP55dVs/hHrgSEUefyL4mNCV+jpbGZdXs2sj/hpbH2QAObC+pf9jCLvDj9t/mWrqxcu7EehlGco8s7uRGPilSKZpioBp+JI+LQCL399594qeeEpffZIZt+ph21oicPi79qLSUKqrKYGqkvpzajTzlvaKBcp8WHSTF1BvbE/b6zEcmxpqKqQ1ogUXEtKbn0zNcW0hj7JRVGxYvK1VlCCQ+vDvTgNUyyf/FpFIYlvebhcS0a6LBS41jSmLFxbWmGtCaWP5RayX7Ti2dtidU9r5Yp/vJqVS4ovcyzUDHHWZf6QGSb36o2xmPhcdxiL6MWEv6I2jtDTmTd2wrW9+b75f8L4HehlswEA" + EMBEDDED_SPEC="H4sIAAAAAAAAE+1dW3PbuJL+KyzuPu3K0jiTs7PlN0fJzFHl5rUnMw9zUiqYhCSOKZIHAH2JS/99CwBBgjcRpCiJsvslkSUA3QD68qHRAJ7tMMIBijz7wv55/NP4rT2yvWAR2hfPNvOYj+0L+wo9nXn2yHYxdYgXMS8M1LfW5dXMHtn3mFD57f25vRnZEWIrypuYoMib3J9PIhI+Pk1QwFYkjDyHf7XGlKIlFsWikDJBES2pffGXfakKWtf43zGmjNrfRzaN12tEnuwL+7OqO+LsE8RZmrn2hU2S4uO0hbEqe3k1++Pc5rwRtMYME07p2Q7Qmvfx8QxF3tkdfhL9ty/sFUYuJuVek/DeczGxLmO2wgHzHEHcHgnSHsGufcFIjEc2dVZ4jUSvniJOgjLiBUt7sxllVK/4uJxdEc/Bl/RsihhehqSZB8/BFqKWk5WvpTay8SNaR2IiVfm5IF/PxzWmYUwcbMoHycob8aHK1/Gh6J/dOGHUxIUqbNGksBELLmLoRxhUUf/krT12NntPGwhPw/UaWRRzgWLYtXyPMitcWD6vb83eW5IuNWVJ1Ju55yMr+TR/U8HdN4rJ2ex9A2+8lCVKGZHmxb+gNT5/83M1ySmi2IiqxUu2oBxTPHcQxXPP3UKZ82ZKOynbjnqNICr6fyT2zZCFrHiJCy9geIlJno3zLaRvGI5M6SZljbpOGY7mVYQvHSeMA2Yy5knRVkOOZJ26Ef8ULpdesDx771F06zcxkJSyklrbeKiydtKUn71DFH8jnqnl/3Y9M+3sirGIXky4FxxHSf2xE67tzXfuMGgUBlR6wDc//cT/y5P8+tEe2U4YMBwI94iiyE8czuRvyos8a3z8J8EL+8L+j4kTrqMwwAGjE/krnVyhp9mYG6wwGH8OXezT8WXkXYcxwyTzldcJR/Zms9mM7LdVPL1DrnLKe2ROzNBl5H0gJCQpO+dldr4FKGarkHg/sLvfwcpYEdwUkM0DHd9il4TO3WTNq0yexX8zdzNxwoDjI1wJdP68sd7JejVQZ6pq10OdB5o0MdYKV8OchCkl6hyndYQul8mwK/gDoAlAE4AmAE0AmgA0vQrQlHpdQE37RE1nlBGM1ruBJ+tGNtIGQ6VVAEkBkgIkBUgKkBQgKUBSgKRODUl5wX141zH6NBN1LcGFEXqSFVR5gE4AnQA6AXQC6ATQCaATQKfThE5nDx5bnalJ3ykgpeMpizdrqYlrE6LSQNafHltBpArgFsAtgFsAtwBuAdwCuDVsuPUjJnhsngnOi1s95IPzdg6fFH44VPU6UZQxlgRUBagKUBWgKkBVw0NVkH7eD6gSJ/m8SfLf/fkkN8XVyOprhIPLWQ2suk7rb8dVspFxWlweCqzGVIdDO4fAbi8PUQGCAgQFCAoQFCCo00FQ0v8CfOoTPrk48sOntWj6OfuDa8pm4qwQE7R9zDnsiq+mK8SsqdaMEczitbRK28BWnu/B7AACegP0BugN0BugN0BvgN4AvR0YveH1LXZd4Ru64bYPWQNGiC0rD2ANwBqANQBrANYArAFYA7AGYK0JrHlrnqc1WeIggVldQdtvWgtGqG0mKGvVALwBeAPwBuANwBuANwBvAN5eEXhLHKon53CJc+Brmv1YQFzMQr5vab8XgdcSs9yvNTljDvPuUxX5d4yrkcBtGPoYBTkVoCFhc0QdHLhSb9o3IZxUY01l70b2IiRrxORXP7/JNeXEhIaksa1UlY+iPMh3Yh+xkGhi8X8x5jM0vkJLL+AgYCp6onCcUqlPHmUnIseTZwUSNxMF07oIt0Jl1FqExEKWBm1Lop6WFeME0l7ruJzC+iBZR+WFSStkvsA6IY0SojJkzeKsvC2z8iVk1q9hHAxIwyWTPmbYRLXfi5KaLlsocIWyhwvLYzTT+ZKSSyLFSaz3bEaCPh2IoCckECFIMMzwmnaYu+LolL7IAbShCfzPZVZ+Dcmt57o4AMWrd62TZ/Wxozb6vpU8M0S5HqbRkAUJ19v8brVKHkEjM/dGCmGnShoap6D1oPVD0vpRESRnjq6MkdNwoa69yNLEux4nA0beESO/JkMFOHwAhqG4MVdjGaYEIwGxa82AI0q8BnctoozvQvepPIUpyNl/LNLAP0sW+CzrlP/rvw9Jm1M/cjy5HZIZ2W+q7IRUgH2qZls2jxgHH2oIfCjIryKPYhmGSx+P7zFh+HHynGCrDf/1b+zwRIrk02bih5IpOnlWHzeTKL71PbrChJdUnzfyAkSa3YB4keRd4GnWz6KJ/02wwvcCGX7cnnyBLdVObQaGbE02Nv6tQL3OC6Q96CHxor/rEu/zm6k7tJTMZQ8tKQkYTIYK3AYJ2SSQTQLZJJBNAtkkp5VNoiOV4WDp08kpOSyQlbd2FwFlT3C28fLuHKq9qWQFsC1gW8C2gG0B2wK2BWwL2BawLWBbQ2xL0MMVwa7ndAa01+jBUk2YgdjrjCYgV0CugFwBuQJyBeQKyBWQKyBXQK6torLXfeLXLrFYALMAZgHMApgFMAtgFsAsgFkAsy8DzHrBEtNKUDkTv1gf7nnjxTe6xU8okL/WA0lZsP71SHBa4LTAab1Qp1U+urN/dyANzh4P4tSTGsC5G8USuMFubnByG/t3LX3hu9i/s1I/V+MHeaG0TFel6OmYeSbBGVeaFDdrzGH4GIA66XwNRaW28DREvVL+nk5cvPACLwmD5mDAZnIXeVUXS328mtVcKcV/SW6TUr646pT8x8irxZ55JLLt3Cqn4EgKXeJkd5GXo9HmBPtpn8Qf+gn2j5FXeWgdTnme0PH5spFIT84H+IFbCiszPU02Qx6pT1YCHyPvfVrzWHak6fz7l1If96xOcnSF6vQJsk3oHAcSlDjTzAaYjKEfDB+O6eqEiibPCj5szAFSS6O3xEy3eAx5fv21QkeDTZU0Ch1Nyp/aHTtgUE5KkUcVV/OVNTG9IrOdMsqmh4RAdlNJFlrJaIFegl7ue20QN7jHb5GLOihlLKq9KKWUXep1KXLQZYicyf0vQyrowDIErFNP8N8LKEOBuPu3AP6ftX3ayqVAO1sXBpp9sxTZ7YZulpTqL4oqiLcG6aMyNa+YGVptUtOOyv3xvZlXvh3LExFKFrA/4/r7CovmqRMSvH/LcsPJ7Nm0lskYW9YDGrvPnkNCGi7Y+JJGXzCbhgSPP987fHPz1sdrtWB+pYavzfD0YASNgiDXmMUkUBtFUmWK20X1NjALh2gGsK+AyAuwgLB/dfz9q8x0wvbVcGxhKxAo5LrKnn2SP1Tueye/VZis9JdqKyWogRofTI3fxe4Ss88oQEvMn7xt3owWEwh63Hb7t0pb0g3gT4nQVW3yqt+2om5RyHLCYOEtY6JOS+0vt6cgNFON0z3kMjbQO0qco05xBFPHuja8DVOgtyZ+b/IsPZLnVu1r1rlAqY5uukVZ7QUbnGADcpY0xNHTYe9XgFD2vV9QJXZpFK3al8iA2VHFrp37ysX+D+bIvmnDdAhHlqc3eEcG6mm4zV6loelGe7WGykbAMdDxe7xAsQ+ytyNe4Td8RJiw5KXv1j7Eusrqb3EnuVLDdCwZiwfxKhm5PZ7vqiKyD//R+RCNuV8B5T6xYKBuZAimuPJYdpWBueaFaz2gaOpYDjD3Rhxm76WJyEXu8lQ+LBZYPF1piQpWYlTqKGiRQl7yjHn8lOug/K4Yt396lMmXxcD5tr1qK4xwgOQLyivERKM+5qRplYJ8jXBwOau5BWu6Qsyaag3UHtmUzYx5Ba385dXsj/P6N1fhMia4jAnutYB7LeBeixd8rwVcxlR3kF/6zOFgnNO5f6IIdPD6FruuMPptIc6HrGoTuMmKAq4BXAO4BnAN4BrANYBrANfsC9d4a7TEdJK8md4phPObVrcJ4MwEOa0G4BzAOYBzAOcAzgGcAzgHcM6+cE5uSlvBm+u0ZhO4SUsCqAFQA6AGQA2AGgA1AGoA1PQFahTgmDwnn5rTX6sxTZoAm/xsRU0psElBgyTYjLWtyWuKcs+JsDkGIfF1PyfgddaGosVDVeBBprdWGxKCaewLNgrH/+rivkyzILJy5SHApMi1bP6IduPoipMbCdCd09YdhbAmz2qhuxFvzIov50rajuiiFYSsVTmnEACoVDgtStDxkdbSgGyllwJfpR8AEQAigJk7BTN3EADxmq3a0dUaAMzpa3aiHx6/3y9TaRUkF2sC+XGTfay5F0QFw2sUO4mUJy++b7snRNsCOJ5Sk8I+RM36Iy20C43mZU4yeKdgJnKCpyZB9aD0BZiN0zEbVXc+1Ch9eu2DUvdwYbEVtjSFqboIAjT/FWv+gPQN3kZq8zZSBRZQ24I1N2VmP9ff79vyUl+4MfOw4L/+rsxk/rJnOOAe3K73Z9aoUe4NRbPnEpvu0kz38fd4nWb5+Y6ypOz3uZB6egOJlNXqzqEv1WzPGqj0YKFE++cN27n01HhsWdRndqi3m/q/tL2pfxieExTphLFw6VrSGrVId+w03dCentnysM9R37Jo2i6r7s3+nxI7OFJoonoyeKFSbaxpwhOYm6Gbm3LIrcbipCE3s9dLj29mBq88oBkD1ozWD3Z7gUPEzX/zJCZtVxz+qdGtmaqrO/T7NNM+r2YpoUS+sox8UDhQuNejcPLaUhlPaqFrlcEtjjf59djJAadikGpL4EucqJpKJo6ugSfxmA0/knLoB20SmieCqsFODdhO7QKZW5mZHJwelJkBBQIFOs5b2Ha7reDyg68GIeRZ9jbsqT36Kg8on0AqR51Gq7EHfT4dfd7JIdY+xJzzfqCSoJKgkvtysV0Wz80KHOCHIWkv6BTo1NFg6/YzmcZbvCmIbTyeWZAzg5sUDpEfcWAParLPHMH5TLB6YPXqrd6Gk1IVs5bFx8+eQ0IaLtj4kkZfMJuGBI8/3ztcFm99vH6frLUzBQ1v/8aOuJYhZxDlr+XXvYLY98VVSULhNyObecw3K0kZYrFOujZXuqKyDBIY0UnxT3NhrvOuK+JVyL/SB4D/tPUVsfpsaBEYFJnPjaOsXXph0rMkb9xoENQDhvt52JCnkZiO5QL5FOuu4q+Ei+9NYzwNKX+hDqmhSqsH3F+P7DBm8gMLGfK5r94+3LJeH/sYnDGpSnIfI+VlP43L/vXbtt0wY02TU3y+tjBHmmg3zkteDdZe8AkHS7ayL85HRRwxsteYUrTcSbuN+iflvNCrZIeTr7m8MJjz1w0pQ2t+D572ZqP8mMA2+YdgVf0hEWGu9ho9KjmmzQOW0moeLo0Xg7FFj9q4BvH6Nm+e3TDmw8slckUwXYW+a1K+wj5po9JCrLkxKE/YhyBeJ/P1O28wbb5ingwfrEynYhdL+TtvIrVhm9rZN31Ec3dxTl69rJbqsuh2EcdGz5QXSMPi4u3RLtOYyBlabnWGJUU4tLy2ULze5bI/uarzBXLwVonwjYbgG0YFpvp6ULaX4dw6joMavz6Q5G4Dpu6WqcKJt37o3Ik1YvJpjh8ZJgHybX5vqoOxK35dIM8XH8I7/s89JiQOzGFleGeyqNloJM2KK0bMSqvOtiqdDYhZtWSkzAqnqNXgbOwuIpC3ZwUZcEKqqYyBM3OSuHtnsdY9fkp2lwZzIm44Vm2O79ad0z/9NWznCwr6XN12nIqXMgWl3hf7eLzR/hh5L3mgte4db4y33w3wwkZ8Sxbc4cf/Y+TdOCF5Sea8SsRzfdz3OJdsVxFtqIuImmGGKtmEyrv6e5kYIGyA3LQpsKpvZIzsZShA8V3kqVCVWKE3dsMwsJTbNWksnXLRWSjUulp0y2Rh3XWUdRu7dYC19Ii9LN1eykSMksMcbpdojwytta/aMXS8zR6lOrd9jikvLRaRAf66ENv/xTuIRhXPuRQHkm+v996FarHmMmFmG9KSJt6hP1FLh9RY1rqL2lEl7fdkuHAQr0W4I5GYUdblCBMHB4zHdHjE5g4T9o/00y/pp/OftNnM1N/8cufeNn962dIxvbi2wPWjeDVunlxj3Mh4vnjHh2fkv8nbCJ27JxOT8r5+O/MFP9Conqb2u7cZa7iPofcO+vJRpzkO+Ne6LOpq1U/XtnSqAUAcB48Vz3X2fgzw2MP/YgFch2E9yHRzJvRT+T1FiM0T3QpTnc9+zGdeNk6zXtlUmQyX163Hqch8T6tLw+3MmzTFS2ESsaNiug+T7bwk+wz1oKTN/qoOkTh9e2Qj3w8fGpuXDU1jQnDgPOntxLSZuWL6XkHk1F6bSoybhq6BrGk7dA1yprVqJjgJnsGK2S5wRiUqtpGqbJySFwIvA7YiYeQ5urY2ZHaZq5NRwTXnyajk0UBg3eA90HfYJaFzZz56Q+vDu9i/mwVLAdgrkZF2KXgceEa7eqbhtlF2G7jJ9ON7fr/MzqtA1Y+KqapJUO3+AKcc2W+CHp8oHLhzFs75fz5i3NLNc3HaNmm6vHe8sYVHKJuz8A4HfTXGu+ljmc61W7v8ndS5NI9zx9A+Vmu+fAQmJp6pqVCvxkhcSDCiYcDxmUoSb99G95ry5dk+N1gzGfunaHsWLMLKbKry+zmqG6UwWKqXxtlbFbGwKoqD6v4iDhwh2g7y/f3w9GtCYop8vwVnhp616vRAsw1rbLZsJhW6PRRBBdd3zB9USrd7JmJMMTGdlcLKxLy8cdg2rdFikbKtGf5QuBHh3MveRsdPnNAI/O0GXUpaVkAuvUZxEFnGa3UKaK/d+i0Mlz6/147hx9PFlZpZ3ue03CM/3r+kAUAGgAwAGQAyAGQAyMcDyH34sG91lr3m9OYaPXprHod9c/72l7f/+/P/vP1lxH2W/PKnUaOtyh3X3L213cbga4SDy5k5qErSYwyDuobSebrxzm/BXRA+BK9Xkrae8S0eiOHbb41QUJQyy59JdmzmplV6sR+NJ6b32+t+WM72RIvs5o5g8oOBjawfyre8sOPBhsu5Fhu2fYtGlTSDRPQvEb3Mm8xYSlW6YR/XbOB2PT/drWPZ7lt1toQnfp2LAJy4LEr8qV9nsLcsmRIt44TNHNOG5zX5brZ5Dd5t5H4N/KfcmYd5y2YU4T5XObPAxY/ZRUJVsQR+iHKHvnaRNIMDeZXRLcOQ1ho9zgXUmxdjR22iGLwVifF2bkaO8S6t7DsIVpoR9eGKeA7OQmKUIdJDVG9PQlNttZDDvHvOhBYclasZkQ2E5X122iPf+oPdxQ4bx1VBCPcmhPoMGeVDdRBZFf7dPX7dMcDetAUkhbqc11lOFW1Edy6OCHb6OUBTVK1KBtcoirA717u7q6h8Fk1WHejm5/rnESbzVRjrBxbbYC9nhQhyGCbzW8/3+WiYJdQissRzcT/gI5tXIeE26od8D9HCsDXOLb9Ah9zL25AMY0LoR0zwLpNzndEcX/LGtC/UDAkZfqDzW5mz1hs5PQuuiuZSbGjyXWuGH/uiWtglLdPtxd/ViHj9DmDaOwMo3kKkdINmvvuOfD/Zv9hV1W+eKMNr9eeNIFC5tUHj2/k+d/9N/JVZTHIe8RqmsTeJB8yr9NK3qlHXEqOXfngr0rpdxNCPMJBIasldkGG+dH6p0jxufIXl8TqGa6tdj21p17F2GM/tC+viZnnT2rrYm6Gstbtt+vcwOT1tL5Rvbi5MlDaqx4nFde2WGp3CcY3tPeCpAP2G3RLKu/biOpWTNmJvAJZ6SdbjZ1sQz8nQjsT+jpbndo7C/I24cEKE9fa5qqqZ/G1cJzc7zlxxCfeNlAJ+Obnid+bO3+g/feBnecRhHiGgO6QTtk1YNM4bLCwaTSgYp1u2zklUx6H6SDLNSVs2O9+TpU9niUksIN9jE8fL5H5rKYCwv3Ssih3eqgCmG8s717HK3zFbmz0gwhOMdkzKRSJzZKdGuptCfYaa0we002ztsXjhRFwl3IZbtjvcsl0xr6/x4OCQEKBiqlml8kO1Jcum56vLu8Y/igLF689N49laYaP41eMZZcgLfEzpWYDWSdAsemKr5EF22fxT4jVFNEgnsumGdY2CT0VUzwFRM543fMViZ7abwkkF7pfUhHtRqgfuuaHATkw89nTDtVG2foWe5rP55dVs/hHrgSEUefyL4mNCV+jpbGZdXs2sj/hpbH2QAObC+pf9jCLvDj9t/mWrqxcu7EehlGco8s7uRGPilSKZpioBp+JI+LQCL399594qeeEpffZIZt+ph21oicPi79qLSUKqrKYGqkvpzajTzlvaKBcp8WHSTF1BvbE/b6zEcmxpqKqQ1ogUXEtKbn0zNcW0hj7JRVGxYvK1VlCCQ+vDvTgNUyyf/FpFIYlvebhcS0a6LBS41jSmLFxbWmGtCaWP5RayX7Ti2dtidU9r5Yp/vJqVS4ovcyzUDHHWZf6QGSb36o2xmPhcdxiL6MWEv6I2jtDTmTd2wrW9+b75f8L4HehlswEA" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" diff --git a/src/payi/resources/categories/resources.py b/src/payi/resources/categories/resources.py index 4ba5555e..54646c1d 100644 --- a/src/payi/resources/categories/resources.py +++ b/src/payi/resources/categories/resources.py @@ -21,6 +21,7 @@ from ..._base_client import AsyncPaginator, make_request_options from ...types.categories import resource_list_params, resource_create_params from ...types.category_resource_response import CategoryResourceResponse +from ...types.category_resource_price_units_param import CategoryResourcePriceUnitsParam __all__ = ["ResourcesResource", "AsyncResourcesResource"] @@ -52,7 +53,7 @@ def create( resource: str, *, category: str, - units: Dict[str, resource_create_params.Units], + units: Dict[str, CategoryResourcePriceUnitsParam], max_input_units: Optional[int] | Omit = omit, max_output_units: Optional[int] | Omit = omit, max_total_units: Optional[int] | Omit = omit, @@ -267,7 +268,7 @@ async def create( resource: str, *, category: str, - units: Dict[str, resource_create_params.Units], + units: Dict[str, CategoryResourcePriceUnitsParam], max_input_units: Optional[int] | Omit = omit, max_output_units: Optional[int] | Omit = omit, max_total_units: Optional[int] | Omit = omit, diff --git a/src/payi/resources/ingest.py b/src/payi/resources/ingest.py index 852bc23c..ba862ae5 100644 --- a/src/payi/resources/ingest.py +++ b/src/payi/resources/ingest.py @@ -23,6 +23,7 @@ from .._base_client import make_request_options from ..types.ingest_response import IngestResponse from ..types.bulk_ingest_response import BulkIngestResponse +from ..types.function_call_info_param import FunctionCallInfoParam from ..types.bulk_ingest_request_param import BulkIngestRequestParam from ..types.shared_params.ingest_units import IngestUnits from ..types.pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam @@ -110,8 +111,7 @@ def units( provider_request_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit, provider_request_json: Optional[str] | Omit = omit, provider_request_reasoning_json: Optional[str] | Omit = omit, - provider_response_function_calls: Optional[Iterable[ingest_units_params.ProviderResponseFunctionCall]] - | Omit = omit, + provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] | Omit = omit, provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit, provider_response_id: Optional[str] | Omit = omit, provider_response_json: Union[str, SequenceNotStr[str], None] | Omit = omit, @@ -341,8 +341,7 @@ async def units( provider_request_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit, provider_request_json: Optional[str] | Omit = omit, provider_request_reasoning_json: Optional[str] | Omit = omit, - provider_response_function_calls: Optional[Iterable[ingest_units_params.ProviderResponseFunctionCall]] - | Omit = omit, + provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] | Omit = omit, provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] | Omit = omit, provider_response_id: Optional[str] | Omit = omit, provider_response_json: Union[str, SequenceNotStr[str], None] | Omit = omit, diff --git a/src/payi/resources/limits/limits.py b/src/payi/resources/limits/limits.py index 14f3ce16..3284ce6e 100644 --- a/src/payi/resources/limits/limits.py +++ b/src/payi/resources/limits/limits.py @@ -28,10 +28,10 @@ async_to_streamed_response_wrapper, ) from ...pagination import SyncCursorPage, AsyncCursorPage +from ...types.limit import Limit from ..._base_client import AsyncPaginator, make_request_options from ...types.limit_response import LimitResponse from ...types.default_response import DefaultResponse -from ...types.limit_list_response import LimitListResponse from ...types.limit_history_response import LimitHistoryResponse __all__ = ["LimitsResource", "AsyncLimitsResource"] @@ -199,7 +199,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncCursorPage[LimitListResponse]: + ) -> SyncCursorPage[Limit]: """ Get all Limits @@ -214,7 +214,7 @@ def list( """ return self._get_api_list( "/api/v1/limits", - page=SyncCursorPage[LimitListResponse], + page=SyncCursorPage[Limit], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -230,7 +230,7 @@ def list( limit_list_params.LimitListParams, ), ), - model=LimitListResponse, + model=Limit, ) def delete( @@ -469,7 +469,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[LimitListResponse, AsyncCursorPage[LimitListResponse]]: + ) -> AsyncPaginator[Limit, AsyncCursorPage[Limit]]: """ Get all Limits @@ -484,7 +484,7 @@ def list( """ return self._get_api_list( "/api/v1/limits", - page=AsyncCursorPage[LimitListResponse], + page=AsyncCursorPage[Limit], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -500,7 +500,7 @@ def list( limit_list_params.LimitListParams, ), ), - model=LimitListResponse, + model=Limit, ) async def delete( diff --git a/src/payi/types/__init__.py b/src/payi/types/__init__.py index 6513fbfe..cc5d5d77 100644 --- a/src/payi/types/__init__.py +++ b/src/payi/types/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations +from .limit import Limit as Limit from .shared import ( APIError as APIError, IngestUnits as IngestUnits, @@ -26,17 +27,20 @@ from .limit_reset_params import LimitResetParams as LimitResetParams from .ingest_units_params import IngestUnitsParams as IngestUnitsParams from .limit_create_params import LimitCreateParams as LimitCreateParams -from .limit_list_response import LimitListResponse as LimitListResponse from .limit_update_params import LimitUpdateParams as LimitUpdateParams from .bulk_ingest_response import BulkIngestResponse as BulkIngestResponse from .category_list_params import CategoryListParams as CategoryListParams from .limit_history_response import LimitHistoryResponse as LimitHistoryResponse from .category_delete_response import CategoryDeleteResponse as CategoryDeleteResponse +from .function_call_info_param import FunctionCallInfoParam as FunctionCallInfoParam from .bulk_ingest_request_param import BulkIngestRequestParam as BulkIngestRequestParam from .category_resource_response import CategoryResourceResponse as CategoryResourceResponse from .use_case_instance_response import UseCaseInstanceResponse as UseCaseInstanceResponse +from .category_resource_price_units import CategoryResourcePriceUnits as CategoryResourcePriceUnits from .category_list_resources_params import CategoryListResourcesParams as CategoryListResourcesParams from .category_delete_resource_response import CategoryDeleteResourceResponse as CategoryDeleteResourceResponse +from .category_resource_mapped_resource import CategoryResourceMappedResource as CategoryResourceMappedResource +from .category_resource_price_units_param import CategoryResourcePriceUnitsParam as CategoryResourcePriceUnitsParam from .pay_i_common_models_api_router_header_info_param import ( PayICommonModelsAPIRouterHeaderInfoParam as PayICommonModelsAPIRouterHeaderInfoParam, ) diff --git a/src/payi/types/bulk_ingest_request_param.py b/src/payi/types/bulk_ingest_request_param.py index f1351dbe..97870fe6 100644 --- a/src/payi/types/bulk_ingest_request_param.py +++ b/src/payi/types/bulk_ingest_request_param.py @@ -8,16 +8,11 @@ from .._types import SequenceNotStr from .._utils import PropertyInfo +from .function_call_info_param import FunctionCallInfoParam from .shared_params.ingest_units import IngestUnits from .pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam -__all__ = ["BulkIngestRequestParam", "ProviderResponseFunctionCall"] - - -class ProviderResponseFunctionCall(TypedDict, total=False): - name: Required[str] - - arguments: Optional[str] +__all__ = ["BulkIngestRequestParam"] class BulkIngestRequestParam(TypedDict, total=False): @@ -43,7 +38,7 @@ class BulkIngestRequestParam(TypedDict, total=False): provider_request_reasoning_json: Optional[str] - provider_response_function_calls: Optional[Iterable[ProviderResponseFunctionCall]] + provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] diff --git a/src/payi/types/categories/resource_create_params.py b/src/payi/types/categories/resource_create_params.py index 4ae2a602..2335d61e 100644 --- a/src/payi/types/categories/resource_create_params.py +++ b/src/payi/types/categories/resource_create_params.py @@ -7,14 +7,15 @@ from typing_extensions import Required, Annotated, TypedDict from ..._utils import PropertyInfo +from ..category_resource_price_units_param import CategoryResourcePriceUnitsParam -__all__ = ["ResourceCreateParams", "Units"] +__all__ = ["ResourceCreateParams"] class ResourceCreateParams(TypedDict, total=False): category: Required[str] - units: Required[Dict[str, Units]] + units: Required[Dict[str, CategoryResourcePriceUnitsParam]] max_input_units: Optional[int] @@ -23,9 +24,3 @@ class ResourceCreateParams(TypedDict, total=False): max_total_units: Optional[int] start_timestamp: Annotated[Union[str, datetime, None], PropertyInfo(format="iso8601")] - - -class Units(TypedDict, total=False): - input_price: float - - output_price: float diff --git a/src/payi/types/category_resource_mapped_resource.py b/src/payi/types/category_resource_mapped_resource.py new file mode 100644 index 00000000..b87ac924 --- /dev/null +++ b/src/payi/types/category_resource_mapped_resource.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from typing_extensions import Literal + +from .._models import BaseModel + +__all__ = ["CategoryResourceMappedResource"] + + +class CategoryResourceMappedResource(BaseModel): + category: Optional[str] = None + + resource: Optional[str] = None + + scope: Optional[Literal["global", "datazone", "region"]] = None + + sub_scope: Optional[str] = None diff --git a/src/payi/types/category_resource_price_units.py b/src/payi/types/category_resource_price_units.py new file mode 100644 index 00000000..41629998 --- /dev/null +++ b/src/payi/types/category_resource_price_units.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional + +from .._models import BaseModel + +__all__ = ["CategoryResourcePriceUnits"] + + +class CategoryResourcePriceUnits(BaseModel): + input_price: Optional[float] = None + + output_price: Optional[float] = None diff --git a/src/payi/types/category_resource_price_units_param.py b/src/payi/types/category_resource_price_units_param.py new file mode 100644 index 00000000..6cd142f2 --- /dev/null +++ b/src/payi/types/category_resource_price_units_param.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["CategoryResourcePriceUnitsParam"] + + +class CategoryResourcePriceUnitsParam(TypedDict, total=False): + input_price: float + + output_price: float diff --git a/src/payi/types/category_resource_response.py b/src/payi/types/category_resource_response.py index b6548e30..53b2b2f1 100644 --- a/src/payi/types/category_resource_response.py +++ b/src/payi/types/category_resource_response.py @@ -2,26 +2,14 @@ from typing import Dict, Optional from datetime import datetime -from typing_extensions import Literal from pydantic import Field as FieldInfo from .._models import BaseModel +from .category_resource_price_units import CategoryResourcePriceUnits +from .category_resource_mapped_resource import CategoryResourceMappedResource -__all__ = [ - "CategoryResourceResponse", - "Units", - "AwsBedrockResource", - "AzureResource", - "GoogleVertexResource", - "MappedResource", -] - - -class Units(BaseModel): - input_price: Optional[float] = None - - output_price: Optional[float] = None +__all__ = ["CategoryResourceResponse", "AwsBedrockResource", "AzureResource", "GoogleVertexResource"] class AwsBedrockResource(BaseModel): @@ -36,16 +24,6 @@ class GoogleVertexResource(BaseModel): gsus: int -class MappedResource(BaseModel): - category: Optional[str] = None - - resource: Optional[str] = None - - scope: Optional[Literal["global", "datazone", "region"]] = None - - sub_scope: Optional[str] = None - - class CategoryResourceResponse(BaseModel): active: bool @@ -59,7 +37,7 @@ class CategoryResourceResponse(BaseModel): start_timestamp: datetime - units: Dict[str, Units] + units: Dict[str, CategoryResourcePriceUnits] aliased_resource: Optional[str] = None @@ -81,7 +59,7 @@ class CategoryResourceResponse(BaseModel): large_context_threshold: Optional[int] = None - mapped_resource: Optional[MappedResource] = None + mapped_resource: Optional[CategoryResourceMappedResource] = None max_input_units: Optional[int] = None diff --git a/src/payi/types/function_call_info_param.py b/src/payi/types/function_call_info_param.py new file mode 100644 index 00000000..8cbe72d1 --- /dev/null +++ b/src/payi/types/function_call_info_param.py @@ -0,0 +1,14 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Required, TypedDict + +__all__ = ["FunctionCallInfoParam"] + + +class FunctionCallInfoParam(TypedDict, total=False): + name: Required[str] + + arguments: Optional[str] diff --git a/src/payi/types/ingest_units_params.py b/src/payi/types/ingest_units_params.py index dec8a30a..518ed909 100644 --- a/src/payi/types/ingest_units_params.py +++ b/src/payi/types/ingest_units_params.py @@ -8,10 +8,11 @@ from .._types import SequenceNotStr from .._utils import PropertyInfo +from .function_call_info_param import FunctionCallInfoParam from .shared_params.ingest_units import IngestUnits from .pay_i_common_models_api_router_header_info_param import PayICommonModelsAPIRouterHeaderInfoParam -__all__ = ["IngestUnitsParams", "ProviderResponseFunctionCall"] +__all__ = ["IngestUnitsParams"] class IngestUnitsParams(TypedDict, total=False): @@ -33,7 +34,7 @@ class IngestUnitsParams(TypedDict, total=False): provider_request_reasoning_json: Optional[str] - provider_response_function_calls: Optional[Iterable[ProviderResponseFunctionCall]] + provider_response_function_calls: Optional[Iterable[FunctionCallInfoParam]] provider_response_headers: Optional[Iterable[PayICommonModelsAPIRouterHeaderInfoParam]] diff --git a/src/payi/types/limit_list_response.py b/src/payi/types/limit.py similarity index 88% rename from src/payi/types/limit_list_response.py rename to src/payi/types/limit.py index b2d2fc74..242f4f72 100644 --- a/src/payi/types/limit_list_response.py +++ b/src/payi/types/limit.py @@ -7,10 +7,10 @@ from .._models import BaseModel from .total_cost_data import TotalCostData -__all__ = ["LimitListResponse"] +__all__ = ["Limit"] -class LimitListResponse(BaseModel): +class Limit(BaseModel): limit_creation_timestamp: datetime limit_id: str diff --git a/src/payi/types/limit_response.py b/src/payi/types/limit_response.py index 6e2cd01a..b1e3e0bc 100644 --- a/src/payi/types/limit_response.py +++ b/src/payi/types/limit_response.py @@ -1,31 +1,11 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. from typing import Optional -from datetime import datetime -from typing_extensions import Literal +from .limit import Limit from .._models import BaseModel -from .total_cost_data import TotalCostData -__all__ = ["LimitResponse", "Limit"] - - -class Limit(BaseModel): - limit_creation_timestamp: datetime - - limit_id: str - - limit_name: str - - limit_type: Literal["block", "allow"] - - limit_update_timestamp: datetime - - max: float - - totals: TotalCostData - - threshold: Optional[float] = None +__all__ = ["LimitResponse"] class LimitResponse(BaseModel): diff --git a/tests/api_resources/test_limits.py b/tests/api_resources/test_limits.py index 47c8a3f7..05766c23 100644 --- a/tests/api_resources/test_limits.py +++ b/tests/api_resources/test_limits.py @@ -9,9 +9,9 @@ from payi import Payi, AsyncPayi from payi.types import ( + Limit, LimitResponse, DefaultResponse, - LimitListResponse, LimitHistoryResponse, ) from payi._utils import parse_datetime @@ -158,7 +158,7 @@ def test_path_params_update(self, client: Payi) -> None: @parametrize def test_method_list(self, client: Payi) -> None: limit = client.limits.list() - assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(SyncCursorPage[Limit], limit, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Payi) -> None: @@ -168,7 +168,7 @@ def test_method_list_with_all_params(self, client: Payi) -> None: limit_name="limit_name", sort_ascending=True, ) - assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(SyncCursorPage[Limit], limit, path=["response"]) @parametrize def test_raw_response_list(self, client: Payi) -> None: @@ -177,7 +177,7 @@ def test_raw_response_list(self, client: Payi) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" limit = response.parse() - assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(SyncCursorPage[Limit], limit, path=["response"]) @parametrize def test_streaming_response_list(self, client: Payi) -> None: @@ -186,7 +186,7 @@ def test_streaming_response_list(self, client: Payi) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" limit = response.parse() - assert_matches_type(SyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(SyncCursorPage[Limit], limit, path=["response"]) assert cast(Any, response.is_closed) is True @@ -414,7 +414,7 @@ async def test_path_params_update(self, async_client: AsyncPayi) -> None: @parametrize async def test_method_list(self, async_client: AsyncPayi) -> None: limit = await async_client.limits.list() - assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncPayi) -> None: @@ -424,7 +424,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncPayi) -> Non limit_name="limit_name", sort_ascending=True, ) - assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncPayi) -> None: @@ -433,7 +433,7 @@ async def test_raw_response_list(self, async_client: AsyncPayi) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" limit = await response.parse() - assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncPayi) -> None: @@ -442,7 +442,7 @@ async def test_streaming_response_list(self, async_client: AsyncPayi) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" limit = await response.parse() - assert_matches_type(AsyncCursorPage[LimitListResponse], limit, path=["response"]) + assert_matches_type(AsyncCursorPage[Limit], limit, path=["response"]) assert cast(Any, response.is_closed) is True diff --git a/uv.lock b/uv.lock index 977d9ae4..bf0a6ff2 100644 --- a/uv.lock +++ b/uv.lock @@ -812,7 +812,7 @@ wheels = [ [[package]] name = "payi" -version = "0.1.0a180" +version = "0.1.0a181" source = { editable = "." } dependencies = [ { name = "anyio" },