| import logging |
| import os |
|
|
| from modules.ffmpeg_env import setup_ffmpeg_path |
|
|
| try: |
| setup_ffmpeg_path() |
| |
| logging.basicConfig( |
| level=os.getenv("LOG_LEVEL", "INFO"), |
| format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", |
| ) |
| except BaseException: |
| pass |
|
|
| import argparse |
|
|
| import uvicorn |
|
|
| from modules.api.api_setup import setup_api_args |
| from modules.models_setup import setup_model_args |
| from modules.utils import env |
| from modules.utils.ignore_warn import ignore_useless_warnings |
|
|
| ignore_useless_warnings() |
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| def setup_uvicon_args(parser: argparse.ArgumentParser): |
| parser.add_argument("--host", type=str, help="Host to run the server on") |
| parser.add_argument("--port", type=int, help="Port to run the server on") |
| parser.add_argument( |
| "--reload", action="store_true", help="Enable auto-reload for development" |
| ) |
| parser.add_argument("--workers", type=int, help="Number of worker processes") |
| parser.add_argument("--log_level", type=str, help="Log level") |
| parser.add_argument("--access_log", action="store_true", help="Enable access log") |
| parser.add_argument( |
| "--proxy_headers", action="store_true", help="Enable proxy headers" |
| ) |
| parser.add_argument( |
| "--timeout_keep_alive", type=int, help="Keep-alive timeout duration" |
| ) |
| parser.add_argument( |
| "--timeout_graceful_shutdown", |
| type=int, |
| help="Graceful shutdown timeout duration", |
| ) |
| parser.add_argument("--ssl_keyfile", type=str, help="SSL key file path") |
| parser.add_argument("--ssl_certfile", type=str, help="SSL certificate file path") |
| parser.add_argument( |
| "--ssl_keyfile_password", type=str, help="SSL key file password" |
| ) |
|
|
|
|
| def process_uvicon_args(args): |
| host = env.get_and_update_env(args, "host", "0.0.0.0", str) |
| port = env.get_and_update_env(args, "port", 7870, int) |
| reload = env.get_and_update_env(args, "reload", False, bool) |
| workers = env.get_and_update_env(args, "workers", 1, int) |
| log_level = env.get_and_update_env(args, "log_level", "info", str) |
| access_log = env.get_and_update_env(args, "access_log", True, bool) |
| proxy_headers = env.get_and_update_env(args, "proxy_headers", True, bool) |
| timeout_keep_alive = env.get_and_update_env(args, "timeout_keep_alive", 5, int) |
| timeout_graceful_shutdown = env.get_and_update_env( |
| args, "timeout_graceful_shutdown", 0, int |
| ) |
| ssl_keyfile = env.get_and_update_env(args, "ssl_keyfile", None, str) |
| ssl_certfile = env.get_and_update_env(args, "ssl_certfile", None, str) |
| ssl_keyfile_password = env.get_and_update_env( |
| args, "ssl_keyfile_password", None, str |
| ) |
|
|
| uvicorn.run( |
| "modules.api.worker:app", |
| host=host, |
| port=port, |
| reload=reload, |
| workers=workers, |
| log_level=log_level, |
| access_log=access_log, |
| proxy_headers=proxy_headers, |
| timeout_keep_alive=timeout_keep_alive, |
| timeout_graceful_shutdown=timeout_graceful_shutdown, |
| ssl_keyfile=ssl_keyfile, |
| ssl_certfile=ssl_certfile, |
| ssl_keyfile_password=ssl_keyfile_password, |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| import dotenv |
|
|
| dotenv.load_dotenv( |
| dotenv_path=os.getenv("ENV_FILE", ".env.api"), |
| ) |
| parser = argparse.ArgumentParser( |
| description="Start the FastAPI server with command line arguments" |
| ) |
| |
| setup_api_args(parser=parser) |
| setup_model_args(parser=parser) |
| setup_uvicon_args(parser=parser) |
|
|
| args = parser.parse_args() |
|
|
| process_uvicon_args(args) |
|
|