Add data generation scripts and public holidays service

- Add scripts for generating booking data, building metadata, and
  updating holidays
- Implement public_holidays.py service with holiday lookup functionality
- Update CSV data with expanded hotel booking records
- Add holidays.json dataset for public holiday dates
- Enhance LLM report service with improved formatting
- Update metadata domain model and API dependencies
- Add test coverage for dataset and public holidays
This commit is contained in:
2026-09-21 14:13:39 +08:00
parent 225d28feb7
commit 769c777b48
19 changed files with 50164 additions and 40297 deletions
+51 -50
View File
@@ -1,50 +1,51 @@
[project]
name = "nf-hotel-api"
version = "0.1.0"
description = "Secure FastAPI service for NF Hotel booking analytics: descriptive statistics + LLM-generated markdown reports"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115",
"uvicorn[standard]>=0.34",
"pandas>=2.2",
"pydantic>=2.9",
"pydantic-settings>=2.6",
"httpx>=0.27",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3",
"pytest-asyncio>=0.24",
"pytest-cov>=5.0",
"httpx2>=2.0",
]
[tool.pytest.ini_options]
pythonpath = ["src"]
asyncio_mode = "auto"
addopts = "--cov=nf_hotel_api --cov-report=term-missing"
filterwarnings = [
# Third-party noise: starlette's testclient.py still references anyio's
# deprecated BlockingPortal alias; nothing our code touches directly.
"ignore:The anyio.abc.BlockingPortal alias is deprecated:DeprecationWarning",
]
[tool.coverage.run]
source = ["nf_hotel_api"]
[tool.coverage.report]
exclude_lines = [
"if TYPE_CHECKING:",
"raise NotImplementedError",
]
[tool.coverage.html]
directory = "docs/htmlcov"
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["src"]
[project]
name = "nf-hotel-api"
version = "0.1.0"
description = "Secure FastAPI service for NF Hotel booking analytics: descriptive statistics + LLM-generated markdown reports"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115",
"uvicorn[standard]>=0.34",
"pandas>=2.2",
"pydantic>=2.9",
"pydantic-settings>=2.6",
"httpx>=0.27",
"holidays>=0.60",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3",
"pytest-asyncio>=0.24",
"pytest-cov>=5.0",
"httpx2>=2.0",
]
[tool.pytest.ini_options]
pythonpath = ["src"]
asyncio_mode = "auto"
addopts = "--cov=nf_hotel_api --cov-report=term-missing"
filterwarnings = [
# Third-party noise: starlette's testclient.py still references anyio's
# deprecated BlockingPortal alias; nothing our code touches directly.
"ignore:The anyio.abc.BlockingPortal alias is deprecated:DeprecationWarning",
]
[tool.coverage.run]
source = ["nf_hotel_api"]
[tool.coverage.report]
exclude_lines = [
"if TYPE_CHECKING:",
"raise NotImplementedError",
]
[tool.coverage.html]
directory = "docs/htmlcov"
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["src"]