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 typing import Any, Generic, Literal, Optional, TypeVar
import shortuuid
from loguru import logger
from pydantic import BaseModel, ValidationError, root_validator
from sqlalchemy import event
@@ -191,7 +190,7 @@ class Connection(Compat):
{filters.order_by()}
{filters.pagination()}
""",
parsed_values,
self.rewrite_values(parsed_values),
)
if rows:
# no need for extra query if no pagination is specified
@@ -401,7 +400,9 @@ class Filter(BaseModel, Generic[TFilterModel]):
values: Optional[dict] = None
@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[operator]
# e.g. name[eq]
@@ -422,7 +423,7 @@ class Filter(BaseModel, Generic[TFilterModel]):
validated, errors = compare_field.validate(raw_value, {}, loc="none")
if errors:
raise ValidationError(errors=[errors], model=model)
values[f"{field}__{shortuuid.uuid()}"] = validated
values[f"{field}__{i}"] = validated
else:
raise ValueError("Unknown filter field")
+2 -2
View File
@@ -204,9 +204,9 @@ def parse_filters(model: Type[TFilterModel]):
):
params = request.query_params
filters = []
for key in params.keys():
for i, key in enumerate(params.keys()):
try:
filters.append(Filter.parse_query(key, params.getlist(key), model))
filters.append(Filter.parse_query(key, params.getlist(key), model, i))
except ValueError:
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
if DB_TYPE == SQLITE:
await asyncio.sleep(1)
ts = int(time())
ts = time()
fake_data = [
CreateInvoice(amount=10, memo="aaaa", out=False),
@@ -201,5 +201,5 @@ async def fake_payments(client, adminkey_headers_from):
assert data["checking_id"]
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