Initial project structure

Scaffold all modules, route stubs, data models, and config.
No logic implemented yet — all core methods raise NotImplementedError.
Establishes the full directory layout matching the architecture in CLAUDE.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaroslav Benes
2026-04-08 14:48:48 +02:00
commit 083cbb1fa7
32 changed files with 1507 additions and 0 deletions

35
fellowship/logger.py Normal file
View File

@@ -0,0 +1,35 @@
"""
Logging setup for Fellowship.
Call setup_logging() once at startup. All modules use standard logging.getLogger(__name__).
Logs are written to logs/{YYYY-MM-DD}.log and to stdout in debug mode.
"""
import logging
import logging.handlers
import os
from datetime import date
def setup_logging() -> None:
os.makedirs("logs", exist_ok=True)
log_file = f"logs/{date.today().isoformat()}.log"
formatter = logging.Formatter(
fmt="%(asctime)s [%(levelname)s] %(name)s%(message)s",
datefmt="%Y-%m-%dT%H:%M:%S",
)
file_handler = logging.handlers.TimedRotatingFileHandler(
log_file, when="midnight", backupCount=30, encoding="utf-8"
)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.DEBUG)
root = logging.getLogger()
root.setLevel(logging.DEBUG)
root.addHandler(file_handler)
root.addHandler(console_handler)