From 207ad4f4036643e3cbda128ecbba9f6171f22493 Mon Sep 17 00:00:00 2001 From: vasanth-autorender Date: Sat, 13 Jun 2026 10:43:09 +0530 Subject: [PATCH 1/8] Build SDK Stainless-Generated-From: e8b86d0b5a7c3e60ee5f69d62dd212e78202df09 --- scripts/mock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mock b/scripts/mock index c7c4aa6..a38c54c 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="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" + EMBEDDED_SPEC="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" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" From 4daca9964912e2d825e767930735a4c9e6c5805f Mon Sep 17 00:00:00 2001 From: stlc-bot Date: Sat, 13 Jun 2026 06:16:15 +0000 Subject: [PATCH 2/8] reseal python custom-code after stlc 0.2.1 upgrade scripts/mock EMBEDDED_SPEC conflict resolved by taking the new gen-head version; tracking file updated accordingly. Stainless-Generated-From: 96ea59d391e721e9f06a0e9f526cf424554a1f5e --- scripts/mock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mock b/scripts/mock index a38c54c..a413aac 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="H4sIAAAAAAAAE+1dWXPbuhX+KxhOH+ypKFGyvGnapr43TZs2TTxx8nJlVQORkISY2wVA27q2/nsHC0lwESXZsmMn8GQcGQKxHJz1wwF4Z0UxCmGMrYF10HbajtWycDiNrMGdxTDzkTWwzhIWfUahhwg4TyY+dsHZ+XurZXmIugTHDEehNbA+/+PiC/8CTCMCktiPoIfDWQsEMIQz8QmGHqCIXONwBgLkYQggpYjRNjjzfYBCL45wyCgg6PcEEwRgKNq7QgtwjSFgcwRubRhjm5fMEeQDigg4S9g8IvgPyAcyAL8gSBABf7lCi7+1rZZ1jQiVI+yq+blRyKDL+BRDGJRmeJHEcUSY1bJQALFvDSwqS/4OExYRUamNI2u55A0FcRSikFHeFkVuQjBbXLhzFCBRBGP8H7QQtFzEvCNV0Eo7zuYjyG4NLDmtCnFTOnDaxnINMnq1wa8wBNCnEZggEJPoGnvIEyRrII2YAOVDhXyo/K8YsrkYdgfGuHPd7QSJz3AMCetQBokgWBxR8X8UIyJafe9ZAyureCHqtSyaBAEkC2tgiRKQVVCcYbUsBmfUGgytr6KAWqPynN+HmGHoY4oArDQAKKJ8WQVTEeQifM3njmyKZyHygKj69fMHylmAMxSi7JfIE2uh+MuzBowkSPIDCplcsNjHrphY5xvlw7hTRNIWMZp8Qy6fZUw4GRiWiz3FPhrLdc2qUkZwOLNaVoDDDyicsbk16HLC4z/0ajhkaCaWPcAhDpLAGnRbVgBv5edTxznunp72DvvHfef0lDcwjUgA2QY9TSOfM1Sl4jJdgTsLhotPU2swzLmUECg4kqGA1jy6bFWKRsuWFSAGPchqSQU9D3OqQv+8QLRbmzKIQx9RasNwIZdEyFZCWRSMsVc7dAJDLwrGMUFTfKvVmESRj2AoZsf8MUVuFHr0EZRetjR2GWprrNYwW4nRcikkSikBQc5U/Iej5Yi3Q+MopHLePafL/yty/IXiaZcgyJBn7Yw1lbDUUrNloVsYxELT83pjOHG7vQNOwiRZ98AB6h8dHU2mtneIDu0+hMf25MRFtoumqN91jw+PTqAlVAth4/VMb5fp37A02jAOe/3eyYmzFC2Nn6sv3o/OWuukpqzfznNtdXGQqjWuslogChGIERFaTKf30JozFtNBp0MP2jCAf0QhvKFtNwo6k8S9QqzDn+i+kc3+lcuSxSUT3caYoHFBYTyaJMXZfA3xLWA4QJTBIAY3cxQKi53qaTkEqs+me+z0naPjniOoKaza+KpgLms4Lr7SGPQmIlc0hi5ay9k3Ol/HkY/dxQYafYXu1BvuJMp+aQp1Y4bIF3a0kVF4IM92ewf9w0ajkc/nWywUfFHrSTqoCVY03yrtPoU+RVrbOUFzqmV+wCidf9fpnxweHzlOPl41qNKoNKWmVJWuZ8q6IJVXXRgKXFfipoxL1k2vWYUvC/PX9XBB2aa6djOFWtCnSiFVdF9WrvTUg3RHQXXk8loUV00myyKpyZ0udo/kA84JfcepGtD34TX0sQeUw7dDA5q4LqK0xtPQ1le4Li0LERKtURpnIRC1QOS6CSGSTwJEKZzVeo/5k19DqHx6/lBJImTP2zFsmWQpdWvck0LfOyPt6yJXqUHe5GEdJ14gco2IHLZhw030pkav5VIJeTUQ5SG3jxjaIBb9Na2qh6Np4YMi0nc43DAeZQlR7g/HDDzA4wYepkbEe76AtNnrL8WJ9b5+g83dRcAjKQ3SRd2hVlnnD2JP8wdlVBc1PyEqPdr1XIUP5NXVp7awdRKUWeOBlp5IiN/8QOoHuF7YLoBa5ZZusCc7DxPfh5NUubSewEM97fEgYI7wbM6ep0dHBHEvx+fmXQZoLGs1sm4AZ6jzLUbioTmka/hDMp+Hpv3Dox1EKTrKs2KVHoj6aD3xhssg0IrOqjNWD0snU8n1xg+nj+Uii+k4JvgaMn1dauyusGuyvpdIzbXhEypYGNfzSeb9epAhm4fYIgBgDBGuQ/+392aw92ZweeldXnrDXv/oZDR0+ieje1XSPTg8Ph0Ne0dpiTPk3w6dvKrj3GvVHGffdnp275TXv+svbdmBI6qcjO67Q6c32rdlkX06uh92e6PLS+/+YOh0R/v34ov+0enovtutrebIOj39yy7/pjd07JPR/v7+F9klby8tPxjtD4aOfcgL9t4M9M+Xl+3LS+/P+2/23+y9Gfy2v/+nwoL2nF7fdrq20/3iOAPx7zehJ4XxGdMoIe4akfMw4QzNhWeeBJNQbAw8TMWKBlIFi24ZCuXuxLYxuQhRU8NViV0VRCmMh7QIqTbPlGwWxudqJwvwMxnXRVCXqBKXF1i4TFmdaPqUt3S8y65CMbIWwWZu1DWbXjDcjfGp2pPRjWBqf4tGVtnYDQ1pZke5kcttHDdAWazLjUUpzi3YA13ppzq/qNj1ADpX0VztFdSoLNBUY7FAUEAW6WpPrUhRs6nCVH5SIakIVv6FrufqxZI/7GV15EA0kdtIrgpilUEGBjEwiIFBDH4gNmxGDBSu2CEoiJrQAlnvs6ylAwWyiO/HbAEQvI1uQmGmoIz4pyQKAAQkb0vkQHC9BTADOAR55sHz4QJyOOMVcWJmhBKCK3kI//ry5bzDf12I2bAITBFz53kQrcLb4lOfrhEh2EOSKMo3qYQZ+W5LiaiIMhyKqQJZByi/ZuWOdrGBX6MggDZFMSTctADl5KzfVC42w9egI1iRzxvGMeJQj3gG0GTKn6lptHkfWw+mir39++LTRyArgmgK0oogW9NKWzdoMo+iq43WtSyAGkvsEtfZ9T62QXUMqmNQHYPqGFTHoDoG1fmBUJ3abAmD6RhMZweYDs8Rn0LsIw94Kj4z8fXWME8dFQ3ysy3y0+8eVGmloAYRHKNbFyGPAuj70Q3ygNLmhlvX0HotDQ3y9rzI2zrI7W1qQLSjIqJdm3KkSNqXLaA35UnowNsiSgiYQPcKqYNHiICEitNHWT4RN882t6scfjOYh8E8DOZhMA+DeRjMw2AeBvMwmIfBPF4n5mHCGJPHYvJYXgVdq9H0NnkgNZFsM1nLp9ktPXNjVHenQaMnN8EhD96rJ2V8kSUhVWi7kh9Sbq/maV4V7KH2rM3vtPASl3GtuF88DJx/YTXcdVBu/1Ms16aUTlJpl3boVaJ8Z0ZgSPm01zf/Ja2a5m/s3YwPHKc1F7/dsUuiuNVut/drYpgVTa5IYamMuJUbmYZbElZ0skGCS3NCS2XUoirAHgoZnmIRjeZDzmlbc3HEihZXZMUU2r27TKnx3ru0BpdWt3dwaS03SJEpKTyZ4BRGDE8XIApBqoOWFcyL87ZYxRmqAbx8TNk7UUNHuz5gysBUFafwlqxWAbd43Q5FkLhz+Qi4wWwOYn6xjuinxYsZIvk9OxFhOJy15VlhGCCGCBW4VkU15OGxuIHm9wQR7YYa3VPOdUetJnsnhgAmi1SuwiSYIGLx60K27FXOdX2X55DwO2Kksgggc+dgz4UU2Tik3HVi+BrtlwbgoSlMfCYu/lgNlqy5f6Vu0DE3HpUhr+icu9Cb9d4V9yPUdejjALONe9Tc1jGnYiWHrGWhkHc4FO2PoagiPqrq3MlXxeKjKtbaheUCUWW0apXlRUvl4Y+2QWJrPBAhRIBL3e78j0zC12BN3wvENWjsT4vGbg4IPgadfUVY667g0gKYsD1qux0cZ5DT74OcehrV162wWYWnWIVmOHgb/FetzzogWHdpdRnPRLYCAmdM0hzaF7SewXINltuE5aZWcb3zGBdBqR36EsuWiiGeonXhebGIQf9pBi/CojmkH9GtPoGG3ck5pOcEXW9SuaSUVGiXBlxyVnnvedNbXIYml7WbLYGICCW5uvzWq2xq6tFs9GqENVdTpopuSwhSC5iKu1Eq6jG6zOiyZl2Wq7JHc/VPtgmTt/TI7ZgqINm54/99jJYrkckZEsBkAZf8J5KwJPAQg9ivRSe3hBSV85YiimJQBdxHBHK7gH20QT/HxpOEy/joR9VtqFVXIRtkyCBDBhkyyJBBhl4uJmGQoZewCj8OMmRy/EwstXGOX+nKVeWAKody+8g+84lLd5Gnjq3UaKkJNsxpmLMxAdWE5w89++n0VwStYcTANErCJ6Tbimpu5K2hEa8xTv/cCWFFn5vTtXGhd5B/WVqBFEnxUHrNeBEykeUV1OStKAYqo/IFAiareE/OR8iMEWsj1j+2WK9ESDsEpcF8zLMIq3IvK1Tk/rMoXin3z3Oh32ZZ1R/RTX4Bn0ggjRIGMhPPL3jgegeoLOOI0MpCyCRxScjvr9JqMGC5HF66HgYDNhiwwYANBmwwYIM+Ggz4Va6CwYANzPYTwmw7xIALPrHBgA1z7ggDbriFIIaL3V6z+DC8aIeXBKQzMgC4Qcp+NqRMqLM1x5tVneoB5+yLDBtTJduj4pXjtgSFbPygA8ry2VdyTvnxB3df2gldwRrRVOOOXR3TzXl1lwd183dnpK8Zz6O6oWOfQnt6Zr8b3Z0sbf3P/tIedm0evOVlB0t7eHIKJ2e/VIq1P7u95b2jfuyaX+nP/VT92DW/0p9SnLXRK8bLQMkWwMgzgI0V0X8AAGMgFQOp/JyrUAupaFa0CKrUmNndnY7cSBcVVFFJ32SW6r8LID0LLcwslpVVhgrnHhBGLUeVw1e5U7OF51U2g6XDV6kte/3EehUx01PckSY2SmtvwZakzCiuvaFefKF4ot5v/r67yvqL48WuVPYXP99V8riVg63vOFMf0jmiq+x4xXGuOuqVl581bFM/6k5vNfxnutPbeJnGyzT+jfEyf4xV+E5e5goL1HDb8it1qwwK/5N6lFVotnMnP6ij3mtSl6suZ5q83OByPi7bT43uCVKYpXQXkpgbJKLsRr527qif108sHas2mRR9nn6b6dmmXpnSSuUgM5dLOqI+KFVJzlUNkaY5v9igtCbVuSn0fLK85t1ouqbM5nQJTChqQlETir7wIMiEoi9hFV5IKFpS4SYUfY1+lwlFjbOdT/909fS53wl9gqC3AOgWU7bDNJfvToiayeVvxZCvWpXuczG3V70OppBsWnHe36Jr5EdxwPd9ZFPWGu9ZRSNpdJC9JHbFm9dQ6MURDhkFe2fn78EVWoCULjIHSzWTvrOjJl0ugCGcITHEjVvLcp1qSbpxi6Pl/wHamotItKsAAA==" + EMBEDDED_SPEC="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" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" From 1b70be9365f59ef3fe92cbba398387dcc540387d Mon Sep 17 00:00:00 2001 From: stlc-bot Date: Mon, 29 Jun 2026 16:43:26 +0000 Subject: [PATCH 3/8] chore: sync openapi.json from northstar-server Stainless-Generated-From: ec3cebf78b5415d4f7970eda786b518f221a2bc5 --- scripts/mock | 2 +- src/autorender/resources/uploads.py | 12 ++++++------ .../types/upload_create_from_url_params.py | 7 +++++-- tests/api_resources/test_uploads.py | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/scripts/mock b/scripts/mock index a413aac..80196ab 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="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" + EMBEDDED_SPEC="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" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" diff --git a/src/autorender/resources/uploads.py b/src/autorender/resources/uploads.py index 5a87fd8..f5a91d1 100644 --- a/src/autorender/resources/uploads.py +++ b/src/autorender/resources/uploads.py @@ -2,13 +2,13 @@ from __future__ import annotations -from typing import Mapping, cast +from typing import Union, Mapping, cast import httpx from ..types import upload_create_params, upload_create_from_url_params from .._files import deepcopy_with_paths -from .._types import Body, Omit, Query, Headers, NotGiven, FileTypes, omit, not_given +from .._types import Body, Omit, Query, Headers, NotGiven, FileTypes, SequenceNotStr, omit, not_given from .._utils import extract_files, maybe_transform, async_maybe_transform from .._compat import cached_property from .._resource import SyncAPIResource, AsyncAPIResource @@ -134,7 +134,7 @@ def create_from_url( folder: str | Omit = omit, metadata: str | Omit = omit, random_prefix: str | Omit = omit, - tags: str | Omit = omit, + tags: Union[SequenceNotStr[str], str] | Omit = omit, webhook_url: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -157,7 +157,7 @@ def create_from_url( random_prefix: true/false to append random suffix - tags: Comma-separated tags + tags: Tags array or comma-separated string extra_headers: Send extra headers @@ -298,7 +298,7 @@ async def create_from_url( folder: str | Omit = omit, metadata: str | Omit = omit, random_prefix: str | Omit = omit, - tags: str | Omit = omit, + tags: Union[SequenceNotStr[str], str] | Omit = omit, webhook_url: str | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. @@ -321,7 +321,7 @@ async def create_from_url( random_prefix: true/false to append random suffix - tags: Comma-separated tags + tags: Tags array or comma-separated string extra_headers: Send extra headers diff --git a/src/autorender/types/upload_create_from_url_params.py b/src/autorender/types/upload_create_from_url_params.py index 7a3e3ad..a983d39 100644 --- a/src/autorender/types/upload_create_from_url_params.py +++ b/src/autorender/types/upload_create_from_url_params.py @@ -2,8 +2,11 @@ from __future__ import annotations +from typing import Union from typing_extensions import Required, TypedDict +from .._types import SequenceNotStr + __all__ = ["UploadCreateFromURLParams"] @@ -25,7 +28,7 @@ class UploadCreateFromURLParams(TypedDict, total=False): random_prefix: str """true/false to append random suffix""" - tags: str - """Comma-separated tags""" + tags: Union[SequenceNotStr[str], str] + """Tags array or comma-separated string""" webhook_url: str diff --git a/tests/api_resources/test_uploads.py b/tests/api_resources/test_uploads.py index 2855eaa..6cbcdc8 100644 --- a/tests/api_resources/test_uploads.py +++ b/tests/api_resources/test_uploads.py @@ -85,7 +85,7 @@ def test_method_create_from_url_with_all_params(self, client: Autorender) -> Non folder="folder", metadata="metadata", random_prefix="random_prefix", - tags="tags", + tags=["string"], webhook_url="https://example.com", ) assert_matches_type(UploadCreateFromURLResponse, upload, path=["response"]) @@ -185,7 +185,7 @@ async def test_method_create_from_url_with_all_params(self, async_client: AsyncA folder="folder", metadata="metadata", random_prefix="random_prefix", - tags="tags", + tags=["string"], webhook_url="https://example.com", ) assert_matches_type(UploadCreateFromURLResponse, upload, path=["response"]) From 620a8ec400193333e9564ae1f1a48e8f56f29ec8 Mon Sep 17 00:00:00 2001 From: stlc-bot Date: Tue, 30 Jun 2026 06:04:28 +0000 Subject: [PATCH 4/8] Merge branch 'main' of https://github.com/autorenderhq/sdk-config Stainless-Generated-From: c13792b8c4daac5fb8db2dda06d2016c8d88e742 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 948aa60..51df2d2 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ and offers both synchronous and asynchronous clients powered by [httpx](https:// ## Documentation -The REST API documentation can be found on [autorender.mintlify.app](https://autorender.mintlify.app/). The full API of this library can be found in [api.md](api.md). +The REST API documentation can be found on [autorender.io](https://autorender.io/docs). The full API of this library can be found in [api.md](api.md). ## Installation From 86fbf6b8cde604758887630fc2a95e8577e09375 Mon Sep 17 00:00:00 2001 From: stlc-bot Date: Tue, 30 Jun 2026 11:35:42 +0000 Subject: [PATCH 5/8] chore: sync openapi.json from northstar-server Stainless-Generated-From: 4b04eaec527725f87b0358f7422c28f31088ecf9 --- scripts/mock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mock b/scripts/mock index 80196ab..f898145 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="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" + EMBEDDED_SPEC="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" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" From 3b03a2bc9eddb69f366f1e766f7badc544c71422 Mon Sep 17 00:00:00 2001 From: Karthick Subramanian Date: Sun, 12 Jul 2026 20:30:11 +0530 Subject: [PATCH 6/8] chore: rename autorenderhq -> autorender references (GitHub org rename) (#1) Mechanical cleanup after the org rename autorenderhq -> autorender. Updates GitHub org/repo references (URLs, workflow repo guards, uses:, package metadata, docs). Intentionally left unchanged: SDK mount paths (autorenderhq-), Linear workspace URL, Sentry org slug. No logic changed (string references only). Co-authored-by: Geetha Karthick Co-authored-by: Claude Opus 4.8 (1M context) --- .github/workflows/publish-pypi.yml | 2 +- .github/workflows/release-doctor.yml | 2 +- .github/workflows/release-please.yml | 2 +- .github/workflows/stlc-promote.yml | 4 +- .../workflows/stlc-sync-from-production.yml | 4 +- CHANGELOG.md | 48 +++++++++---------- CONTRIBUTING.md | 6 +-- README.md | 6 +-- pyproject.toml | 6 +-- src/autorender/_files.py | 2 +- src/autorender/resources/files.py | 8 ++-- src/autorender/resources/folders.py | 8 ++-- src/autorender/resources/multipart_uploads.py | 8 ++-- src/autorender/resources/uploads.py | 8 ++-- 14 files changed, 57 insertions(+), 57 deletions(-) diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 115692d..7e64aae 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -1,6 +1,6 @@ # This workflow is triggered when a GitHub release is created. # It can also be run manually to re-publish to PyPI in case it failed for some reason. -# You can run this workflow by navigating to https://www.github.com/autorenderhq/autorender-python/actions/workflows/publish-pypi.yml +# You can run this workflow by navigating to https://www.github.com/autorender/autorender-python/actions/workflows/publish-pypi.yml name: Publish PyPI on: workflow_dispatch: diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index 1ecf148..0e2c5b7 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -9,7 +9,7 @@ jobs: release_doctor: name: release doctor runs-on: ubuntu-latest - if: github.repository == 'autorenderhq/autorender-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') + if: github.repository == 'autorender/autorender-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index e180531..5e9ace1 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -10,7 +10,7 @@ permissions: jobs: release-please: - if: github.repository == 'autorenderhq/autorender-python' + if: github.repository == 'autorender/autorender-python' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/stlc-promote.yml b/.github/workflows/stlc-promote.yml index f5cfa70..0640088 100644 --- a/.github/workflows/stlc-promote.yml +++ b/.github/workflows/stlc-promote.yml @@ -11,9 +11,9 @@ permissions: jobs: promote: runs-on: ubuntu-latest - if: github.repository == 'autorenderhq/autorender-python-staging' + if: github.repository == 'autorender/autorender-python-staging' env: - PRODUCTION_REPO: autorenderhq/autorender-python + PRODUCTION_REPO: autorender/autorender-python GH_TOKEN: ${{ secrets.PRODUCTION_REPO_TOKEN }} steps: - name: Check out staging diff --git a/.github/workflows/stlc-sync-from-production.yml b/.github/workflows/stlc-sync-from-production.yml index 9b5f3dc..642b8c2 100644 --- a/.github/workflows/stlc-sync-from-production.yml +++ b/.github/workflows/stlc-sync-from-production.yml @@ -12,9 +12,9 @@ permissions: jobs: sync: runs-on: ubuntu-latest - if: github.repository == 'autorenderhq/autorender-python-staging' + if: github.repository == 'autorender/autorender-python-staging' env: - PRODUCTION_REPO: autorenderhq/autorender-python + PRODUCTION_REPO: autorender/autorender-python steps: - name: Check out staging uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2139a5b..37798ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,42 +2,42 @@ ## 0.1.0 (2026-05-15) -Full Changelog: [v0.0.1...v0.1.0](https://github.com/autorenderhq/autorender-python/compare/v0.0.1...v0.1.0) +Full Changelog: [v0.0.1...v0.1.0](https://github.com/autorender/autorender-python/compare/v0.0.1...v0.1.0) ### Features -* **api:** api update ([84d1942](https://github.com/autorenderhq/autorender-python/commit/84d19422bdd7a80d8c0d52fe6bb0e989f7b2abe7)) -* **api:** api update ([9dc8482](https://github.com/autorenderhq/autorender-python/commit/9dc848263fbf6509dd3e84a3a7963a897d14991b)) -* **api:** api update ([04c1163](https://github.com/autorenderhq/autorender-python/commit/04c116350cc7a2f5f288a8fd9febd020083cf536)) -* **api:** api update ([b4d6dbe](https://github.com/autorenderhq/autorender-python/commit/b4d6dbee14ac3e753968ce90388eaf01d2af4b94)) -* **api:** api update ([3932736](https://github.com/autorenderhq/autorender-python/commit/393273609afc67cc8b30d33bb27861edb1e20988)) -* **api:** api update ([58346bd](https://github.com/autorenderhq/autorender-python/commit/58346bdeba4b11a33fd1e63c69fceb432424bdf0)) -* **api:** api update ([7fdb60a](https://github.com/autorenderhq/autorender-python/commit/7fdb60a62af1ae9fd716c3a9939d2cc128bd4a85)) -* **api:** api update ([79c95b0](https://github.com/autorenderhq/autorender-python/commit/79c95b0a55d59e214f0b00936a5b517c0f66ca13)) -* **api:** api update ([b43e6a1](https://github.com/autorenderhq/autorender-python/commit/b43e6a1b4b157808d3ef2606552df4e68c1524e7)) -* **api:** api update ([658511c](https://github.com/autorenderhq/autorender-python/commit/658511ca294a346646139b0c4c5e0f4e151115e4)) -* **internal/types:** support eagerly validating pydantic iterators ([477052f](https://github.com/autorenderhq/autorender-python/commit/477052fa9cd1ff89c96ee4b8febf010851c6501e)) -* support setting headers via env ([749df21](https://github.com/autorenderhq/autorender-python/commit/749df21f7ac657d44cb297707a5ec2506bcb0df9)) +* **api:** api update ([84d1942](https://github.com/autorender/autorender-python/commit/84d19422bdd7a80d8c0d52fe6bb0e989f7b2abe7)) +* **api:** api update ([9dc8482](https://github.com/autorender/autorender-python/commit/9dc848263fbf6509dd3e84a3a7963a897d14991b)) +* **api:** api update ([04c1163](https://github.com/autorender/autorender-python/commit/04c116350cc7a2f5f288a8fd9febd020083cf536)) +* **api:** api update ([b4d6dbe](https://github.com/autorender/autorender-python/commit/b4d6dbee14ac3e753968ce90388eaf01d2af4b94)) +* **api:** api update ([3932736](https://github.com/autorender/autorender-python/commit/393273609afc67cc8b30d33bb27861edb1e20988)) +* **api:** api update ([58346bd](https://github.com/autorender/autorender-python/commit/58346bdeba4b11a33fd1e63c69fceb432424bdf0)) +* **api:** api update ([7fdb60a](https://github.com/autorender/autorender-python/commit/7fdb60a62af1ae9fd716c3a9939d2cc128bd4a85)) +* **api:** api update ([79c95b0](https://github.com/autorender/autorender-python/commit/79c95b0a55d59e214f0b00936a5b517c0f66ca13)) +* **api:** api update ([b43e6a1](https://github.com/autorender/autorender-python/commit/b43e6a1b4b157808d3ef2606552df4e68c1524e7)) +* **api:** api update ([658511c](https://github.com/autorender/autorender-python/commit/658511ca294a346646139b0c4c5e0f4e151115e4)) +* **internal/types:** support eagerly validating pydantic iterators ([477052f](https://github.com/autorender/autorender-python/commit/477052fa9cd1ff89c96ee4b8febf010851c6501e)) +* support setting headers via env ([749df21](https://github.com/autorender/autorender-python/commit/749df21f7ac657d44cb297707a5ec2506bcb0df9)) ### Bug Fixes -* **client:** add missing f-string prefix in file type error message ([0f93e15](https://github.com/autorenderhq/autorender-python/commit/0f93e15723c120a2f409cf2884d085f7966d5d0c)) -* **examples:** use timestamp names and correct response shape in files.py ([b4d13a7](https://github.com/autorenderhq/autorender-python/commit/b4d13a7d72784c4448424db46495c985276773d3)) -* **pagination:** resolve pyright incompatible override for has_next_page ([5cf6e56](https://github.com/autorenderhq/autorender-python/commit/5cf6e565ac0aeecdc5e59b887b1e008892eed1ce)) -* strip Content-Type header for body-less requests; add examples ([c3591d0](https://github.com/autorenderhq/autorender-python/commit/c3591d02910ded15e21a7ed7da402bf149f46857)) -* use correct field name format for multipart file arrays ([f968ef9](https://github.com/autorenderhq/autorender-python/commit/f968ef95330967c6b888ea3fc89c85f12ee926d1)) +* **client:** add missing f-string prefix in file type error message ([0f93e15](https://github.com/autorender/autorender-python/commit/0f93e15723c120a2f409cf2884d085f7966d5d0c)) +* **examples:** use timestamp names and correct response shape in files.py ([b4d13a7](https://github.com/autorender/autorender-python/commit/b4d13a7d72784c4448424db46495c985276773d3)) +* **pagination:** resolve pyright incompatible override for has_next_page ([5cf6e56](https://github.com/autorender/autorender-python/commit/5cf6e565ac0aeecdc5e59b887b1e008892eed1ce)) +* strip Content-Type header for body-less requests; add examples ([c3591d0](https://github.com/autorender/autorender-python/commit/c3591d02910ded15e21a7ed7da402bf149f46857)) +* use correct field name format for multipart file arrays ([f968ef9](https://github.com/autorender/autorender-python/commit/f968ef95330967c6b888ea3fc89c85f12ee926d1)) ### Performance Improvements -* **client:** optimize file structure copying in multipart requests ([498d621](https://github.com/autorenderhq/autorender-python/commit/498d621cc46637650c03f1ed9d00749dbcab9c99)) +* **client:** optimize file structure copying in multipart requests ([498d621](https://github.com/autorender/autorender-python/commit/498d621cc46637650c03f1ed9d00749dbcab9c99)) ### Chores -* **internal:** more robust bootstrap script ([798e8b7](https://github.com/autorenderhq/autorender-python/commit/798e8b79c22e0173d4f30a80924dcad627cc838f)) -* **internal:** reformat pyproject.toml ([fcc4169](https://github.com/autorenderhq/autorender-python/commit/fcc4169f137c6f4e6305bd0b8133658ad5337aa6)) -* remove examples from SDK (moved to stainless-examples runner) ([12a383e](https://github.com/autorenderhq/autorender-python/commit/12a383e16ab6e856905dd8ce8f3f666ff914c43c)) -* **tests:** bump steady to v0.22.1 ([30a0e81](https://github.com/autorenderhq/autorender-python/commit/30a0e8184adf8271f879cb9e5175ed52404a0043)) -* update SDK settings ([aead4ee](https://github.com/autorenderhq/autorender-python/commit/aead4ee8dd9504134612b1845cd18576b7c58848)) +* **internal:** more robust bootstrap script ([798e8b7](https://github.com/autorender/autorender-python/commit/798e8b79c22e0173d4f30a80924dcad627cc838f)) +* **internal:** reformat pyproject.toml ([fcc4169](https://github.com/autorender/autorender-python/commit/fcc4169f137c6f4e6305bd0b8133658ad5337aa6)) +* remove examples from SDK (moved to stainless-examples runner) ([12a383e](https://github.com/autorender/autorender-python/commit/12a383e16ab6e856905dd8ce8f3f666ff914c43c)) +* **tests:** bump steady to v0.22.1 ([30a0e81](https://github.com/autorender/autorender-python/commit/30a0e8184adf8271f879cb9e5175ed52404a0043)) +* update SDK settings ([aead4ee](https://github.com/autorender/autorender-python/commit/aead4ee8dd9504134612b1845cd18576b7c58848)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da73a48..b737254 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,7 +3,7 @@ > **Note:** This SDK is automatically generated from the Autorender API specification. > Code pull requests are not accepted — changes to generated code will be overwritten on the next generation cycle. > -> **Bug reports and feature requests are welcome** — please [open an issue](https://github.com/autorenderhq/autorender-python/issues). +> **Bug reports and feature requests are welcome** — please [open an issue](https://github.com/autorender/autorender-python/issues). --- @@ -71,7 +71,7 @@ If you’d like to use the repository from source, you can either install from g To install via git: ```sh -$ pip install git+ssh://git@github.com/autorenderhq/autorender-python.git +$ pip install git+ssh://git@github.com/autorender/autorender-python.git ``` Alternatively, you can build from source and install the wheel file: @@ -128,7 +128,7 @@ the changes aren't made through the automated pipeline, you may want to make rel ### Publish with a GitHub workflow -You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/autorenderhq/autorender-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. +You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/autorender/autorender-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up. ### Publish manually diff --git a/README.md b/README.md index 51df2d2..88bc3ee 100644 --- a/README.md +++ b/README.md @@ -270,9 +270,9 @@ upload = response.parse() # get the object that `uploads.create()` would have r print(upload.id) ``` -These methods return an [`APIResponse`](https://github.com/autorenderhq/autorender-python/tree/main/src/autorender/_response.py) object. +These methods return an [`APIResponse`](https://github.com/autorender/autorender-python/tree/main/src/autorender/_response.py) object. -The async client returns an [`AsyncAPIResponse`](https://github.com/autorenderhq/autorender-python/tree/main/src/autorender/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. +The async client returns an [`AsyncAPIResponse`](https://github.com/autorender/autorender-python/tree/main/src/autorender/_response.py) with the same structure, the only difference being `await`able methods for reading the response content. #### `.with_streaming_response` @@ -379,7 +379,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. -We are keen for your feedback; please open an [issue](https://www.github.com/autorenderhq/autorender-python/issues) with questions, bugs, or suggestions. +We are keen for your feedback; please open an [issue](https://www.github.com/autorender/autorender-python/issues) with questions, bugs, or suggestions. ### Determining the installed version diff --git a/pyproject.toml b/pyproject.toml index c70ad1a..95cc2df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,8 +37,8 @@ classifiers = [ ] [project.urls] -Homepage = "https://github.com/autorenderhq/autorender-python" -Repository = "https://github.com/autorenderhq/autorender-python" +Homepage = "https://github.com/autorender/autorender-python" +Repository = "https://github.com/autorender/autorender-python" [project.optional-dependencies] aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"] @@ -126,7 +126,7 @@ path = "README.md" [[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] # replace relative links with absolute links pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)' -replacement = '[\1](https://github.com/autorenderhq/autorender-python/tree/main/\g<2>)' +replacement = '[\1](https://github.com/autorender/autorender-python/tree/main/\g<2>)' [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/src/autorender/_files.py b/src/autorender/_files.py index 0669ce2..0e3d310 100644 --- a/src/autorender/_files.py +++ b/src/autorender/_files.py @@ -36,7 +36,7 @@ def assert_is_file_content(obj: object, *, key: str | None = None) -> None: if not is_file_content(obj): prefix = f"Expected entry at `{key}`" if key is not None else f"Expected file input `{obj!r}`" raise RuntimeError( - f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead. See https://github.com/autorenderhq/autorender-python/tree/main#file-uploads" + f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead. See https://github.com/autorender/autorender-python/tree/main#file-uploads" ) from None diff --git a/src/autorender/resources/files.py b/src/autorender/resources/files.py index d949f20..b0d1ac8 100644 --- a/src/autorender/resources/files.py +++ b/src/autorender/resources/files.py @@ -34,7 +34,7 @@ def with_raw_response(self) -> FilesResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return FilesResourceWithRawResponse(self) @@ -43,7 +43,7 @@ def with_streaming_response(self) -> FilesResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return FilesResourceWithStreamingResponse(self) @@ -214,7 +214,7 @@ def with_raw_response(self) -> AsyncFilesResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return AsyncFilesResourceWithRawResponse(self) @@ -223,7 +223,7 @@ def with_streaming_response(self) -> AsyncFilesResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return AsyncFilesResourceWithStreamingResponse(self) diff --git a/src/autorender/resources/folders.py b/src/autorender/resources/folders.py index 8ad8e78..d3b9bc8 100644 --- a/src/autorender/resources/folders.py +++ b/src/autorender/resources/folders.py @@ -34,7 +34,7 @@ def with_raw_response(self) -> FoldersResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return FoldersResourceWithRawResponse(self) @@ -43,7 +43,7 @@ def with_streaming_response(self) -> FoldersResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return FoldersResourceWithStreamingResponse(self) @@ -219,7 +219,7 @@ def with_raw_response(self) -> AsyncFoldersResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return AsyncFoldersResourceWithRawResponse(self) @@ -228,7 +228,7 @@ def with_streaming_response(self) -> AsyncFoldersResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return AsyncFoldersResourceWithStreamingResponse(self) diff --git a/src/autorender/resources/multipart_uploads.py b/src/autorender/resources/multipart_uploads.py index ddbfcde..450940a 100644 --- a/src/autorender/resources/multipart_uploads.py +++ b/src/autorender/resources/multipart_uploads.py @@ -33,7 +33,7 @@ def with_raw_response(self) -> MultipartUploadsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return MultipartUploadsResourceWithRawResponse(self) @@ -42,7 +42,7 @@ def with_streaming_response(self) -> MultipartUploadsResourceWithStreamingRespon """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return MultipartUploadsResourceWithStreamingResponse(self) @@ -148,7 +148,7 @@ def with_raw_response(self) -> AsyncMultipartUploadsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return AsyncMultipartUploadsResourceWithRawResponse(self) @@ -157,7 +157,7 @@ def with_streaming_response(self) -> AsyncMultipartUploadsResourceWithStreamingR """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return AsyncMultipartUploadsResourceWithStreamingResponse(self) diff --git a/src/autorender/resources/uploads.py b/src/autorender/resources/uploads.py index f5a91d1..2237e3e 100644 --- a/src/autorender/resources/uploads.py +++ b/src/autorender/resources/uploads.py @@ -34,7 +34,7 @@ def with_raw_response(self) -> UploadsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return UploadsResourceWithRawResponse(self) @@ -43,7 +43,7 @@ def with_streaming_response(self) -> UploadsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return UploadsResourceWithStreamingResponse(self) @@ -198,7 +198,7 @@ def with_raw_response(self) -> AsyncUploadsResourceWithRawResponse: This property can be used as a prefix for any HTTP method call to return the raw response object instead of the parsed content. - For more information, see https://www.github.com/autorenderhq/autorender-python#accessing-raw-response-data-eg-headers + For more information, see https://www.github.com/autorender/autorender-python#accessing-raw-response-data-eg-headers """ return AsyncUploadsResourceWithRawResponse(self) @@ -207,7 +207,7 @@ def with_streaming_response(self) -> AsyncUploadsResourceWithStreamingResponse: """ An alternative to `.with_raw_response` that doesn't eagerly read the response body. - For more information, see https://www.github.com/autorenderhq/autorender-python#with_streaming_response + For more information, see https://www.github.com/autorender/autorender-python#with_streaming_response """ return AsyncUploadsResourceWithStreamingResponse(self) From 62e9c20c05660ffe41a7566913396151c63efbfa Mon Sep 17 00:00:00 2001 From: stlc-bot Date: Fri, 7 Aug 2026 03:49:34 +0000 Subject: [PATCH 7/8] fix: wire SDK pagination and examples Stainless-Generated-From: 7d953737769ed9b4824d831bc21846e8071d99bc --- README.md | 75 ++++++++++++++++++++-- api.md | 2 +- src/autorender/pagination.py | 69 ++++++++++++-------- src/autorender/resources/files.py | 21 +++--- src/autorender/types/file_list_response.py | 26 +------- tests/api_resources/test_files.py | 17 ++--- 6 files changed, 135 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 88bc3ee..8708489 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,10 @@ client = Autorender( api_key=os.environ.get("AUTORENDER_API_KEY"), # This is the default and can be omitted ) -files = client.files.list( +page = client.files.list( limit=10, ) -print(files.files) +print(page.files) ``` While you can provide an `api_key` keyword argument, @@ -56,10 +56,10 @@ client = AsyncAutorender( async def main() -> None: - files = await client.files.list( + page = await client.files.list( limit=10, ) - print(files.files) + print(page.files) asyncio.run(main()) @@ -92,10 +92,10 @@ async def main() -> None: api_key=os.environ.get("AUTORENDER_API_KEY"), # This is the default and can be omitted http_client=DefaultAioHttpClient(), ) as client: - files = await client.files.list( + page = await client.files.list( limit=10, ) - print(files.files) + print(page.files) asyncio.run(main()) @@ -110,6 +110,69 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`. +## Pagination + +List methods in the Autorender API are paginated. + +This library provides auto-paginating iterators with each list response, so you do not have to request successive pages manually: + +```python +from autorender import Autorender + +client = Autorender() + +all_files = [] +# Automatically fetches more pages as needed. +for file in client.files.list(): + # Do something with file here + all_files.append(file) +print(all_files) +``` + +Or, asynchronously: + +```python +import asyncio +from autorender import AsyncAutorender + +client = AsyncAutorender() + + +async def main() -> None: + all_files = [] + # Iterate through items across all pages, issuing requests as needed. + async for file in client.files.list(): + all_files.append(file) + print(all_files) + + +asyncio.run(main()) +``` + +Alternatively, you can use the `.has_next_page()`, `.next_page_info()`, or `.get_next_page()` methods for more granular control working with pages: + +```python +first_page = await client.files.list() +if first_page.has_next_page(): + print(f"will fetch next page using these details: {first_page.next_page_info()}") + next_page = await first_page.get_next_page() + print(f"number of items we just fetched: {len(next_page.files)}") + +# Remove `await` for non-async usage. +``` + +Or just work directly with the returned data: + +```python +first_page = await client.files.list() + +print(f"page number: {first_page.meta.page}") # => "page number: 1" +for file in first_page.files: + print(file.id) + +# Remove `await` for non-async usage. +``` + ## File uploads Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`. diff --git a/api.md b/api.md index 2d1092f..520b981 100644 --- a/api.md +++ b/api.md @@ -22,7 +22,7 @@ from autorender.types import FileRetrieveResponse, FileListResponse, FileRenameR Methods: - client.files.retrieve(file_no) -> FileRetrieveResponse -- client.files.list(\*\*params) -> FileListResponse +- client.files.list(\*\*params) -> SyncPagePagination[FileListResponse] - client.files.delete(file_no) -> None - client.files.rename(file_no, \*\*params) -> FileRenameResponse diff --git a/src/autorender/pagination.py b/src/autorender/pagination.py index c8e897c..0f8ca09 100644 --- a/src/autorender/pagination.py +++ b/src/autorender/pagination.py @@ -3,38 +3,50 @@ from typing import List, Generic, TypeVar, Optional from typing_extensions import override +from pydantic import Field as FieldInfo + +from ._models import BaseModel from ._base_client import BasePage, PageInfo, BaseSyncPage, BaseAsyncPage -__all__ = ["SyncPagePagination", "AsyncPagePagination"] +__all__ = ["PagePaginationMeta", "SyncPagePagination", "AsyncPagePagination"] _T = TypeVar("_T") +class PagePaginationMeta(BaseModel): + has_next: Optional[bool] = FieldInfo(alias="hasNext", default=None) + + page: Optional[int] = None + + class SyncPagePagination(BaseSyncPage[_T], BasePage[_T], Generic[_T]): - data: List[_T] - current_page: Optional[int] = None - has_next: Optional[bool] = None - total_results: Optional[int] = None + files: List[_T] + meta: Optional[PagePaginationMeta] = None @override def _get_page_items(self) -> List[_T]: - data = self.data - if not data: + files = self.files + if not files: return [] - return data + return files @override def has_next_page(self) -> bool: - items = self._get_page_items() - if not items: + has_next = None + if self.meta is not None: + if self.meta.has_next is not None: + has_next = self.meta.has_next + if has_next is not None and has_next is False: return False - if self.has_next is not None: - return self.has_next - return self.next_page_info() is not None + + return super().has_next_page() @override def next_page_info(self) -> Optional[PageInfo]: - current_page = self.current_page + current_page = None + if self.meta is not None: + if self.meta.page is not None: + current_page = self.meta.page if current_page is None: current_page = 1 @@ -42,30 +54,33 @@ def next_page_info(self) -> Optional[PageInfo]: class AsyncPagePagination(BaseAsyncPage[_T], BasePage[_T], Generic[_T]): - data: List[_T] - current_page: Optional[int] = None - has_next: Optional[bool] = None - total_results: Optional[int] = None + files: List[_T] + meta: Optional[PagePaginationMeta] = None @override def _get_page_items(self) -> List[_T]: - data = self.data - if not data: + files = self.files + if not files: return [] - return data + return files @override def has_next_page(self) -> bool: - items = self._get_page_items() - if not items: + has_next = None + if self.meta is not None: + if self.meta.has_next is not None: + has_next = self.meta.has_next + if has_next is not None and has_next is False: return False - if self.has_next is not None: - return self.has_next - return self.next_page_info() is not None + + return super().has_next_page() @override def next_page_info(self) -> Optional[PageInfo]: - current_page = self.current_page + current_page = None + if self.meta is not None: + if self.meta.page is not None: + current_page = self.meta.page if current_page is None: current_page = 1 diff --git a/src/autorender/resources/files.py b/src/autorender/resources/files.py index b0d1ac8..8627b02 100644 --- a/src/autorender/resources/files.py +++ b/src/autorender/resources/files.py @@ -17,7 +17,8 @@ async_to_raw_response_wrapper, async_to_streamed_response_wrapper, ) -from .._base_client import make_request_options +from ..pagination import SyncPagePagination, AsyncPagePagination +from .._base_client import AsyncPaginator, make_request_options from ..types.file_list_response import FileListResponse from ..types.file_rename_response import FileRenameResponse from ..types.file_retrieve_response import FileRetrieveResponse @@ -95,7 +96,7 @@ def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FileListResponse: + ) -> SyncPagePagination[FileListResponse]: """ List/search files with pagination, filtering, and sorting. @@ -112,8 +113,9 @@ def list( timeout: Override the client-level default timeout for this request, in seconds """ - return self._get( + return self._get_api_list( "/api/v1/files", + page=SyncPagePagination[FileListResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -130,7 +132,7 @@ def list( file_list_params.FileListParams, ), ), - cast_to=FileListResponse, + model=FileListResponse, ) def delete( @@ -260,7 +262,7 @@ async def retrieve( cast_to=FileRetrieveResponse, ) - async def list( + def list( self, *, folder_no: str | Omit = omit, @@ -275,7 +277,7 @@ async def list( extra_query: Query | None = None, extra_body: Body | None = None, timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FileListResponse: + ) -> AsyncPaginator[FileListResponse, AsyncPagePagination[FileListResponse]]: """ List/search files with pagination, filtering, and sorting. @@ -292,14 +294,15 @@ async def list( timeout: Override the client-level default timeout for this request, in seconds """ - return await self._get( + return self._get_api_list( "/api/v1/files", + page=AsyncPagePagination[FileListResponse], options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, - query=await async_maybe_transform( + query=maybe_transform( { "folder_no": folder_no, "limit": limit, @@ -310,7 +313,7 @@ async def list( file_list_params.FileListParams, ), ), - cast_to=FileListResponse, + model=FileListResponse, ) async def delete( diff --git a/src/autorender/types/file_list_response.py b/src/autorender/types/file_list_response.py index d8e0b7c..1c32786 100644 --- a/src/autorender/types/file_list_response.py +++ b/src/autorender/types/file_list_response.py @@ -3,14 +3,12 @@ from typing import Dict, List, Optional from datetime import datetime -from pydantic import Field as FieldInfo - from .._models import BaseModel -__all__ = ["FileListResponse", "File", "Meta"] +__all__ = ["FileListResponse"] -class File(BaseModel): +class FileListResponse(BaseModel): id: str created_at: datetime @@ -44,23 +42,3 @@ class File(BaseModel): url: str width: Optional[int] = None - - -class Meta(BaseModel): - has_next: bool = FieldInfo(alias="hasNext") - - has_prev: bool = FieldInfo(alias="hasPrev") - - limit: int - - page: int - - total: int - - -class FileListResponse(BaseModel): - """Files list""" - - files: List[File] - - meta: Meta diff --git a/tests/api_resources/test_files.py b/tests/api_resources/test_files.py index 8dff053..cc949a7 100644 --- a/tests/api_resources/test_files.py +++ b/tests/api_resources/test_files.py @@ -14,6 +14,7 @@ FileRenameResponse, FileRetrieveResponse, ) +from autorender.pagination import SyncPagePagination, AsyncPagePagination base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -62,7 +63,7 @@ def test_path_params_retrieve(self, client: Autorender) -> None: @parametrize def test_method_list(self, client: Autorender) -> None: file = client.files.list() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(SyncPagePagination[FileListResponse], file, path=["response"]) @parametrize def test_method_list_with_all_params(self, client: Autorender) -> None: @@ -73,7 +74,7 @@ def test_method_list_with_all_params(self, client: Autorender) -> None: search="search", sort="name_asc", ) - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(SyncPagePagination[FileListResponse], file, path=["response"]) @parametrize def test_raw_response_list(self, client: Autorender) -> None: @@ -82,7 +83,7 @@ def test_raw_response_list(self, client: Autorender) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" file = response.parse() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(SyncPagePagination[FileListResponse], file, path=["response"]) @parametrize def test_streaming_response_list(self, client: Autorender) -> None: @@ -91,7 +92,7 @@ def test_streaming_response_list(self, client: Autorender) -> None: assert response.http_request.headers.get("X-Stainless-Lang") == "python" file = response.parse() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(SyncPagePagination[FileListResponse], file, path=["response"]) assert cast(Any, response.is_closed) is True @@ -222,7 +223,7 @@ async def test_path_params_retrieve(self, async_client: AsyncAutorender) -> None @parametrize async def test_method_list(self, async_client: AsyncAutorender) -> None: file = await async_client.files.list() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(AsyncPagePagination[FileListResponse], file, path=["response"]) @parametrize async def test_method_list_with_all_params(self, async_client: AsyncAutorender) -> None: @@ -233,7 +234,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncAutorender) search="search", sort="name_asc", ) - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(AsyncPagePagination[FileListResponse], file, path=["response"]) @parametrize async def test_raw_response_list(self, async_client: AsyncAutorender) -> None: @@ -242,7 +243,7 @@ async def test_raw_response_list(self, async_client: AsyncAutorender) -> None: assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" file = await response.parse() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(AsyncPagePagination[FileListResponse], file, path=["response"]) @parametrize async def test_streaming_response_list(self, async_client: AsyncAutorender) -> None: @@ -251,7 +252,7 @@ async def test_streaming_response_list(self, async_client: AsyncAutorender) -> N assert response.http_request.headers.get("X-Stainless-Lang") == "python" file = await response.parse() - assert_matches_type(FileListResponse, file, path=["response"]) + assert_matches_type(AsyncPagePagination[FileListResponse], file, path=["response"]) assert cast(Any, response.is_closed) is True From 2b84971ba48bad5f2ca98e5dcd6088a83b0a3fcf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 7 Aug 2026 03:49:49 +0000 Subject: [PATCH 8/8] chore: strip internal workflows; preserve production-managed files --- .github/workflows/stlc-promote.yml | 88 --------------- .../workflows/stlc-sync-from-production.yml | 74 ------------ CHANGELOG.md | 105 ++++++++++++++++++ pyproject.toml | 2 +- 4 files changed, 106 insertions(+), 163 deletions(-) delete mode 100644 .github/workflows/stlc-promote.yml delete mode 100644 .github/workflows/stlc-sync-from-production.yml diff --git a/.github/workflows/stlc-promote.yml b/.github/workflows/stlc-promote.yml deleted file mode 100644 index 0640088..0000000 --- a/.github/workflows/stlc-promote.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Promote SDKs - -on: - workflow_dispatch: - push: - branches: [main] - -permissions: - contents: read - -jobs: - promote: - runs-on: ubuntu-latest - if: github.repository == 'autorender/autorender-python-staging' - env: - PRODUCTION_REPO: autorender/autorender-python - GH_TOKEN: ${{ secrets.PRODUCTION_REPO_TOKEN }} - steps: - - name: Check out staging - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Fetch production main - run: | - git remote add production \ - "https://x-access-token:${GH_TOKEN}@github.com/${PRODUCTION_REPO}.git" - git fetch production main - - - name: Check if production is already in sync - id: diff - run: | - MERGED=$(git merge-tree --write-tree production/main origin/main 2>/dev/null) || MERGED=conflict - PRODUCTION_TREE=$(git rev-parse 'production/main^{tree}') - if [ "$MERGED" = "$PRODUCTION_TREE" ]; then - echo "Production already contains staging content. Nothing to release." - echo "synced=true" >> "$GITHUB_OUTPUT" - else - echo "synced=false" >> "$GITHUB_OUTPUT" - fi - - - name: Push staging main to the release branch on production - if: steps.diff.outputs.synced == 'false' - run: | - git push production origin/main:refs/heads/stainless/release --force - - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git checkout -b stlc-patch-release origin/main - - # Strip staging-only workflows — must not exist in production - git rm -f .github/workflows/stlc-promote.yml \ - .github/workflows/stlc-sync-from-production.yml 2>/dev/null || true - - # Overlay files production owns so stlc regeneration never causes conflicts - for f in CHANGELOG.md pyproject.toml; do - if git ls-tree production/main -- "$f" | grep -q .; then - PROD_BLOB=$(git ls-tree production/main -- "$f" | awk '{print $3}') - STAGE_BLOB=$(git ls-tree HEAD -- "$f" | awk '{print $3}') - if [ "$PROD_BLOB" != "$STAGE_BLOB" ]; then - git checkout production/main -- "$f" - fi - fi - done - - git commit -m "chore: strip internal workflows; preserve production-managed files" || true - git push production HEAD:refs/heads/stainless/release --force - - - name: Open or update the release PR on production - if: steps.diff.outputs.synced == 'false' - run: | - EXISTING_PR=$(gh pr list \ - --repo "${PRODUCTION_REPO}" \ - --head stainless/release \ - --state open \ - --json number \ - --jq '.[0].number') - if [ -z "${EXISTING_PR}" ]; then - gh pr create \ - --repo "${PRODUCTION_REPO}" \ - --base main \ - --head stainless/release \ - --title "Release SDK updates" \ - --body "$(git log --oneline production/main..origin/main)" - else - echo "Release PR #${EXISTING_PR} already exists. Force-push has updated it." - fi diff --git a/.github/workflows/stlc-sync-from-production.yml b/.github/workflows/stlc-sync-from-production.yml deleted file mode 100644 index 642b8c2..0000000 --- a/.github/workflows/stlc-sync-from-production.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Sync from production - -on: - schedule: - - cron: '0 */6 * * *' - workflow_dispatch: - -permissions: - contents: write - pull-requests: write - -jobs: - sync: - runs-on: ubuntu-latest - if: github.repository == 'autorender/autorender-python-staging' - env: - PRODUCTION_REPO: autorender/autorender-python - steps: - - name: Check out staging - uses: actions/checkout@v4 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Fetch production main - env: - PRODUCTION_REPO_TOKEN: ${{ secrets.PRODUCTION_REPO_TOKEN }} - run: | - git remote add production \ - "https://x-access-token:${PRODUCTION_REPO_TOKEN}@github.com/${PRODUCTION_REPO}.git" - git fetch production main - - - name: Check if staging is behind production - id: check - run: | - MERGED=$(git merge-tree --write-tree origin/main production/main 2>/dev/null) || MERGED=conflict - STAGING_TREE=$(git rev-parse 'origin/main^{tree}') - if [ "$MERGED" = "$STAGING_TREE" ] || [ "$MERGED" = "conflict" ]; then - echo "Staging is up to date with production." - echo "needs_sync=false" >> "$GITHUB_OUTPUT" - else - echo "Production has commits not in staging. Back-sync needed." - echo "needs_sync=true" >> "$GITHUB_OUTPUT" - fi - - - name: Create back-sync branch and PR - if: steps.check.outputs.needs_sync == 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git checkout -b stlc/from-prod - git merge production/main --no-edit -m "chore: sync release commits from production" - git remote set-url origin \ - "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" - git push origin stlc/from-prod --force - - EXISTING_PR=$(gh pr list \ - --repo "${{ github.repository }}" \ - --head stlc/from-prod \ - --state open \ - --json number \ - --jq '.[0].number') - if [ -z "${EXISTING_PR}" ]; then - gh pr create \ - --repo "${{ github.repository }}" \ - --base main \ - --head stlc/from-prod \ - --title "chore: sync release commits from production" \ - --body "Pulls version bump and changelog commits from production back to staging so the next stlc build reseals cleanly." - else - echo "Back-sync PR #${EXISTING_PR} already exists." - fi diff --git a/CHANGELOG.md b/CHANGELOG.md index 37798ea..b024049 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,110 @@ # Changelog +## [0.2.3](https://github.com/autorender/autorender-python/compare/v0.2.2...v0.2.3) (2026-06-29) + + +### Chores + +* remove Stainless attribution from README and SECURITY ([d0947e2](https://github.com/autorender/autorender-python/commit/d0947e288000a296dab8f61ee30a47c35bf8cf91)) +* strip internal workflows; preserve production-managed files ([ac1c0d9](https://github.com/autorender/autorender-python/commit/ac1c0d97235de3b8613f9f661a7ae61defa916d0)) + +## [0.2.2](https://github.com/autorender/autorender-python/compare/v0.2.1...v0.2.2) (2026-06-12) + + +### Bug Fixes + +* preserve production-managed files in release branch ([df62271](https://github.com/autorender/autorender-python/commit/df62271022fe248a89d687cf75b72ad7ad04f533)) +* strip internal workflows from production release branch ([eff96da](https://github.com/autorender/autorender-python/commit/eff96da6776b37be28cba791ab8c79b37cea04b0)) +* update promote workflow and add back-sync from production ([480e3d3](https://github.com/autorender/autorender-python/commit/480e3d33cb70eb0064ff352e15197d3f628936a8)) +* use blob comparison in overlay; add language-specific version files ([8201cbf](https://github.com/autorender/autorender-python/commit/8201cbff752bb9df08d4f606fb593a7cebebb06a)) +* use persist-credentials: false in sync workflow ([6f8e8a0](https://github.com/autorender/autorender-python/commit/6f8e8a0ffc5f06760479249a630338387c8c61e2)) + + +### Chores + +* preserve production-managed files ([a4eebf3](https://github.com/autorender/autorender-python/commit/a4eebf3483db6c5fefb8ccfe6e187812894902ce)) +* remove staging-only workflows from production ([6fd7d39](https://github.com/autorender/autorender-python/commit/6fd7d39d32178cfeac47a6534a82be7c1809e131)) +* remove staging-only workflows from production ([53464a4](https://github.com/autorender/autorender-python/commit/53464a4f6f535ebce37aae6089d230c7bd782235)) +* strip internal workflows; preserve production-managed files ([51d2e56](https://github.com/autorender/autorender-python/commit/51d2e5686fe80673ce44c6be53d90c6bbb43f02a)) + + +### Documentation + +* add auto-generated notice to CONTRIBUTING.md ([88b420c](https://github.com/autorender/autorender-python/commit/88b420c07c39698625b03dce06a45bdcf8076816)) + +## [0.2.1](https://github.com/autorender/autorender-python/compare/v0.2.0...v0.2.1) (2026-05-25) + + +### Bug Fixes + +* publish to correct PyPI package name (autorender) ([5bb8f32](https://github.com/autorender/autorender-python/commit/5bb8f32faae2a3f48b5696b8517b4a6dfd686163)) + +## [0.2.0](https://github.com/autorender/autorender-python/compare/v0.1.0...v0.2.0) (2026-05-25) + + +### Features + +* add test CI job ([2c25e3a](https://github.com/autorender/autorender-python/commit/2c25e3ad8ffe7ff44d5e7781e37de7c2598550df)) +* initial stlc build ([0bdb709](https://github.com/autorender/autorender-python/commit/0bdb709b1d8e670a795f867f71fab9c3ef6be539)) + + +### Bug Fixes + +* install rye for Python SDK bootstrap ([5f089bf](https://github.com/autorender/autorender-python/commit/5f089bf37c183b4d41b1eb1787c5b7390d93b0f2)) +* **python:** rename pagination field has_next_page -> has_next to fix pyright lint ([729d204](https://github.com/autorender/autorender-python/commit/729d20471bdfe545acdea2e443cfb2b8436ba08a)) + + +### Chores + +* trigger release-please ([8db5acc](https://github.com/autorender/autorender-python/commit/8db5acc865fce568f3ebb33c2e2536d9e84a41a6)) +* update stlc custom-code tracking files ([505f95e](https://github.com/autorender/autorender-python/commit/505f95e9e6b66928d05ffa5b630102fdfe3b5e3e)) + +## [0.1.0](https://github.com/autorender/autorender-python/compare/v0.0.1...v0.1.0) (2026-05-25) + + +### Features + +* add test CI job ([2c25e3a](https://github.com/autorender/autorender-python/commit/2c25e3ad8ffe7ff44d5e7781e37de7c2598550df)) +* **api:** api update ([84d1942](https://github.com/autorender/autorender-python/commit/84d19422bdd7a80d8c0d52fe6bb0e989f7b2abe7)) +* **api:** api update ([9dc8482](https://github.com/autorender/autorender-python/commit/9dc848263fbf6509dd3e84a3a7963a897d14991b)) +* **api:** api update ([04c1163](https://github.com/autorender/autorender-python/commit/04c116350cc7a2f5f288a8fd9febd020083cf536)) +* **api:** api update ([b4d6dbe](https://github.com/autorender/autorender-python/commit/b4d6dbee14ac3e753968ce90388eaf01d2af4b94)) +* **api:** api update ([3932736](https://github.com/autorender/autorender-python/commit/393273609afc67cc8b30d33bb27861edb1e20988)) +* **api:** api update ([58346bd](https://github.com/autorender/autorender-python/commit/58346bdeba4b11a33fd1e63c69fceb432424bdf0)) +* **api:** api update ([7fdb60a](https://github.com/autorender/autorender-python/commit/7fdb60a62af1ae9fd716c3a9939d2cc128bd4a85)) +* **api:** api update ([79c95b0](https://github.com/autorender/autorender-python/commit/79c95b0a55d59e214f0b00936a5b517c0f66ca13)) +* **api:** api update ([b43e6a1](https://github.com/autorender/autorender-python/commit/b43e6a1b4b157808d3ef2606552df4e68c1524e7)) +* **api:** api update ([658511c](https://github.com/autorender/autorender-python/commit/658511ca294a346646139b0c4c5e0f4e151115e4)) +* initial stlc build ([0bdb709](https://github.com/autorender/autorender-python/commit/0bdb709b1d8e670a795f867f71fab9c3ef6be539)) +* **internal/types:** support eagerly validating pydantic iterators ([477052f](https://github.com/autorender/autorender-python/commit/477052fa9cd1ff89c96ee4b8febf010851c6501e)) +* support setting headers via env ([749df21](https://github.com/autorender/autorender-python/commit/749df21f7ac657d44cb297707a5ec2506bcb0df9)) + + +### Bug Fixes + +* **client:** add missing f-string prefix in file type error message ([0f93e15](https://github.com/autorender/autorender-python/commit/0f93e15723c120a2f409cf2884d085f7966d5d0c)) +* **examples:** use timestamp names and correct response shape in files.py ([b4d13a7](https://github.com/autorender/autorender-python/commit/b4d13a7d72784c4448424db46495c985276773d3)) +* install rye for Python SDK bootstrap ([5f089bf](https://github.com/autorender/autorender-python/commit/5f089bf37c183b4d41b1eb1787c5b7390d93b0f2)) +* **pagination:** resolve pyright incompatible override for has_next_page ([5cf6e56](https://github.com/autorender/autorender-python/commit/5cf6e565ac0aeecdc5e59b887b1e008892eed1ce)) +* **python:** rename pagination field has_next_page -> has_next to fix pyright lint ([729d204](https://github.com/autorender/autorender-python/commit/729d20471bdfe545acdea2e443cfb2b8436ba08a)) +* strip Content-Type header for body-less requests; add examples ([c3591d0](https://github.com/autorender/autorender-python/commit/c3591d02910ded15e21a7ed7da402bf149f46857)) +* use correct field name format for multipart file arrays ([f968ef9](https://github.com/autorender/autorender-python/commit/f968ef95330967c6b888ea3fc89c85f12ee926d1)) + + +### Performance Improvements + +* **client:** optimize file structure copying in multipart requests ([498d621](https://github.com/autorender/autorender-python/commit/498d621cc46637650c03f1ed9d00749dbcab9c99)) + + +### Chores + +* **internal:** more robust bootstrap script ([798e8b7](https://github.com/autorender/autorender-python/commit/798e8b79c22e0173d4f30a80924dcad627cc838f)) +* **internal:** reformat pyproject.toml ([fcc4169](https://github.com/autorender/autorender-python/commit/fcc4169f137c6f4e6305bd0b8133658ad5337aa6)) +* remove examples from SDK (moved to stainless-examples runner) ([12a383e](https://github.com/autorender/autorender-python/commit/12a383e16ab6e856905dd8ce8f3f666ff914c43c)) +* **tests:** bump steady to v0.22.1 ([30a0e81](https://github.com/autorender/autorender-python/commit/30a0e8184adf8271f879cb9e5175ed52404a0043)) +* update SDK settings ([aead4ee](https://github.com/autorender/autorender-python/commit/aead4ee8dd9504134612b1845cd18576b7c58848)) +* update stlc custom-code tracking files ([505f95e](https://github.com/autorender/autorender-python/commit/505f95e9e6b66928d05ffa5b630102fdfe3b5e3e)) + ## 0.1.0 (2026-05-15) Full Changelog: [v0.0.1...v0.1.0](https://github.com/autorender/autorender-python/compare/v0.0.1...v0.1.0) diff --git a/pyproject.toml b/pyproject.toml index 95cc2df..390f5df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "autorender" -version = "0.0.1" +version = "0.2.3" description = "The official Python library for the autorender API" dynamic = ["readme"] license = "MIT"