OpenAPI-SQLAlchemy
Translates an OpenAPI schema to SQLAlchemy models.
Installation
python3 -m pip install OpenAPI-SQLAlchemy
# To be able to load yaml file
python3 -m pip install PyYAML
Example
For example, given the following OpenAPI specification:
# example-spec.yml
openapi: "3.0.0"
info:
title: Test Schema
description: API to illustrate OpenAPI-SQLALchemy MVP.
version: "0.1"
paths:
/employee:
get:
summary: Used to retrieve all employees.
responses:
200:
description: Return all employees from the database.
content:
application/json:
schema:
type: array
items:
"$ref": "#/components/schemas/Employee"
components:
schemas:
Employee:
description: Person that works for a company.
type: object
x-tablename: employee
properties:
id:
type: integer
description: Unique identifier for the employee.
example: 0
x-primary-key: true
x-autoincrement: true
name:
type: string
description: The name of the employee.
example: David Andersson
x-index: true
division:
type: string
description: The part of the company the employee works in.
example: Engineering
x-index: true
salary:
type: number
description: The amount of money the employee is paid.
example: 1000000.00
required:
- id
- name
- division
The SQLALchemy models file then becomes:
# models.py
from yaml import load, Loader
from sqlalchemy.ext.declarative import declarative_base
from openapi_sqlalchemy import init_model_factory
Base = declarative_base()
with open("example-spec.yml") as spec_file:
SPEC = load(spec_file, Loader=Loader)
MODEL_FACTORY = init_model_factory(base=Base, spec=SPEC)
Employee = MODEL_FACTORY(name="Employee")
An extensive set of examples with a range of features is here:
An example API has been defined using connexion and Flask here:
Documentation
Features
Supported
The following features are supported:
integer(32 and 64 bit),number(float only),boolean,string,$refreferences for columns and models,- foreign keys,
- many to one relationships and
allOfinheritance for columns and models.
Not Supported
The following features are on the backlog:
- one to many relationships.
Contributing
Fork and checkout the repository. To install:
python3 -m venv venv
source ./venv/bin/activate
python3 -m pip install -e .[dev]
To run tests:
tox
Make your changes and raise a pull request.
Compiling Docs
python3 -m venv venv
cd docs
make html
This creates the index.html file in docs/build/html/index.html.
Release Commands
rm -r dist/*
python -m pip install --upgrade setuptools wheel
python setup.py sdist bdist_wheel
python -m pip install --upgrade twine
python -m twine upload dist/*
Metadata
Release files for OpenAPI-SQLAlchemy 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| OpenAPI-SQLAlchemy-0.7.0.tar.gz | 19.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| OpenAPI_SQLAlchemy-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.3 kB
Release files / OpenAPI-SQLAlchemy-0.7.0.tar.gz
| Download URL | OpenAPI-SQLAlchemy-0.7.0.tar.gz |
|---|---|
| Size | 19.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f5dbc6e9f9b59b1a1f5278314c9f8777fb7a88f41277d4dbdcf14a05fe416697
|
|
BLAKE2b-256 checksum How to use checksums |
9bc8e10691ad0f9acdb010cfd53955473340a8ddb3bc205fb9a60a65cfd45d5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0
|
Release files / OpenAPI_SQLAlchemy-0.7.0-py3-none-any.whl
| Download URL | OpenAPI_SQLAlchemy-0.7.0-py3-none-any.whl |
|---|---|
| Size | 41.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0377104bae21cd8fbe7ac6e7daa5f97e0db596e0afef5fe5dbfb0ad7ed1f0dc8
|
|
BLAKE2b-256 checksum How to use checksums |
7d449054d7405d8ba883e85a55a203eefe7fa2ced3369b3c15e06e7b5420dd42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.4.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.8.0
|