This repository has been archived by the owner on May 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
plant.py
102 lines (85 loc) · 2.77 KB
/
plant.py
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
from flask import redirect, request, url_for
from flask.ext.login import login_required
import sqlalchemy.orm as orm
from webargs import fields
from webargs.flaskparser import use_args
import bauble.db as db
from bauble.forms import form_factory
from bauble.models import Plant
from bauble.middleware import use_model
from bauble.resource import Resource
from bauble.schema import schema_factory
import bauble.utils as utils
resource = Resource('plant', __name__)
@resource.index
@login_required
def index():
taxa = Plant.query.all()
return resource.render_json(taxa)
@resource.show
@login_required
@use_model(Plant)
def show(plant, id):
if request.prefers_json:
return resource.render_json(plant)
# relations = ['/plants', '/plants/plants']
# counts = {}
# for relation in relations:
# _, base = relation.rsplit('/', 1)
# counts[base] = utils.count_relation(plant, relation)
return resource.render_html(plant=plant, counts=counts)
@resource.new
@login_required
@use_model(Plant)
def new(plant):
return resource.render_html(plant=plant, form=form_factory(plant))
@resource.create
@login_required
def create():
plant, errors = schema_factory(Plant).load(request.params)
if errors:
if request.prefers_json:
return resource.render_json(errors, status=422)
return resource.render_html(template_name='new.html.jinja', plant=plant,
form=form_factory(plant))
db.session.add(plant)
db.session.commit()
if request.prefers_json:
return resource.render_json(plant, status=201)
return resource.render_html(template_name='edit.html.jinja', plant=plant,
form=form_factory(plant), status=201)
@resource.update
@login_required
@use_model(Plant)
def update(plant, id):
db.session.commit()
if request.prefers_json:
return resource.render_json(plant)
# return resource.render_html(plant=plant, form=form_factory(plant))
return redirect(url_for('.edit', id=id))
@resource.edit
@login_required
def edit(id):
plant = Plant.query.get_or_404(id)
if request.prefers_json:
return resource.render_json(plant)
return resource.render_html(plant=plant, form=form_factory(plant))
@resource.destroy
@login_required
@use_model(Plant)
def destroy(plant, id):
db.session.delete(plant)
db.session.commit()
return '', 204
@resource.route("/<int:id>/count")
@login_required
@use_args({
'relation': fields.DelimitedList(fields.String(), required=True)
})
def plant_count(args, id):
data = {}
plant = Plant.query.get_or_404(id)
for relation in args['relation']:
_, base = relation.rsplit('/', 1)
data[base] = utils.count_relation(plant, relation)
return utils.json_response(data)