Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
f87ce6f
feat!: regenerate the SDK from the enhanced generator
mridang Jun 14, 2026
c96ba92
chore: organize and sort keep-list
mridang Jun 15, 2026
14a72f3
refactor: generate the Zitadel facade via clientClassName + with_auth…
mridang Jun 15, 2026
71ec1ad
test: update integration specs to Zitadel.with_authenticator
mridang Jun 15, 2026
0f2da7c
chore: devbox and keep-list cleanup
mridang Jun 15, 2026
837ee48
docs: restore customer-facing README and update code snippets for the…
mridang Jun 15, 2026
097e4a7
chore: slim proc.yml to options the generator honors
mridang Jun 15, 2026
df61e41
test: use an ephemeral docker host port and discover the mapped port
mridang Jun 15, 2026
31360dc
fix(docker): reuse built venv in REPL via uv run --no-sync
mridang Jun 15, 2026
d18d679
feat(auth): mask bearer token and test redaction per authenticator
mridang Jun 15, 2026
a597dbc
feat(sdk): regenerate from the enhanced generator
mridang Sep 17, 2026
8362bd9
feat(sdk): regenerate from the enhanced generator
mridang Sep 17, 2026
4d61a26
fix(sdk): regenerate without the dead no-auth import and petstore-cou…
mridang Sep 18, 2026
f88de13
fix(deps): bump soupsieve to 2.9.2 to clear two ReDoS advisories
mridang Sep 18, 2026
7840587
chore: regenerate against the current generator
mridang Sep 19, 2026
62d0ced
chore: regenerate against the current generator
mridang Sep 20, 2026
c0a9b2b
docs: regenerate SKILLS.md with aligned wording
mridang Sep 20, 2026
61c5375
fix: declare the licence this package is actually published under
mridang Sep 22, 2026
deecdb7
chore: regenerate with files named after the class they declare
mridang Sep 22, 2026
d0bbad9
feat!: regenerate with the standardised error hierarchy
mridang Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 1 addition & 3 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

[*.py]
indent_size = 4
indent_size = 4
2 changes: 1 addition & 1 deletion .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ '3.10', '3.11', '3.12', '3.13' ]
python-version: [ '3.13' ]
fail-fast: false

steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.10"
python-version: "3.13"

- name: Install dependencies
run: uv sync --group dev --frozen
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.10"
python-version: "3.13"

- name: Install dependencies
run: uv sync --group dev --frozen
Expand Down
19 changes: 14 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,34 +30,43 @@ jobs:
- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.10"
python-version: "3.13"

- name: Install dependencies
run: uv sync --group dev --frozen

- name: Run Tests
run: uv run pytest --junitxml=build/reports/junit.xml
run: uv run pytest

- name: Generate coverage report
uses: mridang/action-test-reporter@v1
if: always()
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
coverage-file: 'build/coverage/clover.xml'
coverage-file: '.out/coverage.xml'

- name: Upload Results
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: always()
with:
name: test-results
path: build/reports/junit.xml
path: .out/reports/junit.xml
overwrite: true

- name: Upload Coverage
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: always()
with:
name: test-coverage
path: .out/coverage.xml
overwrite: true

- name: Generate Report
if: ${{ always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: dorny/test-reporter@6e6a65b7a0bd2c9197df7d0ae36ac5cee784230c # v2.0.0
with:
name: Tests
path: build/reports/junit.xml
path: .out/reports/junit.xml
reporter: java-junit
fail-on-error: 'false'
token: ${{ secrets.GITHUB_TOKEN }}
6 changes: 3 additions & 3 deletions .github/workflows/typecheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ jobs:
- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.10"
python-version: "3.13"

- name: Install dependencies
run: uv sync --group dev --frozen

- name: Run Ty
run: uv run ty check
- name: Run Mypy
run: uv run mypy zitadel_client
2 changes: 1 addition & 1 deletion .github/workflows/unused.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
python-version: "3.10"
python-version: "3.13"

- name: Install dependencies
run: uv sync --group dev --frozen
Expand Down
85 changes: 18 additions & 67 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,78 +1,29 @@
# Byte-compiled / optimized / DLL files
# Python cache
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so
# Tool caches
devbox.d/
.pytest/
.mypy/
.mypy_cache/
.ruff/
.ruff_cache/

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
.uv/
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Virtual environment
venv/
.venv/
.python-version
.pytest

# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/
# Build output
dist/
build/
*.egg-info/

#Ipython Notebook
.ipynb_checkpoints
# Coverage output
.out/
.coverage

# integration-test stack output (PAT, service-account key) — never commit
etc/zitadel_output/
.env

devbox.json
devbox.lock
.devbox

.uv

.ruff
.ty
67 changes: 67 additions & 0 deletions .openapi-generator-ignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Keep-list: files the generator must NOT overwrite, and the Makefile's
# `prune` step must NOT delete. Everything else is generator-owned.

# --- bespoke authenticators (ported onto the generated auth interfaces) ---
#
# NOTE: the generator now owns authenticator.py (interface), base_authenticator.py,
# bearer_authenticator.py, http_aware_authenticator.py and
# zitadel_access_token_authenticator.py; only the token-minting strategies below
# are kept.
zitadel_client/auth/client_credentials_authenticator.py
zitadel_client/auth/no_auth_authenticator.py
zitadel_client/auth/oauth_authenticator.py
zitadel_client/auth/open_id.py
zitadel_client/auth/personal_access_token_authenticator.py
zitadel_client/auth/web_token_authenticator.py

# --- bespoke tests + fixtures the generator does not emit ---
#
# NOTE: the spec-independent unit tests (value_serializer, header_selector,
# configuration, transport_options, trace_context_util, default_api_client_unit)
# are now generator-owned and are NOT kept here. Only the Zitadel authenticator
# unit tests, the facade test, the integration specs, the Zitadel server
# fixtures, and the wiremock/squid/cert fixtures are kept.
etc/
spec/
test/auth/__init__.py
test/auth/test_client_credentials_authenticator.py
test/auth/test_no_auth_authenticator.py
test/auth/test_oauth_authenticator.py
test/auth/test_personal_access_authenticator.py
test/auth/test_web_token_authenticator.py
test/fixtures/
test/test_zitadel.py

# --- repo identity + docs (team-owned, not generated) ---
LICENSE
README.md
SECURITY.md
VERSIONING.md

# --- house tooling (team-owned, not generated) ---
.commitlintrc.json
.dockerignore
.editorconfig
.github/
.gitignore
.pre-commit-config.yaml
.releaserc.json
devbox.json
devbox.lock
Dockerfile
lefthook.yml
qodana.yaml

# --- build / package config (team-owned: repo identity + bespoke deps) ---
pyproject.toml
uv.lock

# --- generation tooling we added ---
.openapi-generator-ignore
Makefile
proc.yml

# --- generator bookkeeping (FILES manifest + VERSION; rewritten by the
# generator but keep-listed so prune does not orphan them — the FILES
# manifest does not list itself, so it would otherwise be deleted) ---
.openapi-generator/
Loading
Loading