-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
123 lines (96 loc) · 3.8 KB
/
main.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
from flask import Flask, request, render_template, redirect, abort, send_file
from sqlalchemy import exc
from models import *
import csv
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inventory.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
@app.before_first_request
def create_table():
db.create_all()
@app.route('/')
def index():
return redirect('/view')
@app.route('/create/', methods=['GET', 'POST'])
def create():
if request.method == 'GET':
return render_template('create.html')
if request.method == 'POST':
sku = request.form['sku']
name = request.form['name']
description = request.form['description']
price = request.form['price']
try:
qty = int(request.form['qty'])
except ValueError:
return render_template('create.html', exc='qty')
item = Item(sku=sku, name=name, description=description, price=price, qty=qty)
try:
db.session.add(item)
db.session.commit()
except exc.IntegrityError:
return render_template('create.html', exc='integrity')
except exc.StatementError:
return render_template('create.html', exc='price')
return redirect('/view')
@app.route('/view/', methods=['GET', 'POST'])
def view_list():
if request.method == 'POST':
outfile = open('inventory_export.csv', 'w', newline='')
outcsv = csv.writer(outfile)
records = db.session.query(Item).all()
outcsv.writerow([column.name for column in Item.__mapper__.columns])
[outcsv.writerow([getattr(curr, column.name) for column in Item.__mapper__.columns]) for curr in records]
outfile.close()
return send_file('inventory_export.csv', as_attachment=True)
items = Item.query.all()
return render_template('viewlist.html', items=items)
@app.route('/view/<int:sku>/')
def view_item(sku):
item = Item.query.filter_by(sku=sku).first()
if item:
return render_template('viewitem.html', item=item)
return f"Item {sku} is not found"
@app.route('/update/<int:sku>/', methods=['GET', 'POST'])
def update(sku):
item = Item.query.filter_by(sku=sku).first()
if request.method == 'POST':
if item:
sku = request.form['sku']
name = request.form['name']
description = request.form['description']
try:
price = float(request.form['price'])
except ValueError:
return render_template('update.html', item=item, exc='price')
try:
qty = int(request.form['qty'])
except ValueError:
return render_template('update.html', item=item, exc='qty')
try:
setattr(item, 'sku', sku)
setattr(item, 'name', name)
setattr(item, 'description', description)
setattr(item, 'price', price)
setattr(item, 'qty', qty)
db.session.commit()
except exc.IntegrityError:
return render_template('update.html', item=item, exc='integrity')
except (exc.StatementError, exc.InvalidRequestError) as e:
return render_template('update.html', item=item, exc='price')
return redirect(f'/view/')
return f"Item {sku} is not found"
return render_template('update.html', item=item)
@app.route('/delete/<int:sku>/', methods=['GET', 'POST'])
def delete(sku):
item = Item.query.filter_by(sku=sku).first()
if request.method == 'POST':
if item:
db.session.delete(item)
db.session.commit()
return redirect('/view')
abort(404)
return render_template('delete.html')
if __name__ == '__main__':
app.run(host='localhost', port=5000)