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.0a35.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.0a35-py3-none-any.whl (17.5 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for jentic_openapi_transformer-1.0.0a35.tar.gz
Algorithm Hash digest
SHA256 db0404ce7eb86e54f1f522e3795d52e459a5f493f9f5823c657cb00d59216069
MD5 7ab27da1382dc3b88c243016b50cbd03
BLAKE2b-256 dc4d771f61d894ce84f68cf705b52be82e081a75ee321fc33566840ee230856a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jentic_openapi_transformer-1.0.0a35.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.0a35-py3-none-any.whl.

File metadata

File hashes

Hashes for jentic_openapi_transformer-1.0.0a35-py3-none-any.whl
Algorithm Hash digest
SHA256 02a7d9230759ce84ffca165cc5d67d3ddd7b5c7d8d3736cccaaee4104d8d8999
MD5 4b685bda24df76152cd91d7364af1d80
BLAKE2b-256 17752fd5d197468d448014e29aa52fd712245212b3417794f93a8a2428af3a22

See more details on using hashes here.

Provenance

The following attestation bundles were made for jentic_openapi_transformer-1.0.0a35-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