Skip to main content

RestCodeGen

PyPI version Python versions GitHub Actions Coverage Status License: MIT Downloads Code style: ruff

Generate Python clients from OpenAPI specifications with ease

🚀 Overview

RestCodeGen is a powerful tool for automatically generating Python client libraries from OpenAPI 3 specifications. It streamlines the process of interacting with REST APIs, allowing developers and testers to quickly integrate with services that provide OpenAPI documentation.

✨ Key Features

  • Easy Client Generation: Create Python clients with a single command
  • Async Support: Generate both synchronous and asynchronous clients
  • Selective API Generation: Choose specific API tags to include
  • Type Hints: All generated code includes proper type annotations

📦 Installation

RestCodeGen requires Python 3.10 or higher. Install it using pip:

pip install restcodegen

Or with Poetry:

poetry add restcodegen

🔧 Usage

Basic Command

restcodegen generate -u "http://example.com/openapi.json" -s "my-service" -a false

Command Parameters

Parameter Short Description Required Default
--url -u URL of the OpenAPI specification Yes -
--service-name -s Name of the service Yes -
--async-mode -a Enable asynchronous client generation No false
--api-tags -t Comma-separated list of API tags to generate No All APIs
--templates-dir -td Path to directory with custom Jinja2 templates No Built-in templates
--output-dir -o Output directory for generated clients (root package path) No ./clients/http

Example

Examples

Generate a client for the Petstore API with default templates:

restcodegen generate -u "https://petstore3.swagger.io/api/v3/openapi.json" -s "petstore" -a false

Generate a client using custom templates:

restcodegen generate -u "https://petstore3.swagger.io/api/v3/openapi.json" -s "petstore" -a false -td ./custom_templates

Generate a client into a custom output directory (imports will follow this base path):

restcodegen generate -u "https://petstore3.swagger.io/api/v3/openapi.json" -s "petstore" -o framework/internal

Custom Templates

You can provide your own Jinja2 templates to customize the generated code. Place your template files in a directory and specify the path using the --templates-dir (-td) option. The following template files are supported:

  • api_client.jinja2 - Main API client template
  • header.jinja2 - File header template (for license and imports)
  • apis_init.jinja2 - Data model template

To customize the output, copy the default templates from the package's templates directory and modify them as needed.

Output Directory and Imports

When you specify --output-dir (-o), the generated package structure is created under that directory, for example:

framework/
  internal/
    petstore/
      apis/
      models/

All generated imports are based on the base path you provide (e.g. framework.internal.petstore...). If -o is not provided, the default base path is clients/http.

📁 Generated Structure

After successful execution, a client library will be created with the following structure:

└── clients                      
     └── http     
        ├── schemas               # OpenAPI 3.0.0 schemas for all generated APIs                   
        └── service_name          # Service name     
            ├── apis              # API client classes                    
            └── models            # Pydantic models   

💻 Using the Generated Client

The generated client includes built-in logging with structlog and supports custom HTTPX clients:

from httpx import Client
from clients.http.petstore import PetApi

# Create and use the client
if __name__ == '__main__':
    # Use the httpx client or httpx.AsyncClient() for async mode
    api_client = Client(base_url="https://petstore3.swagger.io/api/v3")
    
    # Initialize the API
    pet_api = PetApi(api_client)
    
    # Make API calls
    response = pet_api.get_pet_pet_id(pet_id=1)
    print(response)

🔄 Development Workflow

  1. Install development dependencies:

    poetry install
    
  2. Run tests:

    poetry run pytest
    
  3. Check code quality:

    poetry run ruff check .
    poetry run mypy .
    

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


🤝 Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

📬 Contact

For questions or feedback, please open an issue in the repository.


RestCodeGen - Making API integration simple and efficient

Metadata

Release files for restcodegen 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for restcodegen 2.0.1
File Size Uploaded
restcodegen-2.0.1.tar.gz 17.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for restcodegen 2.0.1
File Interpreter ABI Platform
restcodegen-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 39.6 kB

Release files / restcodegen-2.0.1.tar.gz

Download URL restcodegen-2.0.1.tar.gz
Size 17.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4babe8faf5f9c3a034742403e981977e7887e9a2b7ab1921e8813f954548aeb0
BLAKE2b-256 checksum
How to use checksums
3d0886047ad7b860ef7f23a97c4a537f2c0d65b4842e8b11bd2a413551c0ab0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / restcodegen-2.0.1-py3-none-any.whl

Download URL restcodegen-2.0.1-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77f4cbc5a470974df12646644b23226d15aaafdc7520d0b4d75e5ff75aacae28
BLAKE2b-256 checksum
How to use checksums
ac626d828044227b524e80f464ba4159e106c1f741b0236be1c329e009bc29e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page