-
Notifications
You must be signed in to change notification settings - Fork 176
/
Copy pathapp.py
90 lines (68 loc) · 1.99 KB
/
app.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
import logging
import os
import time
from typing import Dict
from flask import Flask, g, request
APP_PORT = os.getenv("APP_PORT", "3002")
app = Flask(__name__)
@app.route("/inventory", methods=["GET"])
def get_inventory():
logging.info("Getting inventory")
if not hasattr(g, 'inventory'):
restock_inventory()
inventory: Dict[str, int] = g.inventory
return inventory, 200
@app.route("/inventory/reserve", methods=["POST"])
def reserve_inventory():
logging.info(f"Reserving inventory: {request.json}")
order = request.json
items = order['items']
id = order['id']
if not hasattr(g, 'inventory'):
restock_inventory()
inventory: Dict[str, int] = g.inventory
# Check if we have enough inventory to fulfill the order
for item in items:
if item not in inventory or inventory[item] <= 0:
return {
"id": id,
"success": False,
"message": "Out of stock",
}, 200
# Update the inventory
for item in items:
inventory[item] = inventory[item] - 1
# Simulate work
time.sleep(1)
return {
"id": id,
"success": True,
"message": ""
}, 200
@app.route("/inventory/restock", methods=["POST"])
def restock_inventory():
logging.info("Restocking inventory")
inventory = dict[str, int](
{
'milk': 10,
'bread': 10,
'apples': 10,
'oranges': 10,
'iPhone': 10,
}
)
g.inventory = inventory
@app.route("/", methods=["GET"])
@app.route("/healthz", methods=["GET"])
def hello():
return f"Hello from {__name__}", 200
def main():
# Start the Flask app server
app.run(port=APP_PORT, debug=True, use_reloader=False)
app.post('/inventory/restock')
if __name__ == "__main__":
logging.basicConfig(
format='%(asctime)s.%(msecs)03d %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
level=logging.INFO)
main()