Files
Document_Translator/app.py
2025-09-02 10:31:35 +08:00

134 lines
3.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Document Translator Flask 應用程式入口
Author: PANJIT IT Team
Created: 2024-01-28
Modified: 2024-01-28
"""
import os
import sys
from pathlib import Path
from datetime import datetime
# 添加專案根目錄到 Python 路徑
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
from app import create_app, db
from app.models import User, TranslationJob, JobFile, TranslationCache, APIUsageStats, SystemLog
# 創建 Flask 應用
app = create_app()
# 導出 Celery 實例供 worker 使用
celery = app.celery
@app.shell_context_processor
def make_shell_context():
"""為 Flask shell 提供上下文"""
return {
'db': db,
'User': User,
'TranslationJob': TranslationJob,
'JobFile': JobFile,
'TranslationCache': TranslationCache,
'APIUsageStats': APIUsageStats,
'SystemLog': SystemLog
}
@app.cli.command()
def init_db():
"""初始化資料庫"""
click.echo('Initializing database...')
db.create_all()
click.echo('Database initialized.')
@app.cli.command()
def test():
"""運行測試"""
import unittest
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
@app.route('/')
def index():
"""首頁路由"""
return {
'application': 'PANJIT Document Translator',
'version': '1.0.0',
'status': 'running',
'api_base_url': '/api/v1'
}
@app.route('/api')
def api_info():
"""API 資訊"""
return {
'api_version': 'v1',
'base_url': '/api/v1',
'endpoints': {
'auth': '/api/v1/auth',
'files': '/api/v1/files',
'jobs': '/api/v1/jobs',
'admin': '/api/v1/admin',
'health': '/api/v1/health'
},
'documentation': 'Available endpoints provide RESTful API for document translation'
}
@app.route('/api/health')
@app.route('/api/v1/health')
def health_check():
"""健康檢查端點"""
return {
'status': 'healthy',
'timestamp': datetime.utcnow().isoformat(),
'service': 'PANJIT Document Translator API',
'version': '1.0.0'
}, 200
if __name__ == '__main__':
# 檢查環境變數
port = int(os.environ.get('PORT', 5000))
debug = os.environ.get('FLASK_DEBUG', 'false').lower() == 'true'
host = os.environ.get('HOST', '127.0.0.1')
print(f"""
PANJIT Document Translator Starting...
Server: http://{host}:{port}
Debug Mode: {debug}
API Documentation: http://{host}:{port}/api
Health Check: http://{host}:{port}/api/v1/health
Upload Directory: {app.config.get('UPLOAD_FOLDER')}
Database: {app.config.get('SQLALCHEMY_DATABASE_URI', '').split('/')[-1]}
SMTP: {app.config.get('SMTP_SERVER')}
LDAP: {app.config.get('LDAP_SERVER')}
Press Ctrl+C to stop the server.
""")
# 啟動應用
try:
app.run(
host=host,
port=port,
debug=debug,
use_reloader=debug
)
except KeyboardInterrupt:
print("\nServer stopped by user.")
except Exception as e:
print(f"\nServer failed to start: {str(e)}")
sys.exit(1)