Maps an OpenAPI schema to SQLAlchemy models.
Project description
OpenAlchemy
Translates an OpenAPI schema to SQLAlchemy models.
Installation
python -m pip install OpenAlchemy
# To be able to load yaml file
python -m pip install OpenAlchemy[yaml]
Example
For example, given the following OpenAPI specification:
# ./examples/simple-example-spec.yml
openapi: "3.0.0"
info:
title: Test Schema
description: API to illustrate OpenAlchemy 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 open_alchemy import init_yaml
init_yaml("./examples/simple-example-spec.yml")
The Base and Employee objects can be accessed:
from open_alchemy.models import Base
from open_alchemy.models import Employee
With the models_filename parameter a file is auto generated with type hints for the SQLAlchemy models at the specified location, for example: type hinted models example. This adds support for IDE auto complete, for example for the model initialization:
and for properties and methods available on an instance:
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
- initializing from JSON,
- initializing from YAML,
- automatically generate a models file,
integer
(32 and 64 bit),number
(float only),boolean
,string
,password
,byte
,binary
,date
,date-time
,$ref
references for columns and models,- remote
$ref
to other files on the same file system, - remote
$ref
to other files at a URL, - primary keys,
- auto incrementing,
- indexes,
- composite indexes,
- unique constraints,
- composite unique constraints,
- column nullability,
- foreign keys,
- default values for columns,
- many to one relationships,
- one to one relationships,
- one to many relationships,
- many to many relationships,
- custom foreign keys for relationships,
- back references for relationships,
allOf
inheritance for columns and models,from_str
model methods to construct from JSON string,from_dict
model methods to construct from dictionaries,to_str
model methods to convert instances to JSON string,to_dict
model methods to convert instances to dictionaries and- exposing created models under
open_alchemy.models
removing the need formodels.py
files.
Contributing
Fork and checkout the repository. To install:
python -m venv venv
source ./venv/bin/activate
python -m pip install -e .[dev,test]
To run tests:
tox
Make your changes and raise a pull request.
Compiling Docs
python -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 pip
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
Hashes for OpenAlchemy-1.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 40b16a41f53a1a060a0be00f69a0cabe60b0c13ecb61849dc4bcf57ccaf12363 |
|
MD5 | 937202b3bd7e07238864efccc16535a6 |
|
BLAKE2b-256 | a6dd3070a66f9ccab99a58d00026269e5ba01427ea13846bc248a34c34153a55 |