PlanMate / planmate /utils.py
embed786's picture
Upload 9 files
6380b21 verified
raw
history blame contribute delete
983 Bytes
from datetime import date, datetime, timedelta
from typing import List
import pytz
import re
def clamp_days(n: int, min_v=1, max_v=30):
return max(min_v, min(max_v, n))
def to_iso(d: date) -> str:
return d.strftime("%Y-%m-%d")
def parse_date_str(s: str) -> date:
return datetime.strptime(s, "%Y-%m-%d").date()
def compute_return_date(start: date, days: int) -> date:
days = clamp_days(days)
return start + timedelta(days=days)
def format_price(amount: str, currency: str = "PKR") -> str:
try:
f = float(amount)
return f"{currency} {f:,.0f}"
except Exception:
return f"{currency} {amount}"
def day_list(start: date, days: int) -> List[date]:
days = clamp_days(days)
return [start + timedelta(days=i) for i in range(days)]
def as_local(dt: datetime, tz="Asia/Karachi") -> datetime:
return dt.astimezone(pytz.timezone(tz))
def is_iata_code(s: str) -> bool:
return bool(re.fullmatch(r"[A-Z]{3}", s or ""))