-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathapp.py
More file actions
53 lines (43 loc) · 1.63 KB
/
app.py
File metadata and controls
53 lines (43 loc) · 1.63 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
from flask import Flask
from flask_restx import Api, Resource, reqparse, fields, abort
from bank_api.bank import Bank
from bank_api.bank_report import BankReport
def create_app():
# Set up framework and service classes
app = Flask(__name__)
app.config.SWAGGER_UI_DOC_EXPANSION = 'list'
api = Api(app, title='My Banking API',
description='A simple banking API for learning Test-Driven-Development')
bank = Bank()
bank_report = BankReport(bank)
# Custom API documentation
add_money = api.model("Add", {
'name': fields.String,
'amount': fields.Integer
})
@api.route('/accounts/<string:name>')
class AccountResource(Resource):
def post(self, name):
"""Create a new named Account"""
try:
return bank.create_account(name).to_dict()
except Exception as e:
abort(400, str(e))
def get(self, name):
"""Get an Account"""
try:
account = bank.get_account(name)
return {**account.to_dict(), 'balance': bank_report.get_balance(name)}
except Exception:
abort(404, 'Account not found')
@api.route('/money')
class MoneyResource(Resource):
@api.expect(add_money)
def post(self):
"""Add funds to an account"""
parser = reqparse.RequestParser()
parser.add_argument('name', type=str, help='Account name')
parser.add_argument('amount', type=int, help='Transfer amount (pence)')
args = parser.parse_args()
return bank.add_funds(**args)
return app