This commit is contained in:
91
src/config.py
Normal file
91
src/config.py
Normal 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()
|
||||
Reference in New Issue
Block a user