Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Combine end router modules
move version 2 endpoint definitions to single module
move version 1 endpoint definitions to single module
  • Loading branch information
Kilo59 committed Apr 18, 2020
commit 6dd7c3c486b36f99893e0348e189906e008e058c
3 changes: 1 addition & 2 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
from fastapi.responses import JSONResponse

from .data import data_source
from .router.v1 import V1
from .router.v2 import V2
from .routers import V1, V2
from .utils.httputils import setup_client_session, teardown_client_session

# ############
Expand Down
8 changes: 0 additions & 8 deletions app/router/__init__.py

This file was deleted.

4 changes: 0 additions & 4 deletions app/router/v1/__init__.py

This file was deleted.

20 changes: 0 additions & 20 deletions app/router/v1/all.py

This file was deleted.

11 changes: 0 additions & 11 deletions app/router/v1/confirmed.py

This file was deleted.

11 changes: 0 additions & 11 deletions app/router/v1/deaths.py

This file was deleted.

11 changes: 0 additions & 11 deletions app/router/v1/recovered.py

This file was deleted.

4 changes: 0 additions & 4 deletions app/router/v2/__init__.py

This file was deleted.

21 changes: 0 additions & 21 deletions app/router/v2/latest.py

This file was deleted.

11 changes: 0 additions & 11 deletions app/router/v2/sources.py

This file was deleted.

3 changes: 3 additions & 0 deletions app/routers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"""app.routers"""
from .v1 import V1
from .v2 import V2
47 changes: 47 additions & 0 deletions app/routers/v1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
"""app.router.v1.py"""
from fastapi import APIRouter

from ..services.location.jhu import get_category

V1 = APIRouter()


@V1.get("/all")
async def all_categories():
"""Get all the categories."""
confirmed = await get_category("confirmed")
deaths = await get_category("deaths")
recovered = await get_category("recovered")

return {
# Data.
"confirmed": confirmed,
"deaths": deaths,
"recovered": recovered,
# Latest.
"latest": {"confirmed": confirmed["latest"], "deaths": deaths["latest"], "recovered": recovered["latest"],},
}


@V1.get("/confirmed")
async def get_confirmed():
"""Confirmed cases."""
confirmed_data = await get_category("confirmed")

return confirmed_data


@V1.get("/deaths")
async def get_deaths():
"""Total deaths."""
deaths_data = await get_category("deaths")

return deaths_data


@V1.get("/recovered")
async def get_recovered():
"""Recovered cases."""
recovered_data = await get_category("recovered")

return recovered_data
40 changes: 32 additions & 8 deletions app/router/v2/locations.py → app/routers/v2.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
"""app.router.v2.locations.py"""
from fastapi import HTTPException, Request
"""app.router.v2"""
from fastapi import APIRouter, HTTPException, Request

from ...enums.sources import Sources
from ...models.location import LocationResponse as Location
from ...models.location import LocationsResponse as Locations
from . import V2
from ..data import DATA_SOURCES
from ..enums.sources import Sources
from ..models import LatestResponse, LocationResponse, LocationsResponse

V2 = APIRouter()


@V2.get("/latest", response_model=LatestResponse)
async def get_latest(request: Request, source: Sources = "jhu"):
"""
Getting latest amount of total confirmed cases, deaths, and recoveries.
"""
locations = await request.state.source.get_all()
return {
"latest": {
"confirmed": sum(map(lambda location: location.confirmed, locations)),
"deaths": sum(map(lambda location: location.deaths, locations)),
"recovered": sum(map(lambda location: location.recovered, locations)),
}
}


# pylint: disable=unused-argument,too-many-arguments,redefined-builtin
@V2.get("/locations", response_model=Locations, response_model_exclude_unset=True)
@V2.get("/locations", response_model=LocationsResponse, response_model_exclude_unset=True)
async def get_locations(
request: Request,
source: Sources = "jhu",
Expand Down Expand Up @@ -56,10 +72,18 @@ async def get_locations(


# pylint: disable=invalid-name
@V2.get("/locations/{id}", response_model=Location)
@V2.get("/locations/{id}", response_model=LocationResponse)
async def get_location_by_id(request: Request, id: int, source: Sources = "jhu", timelines: bool = True):
"""
Getting specific location by id.
"""
location = await request.state.source.get(id)
return {"location": location.serialize(timelines)}


@V2.get("/sources")
async def sources():
"""
Retrieves a list of data-sources that are availble to use.
"""
return {"sources": list(DATA_SOURCES.keys())}