datacycle (0.1.0)

Published 2026-08-03 11:36:29 +00:00 by claudi in HIM-public/dataCycle_client

Installation

pip install --index-url  datacycle

About this package

Python client for the dataCycle API v4

dataCycle Python Client

Pydantic-basierter Python-Client für die dataCycle API v4. Typsicher, mit vollständiger Abdeckung aller API-Bereiche: Klassifizierungen, Inhalte, GeoJSON/MVT, Webhooks, Externe Links und mehr.

Quickstart

pip install -e .
# aus der Forgejo-Registry: pip install --index-url https://git.him-tools.de/api/packages/HIM-public/pypi/simple datacycle
from datacycle import DataCycleClient

client = DataCycleClient("https://contenthub.kitzbueheler-alpen.com", token="abc123")

# Klassifizierungsbäume abrufen
schemes = client.classifications.get_schemes()
print(f"{schemes.meta.total} Bäume gefunden")

# Klassifizierungen durchsuchen
concepts = client.classifications.get_concepts(schemes.graph[0]["@id"],
    filter={"search": "Musik"})

# Inhalte aus einem Endpunkt (ID aus dem dataCycle Admin-UI)
for item in client.contents.iter("deine-endpoint-uuid", filter={"q": "Wandern"}):
    print(item["name"])

# Facettensuche
facets = client.classifications.get_facets("endpoint-uuid", "scheme-uuid")

# GeoJSON
fc = client.geodata.geojson_endpoint("endpoint-uuid")

# Context-Manager (schließt die Session automatisch)
with DataCycleClient("https://...", token="abc") as client:
    ...

Architektur

Der Client ist in Sub-Clients organisiert, die über die Hauptklasse zugänglich sind:

Sub-Client Zugriff Bereich
Classifications client.classifications Konzept-Schemata, Konzepte, Facetten, Externe Systeme
Contents client.contents Inhalte, Höhenprofile, Zeitserien, Autovervollständigung
Webhooks client.webhooks Inhalte erstellen/aktualisieren/löschen (JSON-LD)
External Links client.external_links Inhalte extern teilen
Endpoints client.endpoints Neue Datenendpunkte anlegen
Geodata client.geodata GeoJSON FeatureCollection, Mapbox Vector Tiles

Jeder Sub-Client teilt dieselbe requests.Session (Connection-Pooling, Bearer-Auth).

Kernfeatures

  • Paging-Iteratoriter() lädt automatisch alle Seiten nach
  • Dict-basierte Filter – alle Filtertypen der API-DSL unterstützt (q, classifications, attribute, geo, schedule, linked, union, …)
  • include/fields – verknüpfte Inhalte auflösen, Attribute einschränken (String oder Liste)
  • Sprach-Default – beim Client-Konstruktor setzbar, pro Aufruf überschreibbar
  • Fehlerbehandlung – Exception-Hierarchie (AuthError, NotFoundError, ValidationError, …)
  • Context-Managerwith DataCycleClient(...) as client: schließt die Session sauber
  • Response-Modelle – Pydantic-validierte ApiListResponse mit typisierten meta/links

Tests

# Smoke-Tests (keine Netzwerk-Aufrufe)
pytest tests/test_smoke.py -v

# Live-Tests gegen die API (nur lesend!)
pytest tests/test_live.py -v

# Endpunkt-abhängige Tests aktivieren:
$env:DATACYCLE_ENDPOINT_ID = "deine-endpoint-uuid"
pytest tests/test_live.py -v

Build & Publishing (Forgejo)

build_wheel.bat                        :: baut dist\datacycle-<version>.whl
upload_wheel_to_forgejo_pypi.bat       :: lädt das Wheel in die Forgejo-Registry hoch

Vor dem Upload das Token in der lokalen .pypirc eintragen (gitignored, nie einchecken).

Projektstruktur

datacycle_client/
├── pyproject.toml
├── requirements.txt
├── src/datacycle/          # Package (setuptools)
│   ├── client.py           # DataCycleClient
│   ├── exceptions.py       # Exception-Hierarchie
│   ├── models/             # Pydantic-Modelle
│   └── api/                # Sub-Clients
├── tests/                  # pytest
├── api_docs/               # Gespiegelte API-Dokumentation (Stand 2026-08-03)
└── client_docs/            # Client-Dokumentation mit Beispielen

Future Points

  • Typsicherer Filter-Builder – IDE-Autovervollständigung für Filter-DSL statt Dicts
  • Download-Endpunkt – GPX/JSON/XML-Download (/api/v4/endpoints/{id}/download)
  • Schema-gesteuerte Content-Typisierung – optionale Pydantic-Modelle für @graph-Einträge (z.B. dcls:POI, dcls:Tour)
  • Async-Supporthttpx-basierter Async-Client
  • PyPI-Publishing – Package zusätzlich auf PyPI veröffentlichen (bisher nur Forgejo-Registry)

Voraussetzungen

  • Python ≥ 3.10
  • requests ≥ 2.28
  • pydantic ≥ 2.0

Requirements

Requires Python: >=3.10
Details
PyPI
2026-08-03 11:36:29 +00:00
2
dataCycle Client Developers
19 KiB
Assets (1)
Versions (1) View all
0.1.0 2026-08-03