-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrestapi.py
More file actions
92 lines (79 loc) · 3.09 KB
/
restapi.py
File metadata and controls
92 lines (79 loc) · 3.09 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
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
from fastapi import FastAPI,HTTPException
from typing import List, Optional
from enum import IntEnum, StrEnum
from pydantic import BaseModel, Field
class Priority(IntEnum):
low=3
medium=2
high=1
class Status(StrEnum):
p="Pending"
c="Completed"
class To_do_Base(BaseModel):
task:str=Field(...,min_length=3,max_length=50)
description:str=Field(default='No description',min_length=3,max_length=75)
priority:Priority=Field(default=Priority.low)
status:Status=Field(default=Status.p)
class To_do(To_do_Base):
id:int=Field(...,gt=0)
class To_do_update(BaseModel):
task:Optional[str]=Field(None,min_length=3,max_length=50)
description:Optional[str]=Field(None,min_length=3,max_length=75)
priority:Optional[Priority]=Field(None)
status:Optional[Status]=Field(None)
app=FastAPI()
todoslist = [
To_do(id=1,task='Buy groceries',description='Milk, Bread, Eggs, and Butter',status=Status.p,priority=Priority.high),
To_do(id=2,task='Clean the room',description='Organize desk and vacuum floor',status=Status.c,priority=Priority.medium),
To_do(id=3,task='Finish math homework',description='Complete calculus assignment',status=Status.p,priority=Priority.high),
To_do(id=4,task='Water the plants',description='Water all indoor plants',status=Status.p,priority=Priority.medium)
]
@app.get("/")
def greet():
return 'Welcome To My RestAPI'
@app.get("/todos/{todoid}",response_model=To_do)
def gettodo(todoid:int):
for i in todoslist:
if i.id==todoid:
return i
raise HTTPException(status_code=404,detail='Task Not Found')
@app.get("/alltodos",response_model=List[To_do])
def getlist(n:int=None):
if n:
if n>len(todoslist):
raise HTTPException(status_code=400,detail=f'The to-do list only has {len(todoslist)} tasks.')
else:
return todoslist[:n]
else:
return todoslist
@app.post("/make_a_todo",response_model=List[To_do])
def createtodo(todo:To_do_Base):
newid=max(i.id for i in todoslist)+1
newtodo=To_do(id=newid,task=todo.task,description=todo.description,priority=todo.priority,status=todo.status)
todoslist.append(newtodo)
return todoslist
@app.put("/change_todo/{todo_id}",response_model=List[To_do])
def update(todo_id:int,new_todo:To_do_update):
for i in todoslist:
if i.id==todo_id:
if new_todo.task!=None:
i.task=new_todo.task
if new_todo.description!=None:
i.description=new_todo.description
if new_todo.priority!=None:
i.priority=new_todo.priority
if new_todo.status!=None:
i.status=new_todo.status
return todoslist
raise HTTPException(status_code=404,detail="Task Not Found")
@app.delete("/del_todo",response_model=List[To_do])
def tododel(todo_ID:int=None):
if todo_ID:
for i in todoslist:
if i.id==todo_ID:
todoslist.remove(i)
return todoslist
raise HTTPException(status_code=404,detail="Task Not Found")
else:
todoslist.clear()
return todoslist