-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
# Conflicts: # backend/bloom/tasks/create_update_rel_segments_zones.py
- Loading branch information
1 parent
ad0e097
commit fc227f2
Showing
27 changed files
with
541 additions
and
399 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
from fastapi import FastAPI | ||
from starlette.requests import Request | ||
|
||
from bloom.container import UseCasesContainer | ||
from bloom.routers import excursions, zones, vessels, ports | ||
from bloom.routers.vessels import router, rd | ||
|
||
|
||
def init_db(container): | ||
db = container.db() | ||
db.create_database() | ||
|
||
|
||
def create_app() -> FastAPI: | ||
container = init_container() | ||
|
||
init_db(container) | ||
server = init_server(container) | ||
# server.add_exception_handler(DBException, db_exception_handler) | ||
# server.add_exception_handler(ValidationError, validation_exception_handler) | ||
# server.add_exception_handler(Exception, generic_exception_handler) | ||
|
||
return server | ||
|
||
|
||
def init_container(): | ||
container = UseCasesContainer() | ||
container.wire( | ||
modules=[ | ||
zones, | ||
vessels, | ||
excursions, | ||
ports | ||
] | ||
) | ||
return container | ||
|
||
|
||
def init_server(container): | ||
server = FastAPI(dependencies=[]) | ||
server.container = container | ||
server.include_router(excursions.router) | ||
server.include_router(ports.router) | ||
server.include_router(vessels.router) | ||
server.include_router(zones.router) | ||
return server | ||
|
||
|
||
app = create_app() | ||
|
||
|
||
@app.get("/") | ||
async def root(request: Request): | ||
return { | ||
"maptiles": f"{request.url_for('list_maptiles')}", | ||
"ports": f"{request.url_for('list_ports')}", | ||
"vessels": f"{request.url_for('list_vessels')}", | ||
"zones": f"{request.url_for('list_zones')}", | ||
} | ||
|
||
|
||
@router.get("/cache/all/flush") | ||
async def cache_all_flush(request: Request): | ||
await rd.flushall() | ||
return {"code": 0} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
import json | ||
import time | ||
|
||
import redis | ||
from dependency_injector.wiring import inject, Provide | ||
from fastapi import APIRouter, Depends | ||
|
||
from bloom.config import settings | ||
from bloom.container import UseCasesContainer | ||
from bloom.logger import logger | ||
from bloom.usecase.Excursions import ExcursionUseCase | ||
|
||
rd = redis.Redis(host=settings.redis_host, port=settings.redis_port, db=0) | ||
|
||
router = APIRouter() | ||
|
||
|
||
@router.get("/vessels/{vessel_id}/excursions") | ||
@inject | ||
async def list_vessel_excursions( | ||
vessel_id: int, | ||
nocache: bool = False, | ||
excursion_usecase: ExcursionUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
) | ||
): | ||
endpoint = f"/vessels/{vessel_id}/excursions" | ||
cache = rd.get(endpoint) | ||
start = time.time() | ||
if cache and not nocache: | ||
logger.debug(f"{endpoint} cached ({settings.redis_cache_expiration})s") | ||
payload = json.loads(cache) | ||
logger.debug(f"{endpoint} elapsed Time: {time.time() - start}") | ||
return payload | ||
else: | ||
return excursion_usecase.list_vessel_excursions(vessel_id) | ||
|
||
|
||
@router.get("/vessels/{vessel_id}/excursions/{excursions_id}") | ||
async def get_vessel_excursion( | ||
vessel_id: int, | ||
excursions_id: int, | ||
excursion_usecase: ExcursionUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
)): | ||
return excursion_usecase.get_excursion_by_id(vessel_id, excursions_id) | ||
|
||
|
||
@router.get("/vessels/{vessel_id}/excursions/{excursions_id}/segments") | ||
@inject | ||
async def list_vessel_excursion_segments( | ||
vessel_id: int, | ||
excursions_id: int, | ||
excursion_usecase: ExcursionUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
) | ||
): | ||
return excursion_usecase.get_excursions_segments(vessel_id, excursions_id) | ||
|
||
|
||
@router.get("/vessels/{vessel_id}/excursions/{excursions_id}/segments/{segment_id}") | ||
@inject | ||
async def get_vessel_excursion_segment( | ||
vessel_id: int, | ||
excursions_id: int, | ||
segment_id: int, | ||
excursion_usecase: ExcursionUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
) | ||
): | ||
return await excursion_usecase.get_segment_by_id(vessel_id, excursions_id, segment_id) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
import json | ||
import time | ||
|
||
from redis import Redis | ||
from dependency_injector.wiring import inject, Provide | ||
from fastapi import APIRouter, Depends | ||
from bloom.config import settings | ||
from bloom.container import UseCasesContainer | ||
from bloom.logger import logger | ||
from bloom.services.api import rd | ||
from bloom.usecase.Ports import PortUseCase | ||
|
||
router = APIRouter() | ||
redis_client = Redis(host=settings.redis_host, port=settings.redis_port, db=0) | ||
|
||
|
||
@router.get("/ports") | ||
@inject | ||
async def list_ports( | ||
nocache: bool = False, | ||
ports_usecase: PortUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
) | ||
): | ||
endpoint = f"/ports" | ||
cache = rd.get(endpoint) | ||
start = time.time() | ||
if cache and not nocache: | ||
logger.debug(f"{endpoint} cached ({settings.redis_cache_expiration})s") | ||
payload = json.loads(cache) | ||
logger.debug(f"{endpoint} elapsed Time: {time.time() - start}") | ||
return payload | ||
else: | ||
return ports_usecase.list_ports() | ||
|
||
|
||
@router.get("/ports/{port_id}") | ||
@inject | ||
async def get_port( | ||
port_id: int, | ||
ports_usecase: PortUseCase = Depends( | ||
Provide[UseCasesContainer.emission_service] | ||
) | ||
): | ||
return ports_usecase.get_port_by_id(port_id) |
Oops, something went wrong.