Implemented alembic migrations, added cursors closing task.
This commit is contained in:
78
app/cursors.py
Normal file
78
app/cursors.py
Normal file
@@ -0,0 +1,78 @@
|
||||
from fastapi.routing import APIRouter
|
||||
from data.schemas import (
|
||||
CachedCursorOut,
|
||||
)
|
||||
from fastapi import Depends, status
|
||||
from data.crud import (
|
||||
read_connection,
|
||||
read_select_query,
|
||||
)
|
||||
from core.dependencies import get_db, get_current_user, get_admin_user
|
||||
from core.exceptions import (
|
||||
QueryNotFound,
|
||||
ConnectionNotFound,
|
||||
CursorNotFound,
|
||||
)
|
||||
from dbs import mysql
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post("/", dependencies=[Depends(get_current_user)])
|
||||
async def create_cursor_endpoint(
|
||||
query_id: int,
|
||||
connection_id: int,
|
||||
db=Depends(get_db),
|
||||
) -> CachedCursorOut:
|
||||
query = await read_select_query(db=db, query_id=query_id)
|
||||
|
||||
if query is None:
|
||||
raise QueryNotFound
|
||||
connection = await read_connection(db=db, connection_id=connection_id)
|
||||
|
||||
if connection is None:
|
||||
raise ConnectionNotFound
|
||||
|
||||
cached_cursor = await mysql.create_cursor(query=query, connection_id=connection_id)
|
||||
|
||||
mysql.cached_cursors[cached_cursor.id] = cached_cursor
|
||||
print(mysql.cached_cursors)
|
||||
return cached_cursor
|
||||
|
||||
|
||||
@router.get("/", dependencies=[Depends(get_current_user)])
|
||||
async def get_all_cursors() -> list[CachedCursorOut]:
|
||||
return mysql.cached_cursors.values()
|
||||
|
||||
|
||||
@router.get("/{cursor_id}", dependencies=[Depends(get_current_user)])
|
||||
async def get_cursors(cursor_id: str) -> CachedCursorOut:
|
||||
try:
|
||||
return mysql.cached_cursors[cursor_id]
|
||||
except KeyError:
|
||||
raise CursorNotFound
|
||||
|
||||
|
||||
@router.delete(
|
||||
"/",
|
||||
dependencies=[Depends(get_admin_user)],
|
||||
status_code=status.HTTP_204_NO_CONTENT,
|
||||
)
|
||||
async def close_all_cursor() -> None:
|
||||
for cached_cursor in mysql.cached_cursors.values():
|
||||
await cached_cursor.close()
|
||||
mysql.cached_cursors.clear()
|
||||
|
||||
|
||||
@router.delete(
|
||||
"/{cursor_id}",
|
||||
dependencies=[Depends(get_current_user)],
|
||||
status_code=status.HTTP_204_NO_CONTENT,
|
||||
)
|
||||
async def close_cursor(cursor_id: str) -> None:
|
||||
cached_cursor = mysql.cached_cursors.get(cursor_id, None)
|
||||
if cached_cursor is None:
|
||||
raise CursorNotFound
|
||||
|
||||
await cached_cursor.close()
|
||||
del mysql.cached_cursors[cursor_id]
|
||||
Reference in New Issue
Block a user