Files
hoopscout/apps/scouting/services/saved_searches.py

39 lines
910 B
Python

from decimal import Decimal
from urllib.parse import urlencode
from apps.players.forms import PlayerSearchForm
IGNORED_QUERY_KEYS = {"page", "csrfmiddlewaretoken"}
def _serialize_value(value):
if value is None:
return None
if hasattr(value, "pk"):
return value.pk
if isinstance(value, Decimal):
return str(value)
return value
def extract_filters_from_params(params):
payload = params.copy()
for key in IGNORED_QUERY_KEYS:
payload.pop(key, None)
form = PlayerSearchForm(payload)
if not form.is_valid():
return {}
result = {}
for key, value in form.cleaned_data.items():
serialized = _serialize_value(value)
if serialized in (None, ""):
continue
result[key] = serialized
return result
def saved_search_to_querystring(filters: dict) -> str:
return urlencode(filters, doseq=True)