This commit is contained in:
dni ⚡
2024-09-05 12:39:00 +02:00
parent cd7fcd1c71
commit 858ff9d186
3 changed files with 9 additions and 8 deletions
+5 -4
View File
@@ -9,7 +9,6 @@ from contextlib import asynccontextmanager
from enum import Enum from enum import Enum
from typing import Any, Generic, Literal, Optional, TypeVar from typing import Any, Generic, Literal, Optional, TypeVar
import shortuuid
from loguru import logger from loguru import logger
from pydantic import BaseModel, ValidationError, root_validator from pydantic import BaseModel, ValidationError, root_validator
from sqlalchemy import event from sqlalchemy import event
@@ -191,7 +190,7 @@ class Connection(Compat):
{filters.order_by()} {filters.order_by()}
{filters.pagination()} {filters.pagination()}
""", """,
parsed_values, self.rewrite_values(parsed_values),
) )
if rows: if rows:
# no need for extra query if no pagination is specified # no need for extra query if no pagination is specified
@@ -401,7 +400,9 @@ class Filter(BaseModel, Generic[TFilterModel]):
values: Optional[dict] = None values: Optional[dict] = None
@classmethod @classmethod
def parse_query(cls, key: str, raw_values: list[Any], model: type[TFilterModel]): def parse_query(
cls, key: str, raw_values: list[Any], model: type[TFilterModel], i: int = 0
):
# Key format: # Key format:
# key[operator] # key[operator]
# e.g. name[eq] # e.g. name[eq]
@@ -422,7 +423,7 @@ class Filter(BaseModel, Generic[TFilterModel]):
validated, errors = compare_field.validate(raw_value, {}, loc="none") validated, errors = compare_field.validate(raw_value, {}, loc="none")
if errors: if errors:
raise ValidationError(errors=[errors], model=model) raise ValidationError(errors=[errors], model=model)
values[f"{field}__{shortuuid.uuid()}"] = validated values[f"{field}__{i}"] = validated
else: else:
raise ValueError("Unknown filter field") raise ValueError("Unknown filter field")
+2 -2
View File
@@ -204,9 +204,9 @@ def parse_filters(model: Type[TFilterModel]):
): ):
params = request.query_params params = request.query_params
filters = [] filters = []
for key in params.keys(): for i, key in enumerate(params.keys()):
try: try:
filters.append(Filter.parse_query(key, params.getlist(key), model)) filters.append(Filter.parse_query(key, params.getlist(key), model, i))
except ValueError: except ValueError:
continue continue
+2 -2
View File
@@ -184,7 +184,7 @@ async def fake_payments(client, adminkey_headers_from):
# we have to wait a second to ensure a different timestamp than previous invoices # we have to wait a second to ensure a different timestamp than previous invoices
if DB_TYPE == SQLITE: if DB_TYPE == SQLITE:
await asyncio.sleep(1) await asyncio.sleep(1)
ts = int(time()) ts = time()
fake_data = [ fake_data = [
CreateInvoice(amount=10, memo="aaaa", out=False), CreateInvoice(amount=10, memo="aaaa", out=False),
@@ -201,5 +201,5 @@ async def fake_payments(client, adminkey_headers_from):
assert data["checking_id"] assert data["checking_id"]
await update_payment_status(data["checking_id"], status=PaymentState.SUCCESS) await update_payment_status(data["checking_id"], status=PaymentState.SUCCESS)
params = {"time[ge]": ts, "time[le]": int(time()) + 1} params = {"time[ge]": ts, "time[le]": time()}
return fake_data, params return fake_data, params