No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Simon Huber 0eb124e535
All checks were successful
Build and publish package / publish (push) Successful in 10s
fix: GITHUB_PATH instead of FORGEJO_GITHUB_PATH (runner does not set it); call uv by absolute path
2026-09-07 16:32:18 +02:00
.forgejo/workflows fix: GITHUB_PATH instead of FORGEJO_GITHUB_PATH (runner does not set it); call uv by absolute path 2026-09-07 16:32:18 +02:00
tanss-api add TANSS API OpenAPI spec + generated Python client (openapi-python-client) 2026-09-01 11:40:16 +02:00
openapipythonclient-config.yaml add TANSS API OpenAPI spec + generated Python client (openapi-python-client) 2026-09-01 11:40:16 +02:00
README.md add README (usage, uv add, regeneration) 2026-09-01 11:53:26 +02:00
tanss-api.json add TANSS API OpenAPI spec + generated Python client (openapi-python-client) 2026-09-01 11:40:16 +02:00

tanss-library

Generierter Python-Client für die TANSS API (OpenAPI 3.0, Version 10.15.0), generiert mit openapi-python-client.

Repo-Inhalt

Pfad Beschreibung
tanss-api.json OpenAPI-Schema der TANSS API (Original, so heruntergeladen wie vom TANSS-Server exportiert)
tanss-api/ Das generierte, installierbare Python-Paket tanss_api (uv/PEP 621, uv_build-Backend)
openapipythonclient-config.yaml Generator-Konfiguration (Paketname/Versions-Override)

Das Paket tanss_api enthält:

  • client.py — Client und AuthenticatedClient (httpx-basiert, Bearer-Token-Auth)
  • api/ — ein Modul pro TANSS-Tag (z. B. tickets, company, employees), je eine Funktion pro Endpunkt
  • models/ — alle Datenklassen (Pydantic/attrs) aus dem Schema

Verwendung in einem anderen Projekt

Das Paket liegt im Unterverzeichnis tanss-api/, daher wird #subdirectory= mitgegeben:

uv add "tanss-api @ git+https://git.datajob.de/GENERAL/tanss-library.git#subdirectory=tanss-api"

Lokal (ohne git):

uv add /home/dgoetz/Dokumente/tanss-library/tanss-api

Aufruf:

from tanss_api import Client
from tanss_api.api.tickets import get_api_v1_tickets_pinned

client = Client(base_url="https://deine-tanss-host")
result = get_api_v1_tickets_pinned.sync(client=client)
# async: get_api_v1_tickets_pinned.asyncio(client=client)
# *_detailed-Varianten liefern zusätzlich das rohe httpx.Response

Neu generieren

Client neu generieren (überschreibt tanss-api/, die pyproject.toml-Anpassung und das .gitignore im Paket-Verzeichnis gehen dabei verloren und müssen notfalls wiederhergestellt werden):

# Einmalig installieren (empfohlen):
uv tool install openapi-python-client

cd ~/Dokumente/tanss-library
openapi-python-client generate --path tanss-api.json --meta=uv --config openapipythonclient-config.yaml

Ohne Installation direkt per uvx:

uvx --from openapi-python-client openapi-python-client generate \
  --path tanss-api.json --meta=uv --config openapipythonclient-config.yaml

Hinweis: Schema-Fix für die Generierung

Das Original-Schema ist OpenAPI 3.0, enthält aber zwei Stellen in 3.1-Notation (items als Liste statt Objekt: bei GET /api/v1/domains/company/{id} und in TnsDocumentConfiguration), die openapi-python-client nicht parst. Zum Generieren daher eine minimal korrigierte temporäre Kopie verwenden:

python3 - <<'EOF'
import json
spec = json.load(open("tanss-api.json"))
def fix(node):
    if isinstance(node, dict):
        for k, v in list(node.items()):
            if k in ("examples", "example"):
                continue
            if k == "items" and isinstance(v, list):
                node[k] = {"type": "array", "items": {"type": "object"}}
            elif isinstance(v, dict):
                fix(v)
    elif isinstance(node, list):
        for v in node:
            fix(v)
fix(spec)
json.dump(spec, open("/tmp/tanss-fixed.json", "w"))
EOF

openapi-python-client generate --path /tmp/tanss-fixed.json --meta=uv --config openapipythonclient-config.yaml

Dafür haben die betroffenen Responses (TnsDomain-Liste, Dokumenttypen) im generierten Client generisch getypte Arrays statt $ref-Typen. tanss-api.json im Repo bleibt davon unberührt.