Maps an OpenAPI schema to SQLAlchemy models.
Project description
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
,$ref
references for columns and models,- foreign keys,
- many to one relationships and
allOf
inheritance 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/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file OpenAPI-SQLAlchemy-0.7.0.tar.gz
.
File metadata
- Download URL: OpenAPI-SQLAlchemy-0.7.0.tar.gz
- Upload date:
- Size: 19.4 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5dbc6e9f9b59b1a1f5278314c9f8777fb7a88f41277d4dbdcf14a05fe416697 |
|
MD5 | fa2bc5c5fbf515d2ca85dbea91cdda57 |
|
BLAKE2b-256 | 9bc8e10691ad0f9acdb010cfd53955473340a8ddb3bc205fb9a60a65cfd45d5d |
File details
Details for the file OpenAPI_SQLAlchemy-0.7.0-py3-none-any.whl
.
File metadata
- Download URL: OpenAPI_SQLAlchemy-0.7.0-py3-none-any.whl
- Upload date:
- Size: 41.0 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0377104bae21cd8fbe7ac6e7daa5f97e0db596e0afef5fe5dbfb0ad7ed1f0dc8 |
|
MD5 | 81f04835cce808f78811ebea22a08e5f |
|
BLAKE2b-256 | 7d449054d7405d8ba883e85a55a203eefe7fa2ced3369b3c15e06e7b5420dd42 |