Skip to content

Commit 1dd1cf0

Browse files
author
ExpDev07
committed
fixes source middleware not returning 404 when invalid source is provided + doc changes + some cleanup
1 parent 6b4447b commit 1dd1cf0

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

app/main.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323

2424

2525
class 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')
5053
async 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):
7479
async 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)
8896
def 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)
132145
def 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')
137155
async 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.
144164
APP.include_router(V2, prefix='/v2', tags=['v2'])
@@ -147,6 +167,7 @@ async def sources():
147167
# v1 @ /
148168
APP.mount('/', WSGIMiddleware(create_app()))
149169

170+
# Running of app.
150171
if __name__ == '__main__':
151172
uvicorn.run(
152173
'app.main:APP',

0 commit comments

Comments
 (0)