38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
import uvicorn
|
|
import signal
|
|
import sys
|
|
from src.shared.config.settings import settings
|
|
from src.shared.config.logging_config import setup_logging, get_logger
|
|
setup_logging()
|
|
logger = get_logger(__name__)
|
|
|
|
def signal_handler(sig, frame):
|
|
"""Handle Ctrl+C gracefully."""
|
|
logger.info('\nReceived interrupt signal (Ctrl+C). Shutting down gracefully...')
|
|
sys.exit(0)
|
|
|
|
if __name__ == '__main__':
|
|
# Register signal handler for graceful shutdown on Ctrl+C
|
|
signal.signal(signal.SIGINT, signal_handler)
|
|
signal.signal(signal.SIGTERM, signal_handler)
|
|
|
|
logger.info(f'Starting {settings.APP_NAME} on {settings.HOST}:{settings.PORT}')
|
|
import os
|
|
from pathlib import Path
|
|
base_dir = Path(__file__).parent
|
|
src_dir = str(base_dir / 'src')
|
|
# Enable hot reload in development mode or if explicitly enabled via environment variable
|
|
use_reload = settings.is_development or os.getenv('ENABLE_RELOAD', 'false').lower() == 'true'
|
|
if use_reload:
|
|
logger.info('Hot reload enabled - server will restart on code changes')
|
|
logger.info('Press Ctrl+C to stop the server')
|
|
uvicorn.run(
|
|
'src.main:app',
|
|
host=settings.HOST,
|
|
port=settings.PORT,
|
|
reload=use_reload,
|
|
log_level=settings.LOG_LEVEL.lower(),
|
|
reload_dirs=[src_dir] if use_reload else None,
|
|
reload_excludes=['*.log', '*.pyc', '*.pyo', '*.pyd', '__pycache__', '**/__pycache__/**', '*.db', '*.sqlite', '*.sqlite3', 'venv/**', '.venv/**'],
|
|
reload_delay=0.5
|
|
) |