|
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) |
|
|