rss-news/backend/app/workflow.py

38 lines
1,016 B
Python

from __future__ import annotations
UI_STATUSES = ("new", "rewrite", "publish", "published", "close")
def internal_to_ui_status(status: str | None) -> str:
value = (status or "").strip()
if value == "approved":
return "publish"
if value == "error":
return "close"
if value == "review":
return "rewrite"
if value in {"new", "rewrite", "published"}:
return value
return value or "new"
def ui_to_internal_status(status: str | None) -> str:
value = (status or "").strip()
if value == "publish":
return "approved"
if value == "close":
return "error"
if value in {"new", "rewrite", "published"}:
return value
if value in {"approved", "error", "review"}:
return value
return value
ALLOWED_UI_TRANSITIONS: dict[str, set[str]] = {
"new": {"rewrite", "close"},
"rewrite": {"publish", "close"},
"publish": {"published", "close"},
"published": {"rewrite", "close"},
"close": {"rewrite"},
}