2323
2424
2525class Sources (str , enum .Enum ):
26+ """
27+ A source available for retrieving data.
28+ """
2629 jhu = 'jhu'
2730 csbs = 'csbs'
2831
@@ -48,13 +51,15 @@ class Sources(str, enum.Enum):
4851# TODO this could probably just be a FastAPI dependency.
4952@APP .middleware ('http' )
5053async def add_datasource (request : fastapi .Request , call_next ):
51- """Attach the data source to the request.state."""
54+ """
55+ Attach the data source to the request.state.
56+ """
5257 # Retrieve the datas ource from query param.
5358 source = data_source (request .query_params .get ('source' , default = 'jhu' ))
5459
5560 # Abort with 404 if source cannot be found.
5661 if not source :
57- raise HTTPException ( status_code = 404 , detail = 'The provided data-source was not found.' )
62+ return fastapi . Response ( 'The provided data-source was not found.' , status_code = 404 )
5863
5964 # Attach source to request.
6065 request .state .source = source
@@ -74,6 +79,9 @@ async def add_datasource(request: fastapi.Request, call_next):
7479async def handle_validation_error (
7580 request : fastapi .Request , exc : pydantic .error_wrappers .ValidationError
7681):
82+ """
83+ Handles validation errors.
84+ """
7785 return fastapi .responses .JSONResponse ({'message' : exc .errors ()}, status_code = 422 )
7886
7987
@@ -86,7 +94,9 @@ async def handle_validation_error(
8694
8795@V2 .get ('/latest' , response_model = models .Latest )
8896def get_latest (request : fastapi .Request , source : Sources = 'jhu' ):
89- """Getting latest amount of total confirmed cases, deaths, and recoveries."""
97+ """
98+ Getting latest amount of total confirmed cases, deaths, and recoveries.
99+ """
90100 locations = request .state .source .get_all ()
91101 return {
92102 'latest' : {
@@ -106,6 +116,9 @@ def get_all_locations(
106116 timelines : bool = False ,
107117 source : Sources = 'jhu' ,
108118):
119+ """
120+ Getting all the locations.
121+ """
109122 # Retrieve all the locations.
110123 locations = request .state .source .get_all ()
111124
@@ -130,15 +143,22 @@ def get_all_locations(
130143
131144@V2 .get ('/locations/{id}' , response_model = models .Location )
132145def get_location_by_id (request : fastapi .Request , id : int , timelines : bool = True ):
133- return {'location' : request .state .source .get (id ).serialize (timelines )}
146+ """
147+ Getting specific location by id.
148+ """
149+ return {
150+ 'location' : request .state .source .get (id ).serialize (timelines )
151+ }
134152
135153
136154@V2 .get ('/sources' )
137155async def sources ():
138156 """
139157 Retrieves a list of data-sources that are availble to use.
140158 """
141- return {'sources' : list (data_sources .keys ())}
159+ return {
160+ 'sources' : list (data_sources .keys ())
161+ }
142162
143163# Include routers.
144164APP .include_router (V2 , prefix = '/v2' , tags = ['v2' ])
@@ -147,6 +167,7 @@ async def sources():
147167# v1 @ /
148168APP .mount ('/' , WSGIMiddleware (create_app ()))
149169
170+ # Running of app.
150171if __name__ == '__main__' :
151172 uvicorn .run (
152173 'app.main:APP' ,
0 commit comments