forked from jumblesale/genyrator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.py
More file actions
114 lines (106 loc) · 3.67 KB
/
Copy pathexample.py
File metadata and controls
114 lines (106 loc) · 3.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import dateutil
from genyrator.entities.Column import create_column, create_identifier_column
from genyrator.entities.Entity import create_entity, create_entity_from_type_dict, APIPath, APIPaths, create_api_path, \
create_additional_property
from genyrator.entities.Relationship import create_relationship, JoinOption
from genyrator.entities.Schema import Schema, create_schema
from genyrator.types import TypeOption
treat_entity = create_entity(
class_name='Treat',
columns=[],
identifier_column=create_column('name', TypeOption.string),
relationships=[
create_relationship('Dog', True, True, JoinOption.to_many, 'favourite_treats', 'dogs')
],
)
owner_dogs_entity = create_entity(
'OwnerDogs',
columns=[
create_column('owner_id', TypeOption.string, 'owner.id'),
create_column('dog_id', TypeOption.string, 'dog.id'),
create_column('current_owner', TypeOption.bool),
],
identifier_column=create_identifier_column('ownerDogId', TypeOption.int),
relationships=[
create_relationship('Dog', True, False, JoinOption.to_one, None, None,),
create_relationship('Owner', True, False, JoinOption.to_one, None, None,),
],
table_name='owner_dogs',
additional_properties=[create_additional_property(property_name='__versioned__', property_value='{}')]
)
fave_treats_entity = create_entity(
'FavouriteTreats',
columns=[
create_column('dog_id', TypeOption.string, 'dog.id'),
create_column('treat_id', TypeOption.string, 'treat.id'),
],
identifier_column=create_identifier_column('treatId', TypeOption.int),
relationships=[
create_relationship('Dog', True, False, JoinOption.to_one,),
create_relationship('Treat', True, False, JoinOption.to_one,),
],
table_name='favourite_treats',
)
example_from_dict = {
"dogId": "int",
"name": "str",
"age": "int",
"goodness": "float",
"dob": "datetime",
"pug": "bool"
}
dog_entity = create_entity_from_type_dict(
class_name='Dog',
type_dict=example_from_dict,
identifier_column_name='dogId',
foreign_keys={('ownerId', 'owner')},
indexes={'name'},
relationships=[
create_relationship('Owner', False, False, JoinOption.to_many, 'owner_dogs', 'owners'),
create_relationship('OwnerDogs', False, False, JoinOption.to_many, None, 'owner_dogs'),
create_relationship('Treat', True, False, JoinOption.to_one, 'favourite_treats', 'favourite_treat'),
],
uniques=[['name', 'goodness'], ['name', 'age']],
api_paths=APIPaths([
create_api_path(['owner_dogs', 'owner'], 'owner_dogs/owners', 'dog-owners')
]),
)
owner_entity = create_entity(
'Owner',
create_identifier_column('owner_id', TypeOption.string),
[],
[create_relationship('Dog', False, True, JoinOption.to_many, 'owner_dogs', 'dogs')]
)
entities = [dog_entity, owner_entity, fave_treats_entity, owner_dogs_entity, treat_entity]
schema = create_schema(
module_name='doggos',
entities=entities,
)
schema.write_files()
from doggos import app, db
from doggos.sqlalchemy.model import *
if __name__ == '__main__':
with app.app_context():
db.drop_all()
db.create_all()
charles = Dog(
dog_id=1,
name='Charles',
age=4,
goodness=11.3,
dob=dateutil.parser.parse("2013-10-17T00:00"),
pug=True,
)
owner = Owner(
owner_id=1,
)
owner_dogs = OwnerDogs(
owner_id=1,
dog_id=1,
current_owner=True,
dog=charles,
owner=owner
)
db.session.add(owner_dogs)
db.session.commit()
app.run(debug=True)