feat: add ISSLOP AI usage analysis CLI commands, game router, and politics topic

- Add `cmd_isslop_prune`, `cmd_isslop_clear`, `cmd_isslop_analyze` CLI commands for AI usage analysis job management
- Register `/game` router with `index` and `farm` endpoints for Code Farm idle game
- Add `politics` to allowed TOPICS constant replacing `signals`
- Introduce `ISSLOP_DIR`, `ISSLOP_WORKSPACES_DIR`, `ISSLOP_RUNS_DIR`, `ISSLOP_MEDIA_DIR` config paths
- Add `clear_user_stars` and `clear_user_projects_cache` calls on vote and project create/delete
- Update `make prod` to use `nproc` workers via `DEVPLACE_WEB_WORKERS` env var
- Convert `database.py` and `utils.py` to packages for modular structure
- Add `devplace apikey` and `devplace token` CLI subcommands for API key and access token management
This commit is contained in:
2026-07-06 03:57:47 +00:00
parent f1bdefd834
commit 9a8046ab2a
110 changed files with 1466 additions and 374 deletions
+8
View File
@@ -2,12 +2,16 @@
from __future__ import annotations
from devplacepy.cache import TTLCache
from devplacepy.utils import generate_uid
from .. import economy
from .common import GameError, _farms, _iso, _now, _plots, _update_farm
_leaderboard_cache = TTLCache(ttl=15, max_size=8)
def get_farm(user_uid: str) -> dict | None:
return _farms().find_one(user_uid=user_uid)
@@ -95,6 +99,9 @@ def upgrade_ci(user: dict) -> dict:
def leaderboard(limit: int = 25) -> list[dict]:
cached = _leaderboard_cache.get(f"top:{limit}")
if cached is not None:
return cached
farms = sorted(
_farms().find(),
key=economy.farm_score,
@@ -122,4 +129,5 @@ def leaderboard(limit: int = 25) -> list[dict]:
"score": economy.farm_score(farm),
}
)
_leaderboard_cache.set(f"top:{limit}", entries)
return entries