Skip to main content

Jentic OpenAPI Transformer

Project description

jentic-openapi-transformer

A Python library for transforming and bundling OpenAPI documents. This package is part of the Jentic OpenAPI Tools ecosystem and provides a flexible, extensible architecture for OpenAPI document transformation with support for pluggable backends.

Features

  • Pluggable Backend Architecture: Support for multiple bundling strategies via entry points
  • Multiple Input Formats: Accept OpenAPI documents as file paths, URIs, or Python dictionaries
  • Flexible Output Types: Return bundled documents as JSON strings or Python dictionaries
  • Type Safety: Full type hints with overloaded methods for precise return types
  • Extensible Design: Easy integration of third-party bundling backends

Installation

pip install jentic-openapi-transformer

Prerequisites:

  • Python 3.11+

Optional Backends:

For advanced bundling with external reference resolution:

pip install jentic-openapi-transformer-redocly

Quick Start

Basic Bundling

from jentic.apitools.openapi.transformer.bundler.core import OpenAPIBundler

# Create a bundler with the default backend
bundler = OpenAPIBundler()

# Bundle from a file URI and return as dictionary
result = bundler.bundle("file:///path/to/openapi.yaml", return_type=dict)
print(result["info"]["title"])

# Bundle from a file URI and return as JSON string
json_result = bundler.bundle("file:///path/to/openapi.yaml", return_type=str)
print(json_result)

Bundle from Dictionary

# Bundle an OpenAPI document from a Python dictionary
openapi_doc = {
    "openapi": "3.1.0",
    "info": {"title": "My API", "version": "1.0.0"},
    "paths": {
        "/users": {
            "get": {
                "summary": "Get users",
                "responses": {"200": {"description": "Success"}}
            }
        }
    }
}

result = bundler.bundle(openapi_doc, return_type=dict)

Using Different Backends

# Use the default backend (no external reference resolution)
bundler = OpenAPIBundler("default")
result = bundler.bundle("/path/to/openapi.yaml", return_type=dict)

# Use the Redocly backend (requires jentic-openapi-transformer-redocly)
bundler = OpenAPIBundler("redocly")
result = bundler.bundle("/path/to/openapi.yaml", return_type=dict)

Configuration Options

Backend Selection

# Use default backend by name
bundler = OpenAPIBundler("default")

# Pass a backend instance directly
from jentic.apitools.openapi.transformer.bundler.backends.default import DefaultBundlerBackend
backend = DefaultBundlerBackend()
bundler = OpenAPIBundler(backend=backend)

# Pass a backend class
bundler = OpenAPIBundler(backend=DefaultBundlerBackend)

Custom Parser

from jentic.apitools.openapi.parser.core import OpenAPIParser

# Use a custom parser instance
parser = OpenAPIParser()
bundler = OpenAPIBundler(parser=parser)

Return Type Control

# Return as dictionary (typed)
dict_result: dict = bundler.bundle(document, return_type=dict)

# Return as JSON string (typed)
str_result: str = bundler.bundle(document, return_type=str)

# Return as plain (auto-detected type)
plain_result = bundler.bundle(document)

Strict Mode

# Enable strict type checking for return type
try:
    result = bundler.bundle(document, return_type=dict, strict=True)
except TypeError as e:
    print(f"Type mismatch: {e}")

Testing

Run the test suite:

uv run --package jentic-openapi-transformer pytest packages/jentic-openapi-transformer -v

Integration Tests

The package includes integration tests for backend discovery and bundling. Tests requiring external backends (like Redocly) will be automatically skipped if the backend package is not installed.

API Reference

OpenAPIBundler

class OpenAPIBundler:
    def __init__(
        self,
        backend: str | BaseBundlerBackend | Type[BaseBundlerBackend] | None = None,
        parser: OpenAPIParser | None = None,
    ) -> None

Parameters:

  • backend: Backend name, instance, or class. Defaults to "default"
  • parser: Custom OpenAPIParser instance (optional)

Methods:

  • bundle(document: str | dict, base_url: str | None = None, *, return_type: type[T] | None = None, strict: bool = False) -> T
    • Bundles an OpenAPI document with specified return type
    • document: File path, URI, JSON/YAML string, or dictionary
    • base_url: Optional base URL for resolving relative references
    • return_type: Desired output type (str, dict, or None for auto)
    • strict: Enable strict return type validation

Available Backends

base

Abstract base class for custom bundler backends. Not for direct use.

default

Basic bundling backend without external reference resolution. Suitable for single-file OpenAPI documents.

redocly (Optional)

Advanced bundling backend using Redocly CLI with full reference resolution across multiple files.

Install: pip install jentic-openapi-transformer-redocly

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

jentic_openapi_transformer-1.0.0a52.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

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

jentic_openapi_transformer-1.0.0a52-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

Details for the file jentic_openapi_transformer-1.0.0a52.tar.gz.

File metadata

File hashes

Hashes for jentic_openapi_transformer-1.0.0a52.tar.gz
Algorithm Hash digest
SHA256 914f8c5d9fc96dd935bf43ff2bc09f9a1023645695f1e1a15794b063fb717e8c
MD5 787e0626f62c7159c6f659657a7181aa
BLAKE2b-256 b2cdc1026e124fd68148b4625ad5d19b9d8f116dcba798b2f2ef4608c9453128

See more details on using hashes here.

Provenance

The following attestation bundles were made for jentic_openapi_transformer-1.0.0a52.tar.gz:

Publisher: release.yml on jentic/jentic-openapi-tools

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

File details

Details for the file jentic_openapi_transformer-1.0.0a52-py3-none-any.whl.

File metadata

File hashes

Hashes for jentic_openapi_transformer-1.0.0a52-py3-none-any.whl
Algorithm Hash digest
SHA256 1299e27754715ba8237861d5cb3494b3bbd2f6678f93a55611172e032f12f879
MD5 c28f73dd8c0de1ea390abf135f965945
BLAKE2b-256 9fde7aad4e13e29c6141a5c39174bea63c13a1e05706f1944612484db445251b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jentic_openapi_transformer-1.0.0a52-py3-none-any.whl:

Publisher: release.yml on jentic/jentic-openapi-tools

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 Pingdom Monitoring Sentry Error logging StatusPage Status page