Coverage for .venv/lib/python3.13/site-packages/litellm/proxy/prisma_migration.py: 0%

28 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 12:01 +0000

1"""Standalone entrypoint for applying database migrations and generating the Prisma client. 

2 

3Migration failures fail the entrypoint by default; set ENFORCE_PRISMA_MIGRATION_CHECK=false 

4for log-only behavior. A failed 'prisma generate' is always log-only: every shipped image 

5bakes the client at build time, and refreshing it writes into site-packages, which an 

6arbitrary non-root uid or a read-only root filesystem cannot do. 

7""" 

8 

9import os 

10import subprocess 

11import sys 

12 

13sys.path.insert(0, os.path.abspath("./")) 

14 

15from typing import Final 

16 

17import click 

18from litellm_proxy_extras.prisma_toolchain import resolve_prisma_argv 

19 

20from litellm._logging import verbose_proxy_logger 

21from litellm.proxy.proxy_cli import run_server 

22 

23 

24def _enforce_prisma_migration_check(raw: str | None) -> bool: 

25 if raw is None or not raw.strip(): 

26 return True 

27 try: 

28 return bool(click.BOOL(raw)) 

29 except click.BadParameter: 

30 return True 

31 

32 

33def main() -> int: 

34 enforce_prisma_migration_check: Final = _enforce_prisma_migration_check(os.getenv("ENFORCE_PRISMA_MIGRATION_CHECK")) 

35 run_server_args: Final = ( 

36 ("--skip_server_startup", "--enforce_prisma_migration_check") 

37 if enforce_prisma_migration_check 

38 else ("--skip_server_startup",) 

39 ) 

40 run_server(run_server_args, standalone_mode=False) 

41 

42 verbose_proxy_logger.info("Running 'prisma generate'...") 

43 result: Final = subprocess.run(resolve_prisma_argv(("prisma", "generate")), capture_output=True, text=True) 

44 verbose_proxy_logger.info("'prisma generate' stdout: %s", result.stdout) 

45 

46 if result.returncode != 0: 

47 verbose_proxy_logger.warning( 

48 "'prisma generate' exited %s; continuing with the client baked at image build time. stderr: %s", 

49 result.returncode, 

50 result.stderr, 

51 ) 

52 return 0 

53 

54 

55if __name__ == "__main__": 

56 sys.exit(main())