mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-25 02:34:29 +00:00
* build(README.md): initial commit adding a separate folder for additional proxy files. Meant to reduce size of core package * build(litellm-proxy-extras/): new pip package for storing migration files allows litellm proxy to use migration files, without adding them to core repo * build(litellm-proxy-extras/): cleanup pyproject.toml * build: move prisma migration files inside new proxy extras package * build(run_migration.py): update script to write to correct folder * build(proxy_cli.py): load in migration files from litellm-proxy-extras Closes https://github.com/BerriAI/litellm/issues/9558 * build: add MIT license to litellm-proxy-extras * test: update test * fix: fix schema * bump: version 0.1.0 → 0.1.1 * build(publish-proxy-extras.sh): add script for publishing new proxy-extras version * build(liccheck.ini): add litellm-proxy-extras to authorized packages * fix(litellm-proxy-extras/utils.py): move prisma migrate logic inside extra proxy pkg easier since migrations folder already there * build(pre-commit-config.yaml): add litellm_proxy_extras to ci tests * docs(config_settings.md): document new env var * build(pyproject.toml): bump relevant files when litellm-proxy-extras version changed * build(pre-commit-config.yaml): run poetry check on litellm-proxy-extras as well
85 lines
3.2 KiB
Python
85 lines
3.2 KiB
Python
import pytest
|
|
import os
|
|
import subprocess
|
|
from pathlib import Path
|
|
from pytest_postgresql import factories
|
|
import shutil
|
|
import tempfile
|
|
|
|
# Create postgresql fixture
|
|
postgresql_my_proc = factories.postgresql_proc(port=None)
|
|
postgresql_my = factories.postgresql("postgresql_my_proc")
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def schema_setup(postgresql_my):
|
|
"""Fixture to provide a test postgres database"""
|
|
return postgresql_my
|
|
|
|
|
|
def test_aaaasschema_migration_check(schema_setup, monkeypatch):
|
|
"""Test to check if schema requires migration"""
|
|
# Set test database URL
|
|
test_db_url = f"postgresql://{schema_setup.info.user}:@{schema_setup.info.host}:{schema_setup.info.port}/{schema_setup.info.dbname}"
|
|
# test_db_url = "postgresql://neondb_owner:npg_JiZPS0DAhRn4@ep-delicate-wave-a55cvbuc.us-east-2.aws.neon.tech/neondb?sslmode=require"
|
|
monkeypatch.setenv("DATABASE_URL", test_db_url)
|
|
|
|
deploy_dir = Path("./litellm-proxy-extras/litellm_proxy_extras")
|
|
source_migrations_dir = deploy_dir / "migrations"
|
|
schema_path = Path("./schema.prisma")
|
|
|
|
# Create temporary migrations directory next to schema.prisma
|
|
temp_migrations_dir = schema_path.parent / "migrations"
|
|
|
|
try:
|
|
# Copy migrations to correct location
|
|
if temp_migrations_dir.exists():
|
|
shutil.rmtree(temp_migrations_dir)
|
|
shutil.copytree(source_migrations_dir, temp_migrations_dir)
|
|
|
|
if not temp_migrations_dir.exists() or not any(temp_migrations_dir.iterdir()):
|
|
print("No existing migrations found - first migration needed")
|
|
pytest.fail(
|
|
"No existing migrations found - first migration needed. Run `litellm/ci_cd/baseline_db.py` to create new migration -E.g. `python litellm/ci_cd/baseline_db_migration.py`."
|
|
)
|
|
|
|
# Apply all existing migrations
|
|
subprocess.run(
|
|
["prisma", "migrate", "deploy", "--schema", str(schema_path)], check=True
|
|
)
|
|
|
|
# Compare current database state against schema
|
|
diff_result = subprocess.run(
|
|
[
|
|
"prisma",
|
|
"migrate",
|
|
"diff",
|
|
"--from-url",
|
|
test_db_url,
|
|
"--to-schema-datamodel",
|
|
str(schema_path),
|
|
"--script", # Show the SQL diff
|
|
"--exit-code", # Return exit code 2 if there are differences
|
|
],
|
|
capture_output=True,
|
|
text=True,
|
|
)
|
|
|
|
print("Exit code:", diff_result.returncode)
|
|
print("Stdout:", diff_result.stdout)
|
|
print("Stderr:", diff_result.stderr)
|
|
|
|
if diff_result.returncode == 2:
|
|
print("Schema changes detected. New migration needed.")
|
|
print("Schema differences:")
|
|
print(diff_result.stdout)
|
|
pytest.fail(
|
|
"Schema changes detected - new migration required. Run `litellm/ci_cd/run_migration.py` to create new migration -E.g. `python litellm/ci_cd/run_migration.py <migration_name>`."
|
|
)
|
|
else:
|
|
print("No schema changes detected. Migration not needed.")
|
|
|
|
finally:
|
|
# Clean up: remove temporary migrations directory
|
|
if temp_migrations_dir.exists():
|
|
shutil.rmtree(temp_migrations_dir)
|