Skip to content

Commit 9ae7ff5

Browse files
committed
move models to models.py
1 parent de9a5b1 commit 9ae7ff5

File tree

2 files changed

+56
-50
lines changed

2 files changed

+56
-50
lines changed

app/main.py

Lines changed: 6 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,9 @@
1212
import uvicorn
1313
from fastapi.middleware.wsgi import WSGIMiddleware
1414

15-
from .data import data_source
15+
from . import models
1616
from .core import create_app
17-
18-
# #################################
19-
# Models
20-
# #################################
21-
22-
23-
class Totals(pydantic.BaseModel):
24-
confirmed: int
25-
deaths: int
26-
recovered: int
27-
28-
29-
class Latest(pydantic.BaseModel):
30-
latest: Totals
31-
32-
33-
class TimelineStats(pydantic.BaseModel):
34-
latest: int
35-
timeline: Dict[str, int]
36-
37-
38-
class TimelinedLocation(pydantic.BaseModel):
39-
confirmed: TimelineStats
40-
deaths: TimelineStats
41-
recovered: TimelineStats
42-
43-
44-
class Country(pydantic.BaseModel):
45-
coordinates: Dict
46-
country: str
47-
country_code: str
48-
id: int
49-
last_updated: dt.datetime
50-
latest: Totals
51-
province: str = ""
52-
timelines: TimelinedLocation = None # FIXME
53-
54-
55-
class AllLocations(pydantic.BaseModel):
56-
latest: Totals
57-
locations: List[Country]
58-
59-
60-
class Location(pydantic.BaseModel):
61-
location: Country
62-
17+
from .data import data_source
6318

6419
# ################
6520
# Dependencies
@@ -113,7 +68,7 @@ async def handle_validation_error(
11368
# ################
11469

11570

116-
@APP.get("/latest", response_model=Latest)
71+
@APP.get("/latest", response_model=models.Latest)
11772
def get_latest(request: fastapi.Request):
11873
"""Getting latest amount of total confirmed cases, deaths, and recoveries."""
11974
locations = request.state.source.get_all()
@@ -126,7 +81,7 @@ def get_latest(request: fastapi.Request):
12681
}
12782

12883

129-
@APP.get("/locations", response_model=AllLocations)
84+
@APP.get("/locations", response_model=models.AllLocations)
13085
def get_all_locations(
13186
request: fastapi.Request, country_code: str = None, timelines: int = 0
13287
):
@@ -152,10 +107,11 @@ def get_all_locations(
152107
}
153108

154109

155-
@APP.get("/locations/{id}", response_model=Location)
110+
@APP.get("/locations/{id}", response_model=models.Location)
156111
def get_location_by_id(request: fastapi.Request, id: int, timelines: int = 1):
157112
return {"location": request.state.source.get(id).serialize(timelines)}
158113

114+
159115
# mount the existing Flask app to /v2
160116
APP.mount("/v2", WSGIMiddleware(create_app()))
161117

app/models.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
"""
2+
app.models.py
3+
~~~~~~~~~~~~~
4+
Reponse data models.
5+
"""
6+
import datetime as dt
7+
from typing import Dict, List
8+
9+
import pydantic
10+
11+
12+
class Totals(pydantic.BaseModel):
13+
confirmed: int
14+
deaths: int
15+
recovered: int
16+
17+
18+
class Latest(pydantic.BaseModel):
19+
latest: Totals
20+
21+
22+
class TimelineStats(pydantic.BaseModel):
23+
latest: int
24+
timeline: Dict[str, int]
25+
26+
27+
class TimelinedLocation(pydantic.BaseModel):
28+
confirmed: TimelineStats
29+
deaths: TimelineStats
30+
recovered: TimelineStats
31+
32+
33+
class Country(pydantic.BaseModel):
34+
coordinates: Dict
35+
country: str
36+
country_code: str
37+
id: int
38+
last_updated: dt.datetime
39+
latest: Totals
40+
province: str = ""
41+
timelines: TimelinedLocation = None # FIXME
42+
43+
44+
class AllLocations(pydantic.BaseModel):
45+
latest: Totals
46+
locations: List[Country]
47+
48+
49+
class Location(pydantic.BaseModel):
50+
location: Country

0 commit comments

Comments
 (0)