chore: clean-up
This commit is contained in:
@@ -25,8 +25,6 @@ from .models import (
|
||||
StorageDeleteResponse,
|
||||
StorageGetRequest,
|
||||
StorageGetResponse,
|
||||
StorageListRequest,
|
||||
StorageListResponse,
|
||||
StoragePaginatedRequest,
|
||||
StoragePaginatedResponse,
|
||||
StorageSetRequest,
|
||||
@@ -152,18 +150,6 @@ class ExtensionAPI:
|
||||
async def storage_set(self, request: StorageSetRequest) -> StorageSetResponse:
|
||||
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(
|
||||
method_id="storage.get_paginated",
|
||||
namespace="storage",
|
||||
|
||||
@@ -33,24 +33,6 @@ class StorageSetResponse(BaseModel):
|
||||
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):
|
||||
table: str = Field(..., min_length=1, max_length=128)
|
||||
filters: dict[str, Any] = Field(default_factory=dict)
|
||||
@@ -70,6 +52,9 @@ class StoragePaginatedRequest(BaseModel):
|
||||
search_fields_json = values.get("search_fields_json")
|
||||
if search_fields_json is not None and "search_fields" not in values:
|
||||
values["search_fields"] = json.loads(search_fields_json)
|
||||
|
||||
if values.get("sort_by") == "":
|
||||
values["sort_by"] = None
|
||||
return values
|
||||
|
||||
|
||||
|
||||
@@ -13,8 +13,6 @@ from .models import (
|
||||
StorageDeleteResponse,
|
||||
StorageGetRequest,
|
||||
StorageGetResponse,
|
||||
StorageListRequest,
|
||||
StorageListResponse,
|
||||
StoragePaginatedRequest,
|
||||
StoragePaginatedResponse,
|
||||
StorageSetRequest,
|
||||
@@ -27,7 +25,6 @@ from .storage import (
|
||||
storage_delete_row,
|
||||
storage_get_paginated_rows,
|
||||
storage_get_row,
|
||||
storage_list_rows,
|
||||
storage_set_row,
|
||||
)
|
||||
|
||||
@@ -62,17 +59,6 @@ class InMemoryExtensionAPI(ExtensionAPI):
|
||||
await storage_set_row(self.extension_id, request.table, request.data)
|
||||
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(
|
||||
self, request: StoragePaginatedRequest
|
||||
) -> StoragePaginatedResponse:
|
||||
|
||||
@@ -57,35 +57,6 @@ async def storage_set_row(
|
||||
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(
|
||||
ext_id: str,
|
||||
table: str,
|
||||
|
||||
Reference in New Issue
Block a user