37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import json
|
|
from functools import lru_cache
|
|
from pathlib import Path
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def location_data():
|
|
path = Path(settings.BASE_DIR) / "static" / "data" / "iran-locations.json"
|
|
return json.loads(path.read_text(encoding="utf-8"))
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def provinces():
|
|
return tuple(location_data())
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def cities_by_province():
|
|
return {item["province"]: tuple(item["cities"]) for item in location_data()}
|
|
|
|
|
|
def validate_location(province, city):
|
|
province = (province or "").strip()
|
|
city = (city or "").strip()
|
|
if not province and not city:
|
|
return province, city, None
|
|
if city and not province:
|
|
return province, city, "برای انتخاب شهر، ابتدا استان را انتخاب کنید."
|
|
cities = cities_by_province()
|
|
if province not in cities:
|
|
return province, city, "استان انتخابشده معتبر نیست."
|
|
if city and city not in cities[province]:
|
|
return province, city, "شهر انتخابشده متعلق به این استان نیست."
|
|
return province, city, None
|