Skip to main content

No project description provided

Project description

Seven2one Questra Data

Python Client für Questra Dynamic Objects (GraphQL + REST API).

Features

  • High-Level API: Vereinfachte Schnittstelle für häufige Operationen
  • Low-Level API: Direkter Zugriff auf GraphQL und REST Endpoints
  • Typsichere Dataclasses: IDE-Unterstützung für Inventory-Erstellung ✨ NEU!
  • Zeitreihen-Verwaltung: Effiziente Verwaltung von TimeSeries-Daten
  • Inventory-Operationen: CRUD-Operationen für Dynamic Objects
  • Optional: pandas Integration: DataFrames für Zeitreihen- und Inventory-Daten

Installation

# Basis-Installation
pip install seven2one-questra-data

# Mit pandas-Unterstützung (empfohlen für Data Science)
pip install seven2one-questra-data[pandas]

Siehe INSTALLATION.md für detaillierte Installations-Anleitungen.

Schnellstart

High-Level API (empfohlen)

from questra_authentication import QuestraAuthentication
from questra_data import QuestraData
from datetime import datetime

# Authentifizierung
auth_client = QuestraAuthentication(
    url="https://authentik.dev.example.com",
    username="ServiceUser",
    password="secret"
)

# Client initialisieren
client = QuestraData(
    graphql_url="https://dev.example.com/dynamic-objects/graphql",
    auth_client=auth_client
)

# Inventory Items auflisten
items = client.list(
    inventory_name="Stromzaehler",
    namespace_name="Energie",
    properties=["_id", "stromzaehlernummer", "hersteller"],
    limit=10
)

# Zeitreihen-Werte laden (kombiniert automatisch Inventory + TimeSeries!)
result = client.list_timeseries_values(
    inventory_name="Stromzaehler",
    namespace_name="Energie",
    timeseries_property="messwerte_Energie",
    from_time=datetime(2025, 1, 1),
    to_time=datetime(2025, 12, 31)
)

for item_id, data in result.items():
    print(f"Stromzähler: {data['item']['stromzaehlernummer']}")
    print(f"Anzahl Werte: {len(data['values'])}")

Inventory erstellen mit Property-Klassen ✨ NEU!

from questra_data import (
    StringProperty,
    IntProperty,
    InventoryRelation,
    RelationType,
    ConflictAction
)

# Typsichere Property-Definitionen (vereinfachte API)
properties = [
    StringProperty(
        propertyName="Name",
        maxLength=200,
        isRequired=True,
        isUnique=True
    ),
    IntProperty(
        propertyName="Age",
        isRequired=False
    )
]

# Inventory erstellen
client.create_inventory(
    name="TEC",
    properties=properties,
    if_exists=ConflictAction.IGNORE
)

# Mit Relationen
relations = [
    InventoryRelation(
        propertyName="Technologie",
        relationType=RelationType.ONE_TO_MANY,
        parentInventoryName="TEC",
        parentPropertyName="Anlagen"
    )
]

client.create_inventory(
    name="ANL",
    properties=properties,
    relations=relations,
    if_exists=ConflictAction.IGNORE
)

Vorteile der Dataclasses:

  • ✅ IDE-Autovervollständigung und Typprüfung
  • ✅ Fehler werden zur Entwicklungszeit erkannt
  • ✅ Klare, selbstdokumentierende API
  • ✅ Rückwärtskompatibel (Dictionary-API funktioniert weiterhin)

Siehe docs/INPUT_DATACLASSES.md für vollständige Dokumentation.

Mit pandas (Optional)

# Zeitreihen als DataFrame
df = client.list_timeseries_values_df(
    inventory_name="Stromzaehler",
    namespace_name="Energie",
    timeseries_property="messwerte_Energie",
    from_time=datetime(2025, 1, 1),
    to_time=datetime(2025, 12, 31),
    include_metadata=True  # Item-Felder als Spalten
)

# DataFrame:
#                        value  quality  item_id  item_stromzaehlernummer
# time
# 2025-01-01 12:00:00   100.5    VALID   630...   SZ-12345
# 2025-01-02 12:00:00   105.2    VALID   630...   SZ-12345

