Extract HTML5 editor controller
This commit is contained in:
@@ -0,0 +1,134 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Callable, Iterable
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from fastapi import HTTPException
|
||||||
|
|
||||||
|
from api_server.form_editor_service import form_module_for_form, select_form_semantics
|
||||||
|
from api_server.html5_editor import render_html5_editor, render_html5_source, render_html5_symbol_detail
|
||||||
|
from api_server.html5_form_editor import render_html5_form_editor
|
||||||
|
from api_server.html5_inspector import (
|
||||||
|
render_html5_flowchart,
|
||||||
|
render_html5_object_context,
|
||||||
|
render_html5_object_report,
|
||||||
|
render_html5_review,
|
||||||
|
)
|
||||||
|
from sir import SirSnapshot
|
||||||
|
|
||||||
|
|
||||||
|
def html5_editor_page(
|
||||||
|
*,
|
||||||
|
project_id: str,
|
||||||
|
q: str,
|
||||||
|
project_summaries: Callable[[], Iterable[object]],
|
||||||
|
project_snapshot: Callable[[str], SirSnapshot],
|
||||||
|
) -> str:
|
||||||
|
try:
|
||||||
|
snapshot = project_snapshot(project_id)
|
||||||
|
return render_html5_editor(
|
||||||
|
project_id=project_id,
|
||||||
|
projects=project_summaries(),
|
||||||
|
snapshot=snapshot,
|
||||||
|
q=q,
|
||||||
|
)
|
||||||
|
except HTTPException as error:
|
||||||
|
return render_html5_editor(
|
||||||
|
project_id=project_id,
|
||||||
|
projects=project_summaries(),
|
||||||
|
snapshot=None,
|
||||||
|
error=str(error.detail),
|
||||||
|
q=q,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def html5_form_editor_page(
|
||||||
|
*,
|
||||||
|
project_id: str,
|
||||||
|
form_id: str | None,
|
||||||
|
project_summaries: Callable[[], Iterable[object]],
|
||||||
|
project_snapshot: Callable[[str], SirSnapshot],
|
||||||
|
form_semantics_items: Callable[[SirSnapshot], Iterable[object]],
|
||||||
|
form_semantics_response: Callable[[object], Any],
|
||||||
|
) -> str:
|
||||||
|
try:
|
||||||
|
snapshot = project_snapshot(project_id)
|
||||||
|
forms = [form_semantics_response(item) for item in form_semantics_items(snapshot)]
|
||||||
|
selected = select_form_semantics(forms, form_id)
|
||||||
|
form_module = form_module_for_form(snapshot, selected.form if selected is not None else None)
|
||||||
|
return render_html5_form_editor(
|
||||||
|
project_id=project_id,
|
||||||
|
projects=project_summaries(),
|
||||||
|
snapshot=snapshot,
|
||||||
|
forms=forms,
|
||||||
|
selected_form_id=form_id,
|
||||||
|
form_module=form_module,
|
||||||
|
)
|
||||||
|
except HTTPException as error:
|
||||||
|
return render_html5_form_editor(
|
||||||
|
project_id=project_id,
|
||||||
|
projects=project_summaries(),
|
||||||
|
snapshot=None,
|
||||||
|
forms=[],
|
||||||
|
error=str(error.detail),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def html5_object_context_fragment(
|
||||||
|
*,
|
||||||
|
project_id: str,
|
||||||
|
object_name: str,
|
||||||
|
mode: str,
|
||||||
|
object_schema: Callable[[str, str], Any],
|
||||||
|
object_impact: Callable[[str, str], Any],
|
||||||
|
object_access: Callable[[str, str], Any],
|
||||||
|
object_ui: Callable[[str, str], Any],
|
||||||
|
object_privacy: Callable[[str, str], Any],
|
||||||
|
project_flowchart: Callable[..., Any],
|
||||||
|
symbol_references: Callable[..., Any],
|
||||||
|
integrations_for_context: Callable[[str, Any], Iterable[object]],
|
||||||
|
runtime_for_context: Callable[[str, Any], Iterable[object]],
|
||||||
|
knowledge_for_context: Callable[[Any, Any, Any], Iterable[object]],
|
||||||
|
source_node_for_context: Callable[[str, Any], object | None],
|
||||||
|
review_for_context: Callable[[str, Any, Any, Any], Iterable[object]],
|
||||||
|
) -> str:
|
||||||
|
schema = await object_schema(project_id, object_name)
|
||||||
|
impact = await object_impact(project_id, object_name)
|
||||||
|
access = await object_access(project_id, object_name)
|
||||||
|
ui = await object_ui(project_id, object_name)
|
||||||
|
privacy = await object_privacy(project_id, object_name)
|
||||||
|
integrations = integrations_for_context(project_id, impact)
|
||||||
|
flowchart = await project_flowchart(project_id, focus=object_name, depth=1, limit=40)
|
||||||
|
runtime = runtime_for_context(project_id, impact)
|
||||||
|
knowledge = knowledge_for_context(schema, impact, ui)
|
||||||
|
source_node = source_node_for_context(project_id, impact)
|
||||||
|
references = await symbol_references(project_id, schema.object.lineage_id, direction="both")
|
||||||
|
findings = review_for_context(project_id, schema, impact, ui)
|
||||||
|
return (
|
||||||
|
render_html5_object_context(
|
||||||
|
project_id,
|
||||||
|
schema,
|
||||||
|
impact,
|
||||||
|
access,
|
||||||
|
ui,
|
||||||
|
runtime,
|
||||||
|
knowledge,
|
||||||
|
privacy,
|
||||||
|
integrations,
|
||||||
|
flowchart,
|
||||||
|
mode,
|
||||||
|
)
|
||||||
|
+ render_html5_flowchart(project_id, flowchart, focus=object_name, depth=1, oob=True)
|
||||||
|
+ (render_html5_source(source_node, oob=True) if source_node is not None else "")
|
||||||
|
+ render_html5_symbol_detail(project_id, references, oob=True)
|
||||||
|
+ render_html5_object_report(
|
||||||
|
project_id,
|
||||||
|
impact,
|
||||||
|
access=access,
|
||||||
|
privacy=privacy,
|
||||||
|
runtime=runtime,
|
||||||
|
integrations=integrations,
|
||||||
|
oob=True,
|
||||||
|
)
|
||||||
|
+ render_html5_review(project_id, findings, title="Review объекта", oob=True)
|
||||||
|
)
|
||||||
@@ -42,9 +42,10 @@ from api_server.html5_forms import (
|
|||||||
html5_metadata_payload as _html5_metadata_payload,
|
html5_metadata_payload as _html5_metadata_payload,
|
||||||
html5_metadata_request_payload as _html5_metadata_request_payload,
|
html5_metadata_request_payload as _html5_metadata_request_payload,
|
||||||
)
|
)
|
||||||
from api_server.form_editor_service import (
|
from api_server.html5_editor_controller import (
|
||||||
form_module_for_form as _form_module_for_form,
|
html5_editor_page as _html5_editor_page,
|
||||||
select_form_semantics as _select_form_semantics,
|
html5_form_editor_page as _html5_form_editor_page,
|
||||||
|
html5_object_context_fragment as _html5_object_context_fragment,
|
||||||
)
|
)
|
||||||
from api_server.html5_projects import render_html5_index, render_html5_project_rows
|
from api_server.html5_projects import render_html5_index, render_html5_project_rows
|
||||||
from api_server.html5_responses import (
|
from api_server.html5_responses import (
|
||||||
@@ -74,13 +75,11 @@ from api_server.html5_authoring import (
|
|||||||
render_html5_metadata_preview_result,
|
render_html5_metadata_preview_result,
|
||||||
)
|
)
|
||||||
from api_server.html5_editor import (
|
from api_server.html5_editor import (
|
||||||
render_html5_editor,
|
|
||||||
render_html5_source,
|
render_html5_source,
|
||||||
render_html5_status,
|
render_html5_status,
|
||||||
render_html5_symbol_detail,
|
render_html5_symbol_detail,
|
||||||
render_html5_symbols,
|
render_html5_symbols,
|
||||||
)
|
)
|
||||||
from api_server.html5_form_editor import render_html5_form_editor
|
|
||||||
from api_server.html5_operations import (
|
from api_server.html5_operations import (
|
||||||
filter_html5_operation_jobs,
|
filter_html5_operation_jobs,
|
||||||
latest_html5_import_job,
|
latest_html5_import_job,
|
||||||
@@ -1716,49 +1715,28 @@ async def html5_operations_events(
|
|||||||
|
|
||||||
@app.get("/html5/projects/{project_id}/editor")
|
@app.get("/html5/projects/{project_id}/editor")
|
||||||
async def html5_project_editor(project_id: str, q: str = "") -> Response:
|
async def html5_project_editor(project_id: str, q: str = "") -> Response:
|
||||||
try:
|
return _html5_response(
|
||||||
snapshot = _project_snapshot_or_404(project_id)
|
_html5_editor_page(
|
||||||
html = render_html5_editor(
|
|
||||||
project_id=project_id,
|
project_id=project_id,
|
||||||
projects=_project_summaries(),
|
|
||||||
snapshot=snapshot,
|
|
||||||
q=q,
|
q=q,
|
||||||
|
project_summaries=_project_summaries,
|
||||||
|
project_snapshot=_project_snapshot_or_404,
|
||||||
)
|
)
|
||||||
except HTTPException as error:
|
|
||||||
html = render_html5_editor(
|
|
||||||
project_id=project_id,
|
|
||||||
projects=_project_summaries(),
|
|
||||||
snapshot=None,
|
|
||||||
error=str(error.detail),
|
|
||||||
q=q,
|
|
||||||
)
|
)
|
||||||
return _html5_response(html)
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/html5/projects/{project_id}/forms/editor")
|
@app.get("/html5/projects/{project_id}/forms/editor")
|
||||||
async def html5_project_form_editor(project_id: str, form: str | None = None) -> Response:
|
async def html5_project_form_editor(project_id: str, form: str | None = None) -> Response:
|
||||||
try:
|
return _html5_response(
|
||||||
snapshot = _project_snapshot_or_404(project_id)
|
_html5_form_editor_page(
|
||||||
forms = [_form_semantics_response(item) for item in form_semantics(snapshot)]
|
|
||||||
selected = _select_form_semantics(forms, form)
|
|
||||||
form_module = _form_module_for_form(snapshot, selected.form if selected is not None else None)
|
|
||||||
html = render_html5_form_editor(
|
|
||||||
project_id=project_id,
|
project_id=project_id,
|
||||||
projects=_project_summaries(),
|
form_id=form,
|
||||||
snapshot=snapshot,
|
project_summaries=_project_summaries,
|
||||||
forms=forms,
|
project_snapshot=_project_snapshot_or_404,
|
||||||
selected_form_id=form,
|
form_semantics_items=form_semantics,
|
||||||
form_module=form_module,
|
form_semantics_response=_form_semantics_response,
|
||||||
)
|
)
|
||||||
except HTTPException as error:
|
|
||||||
html = render_html5_form_editor(
|
|
||||||
project_id=project_id,
|
|
||||||
projects=_project_summaries(),
|
|
||||||
snapshot=None,
|
|
||||||
forms=[],
|
|
||||||
error=str(error.detail),
|
|
||||||
)
|
)
|
||||||
return _html5_response(html)
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/html5/projects/{project_id}/events")
|
@app.get("/html5/projects/{project_id}/events")
|
||||||
@@ -1866,46 +1844,24 @@ async def html5_project_flowchart(
|
|||||||
|
|
||||||
@app.get("/html5/projects/{project_id}/objects/context/{object_name}")
|
@app.get("/html5/projects/{project_id}/objects/context/{object_name}")
|
||||||
async def html5_project_object_context(project_id: str, object_name: str, mode: str = "overview") -> Response:
|
async def html5_project_object_context(project_id: str, object_name: str, mode: str = "overview") -> Response:
|
||||||
schema = await get_object_schema(project_id, object_name)
|
|
||||||
impact = await get_object_impact(project_id, object_name)
|
|
||||||
access = await get_object_access(project_id, object_name)
|
|
||||||
ui = await get_object_ui(project_id, object_name)
|
|
||||||
privacy = await object_privacy(project_id, object_name)
|
|
||||||
integrations = _integrations_for_object_context(project_id, impact)
|
|
||||||
flowchart = await project_flowchart(project_id, focus=object_name, depth=1, limit=40)
|
|
||||||
runtime = _runtime_for_object_context(project_id, impact)
|
|
||||||
knowledge = _knowledge_for_object_context(schema, impact, ui)
|
|
||||||
source_node = _source_node_for_object_context(project_id, impact)
|
|
||||||
symbol_references = await project_symbol_references(project_id, schema.object.lineage_id, direction="both")
|
|
||||||
focused_findings = _review_for_object_context(project_id, schema, impact, ui)
|
|
||||||
object_context = render_html5_object_context(
|
|
||||||
project_id,
|
|
||||||
schema,
|
|
||||||
impact,
|
|
||||||
access,
|
|
||||||
ui,
|
|
||||||
runtime,
|
|
||||||
knowledge,
|
|
||||||
privacy,
|
|
||||||
integrations,
|
|
||||||
flowchart,
|
|
||||||
mode,
|
|
||||||
)
|
|
||||||
flowchart_context = render_html5_flowchart(project_id, flowchart, focus=object_name, depth=1, oob=True)
|
|
||||||
source_context = render_html5_source(source_node, oob=True) if source_node is not None else ""
|
|
||||||
symbol_context = render_html5_symbol_detail(project_id, symbol_references, oob=True)
|
|
||||||
report_context = render_html5_object_report(
|
|
||||||
project_id,
|
|
||||||
impact,
|
|
||||||
access=access,
|
|
||||||
privacy=privacy,
|
|
||||||
runtime=runtime,
|
|
||||||
integrations=integrations,
|
|
||||||
oob=True,
|
|
||||||
)
|
|
||||||
review_context = render_html5_review(project_id, focused_findings, title="Review объекта", oob=True)
|
|
||||||
return _html5_response(
|
return _html5_response(
|
||||||
object_context + flowchart_context + source_context + symbol_context + report_context + review_context,
|
await _html5_object_context_fragment(
|
||||||
|
project_id=project_id,
|
||||||
|
object_name=object_name,
|
||||||
|
mode=mode,
|
||||||
|
object_schema=get_object_schema,
|
||||||
|
object_impact=get_object_impact,
|
||||||
|
object_access=get_object_access,
|
||||||
|
object_ui=get_object_ui,
|
||||||
|
object_privacy=object_privacy,
|
||||||
|
project_flowchart=project_flowchart,
|
||||||
|
symbol_references=project_symbol_references,
|
||||||
|
integrations_for_context=_integrations_for_object_context,
|
||||||
|
runtime_for_context=_runtime_for_object_context,
|
||||||
|
knowledge_for_context=_knowledge_for_object_context,
|
||||||
|
source_node_for_context=_source_node_for_object_context,
|
||||||
|
review_for_context=_review_for_object_context,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user