RestCodeGen
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 templateheader.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
-
Install development dependencies:
poetry install -
Run tests:
poetry run pytest
-
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)
| File | Size | Uploaded | |
|---|---|---|---|
| restcodegen-2.0.1.tar.gz | 17.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|