# Direkt weiterverarbeiten
df.resample('1D').mean()  # Tägliche Mittelwerte
df.plot()  # Plotten
df.groupby('item_id')['value'].agg(['mean', 'std'])  # Statistiken

# Inventory Items als DataFrame
df_items = client.list_df(
    inventory_name="Stromzaehler",
    properties=["_id", "stromzaehlernummer", "hersteller"]
)

Low-Level API (für fortgeschrittene Operationen)

# Zugriff auf Low-Level Client
lowlevel = client.lowlevel

# Direkte GraphQL Query
result = lowlevel.execute_raw("""
    query {
        _timeZones(first: 5) {
            name
            baseUtcOffset
        }
    }
""")

API-Übersicht

High-Level API (QuestraData)

Zeitreihen

  • list_timeseries_values() - Zeitreihen-Werte als Dict
  • list_timeseries_values_df() - Zeitreihen-Werte als DataFrame (benötigt pandas)
  • save_timeseries_values() - Zeitreihen-Werte speichern

Inventory

  • list() - Items auflisten als List[Dict]
  • list_df() - Items auflisten als DataFrame (benötigt pandas)
  • create() - Items erstellen
  • update() - Items aktualisieren
  • delete() - Items löschen

Verwaltung

  • create_namespace() - Namespace erstellen → Gibt NamedItemResult zurück
  • create_inventory() - Inventory erstellen mit typisierten Dataclasses → Gibt NamedItemResult zurück
  • list_namespaces() - Namespaces auflisten → Gibt list[Namespace] zurück
  • list_inventories() - Inventories auflisten → Gibt list[Inventory] zurück
  • get_system_info() - System-Informationen → Gibt SystemInfo zurück

Low-Level API (QuestraDataCore)

Zugriff über client.lowlevel:

  • inventory.* - Inventory-Operationen (GraphQL)
  • timeseries.* - Zeitreihen-Operationen (REST)
  • queries.* - GraphQL Queries
  • mutations.* - GraphQL Mutations
  • execute_raw() - Rohe GraphQL Query

Beispiele

Siehe:

Dokumentation

Entwicklung

Setup

# Repository klonen
git clone <repo-url>
cd questra-data

# Dependencies installieren (nutzt .python-version für Python 3.10)
uv sync --all-groups

Hinweis: uv muss installiert sein. Siehe INSTALLATION.md für Details.

Tests

# Alle Tests
uv run pytest

# Mit Coverage
uv run pytest --cov=questra_data

# Nur pandas Tests
uv run pytest tests/test_pandas_integration.py

Requirements

  • Python >= 3.10
  • gql >= 3.5.0
  • requests >= 2.31.0
  • loguru >= 0.7.0
  • questra-authentication >= 0.1.4

Optional

  • pandas >= 2.0.0 (für DataFrame-Unterstützung)

License

Proprietär - Seven2one GmbH

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seven2one_questra_data-0.7.4.tar.gz (384.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

seven2one_questra_data-0.7.4-py3-none-any.whl (70.4 kB view details)

Uploaded Python 3

File details

Details for the file seven2one_questra_data-0.7.4.tar.gz.

File metadata

  • Download URL: seven2one_questra_data-0.7.4.tar.gz
  • Upload date:
  • Size: 384.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for seven2one_questra_data-0.7.4.tar.gz
Algorithm Hash digest
SHA256 fb2a45b78adc51908ce2e3578b03afc2330d74832aef0297d829c546ac4cc756
MD5 442c76ecf27d532f547113ef5f3b5ae1
BLAKE2b-256 dc483813fecb128c3fa059f53af8beb75aef7d2c3241d3c1a2660155cf159b12

See more details on using hashes here.

File details

Details for the file seven2one_questra_data-0.7.4-py3-none-any.whl.

File metadata

  • Download URL: seven2one_questra_data-0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 70.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for seven2one_questra_data-0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 097f364f1b6b20134e7a4b86038be7af03fa7fb1df1ede18047034f2bc31dd1d
MD5 2c2bd142b9eafca7dd8c0e8c544930e0
BLAKE2b-256 f522b3aca81d8ebb36659c71a7363bff0fb6924d82bc1e6012c086215a4cdbdb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page