1+ from fastapi import APIRouter , Depends , HTTPException , Path , Body
2+ from uptime_kuma_api import UptimeKumaApi , UptimeKumaException
3+ from config import logger as logging
4+ from schemas .api import API
5+ from utils .deps import get_current_user
6+ from schemas .statuspage import StatusPageList , StatusPage , AddStatusPageResponse , AddStatusPageRequest ,SaveStatusPageRequest ,SaveStatusPageResponse , DeleteStatusPageResponse
7+
8+ router = APIRouter (redirect_slashes = True )
9+
10+
11+ @router .get ("" , response_model = StatusPageList , description = "Get all status pages" )
12+ async def get_all_status_pages (cur_user : API = Depends (get_current_user )):
13+ api : UptimeKumaApi = cur_user ['api' ]
14+ try :
15+ return {"statuspages" : api .get_status_pages ()}
16+ except Exception as e :
17+ logging .fatal (e )
18+ raise HTTPException (500 , str (e ))
19+
20+
21+ @router .get ("/{slug}" , response_model = StatusPage , description = "Get a status page" )
22+ async def get_status_page (slug : str , cur_user : API = Depends (get_current_user )):
23+ api : UptimeKumaApi = cur_user ['api' ]
24+ try :
25+ return api .get_status_page (slug )
26+ except UptimeKumaException as e :
27+ logging .error (e )
28+ raise HTTPException (404 , str (e ))
29+ except Exception as e :
30+ logging .fatal (e )
31+ raise HTTPException (500 , str (e ))
32+
33+
34+ @router .post ("" , response_model = AddStatusPageResponse , description = "Add a status page" )
35+ async def add_status_page (status_page_data : AddStatusPageRequest , cur_user : API = Depends (get_current_user )):
36+ api : UptimeKumaApi = cur_user ['api' ]
37+ try :
38+ return api .add_status_page (status_page_data .slug , status_page_data .title )
39+ except UptimeKumaException as e :
40+ logging .error (e )
41+ raise HTTPException (400 , str (e ))
42+ except Exception as e :
43+ logging .fatal (e )
44+ raise HTTPException (500 , str (e ))
45+
46+
47+ @router .post ("/{slug}" ,response_model = SaveStatusPageResponse , description = "Save a status page" )
48+ async def save_status_page (
49+ slug : str = Path (...),
50+ status_page_data : SaveStatusPageRequest = Body (...),
51+ cur_user : API = Depends (get_current_user ),
52+ ):
53+ api : UptimeKumaApi = cur_user ['api' ]
54+ try :
55+ print (status_page_data .id )
56+ return api .save_status_page (
57+ slug ,
58+ id = status_page_data .id ,
59+ title = status_page_data .title ,
60+ description = status_page_data .description ,
61+ theme = status_page_data .theme ,
62+ published = status_page_data .published ,
63+ showTags = status_page_data .showTags ,
64+ domainNameList = status_page_data .domainNameList ,
65+ googleAnalyticsId = status_page_data .googleAnalyticsId ,
66+ customCSS = status_page_data .customCSS ,
67+ footerText = status_page_data .footerText ,
68+ showPoweredBy = status_page_data .showPoweredBy ,
69+ icon = status_page_data .icon ,
70+ publicGroupList = status_page_data .publicGroupList ,
71+ )
72+ except UptimeKumaException as e :
73+ logging .error (e )
74+ raise HTTPException (400 , str (e ))
75+ except Exception as e :
76+ logging .fatal (e )
77+ raise HTTPException (500 , str (e ))
78+
79+ @router .delete ("/{slug}" , response_model = DeleteStatusPageResponse , description = "Delete a status page" )
80+ async def delete_status_page (slug : str = Path (...), cur_user : API = Depends (get_current_user )):
81+ api : UptimeKumaApi = cur_user ['api' ]
82+ try :
83+ return api .delete_status_page (slug )
84+ #Catch type error...which is actually a success, go figgure. {"detail":"'NoneType' object has no attribute 'values'"}
85+ except TypeError as e :
86+ if "NoneType" in str (e ):
87+ logging .info ("Status page deleted successfully" )
88+ return {"status" : "success" }
89+ except UptimeKumaException as e :
90+ logging .error (e )
91+ raise HTTPException (404 , str (e ))
92+ except Exception as e :
93+ logging .fatal (e )
94+ raise HTTPException (500 , str (e ))
0 commit comments