-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.py
99 lines (74 loc) · 2.42 KB
/
api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import uvicorn
from fastapi.middleware.cors import CORSMiddleware
from fastapi import FastAPI
from tr_json import data
from typing import List, Dict
from pydantic import BaseModel
from fastapi.encoders import jsonable_encoder
class Item(BaseModel):
cities: List[str] = []
class Item2(BaseModel):
cities_regions: Dict = {}
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/cities/")
async def cities():
cities = []
for i in data.keys():
cities.append(i)
return {"cities": cities}
@app.post("/region/")
async def region(city_names: Item):
result = {}
regions = []
city_names = jsonable_encoder(city_names)
city_names = city_names["cities"]
if city_names:
for city_name in city_names:
cities_regions = data.get(city_name)
if cities_regions:
for i in cities_regions:
regions.append(i)
result[city_name] = regions
regions = [] # reset when region city is done and going to another city
return result
@app.post(
"/quarter/",
description='{"cities_regions": {name_of_city: [region1, regions2, ...]}, {name_of_city: [region1, regions2, ...]}}',
)
async def quarter(city_names: Item2):
city_names = jsonable_encoder(city_names)["cities_regions"]
final_cities_regions_quarter = {}
res = []
for city_name, region_names in city_names.items():
for region_name in region_names:
try:
d2 = data.get(city_name).get(region_name)
except AttributeError:
d2 = []
for i in d2:
res.append(i)
final_cities_regions_quarter[region_name] = res
res = [] # reset when region city is done and going to another city
return final_cities_regions_quarter
@app.get("/region/c/{city_name}")
async def cities(city_name):
region = []
for i in data.get(city_name):
region.append(i)
return {"regions": region}
@app.get("/quarter/c/{city_name}/{region_name}/")
async def cities(city_name, region_name):
quarter = []
for i in data.get(city_name).get(region_name):
quarter.append(i)
return {"quarter": quarter}
if __name__ == "__main__":
uvicorn.run("api:app", host="0.0.0.0", port=8001, debug=True, reload=True)