mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-07-08 22:22:17 +02:00
feat: implement ensure_publication for zero_publication management
- Added the ensure_publication function to create and verify the zero_publication if it is missing, ensuring idempotency during database initialization. - Integrated ensure_publication into the create_db_and_tables function to prevent zero-cache crash loops on startup. - Introduced a self-check script to validate the ensure_publication functionality on a create_all-bootstrapped database. - Updated various components to reflect the transition from search space to workspace, including adjustments in imports and routing paths.
This commit is contained in:
parent
7562bc78ee
commit
a64c8205fe
164 changed files with 626 additions and 506 deletions
|
|
@ -0,0 +1,46 @@
|
|||
"""Self-check for ensure_publication on a create_all-bootstrapped scratch DB."""
|
||||
|
||||
import asyncio
|
||||
|
||||
import asyncpg
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.ext.asyncio import create_async_engine
|
||||
|
||||
SCRATCH_DB = "surfsense_zero_pub_check"
|
||||
ADMIN_DSN = "postgresql://postgres:postgres@localhost:5432/postgres"
|
||||
SCRATCH_URL = f"postgresql+asyncpg://postgres:postgres@localhost:5432/{SCRATCH_DB}"
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
admin = await asyncpg.connect(ADMIN_DSN)
|
||||
await admin.execute(f'DROP DATABASE IF EXISTS "{SCRATCH_DB}" WITH (FORCE)')
|
||||
await admin.execute(f'CREATE DATABASE "{SCRATCH_DB}"')
|
||||
await admin.close()
|
||||
|
||||
from app.db import Base
|
||||
from app.zero_publication import ensure_publication, verify_publication
|
||||
|
||||
engine = create_async_engine(SCRATCH_URL)
|
||||
try:
|
||||
async with engine.begin() as conn:
|
||||
await conn.execute(text("CREATE EXTENSION IF NOT EXISTS vector"))
|
||||
await conn.execute(text("CREATE EXTENSION IF NOT EXISTS pg_trgm"))
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
await conn.run_sync(ensure_publication)
|
||||
mismatches = await conn.run_sync(verify_publication)
|
||||
assert not mismatches, f"shape wrong after ensure: {mismatches}"
|
||||
|
||||
# Second call must be a no-op that leaves a verified shape.
|
||||
await conn.run_sync(ensure_publication)
|
||||
mismatches = await conn.run_sync(verify_publication)
|
||||
assert not mismatches, f"shape wrong after re-ensure: {mismatches}"
|
||||
finally:
|
||||
await engine.dispose()
|
||||
admin = await asyncpg.connect(ADMIN_DSN)
|
||||
await admin.execute(f'DROP DATABASE IF EXISTS "{SCRATCH_DB}" WITH (FORCE)')
|
||||
await admin.close()
|
||||
|
||||
print("OK: ensure_publication creates and verifies on a create_all DB, idempotently.")
|
||||
|
||||
|
||||
asyncio.run(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue