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 models import (
|
||||
AssetUpdateDefinition,
|
||||
AuthModel,
|
||||
ColumnConditionCompat,
|
||||
CreateUserDefinition,
|
||||
|
|
@ -719,6 +720,58 @@ async def itemsDelete(
|
|||
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(
|
||||
"/assets/{fid}",
|
||||
name="Get asset",
|
||||
|
|
@ -824,11 +877,11 @@ async def createAsset(
|
|||
|
||||
@app.post(
|
||||
"/assets/{asset_id}/*",
|
||||
name="Update asset description",
|
||||
name="Update asset description and tags",
|
||||
responses={
|
||||
200: {
|
||||
"model": OkResponse,
|
||||
"description": "Asset description updated successfully",
|
||||
"description": "Asset description and tags updated successfully",
|
||||
},
|
||||
400: {
|
||||
"model": ErrorResponse,
|
||||
|
|
@ -846,7 +899,7 @@ async def createAsset(
|
|||
)
|
||||
async def updateAsset(
|
||||
asset_id: int,
|
||||
asset_description: str,
|
||||
asset_update: AssetUpdateDefinition,
|
||||
access_token: str | None = Header(default=None),
|
||||
):
|
||||
user = get_user_by_access_token(connector, access_token)
|
||||
|
|
@ -856,7 +909,7 @@ async def updateAsset(
|
|||
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 e:
|
||||
return JSONResponse(
|
||||
|
|
|
|||
|
|
@ -117,4 +117,4 @@ class Asset(BaseModel):
|
|||
name: str
|
||||
description: 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
|
||||
|
||||
|
||||
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:
|
||||
conn.updateDataInTable(
|
||||
ASSETS_TABLE_NAME,
|
||||
[ColumnUpdate("description", asset_description)],
|
||||
[
|
||||
ColumnUpdate("description", asset_description),
|
||||
ColumnUpdate("tags", ",".join(asset_tags)),
|
||||
],
|
||||
[ColumnCondition("id", "eq", asset_id)],
|
||||
)
|
||||
return True, None
|
||||
|
|
@ -527,3 +532,28 @@ def get_asset_by_id(conn: DBConnector, asset_id: int):
|
|||
except Exception as e:
|
||||
logger.exception(e)
|
||||
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):
|
||||
ok: bool = True
|
||||
fid: str
|
||||
|
||||
|
||||
class AssetUpdateDefinition(BaseModel):
|
||||
description: str
|
||||
tags: list[str]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue