mari-chat-3 / app.py
sirochild's picture
Upload 57 files
a73fa4e verified
raw
history blame
3.61 kB
"""
メインアプリケーションモジュール
Main application module
"""
import asyncio
import sys
from pathlib import Path
from letter_config import Config
from letter_logger import get_app_logger
# プロジェクトルートをPythonパスに追加
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
logger = get_app_logger()
class LetterApp:
"""非同期手紙生成アプリケーションのメインクラス"""
def __init__(self):
"""アプリケーションを初期化"""
self.config = Config()
self.logger = logger
self._initialized = False
async def initialize(self) -> bool:
"""
アプリケーションを初期化する
Returns:
初期化が成功したかどうか
"""
try:
self.logger.info("アプリケーションを初期化中...")
# 設定の妥当性をチェック
if not self.config.validate_config():
self.logger.error("設定の検証に失敗しました")
return False
# ストレージディレクトリを作成
await self._setup_storage_directories()
# ログディレクトリを作成
await self._setup_log_directories()
self._initialized = True
self.logger.info("アプリケーションの初期化が完了しました")
return True
except Exception as e:
self.logger.error(f"アプリケーションの初期化中にエラーが発生しました: {e}")
return False
async def _setup_storage_directories(self):
"""ストレージディレクトリを作成"""
storage_dir = Path(self.config.STORAGE_PATH).parent
backup_dir = Path(self.config.BACKUP_PATH)
storage_dir.mkdir(parents=True, exist_ok=True)
backup_dir.mkdir(parents=True, exist_ok=True)
self.logger.info(f"ストレージディレクトリを作成: {storage_dir}")
self.logger.info(f"バックアップディレクトリを作成: {backup_dir}")
async def _setup_log_directories(self):
"""ログディレクトリを作成"""
if not self.config.DEBUG_MODE:
log_dir = Path("/mnt/data/logs")
log_dir.mkdir(parents=True, exist_ok=True)
self.logger.info(f"ログディレクトリを作成: {log_dir}")
def is_initialized(self) -> bool:
"""アプリケーションが初期化されているかチェック"""
return self._initialized
def get_config(self) -> Config:
"""設定オブジェクトを取得"""
return self.config
# グローバルアプリケーションインスタンス
app_instance = None
async def get_app() -> LetterApp:
"""アプリケーションインスタンスを取得(シングルトン)"""
global app_instance
if app_instance is None:
app_instance = LetterApp()
await app_instance.initialize()
return app_instance
def run_app():
"""アプリケーションを実行"""
async def main():
app = await get_app()
if app.is_initialized():
logger.info("アプリケーションが正常に起動しました")
else:
logger.error("アプリケーションの起動に失敗しました")
sys.exit(1)
asyncio.run(main())
if __name__ == "__main__":
run_app()