Initial commit
All checks were successful
Build And Test / publish (push) Successful in 1m30s

This commit is contained in:
2025-12-30 15:16:45 -08:00
parent 4df9a7229e
commit 4f6098e8c2
28 changed files with 3080 additions and 0 deletions

91
src/config.py Normal file
View File

@@ -0,0 +1,91 @@
from pydantic_settings import BaseSettings
from pydantic import Field, SecretStr
from typing import Optional
class Settings(BaseSettings):
# MCP Server
server_name: str = Field(default="PIM MCP Server", alias="SERVER_NAME")
server_port: int = Field(default=8000, alias="PORT")
server_host: str = Field(default="0.0.0.0", alias="HOST")
environment: str = Field(default="development", alias="ENVIRONMENT")
# API Authentication
mcp_api_key: Optional[SecretStr] = Field(default=None, alias="MCP_API_KEY")
# IMAP Configuration
imap_host: Optional[str] = Field(default=None, alias="IMAP_HOST")
imap_port: int = Field(default=993, alias="IMAP_PORT")
imap_username: Optional[str] = Field(default=None, alias="IMAP_USERNAME")
imap_password: Optional[SecretStr] = Field(default=None, alias="IMAP_PASSWORD")
imap_use_ssl: bool = Field(default=True, alias="IMAP_USE_SSL")
# SMTP Configuration
smtp_host: Optional[str] = Field(default=None, alias="SMTP_HOST")
smtp_port: int = Field(default=587, alias="SMTP_PORT")
smtp_username: Optional[str] = Field(default=None, alias="SMTP_USERNAME")
smtp_password: Optional[SecretStr] = Field(default=None, alias="SMTP_PASSWORD")
smtp_use_tls: bool = Field(default=True, alias="SMTP_USE_TLS")
smtp_from_email: Optional[str] = Field(default=None, alias="SMTP_FROM_EMAIL")
smtp_from_name: Optional[str] = Field(default=None, alias="SMTP_FROM_NAME")
# CalDAV Configuration
caldav_url: Optional[str] = Field(default=None, alias="CALDAV_URL")
caldav_username: Optional[str] = Field(default=None, alias="CALDAV_USERNAME")
caldav_password: Optional[SecretStr] = Field(default=None, alias="CALDAV_PASSWORD")
# CardDAV Configuration
carddav_url: Optional[str] = Field(default=None, alias="CARDDAV_URL")
carddav_username: Optional[str] = Field(default=None, alias="CARDDAV_USERNAME")
carddav_password: Optional[SecretStr] = Field(default=None, alias="CARDDAV_PASSWORD")
# SQLite Cache
sqlite_path: str = Field(default="/data/cache.db", alias="SQLITE_PATH")
cache_ttl_seconds: int = Field(default=300, alias="CACHE_TTL_SECONDS")
# Feature Flags
enable_email: bool = Field(default=True, alias="ENABLE_EMAIL")
enable_calendar: bool = Field(default=True, alias="ENABLE_CALENDAR")
enable_contacts: bool = Field(default=True, alias="ENABLE_CONTACTS")
model_config = {
"env_file": ".env",
"env_file_encoding": "utf-8",
"populate_by_name": True,
"extra": "ignore",
}
def is_email_configured(self) -> bool:
return all([
self.enable_email,
self.imap_host,
self.imap_username,
self.imap_password,
])
def is_smtp_configured(self) -> bool:
return all([
self.smtp_host,
self.smtp_username,
self.smtp_password,
self.smtp_from_email,
])
def is_calendar_configured(self) -> bool:
return all([
self.enable_calendar,
self.caldav_url,
self.caldav_username,
self.caldav_password,
])
def is_contacts_configured(self) -> bool:
return all([
self.enable_contacts,
self.carddav_url,
self.carddav_username,
self.carddav_password,
])
settings = Settings()