from __future__ import annotations from django.http import JsonResponse from django.views.decorators.http import require_GET from .utils.geo import list_countries, list_states, list_cities import json def _q(request): return request.GET.get('q') or request.GET.get('term') or '' def _forward(request, key: str): # Try direct param (rare) or `forward[key]` val = request.GET.get(key) if val: return val fk = request.GET.get(f'forward[{key}]') if fk: return fk # DAL typically sends a JSON payload in `forward` fjson = request.GET.get('forward') if fjson: try: data = json.loads(fjson) # Format may be dict or list of dicts if isinstance(data, dict): return data.get(key) if isinstance(data, list): for item in data: if isinstance(item, dict) and item.get('name') == key: return item.get('value') except Exception: pass return None @require_GET def countries_autocomplete(request): q = _q(request) results = [{"id": code, "text": name} for code, name in list_countries(q)] return JsonResponse({"results": results, "pagination": {"more": False}}) @require_GET def states_autocomplete(request): q = _q(request) country = _forward(request, 'country') items = list_states(country, q) results = [{"id": code, "text": name} for code, name in items[:50]] return JsonResponse({"results": results, "pagination": {"more": False}}) @require_GET def cities_autocomplete(request): q = _q(request) country = _forward(request, 'country') state = _forward(request, 'state') items = list_cities(country, state, q) results = [{"id": code, "text": name} for code, name in items[:50]] return JsonResponse({"results": results, "pagination": {"more": False}})