generated from john/python-template
V4.1 revisions in preparation for v4.2. AI data capture now better defined.
This commit is contained in:
@@ -56,6 +56,7 @@ def render_documents_table(rows: Sequence[DocumentTableRow]) -> None:
|
||||
"field": "name",
|
||||
"sortable": True,
|
||||
"classes": "font-serif font-semibold text-left ui-table-cell-wrap",
|
||||
"align": "left",
|
||||
"style": "width: 30%;",
|
||||
},
|
||||
{
|
||||
@@ -63,7 +64,8 @@ def render_documents_table(rows: Sequence[DocumentTableRow]) -> None:
|
||||
"label": "Type",
|
||||
"field": "document_type",
|
||||
"sortable": True,
|
||||
"classes": "text-left ui-table-cell-wrap",
|
||||
"classes": "ui-table-cell-wrap",
|
||||
"align": "center",
|
||||
"style": "width: 14%;",
|
||||
},
|
||||
{
|
||||
@@ -71,7 +73,8 @@ def render_documents_table(rows: Sequence[DocumentTableRow]) -> None:
|
||||
"label": "Author",
|
||||
"field": "authors",
|
||||
"sortable": True,
|
||||
"classes": "text-left ui-table-cell-wrap",
|
||||
"classes": "ui-table-cell-wrap",
|
||||
"align": "center",
|
||||
"style": "width: 22%;",
|
||||
},
|
||||
{
|
||||
@@ -80,6 +83,7 @@ def render_documents_table(rows: Sequence[DocumentTableRow]) -> None:
|
||||
"field": "document_date",
|
||||
"sortable": True,
|
||||
"classes": "font-mono text-xs",
|
||||
"align": "center",
|
||||
"style": "width: 14%;",
|
||||
},
|
||||
{
|
||||
@@ -88,6 +92,7 @@ def render_documents_table(rows: Sequence[DocumentTableRow]) -> None:
|
||||
"field": "archive_identifier",
|
||||
"sortable": True,
|
||||
"classes": "font-mono text-xs",
|
||||
"align": "center",
|
||||
"style": "width: 20%;",
|
||||
},
|
||||
],
|
||||
|
||||
@@ -62,14 +62,16 @@ def render_people_table(rows: Sequence[PersonTableRow]) -> None:
|
||||
"label": "Display Name",
|
||||
"field": "display_name",
|
||||
"sortable": True,
|
||||
"classes": "text-left ui-table-cell-wrap",
|
||||
"classes": "ui-table-cell-wrap",
|
||||
"align": "center",
|
||||
},
|
||||
{
|
||||
"name": "maiden_name",
|
||||
"label": "Maiden Name",
|
||||
"field": "maiden_name",
|
||||
"sortable": True,
|
||||
"classes": "text-left ui-table-cell-wrap",
|
||||
"classes": "ui-table-cell-wrap",
|
||||
"align": "center",
|
||||
},
|
||||
{
|
||||
"name": "birth_date",
|
||||
@@ -77,6 +79,7 @@ def render_people_table(rows: Sequence[PersonTableRow]) -> None:
|
||||
"field": "birth_date",
|
||||
"sortable": True,
|
||||
"classes": "font-mono text-xs",
|
||||
"align": "center",
|
||||
},
|
||||
{
|
||||
"name": "death_date",
|
||||
@@ -84,6 +87,7 @@ def render_people_table(rows: Sequence[PersonTableRow]) -> None:
|
||||
"field": "death_date",
|
||||
"sortable": True,
|
||||
"classes": "font-mono text-xs",
|
||||
"align": "center",
|
||||
},
|
||||
],
|
||||
default_sort_by="full_name",
|
||||
|
||||
@@ -58,6 +58,7 @@ def render_sources_table(rows: Sequence[SourceTableRow]) -> None:
|
||||
"field": "document_name",
|
||||
"sortable": True,
|
||||
"classes": "font-serif text-left ui-table-cell-wrap",
|
||||
"align": "left",
|
||||
"style": "width: 27%;",
|
||||
},
|
||||
{
|
||||
@@ -73,6 +74,7 @@ def render_sources_table(rows: Sequence[SourceTableRow]) -> None:
|
||||
"field": "upload_name",
|
||||
"sortable": True,
|
||||
"classes": "font-serif text-left ui-table-cell-wrap",
|
||||
"align": "left",
|
||||
"style": "width: 25%;",
|
||||
},
|
||||
{
|
||||
@@ -81,6 +83,7 @@ def render_sources_table(rows: Sequence[SourceTableRow]) -> None:
|
||||
"field": "job_source_status",
|
||||
"sortable": True,
|
||||
"classes": "font-mono",
|
||||
"align": "center",
|
||||
"style": "width: 14%;",
|
||||
},
|
||||
{
|
||||
@@ -89,6 +92,7 @@ def render_sources_table(rows: Sequence[SourceTableRow]) -> None:
|
||||
"field": "job_source_error_detail",
|
||||
"sortable": False,
|
||||
"classes": "font-mono text-xs text-left ui-text-muted ui-table-cell-wrap",
|
||||
"align": "left",
|
||||
"style": "width: 24%;",
|
||||
},
|
||||
],
|
||||
|
||||
@@ -597,8 +597,14 @@ def _render_related_people_card(document: Document) -> None:
|
||||
with ui.column().classes("w-full ui-row-surface p-2 gap-1"):
|
||||
archival_badge(role_code)
|
||||
for person in grouped[role_code]:
|
||||
ui.link(person.full_name, f"/ui/people/{person.id}").classes(
|
||||
"text-xs font-semibold ui-link-primary"
|
||||
ui.button(
|
||||
person.full_name,
|
||||
on_click=lambda _=None, person_id=person.id: ui.navigate.to(
|
||||
f"/people/{person_id}"
|
||||
),
|
||||
icon="person",
|
||||
).props("flat dense no-caps").classes(
|
||||
"self-start text-xs font-semibold ui-link-primary"
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -340,7 +340,7 @@ def _render_person_form_fields(
|
||||
with ui.row().classes("w-full gap-3 grid grid-cols-1 md:grid-cols-3"):
|
||||
birth_date_input = (
|
||||
ui.input(
|
||||
label="Birth date (YYYY-MM-DD)",
|
||||
label="Birth date",
|
||||
value=person.birth_date.isoformat() if person and person.birth_date else "",
|
||||
)
|
||||
.props('outlined type="date"')
|
||||
@@ -363,7 +363,7 @@ def _render_person_form_fields(
|
||||
with ui.row().classes("w-full gap-3 grid grid-cols-1 md:grid-cols-3"):
|
||||
death_date_input = (
|
||||
ui.input(
|
||||
label="Death date (YYYY-MM-DD)",
|
||||
label="Death date",
|
||||
value=person.death_date.isoformat() if person and person.death_date else "",
|
||||
)
|
||||
.props('outlined type="date"')
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from urllib.parse import quote
|
||||
from uuid import UUID
|
||||
@@ -327,6 +328,24 @@ def _render_source_job_metadata_zone(latest_job_source: JobSource | None) -> Non
|
||||
ui.label("Failure Detail:").classes("ui-text-muted text-xs mb-1")
|
||||
ui.label(latest_job_source.error_detail).classes("p-2 ui-note-box text-xs")
|
||||
|
||||
_render_provider_evidence(latest_job_source)
|
||||
|
||||
|
||||
def _render_provider_evidence(job_source: JobSource) -> None:
|
||||
ui.label("Provider Evidence").classes("text-xs font-semibold ui-text-primary mt-3")
|
||||
_render_json_evidence("AI Metadata", job_source.ai_metadata)
|
||||
_render_json_evidence("Raw API Response", job_source.raw_api_response)
|
||||
|
||||
|
||||
def _render_json_evidence(label: str, value: object | None) -> None:
|
||||
with ui.expansion(label, icon="data_object").classes("w-full ui-row-surface"):
|
||||
if value is None:
|
||||
render_empty_state(f"No {label.lower()} stored for this execution.", italic=True)
|
||||
return
|
||||
ui.code(json.dumps(value, indent=2, sort_keys=True, ensure_ascii=False), language="json").classes(
|
||||
"w-full text-xs"
|
||||
)
|
||||
|
||||
|
||||
def _render_source_revision_logistics_zone(source: Source) -> None:
|
||||
with archival_card(title="Revision Logistics"):
|
||||
|
||||
Reference in New Issue
Block a user