diff --git a/lnbits/db.py b/lnbits/db.py index 0b36cdf4a..28887292d 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -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") diff --git a/lnbits/decorators.py b/lnbits/decorators.py index f8de5f3d8..2329b058d 100644 --- a/lnbits/decorators.py +++ b/lnbits/decorators.py @@ -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 diff --git a/tests/conftest.py b/tests/conftest.py index 6e92e7748..246f4b5d5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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