Skip to content

Commit 28de5ec

Browse files
authored
Merge pull request #88 from LUS24/develop
2 parents 3ada848 + b8ccf49 commit 28de5ec

File tree

3 files changed

+84
-86
lines changed
  • docs/docs/05_flask_smorest/02_data_model_improvements
  • project

3 files changed

+84
-86
lines changed

docs/docs/05_flask_smorest/02_data_model_improvements/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ def create_store():
245245
<TabItem value="new" label="create_store (new)">
246246

247247
```py title="app.py"
248+
import uuid
249+
248250
@app.post("/store")
249251
def create_store():
250252
store_data = request.get_json()
@@ -255,6 +257,8 @@ def create_store():
255257
return store
256258
```
257259

260+
Here we add a new import, [the `uuid` module](https://docs.python.org/3/library/uuid.html). We will be using it to create unique IDs for our stores and items instead of relying on the uniqueness of their names.
261+
258262
</TabItem>
259263
</Tabs>
260264
</div>

project/01-first-rest-api/app.py

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,54 @@
1-
import uuid
21
from flask import Flask, request
32

43
app = Flask(__name__)
54

6-
stores = {}
7-
items = {}
8-
9-
10-
@app.get("/item/<string:id>")
11-
def get_item(id):
12-
try:
13-
return items[id]
14-
except KeyError:
15-
return {"message": "Item not found"}, 404
16-
17-
18-
@app.post("/item")
19-
def create_item():
20-
request_data = request.get_json()
21-
new_item_id = uuid.uuid4().hex
22-
new_item = {
23-
"name": request_data["name"],
24-
"price": request_data["price"],
25-
"store_id": request_data["store_id"],
5+
stores = [
6+
{
7+
"name": "My Store",
8+
"items": [
9+
{
10+
"name": "Chair",
11+
"price": 15.99
12+
}
13+
]
2614
}
27-
items[new_item_id] = new_item
28-
return new_item
29-
30-
31-
@app.get("/item")
32-
def get_all_items():
33-
return {"items": list(items.values())}
15+
]
3416

35-
36-
@app.get("/store/<string:id>")
37-
def get_store(id):
38-
try:
39-
# Here you might also want to add the items in this store
40-
# We'll do that later on in the course
41-
return stores[id]
42-
except KeyError:
43-
return {"message": "Store not found"}, 404
17+
@app.get("/store")
18+
def get_stores():
19+
return {"stores": stores}
4420

4521

4622
@app.post("/store")
4723
def create_store():
4824
request_data = request.get_json()
49-
new_store_id = uuid.uuid4().hex
50-
new_store = {"id": new_store_id, "name": request_data["name"]}
51-
stores[new_store_id] = new_store
25+
new_store = {"name": request_data["name"], "items": []}
26+
stores.append(new_store)
5227
return new_store, 201
5328

5429

55-
@app.get("/store")
56-
def get_stores():
57-
return {"stores": list(stores.values())}
30+
@app.post("/store/<string:name>/item")
31+
def create_item(name):
32+
request_data = request.get_json()
33+
for store in stores:
34+
if store["name"] == name:
35+
new_item = {"name": request_data["name"], "price": request_data["price"]}
36+
store["items"].append(new_item)
37+
return new_item, 201
38+
return {"message": "Store not found"}, 404
39+
40+
41+
@app.get("/store/<string:name>")
42+
def get_store(name):
43+
for store in stores:
44+
if store["name"] == name:
45+
return store
46+
return {"message": "Store not found"}, 404
47+
48+
49+
@app.get("/store/<string:name>/item")
50+
def get_item_in_store(name):
51+
for store in stores:
52+
if store["name"] == name:
53+
return {"items": store["items"]}
54+
return {"message": "Store not found"}, 404
Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,54 @@
1-
import uuid
21
from flask import Flask, request
32

43
app = Flask(__name__)
54

6-
stores = {}
7-
items = {}
8-
9-
10-
@app.get("/item/<string:id>")
11-
def get_item(id):
12-
try:
13-
return items[id]
14-
except KeyError:
15-
return {"message": "Item not found"}, 404
16-
17-
18-
@app.post("/item")
19-
def create_item():
20-
request_data = request.get_json()
21-
new_item_id = uuid.uuid4().hex
22-
new_item = {
23-
"name": request_data["name"],
24-
"price": request_data["price"],
25-
"store_id": request_data["store_id"],
5+
stores = [
6+
{
7+
"name": "My Store",
8+
"items": [
9+
{
10+
"name": "Chair",
11+
"price": 15.99
12+
}
13+
]
2614
}
27-
items[new_item_id] = new_item
28-
return new_item
29-
30-
31-
@app.get("/item")
32-
def get_all_items():
33-
return {"items": list(items.values())}
15+
]
3416

35-
36-
@app.get("/store/<string:id>")
37-
def get_store(id):
38-
try:
39-
# Here you might also want to add the items in this store
40-
# We'll do that later on in the course
41-
return stores[id]
42-
except KeyError:
43-
return {"message": "Store not found"}, 404
17+
@app.get("/store")
18+
def get_stores():
19+
return {"stores": stores}
4420

4521

4622
@app.post("/store")
4723
def create_store():
4824
request_data = request.get_json()
49-
new_store_id = uuid.uuid4().hex
50-
new_store = {"id": new_store_id, "name": request_data["name"]}
51-
stores[new_store_id] = new_store
25+
new_store = {"name": request_data["name"], "items": []}
26+
stores.append(new_store)
5227
return new_store, 201
5328

5429

55-
@app.get("/store")
56-
def get_stores():
57-
return {"stores": list(stores.values())}
30+
@app.post("/store/<string:name>/item")
31+
def create_item(name):
32+
request_data = request.get_json()
33+
for store in stores:
34+
if store["name"] == name:
35+
new_item = {"name": request_data["name"], "price": request_data["price"]}
36+
store["items"].append(new_item)
37+
return new_item, 201
38+
return {"message": "Store not found"}, 404
39+
40+
41+
@app.get("/store/<string:name>")
42+
def get_store(name):
43+
for store in stores:
44+
if store["name"] == name:
45+
return store
46+
return {"message": "Store not found"}, 404
47+
48+
49+
@app.get("/store/<string:name>/item")
50+
def get_item_in_store(name):
51+
for store in stores:
52+
if store["name"] == name:
53+
return {"items": store["items"]}
54+
return {"message": "Store not found"}, 404

0 commit comments

Comments
 (0)