Skip to content

Commit d4ec3e9

Browse files
fix: remove pool_size/max_overflow when using NullPool in alembic migrations
The alembic env.py calls build_engine_kwargs() which adds pool_size and max_overflow for PostgreSQL, then sets poolclass=NullPool. NullPool rejects those arguments, causing TypeError on startup. Also removes duplicate helper function definitions at the end of main.py. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 097f443 commit d4ec3e9

File tree

2 files changed

+3
-47
lines changed

2 files changed

+3
-47
lines changed

server/alembic/env.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def run_migrations_offline() -> None:
3333
def run_migrations_online() -> None:
3434
engine_kwargs = build_engine_kwargs(settings.db_url)
3535
engine_kwargs["poolclass"] = pool.NullPool
36+
# NullPool doesn't accept pool-sizing arguments
37+
engine_kwargs.pop("pool_size", None)
38+
engine_kwargs.pop("max_overflow", None)
3639
connectable = create_engine(settings.db_url, **engine_kwargs)
3740

3841
with connectable.connect() as connection:

server/worldmodel_server/main.py

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -418,50 +418,3 @@ def _artifact_response(key: str, media_type: str, not_found_detail: str) -> Resp
418418
return Response(content=payload, media_type=media_type)
419419

420420

421-
def _client_host(request: Request) -> str:
422-
forwarded = request.headers.get("x-forwarded-for")
423-
if forwarded:
424-
return forwarded.split(",")[0].strip()
425-
if request.client and request.client.host:
426-
return request.client.host
427-
return "unknown"
428-
429-
430-
def _should_rate_limit_public_request(request: Request) -> bool:
431-
if request.method not in {"GET", "HEAD"}:
432-
return False
433-
if not request.url.path.startswith("/api/"):
434-
return False
435-
if request.headers.get("authorization") or request.headers.get("x-api-key"):
436-
return False
437-
return True
438-
439-
440-
def _require_write_access(
441-
request: Request,
442-
principal: AuthenticatedPrincipal = Depends(require_scope("runs:write")),
443-
) -> AuthenticatedPrincipal:
444-
_enforce_principal_rate_limit(request, principal)
445-
return principal
446-
447-
448-
def _require_admin_access(
449-
request: Request,
450-
principal: AuthenticatedPrincipal = Depends(require_scope("admin")),
451-
) -> AuthenticatedPrincipal:
452-
_enforce_principal_rate_limit(request, principal)
453-
return principal
454-
455-
456-
def _enforce_principal_rate_limit(request: Request, principal: AuthenticatedPrincipal) -> None:
457-
client_host = _client_host(request)
458-
result = rate_limiter.hit(
459-
f"write:{principal.identifier}:{client_host}",
460-
principal.rate_limit_per_minute,
461-
)
462-
if not result.allowed:
463-
raise HTTPException(
464-
status_code=429,
465-
detail="authenticated write rate limit exceeded",
466-
headers={"Retry-After": str(result.retry_after)},
467-
)

0 commit comments

Comments
 (0)