mirror of
https://github.com/autistic-symposium/web3-starter-py.git
synced 2025-05-17 14:10:21 -04:00
💾
This commit is contained in:
parent
7cb7a479f6
commit
69bb4175f1
124 changed files with 20 additions and 15 deletions
4
web2_projects/fastapi-location-app/.gitignore
vendored
Normal file
4
web2_projects/fastapi-location-app/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
__pycache__
|
||||
.vercel
|
||||
venv
|
||||
.env
|
5
web2_projects/fastapi-location-app/.vercelignore
Normal file
5
web2_projects/fastapi-location-app/.vercelignore
Normal file
|
@ -0,0 +1,5 @@
|
|||
requirements-dev.txt
|
||||
venv
|
||||
main.py
|
||||
README.md
|
||||
.gitignore
|
36
web2_projects/fastapi-location-app/README.md
Normal file
36
web2_projects/fastapi-location-app/README.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
# Location API 🗺
|
||||
|
||||
|
||||
Location API built with FastAPI.
|
||||
|
||||
<br>
|
||||
|
||||
## Endpoint /location
|
||||
|
||||
Input data:
|
||||
|
||||
```
|
||||
{"city": "berlin"}
|
||||
```
|
||||
|
||||
Response:
|
||||
|
||||
```
|
||||
{"lat":52.5186925,"lon":13.3996024,"tzone":1}
|
||||
```
|
||||
|
||||
|
||||
### Installing
|
||||
|
||||
```
|
||||
virtualenv -p python3.9 venv
|
||||
source venv/bin/activate
|
||||
pipenv install
|
||||
```
|
||||
|
||||
### Running
|
||||
|
||||
|
||||
```
|
||||
python3 main.py
|
||||
```
|
0
web2_projects/fastapi-location-app/api/__init__.py
Normal file
0
web2_projects/fastapi-location-app/api/__init__.py
Normal file
14
web2_projects/fastapi-location-app/api/api.py
Normal file
14
web2_projects/fastapi-location-app/api/api.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
|
||||
from .routes import router as LocationRouter
|
||||
from fastapi import FastAPI
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
@app.get("/", tags=["Root"])
|
||||
async def read_root() -> dict:
|
||||
return {
|
||||
"message": "Location API 🗺✨. Try /docs to learn about this API"
|
||||
}
|
||||
|
||||
app.include_router(LocationRouter, prefix="/tzone")
|
35
web2_projects/fastapi-location-app/api/methods.py
Normal file
35
web2_projects/fastapi-location-app/api/methods.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
import pytz
|
||||
import datetime
|
||||
from geopy.geocoders import Nominatim
|
||||
from timezonefinder import TimezoneFinder
|
||||
|
||||
|
||||
def _find_timezone(lat, lon) -> int:
|
||||
obj = TimezoneFinder()
|
||||
tzone = obj.timezone_at(lng=lon, lat=lat)
|
||||
timezone = datetime.datetime.now(pytz.timezone(tzone)).strftime('%z')
|
||||
try:
|
||||
timezone = int(timezone[:-2])
|
||||
except:
|
||||
print('Error formatting timezone {}'.format(timezone))
|
||||
return timezone
|
||||
|
||||
|
||||
def get_location(data) -> dict:
|
||||
try:
|
||||
city = data['city']
|
||||
except:
|
||||
print('Data is ill-formatted: {}'.format(data))
|
||||
|
||||
geolocator = Nominatim(user_agent="$choices")
|
||||
location = geolocator.geocode(city)
|
||||
|
||||
data = {
|
||||
'lat': location.latitude,
|
||||
'lon': location.longitude,
|
||||
'tzone': _find_timezone(location.latitude, location.longitude)
|
||||
}
|
||||
|
||||
return data
|
||||
|
||||
|
17
web2_projects/fastapi-location-app/api/routes.py
Normal file
17
web2_projects/fastapi-location-app/api/routes.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
from pydantic import BaseModel
|
||||
from fastapi import APIRouter
|
||||
from .methods import get_location
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
class City(BaseModel):
|
||||
city: str
|
||||
|
||||
|
||||
@router.post("/")
|
||||
def search_city(data: City) -> dict:
|
||||
return get_location(data.dict())
|
||||
|
||||
|
||||
|
4
web2_projects/fastapi-location-app/main.py
Normal file
4
web2_projects/fastapi-location-app/main.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
import uvicorn
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run("api.api:app", host="0.0.0.0", port=8000, reload=True)
|
1
web2_projects/fastapi-location-app/requirements-dev.txt
Normal file
1
web2_projects/fastapi-location-app/requirements-dev.txt
Normal file
|
@ -0,0 +1 @@
|
|||
uvicorn
|
4
web2_projects/fastapi-location-app/requirements.txt
Normal file
4
web2_projects/fastapi-location-app/requirements.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
timezonefinder==5.2.0
|
||||
pytz==2022.1
|
||||
pydantic
|
||||
fastapi
|
11
web2_projects/fastapi-location-app/vercel.json
Normal file
11
web2_projects/fastapi-location-app/vercel.json
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"routes": [
|
||||
{"src": "/(.*)", "dest": "api/api.py"}
|
||||
],
|
||||
"functions": {
|
||||
"api/api.py": {
|
||||
"memory": 3008,
|
||||
"maxDuration": 30
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue