· 6 years ago · Sep 24, 2019, 08:00 PM
1from sqlite3 import dbapi2 as sqlite3
2import os
3
4from flask import Flask, g, json, render_template, request
5from flask_assets import Environment, Bundle
6import requests
7from json import dumps,loads
8
9
10app = Flask(__name__)
11
12app.config.update(dict(
13 DATABASE=os.path.join(app.root_path, 'shipping.db'),
14 DEBUG=True,
15 SECRET_KEY='development key',
16 USERNAME='admin',
17 PASSWORD='password'
18))
19
20def connect_db():
21 """ Connects to the specific database. """
22 rv = sqlite3.connect(app.config['DATABASE'])
23 rv.row_factory = sqlite3.Row
24 return rv
25
26
27def get_db():
28 """ Opens a new database connection if needed. """
29 if not hasattr(g, 'sqlite_db'):
30 g.sqlite_db = connect_db()
31 return g.sqlite_db
32
33@app.before_first_request
34def initialize_db():
35 db = get_db()
36
37 db.execute("""
38 CREATE TABLE IF NOT EXISTS Orders(
39 orderID INTEGER PRIMARY KEY,
40 customer TEXT,
41 shipping_address TEXT,
42 line_items TEXT,
43 warehouseID INTEGER
44 )
45 """)
46
47 db.execute("""
48 CREATE TABLE IF NOT EXISTS Warehouses(
49 warehouseID INTEGER PRIMARY KEY,
50 location TEXT,
51 name TEXT,
52 latitude REAL,
53 longitude REAL
54 )
55 """)
56
57 db.execute("""
58 CREATE TABLE IF NOT EXISTS Distances(
59 zip_code TEXT PRIMARY KEY,
60 latitude REAL,
61 longitude REAL,
62 nearest_warehouse INTEGER,
63 distance REAL
64
65 )
66 """)
67
68 cur = db.execute("select count(*) as count from Warehouses")
69 count = cur.fetchone()['count']
70 if count==0:
71 warehouses = [(1, '10001', 'New York', 40.7497, -73.9958),
72 (2, '90001', 'Los Angeles', 34.0522, -118.2437),
73 (3, '77001', 'Houston', 29.7604, -95.3698)]
74 db.executemany("insert into Warehouses values (?,?,?)", warehouses)
75 db.commit()
76
77@app.teardown_appcontext
78def close_db(error):
79 """ Closes the database again at the end of the request. """
80 if hasattr(g, 'sqlite_db'):
81 g.sqlite_db.close()
82
83@app.route('/orders', methods=['POST'])
84def createOrder():
85 shipping_address = request.form.get('shipping_address','')
86 customer = request.form.get('customer','')
87 line_items = request.form.get('line_items','')
88 zip_code = loads(shipping_address)["zip"]
89 db = get_db()
90 cur = db.execute("""
91 select warehouseID,
92 location
93 from Warehouses
94 where location=?
95 """, (zip_code,))
96 warehouseID = -1
97 for row in cur:
98 warehouseID = row['warehouseID']
99 cur = db.execute("""
100 insert into Orders
101 (customer, shipping_address, line_items, warehouseID)
102 values(:customer, :shipping_address, :line_items, :warehouseID)
103 """, {'customer': customer, 'shipping_address': shipping_address, 'line_items': line_items, 'warehouseID': warehouseID})
104 db.commit()
105 return 'order placed'
106
107if __name__ == '__main__':
108 app.run(host='0.0.0.0', port=5000)