- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Build and publish package / publish (push) Successful in 10s
|
||
| .forgejo/workflows | ||
| tanss-api | ||
| openapipythonclient-config.yaml | ||
| README.md | ||
| tanss-api.json | ||
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—ClientundAuthenticatedClient(httpx-basiert, Bearer-Token-Auth)api/— ein Modul pro TANSS-Tag (z. B.tickets,company,employees), je eine Funktion pro Endpunktmodels/— 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.