(zone: str)
| 24 | |
| 25 | |
| 26 | def parse_timezone(zone: str) -> tzinfo: |
| 27 | if zone.upper() == "UTC": |
| 28 | return ZoneInfo("UTC") |
| 29 | try: |
| 30 | return ZoneInfo(zone) |
| 31 | except ZoneInfoNotFoundError as e: |
| 32 | words = zone.split("/") |
| 33 | # Compatible with `pytz.timezone`: |
| 34 | # US/central -> US/Central |
| 35 | # Europe/moscow -> Europe/Moscow |
| 36 | # asia/ShangHai -> Asia/Shanghai |
| 37 | styled = "/".join([i if i.isupper() else i.title() for i in words]) |
| 38 | if styled != zone: |
| 39 | return ZoneInfo(styled) |
| 40 | raise e |
| 41 | |
| 42 | |
| 43 | @functools.cache |
searching dependent graphs…