File size: 983 Bytes
6380b21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 ""))