mapping jsonschema for sqlalchemy models
Project description
# -*- coding:utf-8 -*-
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Group(Base):
"""model for test"""
__tablename__ = "Group"
pk = sa.Column(sa.Integer, primary_key=True, doc="primary key")
name = sa.Column(sa.String(255), default="", nullable=False)
class User(Base):
__tablename__ = "User"
pk = sa.Column(sa.Integer, primary_key=True, doc="primary key")
name = sa.Column(sa.String(255), default="", nullable=True)
group_id = sa.Column(sa.Integer, sa.ForeignKey(Group.pk), nullable=False)
group = orm.relationship(Group, uselist=False, backref="users")
## ------SingleModelWalker--------
import pprint as pp
from alchemyjsonschema import SchemaFactory
from alchemyjsonschema import SingleModelWalker
factory = SchemaFactory(SingleModelWalker)
pp.pprint(factory(User))
"""
{'properties': {'group_id': {'type': 'integer'},
'name': {'maxLength': 255, 'type': 'string'},
'pk': {'description': 'primary key', 'type': 'integer'}},
'required': ['pk', 'group_id'],
'title': 'User',
'type': 'object'}
"""
## ------OneModelOnlyWalker--------
import pprint as pp
from alchemyjsonschema import SchemaFactory
from alchemyjsonschema import OneModelOnlyWalker
factory = SchemaFactory(OneModelOnlyWalker)
pp.pprint(factory(User))
"""
{'properties': {'name': {'maxLength': 255, 'type': 'string'},
'pk': {'description': 'primary key', 'type': 'integer'}},
'required': ['pk'],
'title': 'User',
'type': 'object'}
"""
## ------AlsoChildrenWalker--------
import pprint as pp
from alchemyjsonschema import SchemaFactory
from alchemyjsonschema import AlsoChildrenWalker
factory = SchemaFactory(AlsoChildrenWalker)
pp.pprint(factory(User))
"""
{'definitions': {'Group': {'properties': {'pk': {'description': 'primary key',
'type': 'integer'},
'name': {'maxLength': 255,
'type': 'string'}},
'type': 'object'}},
'properties': {'pk': {'description': 'primary key', 'type': 'integer'},
'name': {'maxLength': 255, 'type': 'string'},
'group': {'$ref': '#/definitions/Group'}},
'required': ['pk'],
'title': 'User',
'type': 'object'}
"""
pp.pprint(factory(Group))
"""
{'definitions': {'User': {'properties': {'pk': {'description': 'primary key',
'type': 'integer'},
'name': {'maxLength': 255,
'type': 'string'}},
'type': 'object'}},
'description': 'model for test',
'properties': {'pk': {'description': 'primary key', 'type': 'integer'},
'name': {'maxLength': 255, 'type': 'string'},
'users': {'items': {'$ref': '#/definitions/User'},
'type': 'array'}},
'required': ['pk', 'name'],
'title': 'Group',
'type': 'object'}
"""
has alchemyjsonschema command
help
$ alchemyjsonschema --help
usage: alchemyjsonschema [-h]
[--walker {noforeignkey,foreignkey,structual,control}]
[--decision {default,comfortable}] [--depth DEPTH]
[--decision-relationship DECISION_RELATIONSHIP]
[--decision-foreignkey DECISION_FOREIGNKEY]
[--out-dir OUT_DIR]
target
positional arguments:
target the module or class to extract schemas from
optional arguments:
-h, --help show this help message and exit
--walker {noforeignkey,foreignkey,structual,control}
--decision {default,comfortable}
--depth DEPTH
--decision-relationship DECISION_RELATIONSHIP
--decision-foreignkey DECISION_FOREIGNKEY
--out-dir OUT_DIR
target models
class Group(Base):
__tablename__ = "Group"
query = Session.query_property()
pk = sa.Column(sa.Integer, primary_key=True, doc="primary key")
name = sa.Column(sa.String(255), default="", nullable=False)
color = sa.Column(sa.Enum("red", "green", "yellow", "blue"))
created_at = sa.Column(sa.DateTime, nullable=True)
class User(Base):
__tablename__ = "User"
query = Session.query_property()
pk = sa.Column(sa.Integer, primary_key=True, doc="primary key")
name = sa.Column(sa.String(255), default="", nullable=False)
group_id = sa.Column(sa.Integer, sa.ForeignKey(Group.pk), nullable=False)
group = orm.relationship(Group, uselist=False, backref="users")
created_at = sa.Column(sa.DateTime, nullable=True)
dump schema (commandline)
$ alchemyjsonschema alchemyjsonschema.tests.models:Group --walker structual
{
"required": [
"pk",
"name"
],
"definitions": {
"User": {
"type": "object",
"properties": {
"pk": {
"type": "integer",
"description": "primary key"
},
"name": {
"maxLength": 255,
"type": "string"
},
"created_at": {
"format": "date-time",
"type": "string"
}
}
}
},
"title": "Group",
"type": "object",
"properties": {
"pk": {
"type": "integer",
"description": "primary key"
},
"name": {
"maxLength": 255,
"type": "string"
},
"color": {
"enum": [
"red",
"green",
"yellow",
"blue"
],
"maxLength": 6,
"type": "string"
},
"created_at": {
"format": "date-time",
"type": "string"
},
"users": {
"items": {
"$ref": "#/definitions/User"
},
"type": "array"
}
}
}
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
alchemyjsonschema-0.2.2.tar.gz
(18.4 kB
view hashes)
Built Distribution
Close
Hashes for alchemyjsonschema-0.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50f2c2428a263364cff31cb913021597b96fb2a18c23966f6d7cb886d291b7d6 |
|
MD5 | fdbbdf87c70e3004c1d21da929fd0fdf |
|
BLAKE2b-256 | d5e367924634d4a8d505c05deff6f917888e00f653b5c20d8579aedd430da2f7 |