Skip to content

Commit bf883cf

Browse files
release: 0.1.0 (#1)
Automated Release PR --- ## 0.1.0 (2026-03-10) Full Changelog: [v0.0.1...v0.1.0](v0.0.1...v0.1.0) ### Features * **api:** manual updates ([35cda8b](35cda8b)) * configure SDK packages ([ad84bcc](ad84bcc)) * consolidate prefixed security schemes into canonical names ([940549a](940549a)) * jelmer/stainless keycardai configuration ([d84041a](d84041a)) * remove unused security schemes from joined spec ([95aa9f5](95aa9f5)) * Typescript package name @keycardai/api ([abb571d](abb571d)) ### Chores * sync repo ([c2b5238](c2b5238)) * update SDK settings ([2758508](2758508)) * update SDK settings ([aaed6c5](aaed6c5)) --- This pull request is managed by Stainless's [GitHub App](https://github.com/apps/stainless-app). The [semver version number](https://semver.org/#semantic-versioning-specification-semver) is based on included [commit messages](https://www.conventionalcommits.org/en/v1.0.0/). Alternatively, you can manually set the version number in the title of this pull request. For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request. 🔗 Stainless [website](https://www.stainlessapi.com) 📚 Read the [docs](https://app.stainlessapi.com/docs) 🙋 [Reach out](mailto:support@stainlessapi.com) for help or questions --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent a7d94fb commit bf883cf

38 files changed

Lines changed: 340 additions & 1088 deletions

.github/workflows/publish-pypi.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This workflow is triggered when a GitHub release is created.
22
# It can also be run manually to re-publish to PyPI in case it failed for some reason.
3-
# You can run this workflow by navigating to https://www.github.com/keycardlabs/keycard-python/actions/workflows/publish-pypi.yml
3+
# You can run this workflow by navigating to https://www.github.com/keycardai/keycard-python/actions/workflows/publish-pypi.yml
44
name: Publish PyPI
55
on:
66
workflow_dispatch:
@@ -12,9 +12,6 @@ jobs:
1212
publish:
1313
name: publish
1414
runs-on: ubuntu-latest
15-
permissions:
16-
contents: read
17-
id-token: write
1815

1916
steps:
2017
- uses: actions/checkout@v6
@@ -27,3 +24,5 @@ jobs:
2724
- name: Publish to PyPI
2825
run: |
2926
bash ./bin/publish-pypi
27+
env:
28+
PYPI_TOKEN: ${{ secrets.KEYCARD_API_PYPI_TOKEN || secrets.PYPI_TOKEN }}

.github/workflows/release-doctor.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ jobs:
99
release_doctor:
1010
name: release doctor
1111
runs-on: ubuntu-latest
12-
if: github.repository == 'keycardlabs/keycard-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')
12+
if: github.repository == 'keycardai/keycard-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')
1313

1414
steps:
1515
- uses: actions/checkout@v6
1616

