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
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/beeper-desktop-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand All @@ -46,7 +46,7 @@ jobs:
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/beeper-desktop-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand All @@ -67,7 +67,7 @@ jobs:
github.repository == 'stainless-sdks/beeper-desktop-api-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: core.setOutput('github_token', await core.getIDToken());

Expand All @@ -87,7 +87,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/beeper-desktop-api-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'beeper/desktop-api-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Check release environment
run: |
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "5.0.0"
".": "5.1.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 30
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper/beeper-desktop-api-c08c14bb754b4cb0e02b21fabb680469368286be339dec0aaa8c69d04a1f021a.yml
openapi_spec_hash: a10246aaf7cdc33b682fc245bd5f893b
config_hash: 72f9d43b9b51a5da912e9f3730e53ae2
configured_endpoints: 72
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/beeper/beeper-desktop-api-0427b028ffd00b4f8b75084116f801658d0279117b2d0e522d1f257c998f1fd0.yml
openapi_spec_hash: af3ed0745fca6831cf2540c36050d4e6
config_hash: fbf60dd7c0de7e17c7e2bb0ee09e9937
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 5.1.0 (2026-05-16)

Full Changelog: [v5.0.0...v5.1.0](https://github.com/beeper/desktop-api-python/compare/v5.0.0...v5.1.0)

### Features

* **internal/types:** support eagerly validating pydantic iterators ([1850c8a](https://github.com/beeper/desktop-api-python/commit/1850c8a7b7d3e45407524a6ebffe902d4a3f8a71))


### Bug Fixes

* **client:** add missing f-string prefix in file type error message ([78424e2](https://github.com/beeper/desktop-api-python/commit/78424e24ad4e1f336f843222ff19bf70a50f073f))

## 5.0.0 (2026-05-06)

Full Changelog: [v4.3.0...v5.0.0](https://github.com/beeper/desktop-api-python/compare/v4.3.0...v5.0.0)
Expand Down
277 changes: 276 additions & 1 deletion api.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "beeper_desktop_api"
version = "5.0.0"
version = "5.1.0"
description = "The official Python library for the beeperdesktop API"
dynamic = ["readme"]
license = "MIT"
Expand Down
131 changes: 130 additions & 1 deletion src/beeper_desktop_api/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,14 @@
from .types.search_response import SearchResponse

if TYPE_CHECKING:
from .resources import info, chats, assets, accounts, messages
from .resources import app, info, chats, assets, matrix, bridges, accounts, messages
from .resources.info import InfoResource, AsyncInfoResource
from .resources.assets import AssetsResource, AsyncAssetsResource
from .resources.app.app import AppResource, AsyncAppResource
from .resources.bridges import BridgesResource, AsyncBridgesResource
from .resources.messages import MessagesResource, AsyncMessagesResource
from .resources.chats.chats import ChatsResource, AsyncChatsResource
from .resources.matrix.matrix import MatrixResource, AsyncMatrixResource
from .resources.accounts.accounts import AccountsResource, AsyncAccountsResource

__all__ = [
Expand Down Expand Up @@ -142,6 +145,13 @@ def accounts(self) -> AccountsResource:

return AccountsResource(self)

@cached_property
def bridges(self) -> BridgesResource:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import BridgesResource

return BridgesResource(self)

@cached_property
def chats(self) -> ChatsResource:
"""Manage chats"""
Expand Down Expand Up @@ -173,6 +183,20 @@ def info(self) -> InfoResource:

return InfoResource(self)

@cached_property
def app(self) -> AppResource:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AppResource

return AppResource(self)

@cached_property
def matrix(self) -> MatrixResource:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import MatrixResource

return MatrixResource(self)

@cached_property
def with_raw_response(self) -> BeeperDesktopWithRawResponse:
return BeeperDesktopWithRawResponse(self)
Expand Down Expand Up @@ -454,6 +478,13 @@ def accounts(self) -> AsyncAccountsResource:

return AsyncAccountsResource(self)

@cached_property
def bridges(self) -> AsyncBridgesResource:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import AsyncBridgesResource

return AsyncBridgesResource(self)

@cached_property
def chats(self) -> AsyncChatsResource:
"""Manage chats"""
Expand Down Expand Up @@ -485,6 +516,20 @@ def info(self) -> AsyncInfoResource:

return AsyncInfoResource(self)

@cached_property
def app(self) -> AsyncAppResource:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AsyncAppResource

return AsyncAppResource(self)

@cached_property
def matrix(self) -> AsyncMatrixResource:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import AsyncMatrixResource

return AsyncMatrixResource(self)

@cached_property
def with_raw_response(self) -> AsyncBeeperDesktopWithRawResponse:
return AsyncBeeperDesktopWithRawResponse(self)
Expand Down Expand Up @@ -715,6 +760,13 @@ def accounts(self) -> accounts.AccountsResourceWithRawResponse:

return AccountsResourceWithRawResponse(self._client.accounts)

@cached_property
def bridges(self) -> bridges.BridgesResourceWithRawResponse:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import BridgesResourceWithRawResponse

return BridgesResourceWithRawResponse(self._client.bridges)

@cached_property
def chats(self) -> chats.ChatsResourceWithRawResponse:
"""Manage chats"""
Expand Down Expand Up @@ -746,6 +798,20 @@ def info(self) -> info.InfoResourceWithRawResponse:

return InfoResourceWithRawResponse(self._client.info)

@cached_property
def app(self) -> app.AppResourceWithRawResponse:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AppResourceWithRawResponse

return AppResourceWithRawResponse(self._client.app)

@cached_property
def matrix(self) -> matrix.MatrixResourceWithRawResponse:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import MatrixResourceWithRawResponse

return MatrixResourceWithRawResponse(self._client.matrix)


class AsyncBeeperDesktopWithRawResponse:
_client: AsyncBeeperDesktop
Expand All @@ -767,6 +833,13 @@ def accounts(self) -> accounts.AsyncAccountsResourceWithRawResponse:

return AsyncAccountsResourceWithRawResponse(self._client.accounts)

@cached_property
def bridges(self) -> bridges.AsyncBridgesResourceWithRawResponse:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import AsyncBridgesResourceWithRawResponse

return AsyncBridgesResourceWithRawResponse(self._client.bridges)

@cached_property
def chats(self) -> chats.AsyncChatsResourceWithRawResponse:
"""Manage chats"""
Expand Down Expand Up @@ -798,6 +871,20 @@ def info(self) -> info.AsyncInfoResourceWithRawResponse:

return AsyncInfoResourceWithRawResponse(self._client.info)

@cached_property
def app(self) -> app.AsyncAppResourceWithRawResponse:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AsyncAppResourceWithRawResponse

return AsyncAppResourceWithRawResponse(self._client.app)

@cached_property
def matrix(self) -> matrix.AsyncMatrixResourceWithRawResponse:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import AsyncMatrixResourceWithRawResponse

return AsyncMatrixResourceWithRawResponse(self._client.matrix)


class BeeperDesktopWithStreamedResponse:
_client: BeeperDesktop
Expand All @@ -819,6 +906,13 @@ def accounts(self) -> accounts.AccountsResourceWithStreamingResponse:

return AccountsResourceWithStreamingResponse(self._client.accounts)

@cached_property
def bridges(self) -> bridges.BridgesResourceWithStreamingResponse:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import BridgesResourceWithStreamingResponse

return BridgesResourceWithStreamingResponse(self._client.bridges)

@cached_property
def chats(self) -> chats.ChatsResourceWithStreamingResponse:
"""Manage chats"""
Expand Down Expand Up @@ -850,6 +944,20 @@ def info(self) -> info.InfoResourceWithStreamingResponse:

return InfoResourceWithStreamingResponse(self._client.info)

@cached_property
def app(self) -> app.AppResourceWithStreamingResponse:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AppResourceWithStreamingResponse

return AppResourceWithStreamingResponse(self._client.app)

@cached_property
def matrix(self) -> matrix.MatrixResourceWithStreamingResponse:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import MatrixResourceWithStreamingResponse

return MatrixResourceWithStreamingResponse(self._client.matrix)


class AsyncBeeperDesktopWithStreamedResponse:
_client: AsyncBeeperDesktop
Expand All @@ -871,6 +979,13 @@ def accounts(self) -> accounts.AsyncAccountsResourceWithStreamingResponse:

return AsyncAccountsResourceWithStreamingResponse(self._client.accounts)

@cached_property
def bridges(self) -> bridges.AsyncBridgesResourceWithStreamingResponse:
"""Manage bridge-backed account types and account availability"""
from .resources.bridges import AsyncBridgesResourceWithStreamingResponse

return AsyncBridgesResourceWithStreamingResponse(self._client.bridges)

@cached_property
def chats(self) -> chats.AsyncChatsResourceWithStreamingResponse:
"""Manage chats"""
Expand Down Expand Up @@ -902,6 +1017,20 @@ def info(self) -> info.AsyncInfoResourceWithStreamingResponse:

return AsyncInfoResourceWithStreamingResponse(self._client.info)

@cached_property
def app(self) -> app.AsyncAppResourceWithStreamingResponse:
"""Manage Beeper app login and encrypted messaging setup"""
from .resources.app import AsyncAppResourceWithStreamingResponse

return AsyncAppResourceWithStreamingResponse(self._client.app)

@cached_property
def matrix(self) -> matrix.AsyncMatrixResourceWithStreamingResponse:
"""Matrix-compatible APIs for accounts, rooms, and connected network bridges."""
from .resources.matrix import AsyncMatrixResourceWithStreamingResponse

return AsyncMatrixResourceWithStreamingResponse(self._client.matrix)


Client = BeeperDesktop

Expand Down
2 changes: 1 addition & 1 deletion src/beeper_desktop_api/_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ async def async_to_httpx_files(files: RequestFiles | None) -> HttpxRequestFiles
elif is_sequence_t(files):
files = [(key, await _async_transform_file(file)) for key, file in files]
else:
raise TypeError("Unexpected file type input {type(files)}, expected mapping or sequence")
raise TypeError(f"Unexpected file type input {type(files)}, expected mapping or sequence")

return files

Expand Down
Loading