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

Download files

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

Source Distribution

restcodegen-2.0.1.tar.gz (17.6 kB view details)

Uploaded Source

Built Distribution

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

restcodegen-2.0.1-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file restcodegen-2.0.1.tar.gz.

File metadata

  • Download URL: restcodegen-2.0.1.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for restcodegen-2.0.1.tar.gz
Algorithm Hash digest
SHA256 4babe8faf5f9c3a034742403e981977e7887e9a2b7ab1921e8813f954548aeb0
MD5 a75042c9f32b103a1deb8658a32c4cd4
BLAKE2b-256 3d0886047ad7b860ef7f23a97c4a537f2c0d65b4842e8b11bd2a413551c0ab0f

See more details on using hashes here.

File details

Details for the file restcodegen-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: restcodegen-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for restcodegen-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 77f4cbc5a470974df12646644b23226d15aaafdc7520d0b4d75e5ff75aacae28
MD5 6bfb1616296d9c17e971654d11043f03
BLAKE2b-256 ac626d828044227b524e80f464ba4159e106c1f741b0236be1c329e009bc29e7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 files

2.0.0

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page