Skip to main content

opendpp-sdk

Official Python SDK for the OpenDPP Digital Product Passport API — a fully-typed client (pydantic v2 + urllib3, synchronous) mechanically generated from the public OpenAPI contract (openapi.json) and version-locked to it: this package's MAJOR.MINOR is the contract version it targets.

The only hand-written code is the thin opendpp_sdk.ergonomics module. Everything else under opendpp_sdk/ is generator-owned, regenerated by scripts/regenerate.sh and drift-checked in CI.

Install

pip install opendpp-sdk

Python ≥ 3.9. Runtime dependencies: pydantic>=2, urllib3, python-dateutil, typing-extensions.

Quick start

import os

from opendpp_sdk.api.passports_api import PassportsApi
from opendpp_sdk.api.service_api import ServiceApi
from opendpp_sdk.ergonomics import create_opendpp_client

client = create_opendpp_client(api_key=os.environ["OPENDPP_API_KEY"])

health = ServiceApi(client).get_health()          # public — works without a key too
passports = PassportsApi(client)
created = passports.create_passport({"productId": "09501101530003", "metadata": {"category": "batteries", ...}})

create_opendpp_client() defaults to the public hosted node (https://opendpp-node.eu); pass base_url= for a workspace host. The API key is sent as Authorization: Bearer … on operations that declare a security requirement — public operations (the resolvers, the validators, the audit verifier) work without one.

Content-negotiated public resolvers

The 200 of GET /passport/{id}, /01/{gtin14}, /8003/{grai} and /unit/{id} is negotiated via the Accept header (JSON-LD default / AAS / VC-JWT / VC-LD / SD-JWT-VC / HTML). The generated operations are typed against the default JSON-LD document; the resolve_*_as helpers are the supported way to request an alternate representation — they set the Accept header AND the matching body parsing, and type the result per media type:

from opendpp_sdk.ergonomics import resolve_public_passport_as

doc = resolve_public_passport_as(client, passport_id, "application/ld+json")   # PublicPassportJsonLd
aas = resolve_public_passport_as(client, passport_id, "application/aas+json")  # AasEnvironment
jws = resolve_public_passport_as(client, passport_id, "application/vc+jwt")    # compact JWS str

Tolerant by design

Response models never reject unknown fields — a future MINOR server release may add response fields, and deployed clients must keep working. Unknown keys are captured losslessly in each model's additional_properties.

Versioning

This package's version is locked to the API contract at major.minor (enforced by scripts/check_version_lock.py); the PATCH digit is the SDK's own fix lane, so a client-only fix can ship against an unchanged contract. Pin the MAJOR — a breaking contract change ships as a new /api/vN path major.

Regenerating

./scripts/regenerate.sh   # normalize the vendored spec, wipe, regenerate (needs node + a JRE)

The generation input is the vendored contract rewritten by the shared normalizer (../scripts/normalize-spec.mjs — authored and unit-tested in the OpenDPP node repository, synced here); the vendored openapi.json itself stays the pristine published contract. Generated sources are committed; CI regenerates and fails on any diff.

License

Apache-2.0 — see LICENSE and NOTICE. "OpenDPP" is a trademark of Opendpp UAB; the license grants no rights to the marks (see TRADEMARK.md).

Download files

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

Source Distribution

opendpp_sdk-1.14.0.tar.gz (264.5 kB view details)

Uploaded Source

Built Distribution

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

opendpp_sdk-1.14.0-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file opendpp_sdk-1.14.0.tar.gz.

File metadata

  • Download URL: opendpp_sdk-1.14.0.tar.gz
  • Upload date:
  • Size: 264.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for opendpp_sdk-1.14.0.tar.gz
Algorithm Hash digest
SHA256 b69153d4d6d1ecb8e23780521551cc262ffc7d76b3f2026e4caef9cd5226f735
MD5 5edfa94910dccb6f6677cfdf97b1b829
BLAKE2b-256 c85b4aea389dfbde415cdd146bcb97dfe742071cc85236e4c9d53b3d7ff47fa6

See more details on using hashes here.

Provenance

The following attestation bundles were made for opendpp_sdk-1.14.0.tar.gz:

Publisher: publish-sdk-py.yml on OpenDPP/opendpp-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opendpp_sdk-1.14.0-py3-none-any.whl.

File metadata

  • Download URL: opendpp_sdk-1.14.0-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for opendpp_sdk-1.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1e23f0f4492c63314225b7c2de091e02bd755336f98b6eb0fe6e26cb593ff24b
MD5 1a7d130c0f25fc6c4980ff2170fa3426
BLAKE2b-256 79d1ff4b4ffa1a4c96ca688140daf823af525025df76a63dfac95a6e755442cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for opendpp_sdk-1.14.0-py3-none-any.whl:

Publisher: publish-sdk-py.yml on OpenDPP/opendpp-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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