1717
- name: Check release environment
1818
run: |
1919
bash ./bin/check-release-environment
20+
env:
21+
PYPI_TOKEN: ${{ secrets.KEYCARD_API_PYPI_TOKEN || secrets.PYPI_TOKEN }}

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.0.1"
2+
".": "0.1.0"
33
}

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 87
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/keycard%2Fkeycard-api-cb43483cd1b31447c61507f94d93d50b047d98f1f81f6ffa54a860a38e929f5f.yml
3-
openapi_spec_hash: d470e78a4feb376982d931be1ad7ea74
4-
config_hash: b1def330981d47334d9a1a3ca44bc1de
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/keycard%2Fkeycard-api-5092d9d6393b940b63aecc5d9ba44f85c79c01cd926978c09c62450ee5f7c269.yml
3+
openapi_spec_hash: 6d95ae31ee4a688394df9e89b766a53f
4+
config_hash: 68c59785c54c03969ea8163e835c3402

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Changelog
2+
3+
## 0.1.0 (2026-03-10)
4+
5+
Full Changelog: [v0.0.1...v0.1.0](https://github.com/keycardai/keycard-python/compare/v0.0.1...v0.1.0)
6+
7+
### Features
8+
9+
* **api:** manual updates ([35cda8b](https://github.com/keycardai/keycard-python/commit/35cda8ba3ab78e3b108db05ddc08063b2f030825))
10+
* configure SDK packages ([ad84bcc](https://github.com/keycardai/keycard-python/commit/ad84bcc0fde279929c6a472ec46ca449dd454461))
11+
* consolidate prefixed security schemes into canonical names ([940549a](https://github.com/keycardai/keycard-python/commit/940549a26f6782c3ffe174f68196320b26b9fee4))
12+
* jelmer/stainless keycardai configuration ([d84041a](https://github.com/keycardai/keycard-python/commit/d84041a5cb62b5480da8a3ef6f007c64c89b924f))
13+
* remove unused security schemes from joined spec ([95aa9f5](https://github.com/keycardai/keycard-python/commit/95aa9f57d74798443baf8464e67232d7331030a8))
14+
* Typescript package name @keycardai/api ([abb571d](https://github.com/keycardai/keycard-python/commit/abb571d3f052d0459ef6f5da4a30e491f3c86de3))
15+
16+
17+
### Chores
18+
19+
* sync repo ([c2b5238](https://github.com/keycardai/keycard-python/commit/c2b52387f3f3103620c6f5ee145b8e2da1bf1cb9))
20+
* update SDK settings ([2758508](https://github.com/keycardai/keycard-python/commit/2758508355dd662ba84aa6d56800dbafedf43374))
21+
* update SDK settings ([aaed6c5](https://github.com/keycardai/keycard-python/commit/aaed6c5d438d5924de89990591a6576b917c1409))

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ If you’d like to use the repository from source, you can either install from g
6262
To install via git:
6363

6464
```sh
65-
$ pip install git+ssh://git@github.com/keycardlabs/keycard-python.git
65+
$ pip install git+ssh://git@github.com/keycardai/keycard-python.git
6666
```
6767

6868
Alternatively, you can build from source and install the wheel file:
@@ -113,7 +113,7 @@ the changes aren't made through the automated pipeline, you may want to make rel
113113

114114
### Publish with a GitHub workflow
115115

116-
You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/keycardlabs/keycard-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up.
116+
You can release to package managers by using [the `Publish PyPI` GitHub action](https://www.github.com/keycardai/keycard-python/actions/workflows/publish-pypi.yml). This requires a setup organization or repository secret to be set up.
117117

118118
### Publish manually
119119

README.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,34 @@ pip install keycardai-api
2525
The full API of this library can be found in [api.md](api.md).
2626

2727
```python
28+
import os
2829
from keycardai_api import KeycardAPI
2930

30-
client = KeycardAPI()
31+
client = KeycardAPI(
32+
api_key=os.environ.get("KEYCARD_API_API_KEY"), # This is the default and can be omitted
33+
)
3134

3235
zones = client.zones.list()
3336
print(zones.items)
3437
```
3538

36-
While you can provide a `username` keyword argument,
39+
While you can provide an `api_key` keyword argument,
3740
we recommend using [python-dotenv](https://pypi.org/project/python-dotenv/)
38-
to add `KEYCARD_API_USERNAME="My Username"` to your `.env` file
39-
so that your Username is not stored in source control.
41+
to add `KEYCARD_API_API_KEY="My API Key"` to your `.env` file
42+
so that your API Key is not stored in source control.
4043

4144
## Async usage
4245

4346
Simply import `AsyncKeycardAPI` instead of `KeycardAPI` and use `await` with each API call:
4447

4548
```python
49+
import os
4650
import asyncio
4751
from keycardai_api import AsyncKeycardAPI
4852

49-
client = AsyncKeycardAPI()
53+
client = AsyncKeycardAPI(
54+
api_key=os.environ.get("KEYCARD_API_API_KEY"), # This is the default and can be omitted
55+
)
5056

5157

5258
async def main() -> None:
@@ -73,13 +79,15 @@ pip install keycardai-api[aiohttp]
7379
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
7480

7581
```python
82+
import os
7683
import asyncio
7784
from keycardai_api import DefaultAioHttpClient
7885
from keycardai_api import AsyncKeycardAPI
7986

8087

8188
async def main() -> None:
8289
async with AsyncKeycardAPI(
90+
api_key=os.environ.get("KEYCARD_API_API_KEY"), # This is the default and can be omitted
8391
http_client=DefaultAioHttpClient(),
8492
) as client:
8593
zones = await client.zones.list()
@@ -247,9 +255,9 @@ zone = response.parse() # get the object that `zones.list()` would have returne
247255
print(zone.items)
248256
```
249257

250-
These methods return an [`APIResponse`](https://github.com/keycardlabs/keycard-python/tree/main/src/keycardai_api/_response.py) object.
258+
These methods return an [`APIResponse`](https://github.com/keycardai/keycard-python/tree/main/src/keycardai_api/_response.py) object.
251259

252-
The async client returns an [`AsyncAPIResponse`](https://github.com/keycardlabs/keycard-python/tree/main/src/keycardai_api/_response.py) with the same structure, the only difference being `await`able methods for reading the response content.
260+
The async client returns an [`AsyncAPIResponse`](https://github.com/keycardai/keycard-python/tree/main/src/keycardai_api/_response.py) with the same structure, the only difference being `await`able methods for reading the response content.
253261

254262
#### `.with_streaming_response`
255263

@@ -353,7 +361,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con
353361

354362
We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.
355363

356-
We are keen for your feedback; please open an [issue](https://www.github.com/keycardlabs/keycard-python/issues) with questions, bugs, or suggestions.
364+
We are keen for your feedback; please open an [issue](https://www.github.com/keycardai/keycard-python/issues) with questions, bugs, or suggestions.
357365

358366
### Determining the installed version
359367

bin/check-release-environment

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
errors=()
44

5+
if [ -z "${PYPI_TOKEN}" ]; then
6+
errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
7+
fi
8+
59
lenErrors=${#errors[@]}
610

711
if [[ lenErrors -gt 0 ]]; then

bin/publish-pypi

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,4 @@ set -eux
44
rm -rf dist
55
mkdir -p dist
66
uv build
7-
if [ -n "${PYPI_TOKEN:-}" ]; then
8-
uv publish --token=$PYPI_TOKEN
9-
else
10-
uv publish
11-
fi
7+
uv publish --token=$PYPI_TOKEN

pyproject.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "keycardai-api"
3-
version = "0.0.1"
3+
version = "0.1.0"
44
description = "The official Python library for the keycard-api API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"
@@ -37,8 +37,8 @@ classifiers = [
3737
]
3838

3939
[project.urls]
40-
Homepage = "https://github.com/keycardlabs/keycard-python"
41-
Repository = "https://github.com/keycardlabs/keycard-python"
40+
Homepage = "https://github.com/keycardai/keycard-python"
41+
Repository = "https://github.com/keycardai/keycard-python"
4242

4343
[project.optional-dependencies]
4444
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
@@ -112,7 +112,7 @@ path = "README.md"
112112
[[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]]
113113
# replace relative links with absolute links
114114
pattern = '\[(.+?)\]\(((?!https?://)\S+?)\)'
115-
replacement = '[\1](https://github.com/keycardlabs/keycard-python/tree/main/\g<2>)'
115+
replacement = '[\1](https://github.com/keycardai/keycard-python/tree/main/\g<2>)'
116116

117117
[tool.pytest.ini_options]
118118
testpaths = ["tests"]

0 commit comments

Comments
 (0)