Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.47.0"
".": "1.48.0"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 9
configured_endpoints: 10
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/babs-technologies%2Fspitch-d909291d8029ce7de8d2ccad8e6d05f1f1d893f2ba68fcf6c1cd7265ab6a8df9.yml
openapi_spec_hash: 243f422b356ab7c8c417f87fe9ae2ad6
config_hash: 75f0cebdc2bbaa3b412c700aac6d0a13
config_hash: 65d2f8dd9de4ceccfc8bad3e409b446b
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
# Changelog

## 1.48.0 (2026-02-13)

Full Changelog: [v1.47.0...v1.48.0](https://github.com/spi-tch/spitch-python/compare/v1.47.0...v1.48.0)

### Features

* **api:** manual updates ([7ff92d6](https://github.com/spi-tch/spitch-python/commit/7ff92d62b3cde84cd531cd772b18c1dbde760e03))


### Chores

* format all `api.md` files ([16fa7ad](https://github.com/spi-tch/spitch-python/commit/16fa7adc0c7c69fd905648b7daa4b1ac657bac1e))
* **internal:** bump dependencies ([a27288b](https://github.com/spi-tch/spitch-python/commit/a27288bf0e466f1fd9f2f966f66a148625b9beaf))
* **internal:** fix lint error on Python 3.14 ([6402c25](https://github.com/spi-tch/spitch-python/commit/6402c25a860192407ea13491b22ccf4caa2525eb))

## 1.47.0 (2026-02-04)

Full Changelog: [v1.46.0...v1.47.0](https://github.com/spi-tch/spitch-python/compare/v1.46.0...v1.47.0)
Expand Down
1 change: 1 addition & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,6 @@ Methods:
- <code title="get /v1/files">client.files.<a href="./src/spitch/resources/files.py">list</a>(\*\*<a href="src/spitch/types/file_list_params.py">params</a>) -> <a href="./src/spitch/types/file_meta.py">SyncFilesCursor[FileMeta]</a></code>
- <code title="delete /v1/files/{file_id}">client.files.<a href="./src/spitch/resources/files.py">delete</a>(file_id) -> <a href="./src/spitch/types/file_delete_response.py">FileDeleteResponse</a></code>
- <code title="get /v1/files/{file_id}/url">client.files.<a href="./src/spitch/resources/files.py">download</a>(file_id, \*\*<a href="src/spitch/types/file_download_params.py">params</a>) -> object</code>
- <code title="get /v1/files/{file_id}">client.files.<a href="./src/spitch/resources/files.py">get</a>(file_id) -> <a href="./src/spitch/types/file_meta.py">FileMeta</a></code>
- <code title="post /v1/files">client.files.<a href="./src/spitch/resources/files.py">upload</a>(\*\*<a href="src/spitch/types/file_upload_params.py">params</a>) -> <a href="./src/spitch/types/file_meta.py">FileMeta</a></code>
- <code title="get /v1/files:usage">client.files.<a href="./src/spitch/resources/files.py">usage</a>() -> <a href="./src/spitch/types/file_usage.py">FileUsage</a></code>
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "spitch"
version = "1.47.0"
version = "1.48.0"
description = "The official Python library for the Spitch API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down Expand Up @@ -70,7 +70,7 @@ format = { chain = [
# run formatting again to fix any inconsistencies when imports are stripped
"format:ruff",
]}
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
"format:ruff" = "ruff format"

"lint" = { chain = [
Expand Down
20 changes: 10 additions & 10 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
aiohttp==3.13.3
# via httpx-aiohttp
# via spitch
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
anyio==4.12.1
# via httpx
# via spitch
argcomplete==3.6.3
Expand All @@ -31,7 +31,7 @@ attrs==25.4.0
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2025.11.12
certifi==2026.1.4
# via httpcore
# via httpx
colorlog==6.10.1
Expand Down Expand Up @@ -61,15 +61,15 @@ httpx==0.27.2
# via httpx-aiohttp
# via respx
# via spitch
httpx-aiohttp==0.1.9
httpx-aiohttp==0.1.12
# via spitch
humanize==4.13.0
# via nox
idna==3.11
# via anyio
# via httpx
# via yarl
importlib-metadata==8.7.0
importlib-metadata==8.7.1
iniconfig==2.1.0
# via pytest
markdown-it-py==3.0.0
Expand All @@ -82,14 +82,14 @@ multidict==6.7.0
mypy==1.17.0
mypy-extensions==1.1.0
# via mypy
nodeenv==1.9.1
nodeenv==1.10.0
# via pyright
nox==2025.11.12
packaging==25.0
# via dependency-groups
# via nox
# via pytest
pathspec==0.12.1
pathspec==1.0.3
# via mypy
platformdirs==4.4.0
# via virtualenv
Expand All @@ -115,13 +115,13 @@ python-dateutil==2.9.0.post0
# via time-machine
respx==0.22.0
rich==14.2.0
ruff==0.14.7
ruff==0.14.13
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via spitch
time-machine==2.19.0
tomli==2.3.0
tomli==2.4.0
# via dependency-groups
# via mypy
# via nox
Expand All @@ -141,7 +141,7 @@ typing-extensions==4.15.0
# via virtualenv
typing-inspection==0.4.2
# via pydantic
virtualenv==20.35.4
virtualenv==20.36.1
# via nox
yarl==1.22.0
# via aiohttp
Expand Down
8 changes: 4 additions & 4 deletions requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
aiohttp==3.13.3
# via httpx-aiohttp
# via spitch
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
anyio==4.12.1
# via httpx
# via spitch
async-timeout==5.0.1
# via aiohttp
attrs==25.4.0
# via aiohttp
certifi==2025.11.12
certifi==2026.1.4
# via httpcore
# via httpx
distro==1.9.0
Expand All @@ -43,7 +43,7 @@ httpcore==1.0.9
httpx==0.27.2
# via httpx-aiohttp
# via spitch
httpx-aiohttp==0.1.9
httpx-aiohttp==0.1.12
# via spitch
idna==3.11
# via anyio
Expand Down
2 changes: 1 addition & 1 deletion src/spitch/_utils/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def is_union(tp: Optional[Type[Any]]) -> bool:
else:
import types

return tp is Union or tp is types.UnionType
return tp is Union or tp is types.UnionType # type: ignore[comparison-overlap]


def is_typeddict(tp: Type[Any]) -> bool:
Expand Down
2 changes: 1 addition & 1 deletion src/spitch/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "spitch"
__version__ = "1.47.0" # x-release-please-version
__version__ = "1.48.0" # x-release-please-version
78 changes: 78 additions & 0 deletions src/spitch/resources/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,39 @@ def download(
cast_to=object,
)

def get(
self,
file_id: str,
*,
# 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.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> FileMeta:
"""
Get File

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not file_id:
raise ValueError(f"Expected a non-empty value for `file_id` but received {file_id!r}")
return self._get(
f"/v1/files/{file_id}",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=FileMeta,
)

def upload(
self,
*,
Expand Down Expand Up @@ -353,6 +386,39 @@ async def download(
cast_to=object,
)

async def get(
self,
file_id: str,
*,
# 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.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> FileMeta:
"""
Get File

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if not file_id:
raise ValueError(f"Expected a non-empty value for `file_id` but received {file_id!r}")
return await self._get(
f"/v1/files/{file_id}",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=FileMeta,
)

async def upload(
self,
*,
Expand Down Expand Up @@ -425,6 +491,9 @@ def __init__(self, files: FilesResource) -> None:
self.download = to_raw_response_wrapper(
files.download,
)
self.get = to_raw_response_wrapper(
files.get,
)
self.upload = to_raw_response_wrapper(
files.upload,
)
Expand All @@ -446,6 +515,9 @@ def __init__(self, files: AsyncFilesResource) -> None:
self.download = async_to_raw_response_wrapper(
files.download,
)
self.get = async_to_raw_response_wrapper(
files.get,
)
self.upload = async_to_raw_response_wrapper(
files.upload,
)
Expand All @@ -467,6 +539,9 @@ def __init__(self, files: FilesResource) -> None:
self.download = to_streamed_response_wrapper(
files.download,
)
self.get = to_streamed_response_wrapper(
files.get,
)
self.upload = to_streamed_response_wrapper(
files.upload,
)
Expand All @@ -488,6 +563,9 @@ def __init__(self, files: AsyncFilesResource) -> None:
self.download = async_to_streamed_response_wrapper(
files.download,
)
self.get = async_to_streamed_response_wrapper(
files.get,
)
self.upload = async_to_streamed_response_wrapper(
files.upload,
)
Expand Down
Loading
Loading