The scheduler.py already supported "daily HH:MM,HH:MM,HH:MM" format
(commit 5f27d05), but config.py validation regex only accepted single
time "daily HH:MM", causing data-refresh to crash on startup.
Also adds:
- tests/test_config_sync_schedule.py (16 test cases)
- Makefile with validate-config target for CI/CD integration
75 lines
2.4 KiB
Makefile
75 lines
2.4 KiB
Makefile
# AI Data Analyst - Development Makefile
|
|
#
|
|
# Usage:
|
|
# make - show help
|
|
# make test - run all tests
|
|
# make test-config - run config-related tests only
|
|
# make validate-config CONFIG_DIR=path/to/config - validate data_description.md
|
|
# make lint - placeholder for future linting
|
|
|
|
SHELL := /bin/bash
|
|
PYTHON := .venv/bin/python
|
|
PYTEST := .venv/bin/pytest
|
|
|
|
# Optional: path to config directory containing data_description.md
|
|
# Default: config/ (relative to project root)
|
|
CONFIG_DIR ?= config
|
|
|
|
.PHONY: help test test-config validate-config lint
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Available targets:"
|
|
@echo " make test Run all pytest tests"
|
|
@echo " make test-config Run config and scheduler tests only"
|
|
@echo " make validate-config Validate data_description.md parsing"
|
|
@echo " Optional: CONFIG_DIR=path/to/config (default: config/)"
|
|
@echo " make lint Placeholder for future linting"
|
|
@echo ""
|
|
@echo "Prerequisites: Python virtualenv at .venv/ with dependencies installed"
|
|
|
|
test:
|
|
$(PYTEST)
|
|
|
|
test-config:
|
|
$(PYTEST) tests/test_config_query_mode.py tests/test_config_sync_schedule.py tests/test_scheduler.py -v
|
|
|
|
define VALIDATE_SCRIPT
|
|
import os, sys, re, tempfile, shutil
|
|
from pathlib import Path
|
|
|
|
config_dir = Path(os.environ.get("CONFIG_DIR", "config"))
|
|
config_file = config_dir / "data_description.md"
|
|
if not config_file.exists():
|
|
print("FAIL: %s not found" % config_file, file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
# Ensure docs/data_description.md exists so Config._find_project_root() works.
|
|
# If CONFIG_DIR points elsewhere, create a temporary symlink.
|
|
docs_path = Path("docs/data_description.md")
|
|
created_symlink = False
|
|
if not docs_path.exists():
|
|
docs_path.parent.mkdir(parents=True, exist_ok=True)
|
|
docs_path.symlink_to(config_file.resolve())
|
|
created_symlink = True
|
|
|
|
try:
|
|
from src.config import Config
|
|
c = Config()
|
|
names = ", ".join(t.name for t in c.tables)
|
|
print("OK: parsed %d table(s): %s" % (len(c.tables), names))
|
|
except Exception as e:
|
|
print("FAIL: %s" % e, file=sys.stderr)
|
|
sys.exit(1)
|
|
finally:
|
|
if created_symlink:
|
|
docs_path.unlink(missing_ok=True)
|
|
endef
|
|
export VALIDATE_SCRIPT
|
|
|
|
validate-config:
|
|
@echo "Validating data_description.md in CONFIG_DIR=$(CONFIG_DIR) ..."
|
|
@CONFIG_DIR=$(CONFIG_DIR) $(PYTHON) -c "$$VALIDATE_SCRIPT"
|
|
|
|
lint:
|
|
@echo "Linting not configured yet. Add ruff, flake8, or similar here."
|