Skip to content

Commit 89070f7

Browse files
authored
Merge pull request #13 from schoolofcode-me/add_error_propagation_to_section_5_and_6
Added error propagation
2 parents 8574ac9 + 816aec0 commit 89070f7

File tree

12 files changed

+49
-32
lines changed

12 files changed

+49
-32
lines changed

section5/app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from flask import Flask, request
1+
from flask import Flask
22
from flask_restful import Api
33
from flask_jwt import JWT
44

@@ -7,6 +7,7 @@
77
from item import Item, ItemList
88

99
app = Flask(__name__)
10+
app.config['PROPAGATE_EXCEPTIONS'] = True
1011
app.secret_key = 'jose'
1112
api = Api(app)
1213

section5/item.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from flask_jwt import jwt_required
33
import sqlite3
44

5+
56
class Item(Resource):
67
TABLE_NAME = 'items'
78

section5/security.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from werkzeug.security import safe_str_cmp
22
from user import User
33

4+
45
def authenticate(username, password):
56
user = User.find_by_username(username)
67
if user and safe_str_cmp(user.password, password):
78
return user
89

10+
911
def identity(payload):
1012
user_id = payload['identity']
1113
return User.find_by_id(user_id)

section5/user.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import sqlite3
22
from flask_restful import Resource, reqparse
33

4+
45
class User(Resource):
56
TABLE_NAME = 'users'
67

@@ -47,15 +48,15 @@ class UserRegister(Resource):
4748

4849
parser = reqparse.RequestParser()
4950
parser.add_argument('username',
50-
type=str,
51-
required=True,
52-
help="This field cannot be left blank!"
53-
)
51+
type=str,
52+
required=True,
53+
help="This field cannot be left blank!"
54+
)
5455
parser.add_argument('password',
55-
type=str,
56-
required=True,
57-
help="This field cannot be left blank!"
58-
)
56+
type=str,
57+
required=True,
58+
help="This field cannot be left blank!"
59+
)
5960

6061
def post(self):
6162
data = UserRegister.parser.parse_args()

section6/app.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
app = Flask(__name__)
1111
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
1212
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
13-
app.secret_key = 'EiEiO'
13+
app.config['PROPAGATE_EXCEPTIONS'] = True
14+
app.secret_key = 'jose'
1415
api = Api(app)
1516

17+
1618
@app.before_first_request
1719
def create_tables():
1820
db.create_all()
1921

22+
2023
jwt = JWT(app, authenticate, identity) # /auth
2124

2225
api.add_resource(Store, '/store/<string:name>')

section6/models/item.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from db import db
22

3+
34
class ItemModel(db.Model):
45
__tablename__ = 'items'
56

section6/models/store.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from db import db
22

3+
34
class StoreModel(db.Model):
45
__tablename__ = 'stores'
56

section6/models/user.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from db import db
22

3+
34
class UserModel(db.Model):
45
__tablename__ = 'users'
56

section6/resources/item.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
from flask_jwt import jwt_required
33
from models.item import ItemModel
44

5+
56
class Item(Resource):
67
parser = reqparse.RequestParser()
78
parser.add_argument('price',
8-
type=float,
9-
required=True,
10-
help="This field cannot be left blank!"
11-
)
9+
type=float,
10+
required=True,
11+
help="This field cannot be left blank!"
12+
)
1213
parser.add_argument('store_id',
13-
type=int,
14-
required=True,
15-
help="Every item needs a store_id."
16-
)
14+
type=int,
15+
required=True,
16+
help="Every item needs a store_id."
17+
)
1718

1819
@jwt_required()
1920
def get(self, name):
@@ -28,7 +29,7 @@ def post(self, name):
2829

2930
data = Item.parser.parse_args()
3031

31-
item = ItemModel(name, data['price'], data['store_id'])
32+
item = ItemModel(name, **data)
3233

3334
try:
3435
item.save_to_db()
@@ -41,8 +42,8 @@ def delete(self, name):
4142
item = ItemModel.find_by_name(name)
4243
if item:
4344
item.delete_from_db()
44-
45-
return {'message': 'Item deleted'}
45+
return {'message': 'Item deleted.'}
46+
return {'message': 'Item not found.'}, 404
4647

4748
def put(self, name):
4849
data = Item.parser.parse_args()
@@ -52,12 +53,13 @@ def put(self, name):
5253
if item:
5354
item.price = data['price']
5455
else:
55-
item = ItemModel(name, data['price'])
56+
item = ItemModel(name, **data)
5657

5758
item.save_to_db()
5859

5960
return item.json()
6061

62+
6163
class ItemList(Resource):
6264
def get(self):
6365
return {'items': list(map(lambda x: x.json(), ItemModel.query.all()))}

section6/resources/store.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
from flask_restful import Resource, reqparse
1+
from flask_restful import Resource
22
from models.store import StoreModel
33

4+
45
class Store(Resource):
56
def get(self, name):
67
store = StoreModel.find_by_name(name)
@@ -27,6 +28,7 @@ def delete(self, name):
2728

2829
return {'message': 'Store deleted'}
2930

31+
3032
class StoreList(Resource):
3133
def get(self):
3234
return {'stores': list(map(lambda x: x.json(), StoreModel.query.all()))}

0 commit comments

Comments
 (0)