Skip to main content

No project description provided

Project description

openapy Logo

pypi version python versions license Unittest codecov Code style Downloads Downloads

Openapy simplifies continuous development with OpenAPI generator. What this tool does is reading python source files and copying functions into individual files. This will prevent the openapi generator from overwriting the code you have written.

Quick start

docker run --rm -v "$PWD:/src" edgem/openapy \
openapy generate --src /src/openapi-server/apis
pip install openapy
openapy generate --src ./openapi-server/apis

What openapy does

Openapy just splits each of the functions into a single file under processor directory.

# processor directory and the files will be generated
 .
 ├── api
    └── source.py
#└── processor
#    ├── __init__.py
#    ├── function_a.py
#    └── function_b.py
# api/source.py
def function_a(name: str, age: int)->None:
    ...

def function_b(height: int, weight: int)-> int:
    ...

This command generates following files

openapy generate --src ./api
# processor/__init__.py
from .function_a import function_a # noqa: F401
from .function_b import function_b # noqa: F401
# processor/function_a.py
def function_a(name: str, age: int)->None:
    ...
# processor/function_b.py
def function_b(height: int, weight: int)-> int:
    ...

Working with OpenAPI generator

The expected usage is using the file generated with OpenAPI Generator as interfaces, and using the file generated with Openapy as the implementation.

# apis/pet_api.py
import .processor
from fastapi import APIRouter
router = APIRouter()

@router.get("/pet/{petId}")
async def get_pet_by_id(petId: int = Path(None, description="ID of pet to return")) -> Pet:
    return processor.get_pet_by_id(petId)
# processor/get_pet_by_id.py
def get_pet_by_id(petId: int) -> Pet:
    """Returns a single pet"""
    # implement me
    ...

In this use case, api.mustache file should be customized. It is possible to generate an example of mustache file with following command.

openapy example mustache > ./mustache/api.mustache

NOTE: Without this structure, which means writing the implementation of apis on the files generated by OpenAPI generator, a regeneration of OpenAPI generator will overwrite any existing code you have written, even if only one api has been updated. This is because the OpenAPI generator aggregates apis into a file with a tag.

Features

Custom Template

It is possible to define the format of generated code with Openapy just like the mustache for OpenAPI generator. For more details, see the documentation.

Difference Detection

TBD

Move to docs

Following variables with {} brackets are available.

  • IMPORTS: All of imports of the source file like import X, from X import Y
  • ASSIGNS: All assigns of the source file like var = "string"
  • DEF: async def or def of the function
  • NAME: The function name
  • ARGS: Arguments of the function with type annotations
  • RETURN_TYPE: A type annotation for the return of the function
  • COMMENT: A comment inside of the function
  • BODY: A body of the function, like assign statement
  • RETURN: A return statement of the function

Project details


Download files

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

Source Distribution

openapy-0.3.2.tar.gz (11.5 kB view hashes)

Uploaded Source

Built Distribution

openapy-0.3.2-py3-none-any.whl (12.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page