Skip to content

Commit b67e11b

Browse files
committed
feat: Add flask example.
1 parent dab1a3c commit b67e11b

File tree

7 files changed

+129
-0
lines changed

7 files changed

+129
-0
lines changed

examples/flask_mongoengine/README.md

Whitespace-only changes.

examples/flask_mongoengine/__init__.py

Whitespace-only changes.

examples/flask_mongoengine/app.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from database import init_db
2+
from flask import Flask
3+
from flask_graphql import GraphQLView
4+
from schema import schema
5+
6+
app = Flask(__name__)
7+
app.debug = True
8+
9+
default_query = '''
10+
{
11+
allEmployees {
12+
edges {
13+
node {
14+
id,
15+
name,
16+
department {
17+
id,
18+
name
19+
},
20+
role {
21+
id,
22+
name
23+
}
24+
}
25+
}
26+
}
27+
}'''.strip()
28+
29+
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))
30+
31+
if __name__ == '__main__':
32+
init_db()
33+
app.run()
34+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from mongoengine import connect
2+
3+
from models import Department, Employee, Role
4+
5+
connect('graphene-mongo-example', host='mongomock://localhost', alias='default')
6+
7+
8+
def init_db():
9+
# Create the fixtures
10+
engineering = Department(name='Engineering')
11+
engineering.save()
12+
13+
hr = Department(name='Human Resources')
14+
hr.save()
15+
16+
manager = Role(name='manager')
17+
manager.save()
18+
19+
engineer = Role(name='engineer')
20+
engineer.save()
21+
22+
peter = Employee(name='Peter', department=engineering, role=engineer)
23+
peter.save()
24+
25+
roy = Employee(name='Roy', department=engineering, role=engineer)
26+
roy.save()
27+
28+
tracy = Employee(name='Tracy', department=hr, role=manager)
29+
tracy.save()
30+

examples/flask_mongoengine/models.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from datetime import datetime
2+
from mongoengine import Document
3+
from mongoengine.fields import (
4+
DateTimeField, ReferenceField, StringField,
5+
)
6+
7+
8+
class Department(Document):
9+
meta = {'collection': 'department'}
10+
name = StringField()
11+
12+
13+
class Role(Document):
14+
meta = {'collection': 'role'}
15+
name = StringField()
16+
17+
18+
class Employee(Document):
19+
meta = {'collection': 'employee'}
20+
name = StringField()
21+
hired_on = DateTimeField(default=datetime.now)
22+
department = ReferenceField(Department)
23+
role = ReferenceField(Role)
24+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Flask==0.12.2
2+
Flask-GraphQL==1.4.1
3+
graphene-mongo==0.1.1
4+
mongomock==3.8.0
5+

examples/flask_mongoengine/schema.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import graphene
2+
from graphene.relay import Node
3+
from graphene_mongo import MongoengineConnectionField, MongoengineObjectType
4+
from models import Department as DepartmentModel
5+
from models import Employee as EmployeeModel
6+
from models import Role as RoleModel
7+
8+
class Department(MongoengineObjectType):
9+
10+
class Meta:
11+
model = DepartmentModel
12+
interfaces = (Node,)
13+
14+
15+
class Role(MongoengineObjectType):
16+
17+
class Meta:
18+
model = RoleModel
19+
interfaces = (Node,)
20+
21+
22+
class Employee(MongoengineObjectType):
23+
24+
class Meta:
25+
model = EmployeeModel
26+
interfaces = (Node,)
27+
28+
29+
class Query(graphene.ObjectType):
30+
node = Node.Field()
31+
all_employees = MongoengineConnectionField(Employee)
32+
all_role = MongoengineConnectionField(Role)
33+
role = graphene.Field(Role)
34+
35+
schema = graphene.Schema(query=Query, types=[Department, Employee, Role])
36+

0 commit comments

Comments
 (0)