Show effective worker enabled state
This commit is contained in:
+58
-15
@@ -3432,6 +3432,7 @@ async def workers(request: Request):
|
||||
"""
|
||||
)
|
||||
settings_rows = await pool.fetch("SELECT * FROM app_settings ORDER BY category, key")
|
||||
setting_values: dict[str, Any] = {}
|
||||
settings = []
|
||||
for row in settings_rows:
|
||||
item = dict(row)
|
||||
@@ -3440,6 +3441,7 @@ async def workers(request: Request):
|
||||
item["value_json"] = json.loads(item["value_json"])
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
setting_values[str(item.get("key") or "")] = item.get("value_json")
|
||||
if item.get("key") in {"ai_writer_categories", "tg_poster_schedule_json", "vk_poster_schedule_json", *AI_WORKER_ENABLED_SETTINGS.values()}:
|
||||
continue
|
||||
settings.append(item)
|
||||
@@ -3460,6 +3462,19 @@ async def workers(request: Request):
|
||||
workers=[
|
||||
{
|
||||
**dict(r),
|
||||
"setting_enabled": (
|
||||
bool(setting_values.get(AI_WORKER_ENABLED_SETTINGS[str(r["name"])]))
|
||||
if str(r["name"]) in AI_WORKER_ENABLED_SETTINGS
|
||||
else None
|
||||
),
|
||||
"effective_enabled": (
|
||||
bool(r["enabled"])
|
||||
and (
|
||||
bool(setting_values.get(AI_WORKER_ENABLED_SETTINGS[str(r["name"])]))
|
||||
if str(r["name"]) in AI_WORKER_ENABLED_SETTINGS
|
||||
else True
|
||||
)
|
||||
),
|
||||
"meta_json": json.loads(r["meta_json"]) if isinstance(r["meta_json"], str) else (r["meta_json"] or {}),
|
||||
}
|
||||
for r in rows
|
||||
@@ -3750,22 +3765,50 @@ async def worker_toggle(request: Request, worker_name: str, csrf_token: str = Fo
|
||||
pool = await get_pool()
|
||||
async with pool.acquire() as conn:
|
||||
async with conn.transaction():
|
||||
row = await conn.fetchrow(
|
||||
"""
|
||||
UPDATE worker_controls
|
||||
SET enabled=NOT enabled,
|
||||
updated_by=$2,
|
||||
updated_at=NOW()
|
||||
WHERE name=$1
|
||||
RETURNING enabled
|
||||
""",
|
||||
worker_name,
|
||||
user["id"],
|
||||
)
|
||||
if not row:
|
||||
return redirect("/workers")
|
||||
enabled = bool(row["enabled"])
|
||||
setting_key = AI_WORKER_ENABLED_SETTINGS.get(worker_name)
|
||||
if setting_key:
|
||||
current = await conn.fetchrow(
|
||||
"""
|
||||
SELECT wc.enabled AS worker_enabled,
|
||||
COALESCE((s.value_json)::boolean, FALSE) AS setting_enabled
|
||||
FROM worker_controls wc
|
||||
LEFT JOIN app_settings s ON s.key=$2
|
||||
WHERE wc.name=$1
|
||||
""",
|
||||
worker_name,
|
||||
setting_key,
|
||||
)
|
||||
if not current:
|
||||
return redirect("/workers")
|
||||
enabled = not (bool(current["worker_enabled"]) and bool(current["setting_enabled"]))
|
||||
await conn.execute(
|
||||
"""
|
||||
UPDATE worker_controls
|
||||
SET enabled=$2,
|
||||
updated_by=$3,
|
||||
updated_at=NOW()
|
||||
WHERE name=$1
|
||||
""",
|
||||
worker_name,
|
||||
enabled,
|
||||
user["id"],
|
||||
)
|
||||
else:
|
||||
row = await conn.fetchrow(
|
||||
"""
|
||||
UPDATE worker_controls
|
||||
SET enabled=NOT enabled,
|
||||
updated_by=$2,
|
||||
updated_at=NOW()
|
||||
WHERE name=$1
|
||||
RETURNING enabled
|
||||
""",
|
||||
worker_name,
|
||||
user["id"],
|
||||
)
|
||||
if not row:
|
||||
return redirect("/workers")
|
||||
enabled = bool(row["enabled"])
|
||||
if setting_key:
|
||||
await conn.execute(
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user