Сгенерировать SDK из OpenAPI#

Генератор OpenAPI превращает операции, схемы и параметры документа в готовый пакет Python. Установите отдельный пакет генератора:

uv add "eazy-sdk-core[openapi,yaml]"

Передайте разобранный документ, путь исходной спецификации и каталог результата:

        # examples/docs/integration_openapi.py
        package = generate_package(
            DOCUMENT,
            spec_path=spec,
            output_directory=root / "generated",
            package_name="mail_sdk",
        )
        files = sorted(path.name for path in package.iterdir())
Файл целиком
"""Generate a small SDK package from an OpenAPI document."""

from __future__ import annotations

import json
from pathlib import Path
from tempfile import TemporaryDirectory

from eazy_sdk_openapi import generate_package


DOCUMENT = {
    "openapi": "3.1.0",
    "info": {"title": "Mail", "version": "1"},
    "paths": {
        "/messages/{message_id}": {
            "get": {
                "operationId": "getMessage",
                "parameters": [
                    {
                        "name": "message_id",
                        "in": "path",
                        "required": True,
                        "schema": {"type": "integer"},
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Message",
                        "content": {
                            "application/json": {
                                "schema": {"$ref": "#/components/schemas/Message"}
                            }
                        },
                    }
                },
            }
        }
    },
    "components": {
        "schemas": {
            "Message": {
                "type": "object",
                "required": ["id", "subject"],
                "properties": {
                    "id": {"type": "integer"},
                    "subject": {"type": "string"},
                },
            }
        }
    },
}


def main() -> None:
    with TemporaryDirectory() as directory:
        root = Path(directory)
        spec = root / "openapi.json"
        spec.write_text(json.dumps(DOCUMENT), encoding="utf-8")
        # docs:integration-openapi:start
        # examples/docs/integration_openapi.py
        package = generate_package(
            DOCUMENT,
            spec_path=spec,
            output_directory=root / "generated",
            package_name="mail_sdk",
        )
        files = sorted(path.name for path in package.iterdir())
        # docs:integration-openapi:end
    print(f"package: {package.name}")
    print(f"files: {', '.join(files)}")


if __name__ == "__main__":
    main()
package: mail_sdk
files: __init__.py, _model_base.py, auth.py, client.py, dependencies.py, models.py, openapi-compatibility.json, py.typed, signatures.py

Файл openapi-compatibility.json перечисляет упрощённые элементы спецификации и места, которые требуют ручной настройки. Генерация из JSON не требует extra yaml.

Для командной строки передайте файл, каталог и имя пакета:

eazy-sdk-openapi openapi.yaml generated --package-name mail_sdk

Дальше#