Browse Source

Adapted RequestQuery.filters to deal with list query parameters (#36)

* Adapted RequestQuery.filters to deal with list query parameters

* Update clean_python/fastapi/request_query.py

* Added tests

* fixed tests

* fix tests

---------

Co-authored-by: Casper van der Wel <caspervdw@gmail.com>
Ben van Basten 1 year ago
parent
commit
5a9bf0b870
3 changed files with 11 additions and 2 deletions
  1. 1 1
      CHANGES.md
  2. 4 1
      clean_python/fastapi/request_query.py
  3. 6 0
      tests/fastapi/test_request_query.py

+ 1 - 1
CHANGES.md

@@ -4,7 +4,7 @@
 0.8.3 (unreleased)
 ------------------
 
-- Nothing changed yet.
+- Adapted RequestQuery.filters() to deal with list query parameters.
 
 
 0.8.2 (2023-11-07)

+ 4 - 1
clean_python/fastapi/request_query.py

@@ -44,7 +44,10 @@ class RequestQuery(ValueObject):
         for name in self.model_fields:
             if name in {"limit", "offset", "order_by"}:
                 continue
+            # deal with list query paramerers
             value = getattr(self, name)
             if value is not None:
-                result.append(Filter(field=name, values=[value]))
+                if not isinstance(value, list):
+                    value = [value]
+                result.append(Filter(field=name, values=value))
         return result

+ 6 - 0
tests/fastapi/test_request_query.py

@@ -1,3 +1,4 @@
+from typing import List
 from typing import Optional
 
 import pytest
@@ -12,6 +13,10 @@ class SomeQuery(RequestQuery):
     foo: Optional[int] = None
 
 
+class SomeListQuery(RequestQuery):
+    foo: Optional[List[int]]
+
+
 @pytest.mark.parametrize(
     "query,expected",
     [
@@ -35,6 +40,7 @@ def test_as_page_options(query, expected):
         (SomeQuery(), []),
         (SomeQuery(foo=None), []),
         (SomeQuery(foo=3), [Filter(field="foo", values=[3])]),
+        (SomeListQuery(foo=[3, 4]), [Filter(field="foo", values=[3, 4])]),
     ],
 )
 def test_filters(query, expected):