chore: clean-up
This commit is contained in:
@@ -25,8 +25,6 @@ from .models import (
|
|||||||
StorageDeleteResponse,
|
StorageDeleteResponse,
|
||||||
StorageGetRequest,
|
StorageGetRequest,
|
||||||
StorageGetResponse,
|
StorageGetResponse,
|
||||||
StorageListRequest,
|
|
||||||
StorageListResponse,
|
|
||||||
StoragePaginatedRequest,
|
StoragePaginatedRequest,
|
||||||
StoragePaginatedResponse,
|
StoragePaginatedResponse,
|
||||||
StorageSetRequest,
|
StorageSetRequest,
|
||||||
@@ -152,18 +150,6 @@ class ExtensionAPI:
|
|||||||
async def storage_set(self, request: StorageSetRequest) -> StorageSetResponse:
|
async def storage_set(self, request: StorageSetRequest) -> StorageSetResponse:
|
||||||
self._raise_unwired_runtime("storage_set")
|
self._raise_unwired_runtime("storage_set")
|
||||||
|
|
||||||
@extension_api_method(
|
|
||||||
method_id="storage.list",
|
|
||||||
namespace="storage",
|
|
||||||
name="List storage rows",
|
|
||||||
host_name="storage_list",
|
|
||||||
sdk_name="list",
|
|
||||||
description="List rows from an extension storage table.",
|
|
||||||
required_permission="ext.storage.read_write",
|
|
||||||
)
|
|
||||||
async def storage_list(self, request: StorageListRequest) -> StorageListResponse:
|
|
||||||
self._raise_unwired_runtime("storage_list")
|
|
||||||
|
|
||||||
@extension_api_method(
|
@extension_api_method(
|
||||||
method_id="storage.get_paginated",
|
method_id="storage.get_paginated",
|
||||||
namespace="storage",
|
namespace="storage",
|
||||||
|
|||||||
@@ -33,24 +33,6 @@ class StorageSetResponse(BaseModel):
|
|||||||
ok: bool = True
|
ok: bool = True
|
||||||
|
|
||||||
|
|
||||||
class StorageListRequest(BaseModel):
|
|
||||||
table: str = Field(..., min_length=1, max_length=128)
|
|
||||||
filters: dict[str, Any] = Field(default_factory=dict)
|
|
||||||
limit: int = Field(100, ge=1, le=1000)
|
|
||||||
offset: int = Field(0, ge=0)
|
|
||||||
|
|
||||||
@root_validator(pre=True)
|
|
||||||
def parse_filters_json(cls, values: dict[str, Any]) -> dict[str, Any]:
|
|
||||||
filters_json = values.get("filters_json")
|
|
||||||
if filters_json is not None and "filters" not in values:
|
|
||||||
values["filters"] = json.loads(filters_json)
|
|
||||||
return values
|
|
||||||
|
|
||||||
|
|
||||||
class StorageListResponse(BaseModel):
|
|
||||||
rows_json: str = "[]"
|
|
||||||
|
|
||||||
|
|
||||||
class StoragePaginatedRequest(BaseModel):
|
class StoragePaginatedRequest(BaseModel):
|
||||||
table: str = Field(..., min_length=1, max_length=128)
|
table: str = Field(..., min_length=1, max_length=128)
|
||||||
filters: dict[str, Any] = Field(default_factory=dict)
|
filters: dict[str, Any] = Field(default_factory=dict)
|
||||||
@@ -70,6 +52,9 @@ class StoragePaginatedRequest(BaseModel):
|
|||||||
search_fields_json = values.get("search_fields_json")
|
search_fields_json = values.get("search_fields_json")
|
||||||
if search_fields_json is not None and "search_fields" not in values:
|
if search_fields_json is not None and "search_fields" not in values:
|
||||||
values["search_fields"] = json.loads(search_fields_json)
|
values["search_fields"] = json.loads(search_fields_json)
|
||||||
|
|
||||||
|
if values.get("sort_by") == "":
|
||||||
|
values["sort_by"] = None
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ from .models import (
|
|||||||
StorageDeleteResponse,
|
StorageDeleteResponse,
|
||||||
StorageGetRequest,
|
StorageGetRequest,
|
||||||
StorageGetResponse,
|
StorageGetResponse,
|
||||||
StorageListRequest,
|
|
||||||
StorageListResponse,
|
|
||||||
StoragePaginatedRequest,
|
StoragePaginatedRequest,
|
||||||
StoragePaginatedResponse,
|
StoragePaginatedResponse,
|
||||||
StorageSetRequest,
|
StorageSetRequest,
|
||||||
@@ -27,7 +25,6 @@ from .storage import (
|
|||||||
storage_delete_row,
|
storage_delete_row,
|
||||||
storage_get_paginated_rows,
|
storage_get_paginated_rows,
|
||||||
storage_get_row,
|
storage_get_row,
|
||||||
storage_list_rows,
|
|
||||||
storage_set_row,
|
storage_set_row,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -62,17 +59,6 @@ class InMemoryExtensionAPI(ExtensionAPI):
|
|||||||
await storage_set_row(self.extension_id, request.table, request.data)
|
await storage_set_row(self.extension_id, request.table, request.data)
|
||||||
return StorageSetResponse()
|
return StorageSetResponse()
|
||||||
|
|
||||||
async def storage_list(self, request: StorageListRequest) -> StorageListResponse:
|
|
||||||
self.require_permission("ext.storage.read_write")
|
|
||||||
rows = await storage_list_rows(
|
|
||||||
self.extension_id,
|
|
||||||
request.table,
|
|
||||||
request.filters,
|
|
||||||
limit=request.limit,
|
|
||||||
offset=request.offset,
|
|
||||||
)
|
|
||||||
return StorageListResponse(rows_json=json.dumps(rows))
|
|
||||||
|
|
||||||
async def storage_get_paginated(
|
async def storage_get_paginated(
|
||||||
self, request: StoragePaginatedRequest
|
self, request: StoragePaginatedRequest
|
||||||
) -> StoragePaginatedResponse:
|
) -> StoragePaginatedResponse:
|
||||||
|
|||||||
@@ -57,35 +57,6 @@ async def storage_set_row(
|
|||||||
await conn.execute(query, clean_data)
|
await conn.execute(query, clean_data)
|
||||||
|
|
||||||
|
|
||||||
async def storage_list_rows(
|
|
||||||
ext_id: str,
|
|
||||||
table: str,
|
|
||||||
filters: dict[str, Any],
|
|
||||||
*,
|
|
||||||
limit: int,
|
|
||||||
offset: int,
|
|
||||||
) -> list[dict[str, Any]]:
|
|
||||||
table_schema = _load_table_schema(ext_id, table)
|
|
||||||
clean_filters = _filters_to_db(table_schema, filters)
|
|
||||||
where_sql = ""
|
|
||||||
if clean_filters:
|
|
||||||
clauses = [f"{field} = :filter_{field}" for field in clean_filters]
|
|
||||||
where_sql = "WHERE " + " AND ".join(clauses)
|
|
||||||
|
|
||||||
values = {f"filter_{field}": value for field, value in clean_filters.items()}
|
|
||||||
values.update({"limit": min(limit, 1000), "offset": offset})
|
|
||||||
query = f"""
|
|
||||||
SELECT * FROM {_table_ref_for_schema(ext_id, table)}
|
|
||||||
{where_sql}
|
|
||||||
LIMIT :limit
|
|
||||||
OFFSET :offset
|
|
||||||
""" # noqa: S608
|
|
||||||
|
|
||||||
async with Database(f"ext_{ext_id}").connect() as conn:
|
|
||||||
rows = await conn.fetchall(query, values)
|
|
||||||
return [_row_from_db(table_schema, row) for row in rows]
|
|
||||||
|
|
||||||
|
|
||||||
async def storage_get_paginated_rows(
|
async def storage_get_paginated_rows(
|
||||||
ext_id: str,
|
ext_id: str,
|
||||||
table: str,
|
table: str,
|
||||||
|
|||||||
Reference in New Issue
Block a user