Improvements upon api and database api
This commit is contained in:
parent
34ae028698
commit
dc6ba8f462
4 changed files with 95 additions and 7 deletions
61
app.py
61
app.py
|
|
@ -13,6 +13,7 @@ import uvicorn
|
||||||
|
|
||||||
from dba import *
|
from dba import *
|
||||||
from models import (
|
from models import (
|
||||||
|
AssetUpdateDefinition,
|
||||||
AuthModel,
|
AuthModel,
|
||||||
ColumnConditionCompat,
|
ColumnConditionCompat,
|
||||||
CreateUserDefinition,
|
CreateUserDefinition,
|
||||||
|
|
@ -719,6 +720,58 @@ async def itemsDelete(
|
||||||
return OkResponse()
|
return OkResponse()
|
||||||
|
|
||||||
|
|
||||||
|
@app.get(
|
||||||
|
"/assets",
|
||||||
|
name="Get assets",
|
||||||
|
responses={
|
||||||
|
200: {
|
||||||
|
"model": list[Asset],
|
||||||
|
"description": "List of assets",
|
||||||
|
},
|
||||||
|
403: {
|
||||||
|
"model": ErrorResponse,
|
||||||
|
"description": "Requesting this endpoint requires admin access token",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
async def getAssets(access_token: str | None = Header(default=None)):
|
||||||
|
is_admin = check_if_admin_access_token(connector, access_token)
|
||||||
|
if not is_admin:
|
||||||
|
return JSONResponse(
|
||||||
|
ErrorResponse(error="Not allowed").dict(),
|
||||||
|
status_code=status.HTTP_403_FORBIDDEN,
|
||||||
|
)
|
||||||
|
|
||||||
|
assets = get_assets(connector)
|
||||||
|
return assets
|
||||||
|
|
||||||
|
|
||||||
|
@app.get(
|
||||||
|
"/assets/tags",
|
||||||
|
name="Get assets tags",
|
||||||
|
responses={
|
||||||
|
200: {
|
||||||
|
"model": list[str],
|
||||||
|
"description": "List of assets tags",
|
||||||
|
},
|
||||||
|
403: {
|
||||||
|
"model": ErrorResponse,
|
||||||
|
"description": "Requesting this endpoint requires admin access token",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
async def getAssetsTags(access_token: str | None = Header(default=None)):
|
||||||
|
is_admin = check_if_admin_access_token(connector, access_token)
|
||||||
|
if not is_admin:
|
||||||
|
return JSONResponse(
|
||||||
|
ErrorResponse(error="Not allowed").dict(),
|
||||||
|
status_code=status.HTTP_403_FORBIDDEN,
|
||||||
|
)
|
||||||
|
|
||||||
|
assets = get_assets_tags(connector)
|
||||||
|
return assets
|
||||||
|
|
||||||
|
|
||||||
@app.get(
|
@app.get(
|
||||||
"/assets/{fid}",
|
"/assets/{fid}",
|
||||||
name="Get asset",
|
name="Get asset",
|
||||||
|
|
@ -824,11 +877,11 @@ async def createAsset(
|
||||||
|
|
||||||
@app.post(
|
@app.post(
|
||||||
"/assets/{asset_id}/*",
|
"/assets/{asset_id}/*",
|
||||||
name="Update asset description",
|
name="Update asset description and tags",
|
||||||
responses={
|
responses={
|
||||||
200: {
|
200: {
|
||||||
"model": OkResponse,
|
"model": OkResponse,
|
||||||
"description": "Asset description updated successfully",
|
"description": "Asset description and tags updated successfully",
|
||||||
},
|
},
|
||||||
400: {
|
400: {
|
||||||
"model": ErrorResponse,
|
"model": ErrorResponse,
|
||||||
|
|
@ -846,7 +899,7 @@ async def createAsset(
|
||||||
)
|
)
|
||||||
async def updateAsset(
|
async def updateAsset(
|
||||||
asset_id: int,
|
asset_id: int,
|
||||||
asset_description: str,
|
asset_update: AssetUpdateDefinition,
|
||||||
access_token: str | None = Header(default=None),
|
access_token: str | None = Header(default=None),
|
||||||
):
|
):
|
||||||
user = get_user_by_access_token(connector, access_token)
|
user = get_user_by_access_token(connector, access_token)
|
||||||
|
|
@ -856,7 +909,7 @@ async def updateAsset(
|
||||||
status_code=status.HTTP_403_FORBIDDEN,
|
status_code=status.HTTP_403_FORBIDDEN,
|
||||||
)
|
)
|
||||||
|
|
||||||
ok, e = update_asset(connector, asset_id, asset_description)
|
ok, e = update_asset(connector, asset_id, asset_update.description, asset_update.tags)
|
||||||
if not ok:
|
if not ok:
|
||||||
if e:
|
if e:
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
|
|
|
||||||
|
|
@ -117,4 +117,4 @@ class Asset(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
fid: str
|
fid: str
|
||||||
catalog: str
|
tags: str
|
||||||
|
|
|
||||||
34
dba.py
34
dba.py
|
|
@ -450,11 +450,16 @@ def create_asset(conn: DBConnector, name: str, description: str, fid: str):
|
||||||
return False, None
|
return False, None
|
||||||
|
|
||||||
|
|
||||||
def update_asset(conn: DBConnector, asset_id: int, asset_description: str):
|
def update_asset(
|
||||||
|
conn: DBConnector, asset_id: int, asset_description: str, asset_tags: list[str]
|
||||||
|
):
|
||||||
try:
|
try:
|
||||||
conn.updateDataInTable(
|
conn.updateDataInTable(
|
||||||
ASSETS_TABLE_NAME,
|
ASSETS_TABLE_NAME,
|
||||||
[ColumnUpdate("description", asset_description)],
|
[
|
||||||
|
ColumnUpdate("description", asset_description),
|
||||||
|
ColumnUpdate("tags", ",".join(asset_tags)),
|
||||||
|
],
|
||||||
[ColumnCondition("id", "eq", asset_id)],
|
[ColumnCondition("id", "eq", asset_id)],
|
||||||
)
|
)
|
||||||
return True, None
|
return True, None
|
||||||
|
|
@ -527,3 +532,28 @@ def get_asset_by_id(conn: DBConnector, asset_id: int):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_assets(conn: DBConnector) -> list[Asset]:
|
||||||
|
try:
|
||||||
|
assets = conn.selectFromTable(ASSETS_TABLE_NAME, ["*"])
|
||||||
|
if not assets:
|
||||||
|
return []
|
||||||
|
return [Asset.parse_obj(asset) for asset in assets]
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def get_assets_tags(conn: DBConnector) -> list[str]:
|
||||||
|
try:
|
||||||
|
with conn.connection as connection:
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
tags = cursor.execute(
|
||||||
|
f"SELECT DISTINCT unnest(string_to_array(tags, ',')) FROM {ASSETS_TABLE_NAME}"
|
||||||
|
).fetchall()
|
||||||
|
|
||||||
|
return [tag["unnest"] for tag in tags]
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(e)
|
||||||
|
return []
|
||||||
|
|
|
||||||
|
|
@ -55,3 +55,8 @@ class AccessTokenResponse(BaseModel):
|
||||||
class CreateAssetResponse(BaseModel):
|
class CreateAssetResponse(BaseModel):
|
||||||
ok: bool = True
|
ok: bool = True
|
||||||
fid: str
|
fid: str
|
||||||
|
|
||||||
|
|
||||||
|
class AssetUpdateDefinition(BaseModel):
|
||||||
|
description: str
|
||||||
|
tags: list[str]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue