Spaces:
Sleeping
Sleeping
| """DDInter 2.0 source URLs and per-ATC-category CSV file list. | |
| Kept as a plain data module so build script logic is testable without | |
| network access. | |
| """ | |
| from __future__ import annotations | |
| DDINTER_BASE_URL = "https://ddinter2.scbdd.com/static/media/download/" | |
| # DDInter publishes one CSV per ATC top-level category. | |
| # Per the DDInter 2.0 release page, categories C/G/J/M/N/S are not available. | |
| ATC_CATEGORIES: tuple[str, ...] = ("A", "B", "D", "H", "L", "P", "R", "V") | |
| CSV_FILENAMES: tuple[str, ...] = tuple( | |
| f"ddinter_downloads_code_{c}.csv" for c in ATC_CATEGORIES | |
| ) | |
| def csv_url(filename: str) -> str: | |
| """Return the absolute URL for a DDInter CSV asset.""" | |
| return f"{DDINTER_BASE_URL}{filename}" | |
| def atc_category(filename: str) -> str: | |
| """Extract the ATC category letter from a DDInter CSV filename. | |
| Raises ValueError if the filename does not match the expected pattern. | |
| """ | |
| prefix = "ddinter_downloads_code_" | |
| suffix = ".csv" | |
| if not filename.startswith(prefix) or not filename.endswith(suffix): | |
| raise ValueError(f"Not a DDInter CSV filename: {filename!r}") | |
| code = filename[len(prefix):-len(suffix)] | |
| if code not in ATC_CATEGORIES: | |
| raise ValueError(f"Unknown ATC category: {code!r}") | |
| return code | |