fix(observatory): offer only uncalculated profiles without completion badges

This commit is contained in:
DCCONSTRUCTIONS
2026-09-03 10:16:01 +03:00
parent c2710b55a7
commit e436fb56d4
14 changed files with 420 additions and 368 deletions
+6
View File
@@ -2080,12 +2080,15 @@ class ObservatoryRecordedJobQueue:
*,
source_session_id: str | None = None,
setup_id: str | None = None,
definition_sha256: str | None = None,
limit: int = 100,
) -> tuple[ObservatoryRecordedJob, ...]:
if source_session_id is not None:
_validate_pattern(source_session_id, _SESSION_ID, "source session id")
if setup_id is not None:
_validate_pattern(setup_id, _IDENTIFIER, "setup id")
if definition_sha256 is not None:
_validate_pattern(definition_sha256, _SHA256, "definition sha256")
if not isinstance(limit, int) or isinstance(limit, bool) or not 1 <= limit <= 500:
raise ValueError("recorded-job list limit is invalid")
clauses: list[str] = []
@@ -2096,6 +2099,9 @@ class ObservatoryRecordedJobQueue:
if setup_id is not None:
clauses.append("setup_id = ?")
parameters.append(setup_id)
if definition_sha256 is not None:
clauses.append("definition_sha256 = ?")
parameters.append(definition_sha256)
where = f" WHERE {' AND '.join(clauses)}" if clauses else ""
parameters.append(limit)
with self._read_connection() as connection:
+2
View File
@@ -1131,11 +1131,13 @@ def build_observatory_router(
pattern=r"^[a-z][a-z0-9-]{2,95}$",
),
limit: int = Query(default=20, ge=1, le=100),
definition_sha256: str | None = Query(default=None, pattern=r"^[a-f0-9]{64}$"),
) -> dict[str, object]:
try:
jobs = recorded_job_queue.list_jobs(
source_session_id=source_session_id,
setup_id=setup_id,
definition_sha256=definition_sha256,
limit=limit,
)
except (ObservatoryRecordedQueueError, ValueError) as exc: