forked from dualboot-partners/eu-python-learn-challenge
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflask_excercises.py
More file actions
44 lines (36 loc) · 1.48 KB
/
flask_excercises.py
File metadata and controls
44 lines (36 loc) · 1.48 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
from flask import Flask, abort, request
from http import HTTPStatus
class FlaskExercise:
users: dict = {}
@staticmethod
def configure_routes(app: Flask) -> None:
@app.post("/user")
def user_post() -> tuple:
name = request.json.get("name")
if name is None:
return {
"errors": {"name": "This field is required"}
}, HTTPStatus.UNPROCESSABLE_ENTITY
FlaskExercise.users[name] = {}
return {"data": f"User {name} is created!"}, HTTPStatus.CREATED
@app.get("/user/<string:name>")
def show_user(name: str) -> dict:
FlaskExercise.abort_if_user_not_found(name)
return {"data": f"My name is {name}"}
@app.patch("/user/<string:name>")
def update_user(name: str) -> dict:
FlaskExercise.abort_if_user_not_found(name)
new_name = request.json.get("name")
user = FlaskExercise.users.pop(name)
FlaskExercise.users[new_name] = user
return {"data": f"My name is {new_name}"}
@app.delete("/user/<string:name>")
def delete_user(name: str) -> tuple:
FlaskExercise.abort_if_user_not_found(name)
del FlaskExercise.users[name]
return "", HTTPStatus.NO_CONTENT
@staticmethod
def abort_if_user_not_found(name: str) -> None:
name = FlaskExercise.users.get(name)
if name is None:
abort(HTTPStatus.NOT_FOUND)