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 dictionarybase_url: Optional base URL for resolving relative referencesreturn_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 Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jentic_openapi_transformer-1.0.0a7-py3-none-any.whl.
File metadata
- Download URL: jentic_openapi_transformer-1.0.0a7-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e4792d53af2d3e1d934c3e1f29adf14b61c5ffdea4cb9e2c15bfb69ddf71ecc
|
|
| MD5 |
ee0766c41600c5d0a4f7942a97462ba8
|
|
| BLAKE2b-256 |
12f52c2f57646ae75eb07a2d21af40652d2e6a34c0243b9a32e99e7843ee1819
|
Provenance
The following attestation bundles were made for jentic_openapi_transformer-1.0.0a7-py3-none-any.whl:
Publisher:
release.yml on jentic/jentic-openapi-tools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jentic_openapi_transformer-1.0.0a7-py3-none-any.whl -
Subject digest:
6e4792d53af2d3e1d934c3e1f29adf14b61c5ffdea4cb9e2c15bfb69ddf71ecc - Sigstore transparency entry: 630265017
- Sigstore integration time:
-
Permalink:
jentic/jentic-openapi-tools@0bed67291b165468bcdcd0a9043812056bf1d41a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jentic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0bed67291b165468bcdcd0a9043812056bf1d41a -
Trigger Event:
workflow_dispatch
-
Statement type: