forked from AlexusBlack/udacity-catalog-project
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tools.py
154 lines (120 loc) · 3.58 KB
/
tools.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"""
Set of tools that provides us additional abstration layer on top of database
and other useful functions
"""
from functools import wraps
import flask
from item import Item
from category import Category
from base import session
def login_required(func):
"""
Login decorator (middleware)
that protects route from unauthorized access
"""
@wraps(func)
def check_login(*args, **kwargs):
"""
Checks if user logged in before executing function
if not logged redirects to login page
"""
if user_is_authorized():
return func(*args, **kwargs)
else:
return flask.redirect(flask.url_for('auth.login_route'))
return check_login
def user_info():
"""
General use user information
"""
user = {
'authorized': False
}
if not user_is_authorized():
return user
user['authorized'] = True
user['id'] = flask.session['user_id']
user['name'] = flask.session['user_name']
user['photo'] = flask.session['user_photo']
return user
def user_is_authorized():
"""
Simple check if user is authorized
"""
return 'credentials' in flask.session
def get_categories():
"""
Getting categories list out of DB
"""
categories = session.query(Category).all()
return categories
def get_category(category_id):
"""
Getting single category out of DB by id
"""
target_category = session.query(Category).get(category_id)
return target_category
def add_category():
"""
Adding new category to DB with fields from request form
* better replace with arguments, to make method more independent
"""
name = flask.request.form['name']
owner = user_info()['id']
new_category = Category(name, owner)
session.add(new_category)
session.commit()
def update_category(category_id):
"""
Updating category in DB with fields from request form
* better replace with arguments, to make method more independent
"""
name = flask.request.form['name']
category_to_update = session.query(Category).get(category_id)
category_to_update.name = name
session.add(category_to_update)
session.commit()
def delete_category(category_id):
"""
Deleting category by id
"""
category_to_delete = session.query(Category)\
.filter(Category.id == category_id).first()
session.delete(category_to_delete)
session.commit()
def get_item(item_id):
"""
Retrieving item from DB by id
"""
target_item = session.query(Item).get(item_id)
return target_item
def add_item(category_id):
"""
Adding item to DB with fields from request form
* better replace with arguments, to make method more independent
"""
name = flask.request.form['name']
owner = user_info()['id']
description = flask.request.form['description']
new_item = Item(name, description, owner)
new_item.category_id = category_id
session.add(new_item)
session.commit()
def update_item(item_id):
"""
Updating item in DB with fields from request form
* better replace with arguments, to make method more independent
"""
name = flask.request.form['name']
description = flask.request.form['description']
item_to_update = session.query(Item).get(item_id)
item_to_update.name = name
item_to_update.description = description
session.add(item_to_update)
session.commit()
def delete_item(item_id):
"""
Deleting item in DB by id
"""
session.query(Item).filter(Item.id == item_id).delete()
session.commit()