Complete independent projection runtime
This commit is contained in:
parent
1134c2d375
commit
f1fabaf0ca
38 changed files with 4907 additions and 87 deletions
|
|
@ -17,6 +17,7 @@ from .graph_rendering import GraphRenderService
|
|||
from .index import ProjectIndex
|
||||
from .onboarding import assess_project, scaffold_project
|
||||
from .project import Project, project_root_fingerprint
|
||||
from .projection_policy import compose_projection_policy
|
||||
from .rendering import RenderService
|
||||
from .telemetry import request
|
||||
from .viewer_manager import ViewerManagerClient
|
||||
|
|
@ -30,6 +31,18 @@ def _parser() -> argparse.ArgumentParser:
|
|||
action="store_true",
|
||||
help="Attach bounded request-local stage timings and counters",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--manual-render-policy",
|
||||
choices=("auto", "explicit", "disabled"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--portable-graph-policy",
|
||||
choices=("explicit", "disabled"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--live-viewer-policy",
|
||||
choices=("on-demand", "disabled"),
|
||||
)
|
||||
commands = parser.add_subparsers(dest="command", required=True)
|
||||
configure = commands.add_parser("configure")
|
||||
configure.add_argument("client", choices=CLIENT_NAMES)
|
||||
|
|
@ -43,6 +56,21 @@ def _parser() -> argparse.ArgumentParser:
|
|||
configure.add_argument("--proposal-writer")
|
||||
configure.add_argument("--canonical-applier")
|
||||
configure.add_argument("--no-ast", action="store_true")
|
||||
configure.add_argument(
|
||||
"--manual-render-policy",
|
||||
choices=("auto", "explicit", "disabled"),
|
||||
default=argparse.SUPPRESS,
|
||||
)
|
||||
configure.add_argument(
|
||||
"--portable-graph-policy",
|
||||
choices=("explicit", "disabled"),
|
||||
default=argparse.SUPPRESS,
|
||||
)
|
||||
configure.add_argument(
|
||||
"--live-viewer-policy",
|
||||
choices=("on-demand", "disabled"),
|
||||
default=argparse.SUPPRESS,
|
||||
)
|
||||
configure.add_argument("--startup-timeout", type=int, default=30)
|
||||
configure.add_argument("--tool-timeout", type=int, default=300)
|
||||
configure.add_argument("--output", type=Path)
|
||||
|
|
@ -131,6 +159,9 @@ def _run(arguments: argparse.Namespace) -> dict[str, object]:
|
|||
proposal_writer=arguments.proposal_writer,
|
||||
canonical_applier=arguments.canonical_applier,
|
||||
no_ast=arguments.no_ast,
|
||||
manual_render_policy=arguments.manual_render_policy,
|
||||
portable_graph_policy=arguments.portable_graph_policy,
|
||||
live_viewer_policy=arguments.live_viewer_policy,
|
||||
startup_timeout=arguments.startup_timeout,
|
||||
tool_timeout=arguments.tool_timeout,
|
||||
output=arguments.output,
|
||||
|
|
@ -159,12 +190,39 @@ def _run(arguments: argparse.Namespace) -> dict[str, object]:
|
|||
content_root=arguments.content_root,
|
||||
)
|
||||
project = Project.open(arguments.project_root)
|
||||
projection_policy = compose_projection_policy(
|
||||
manual=arguments.manual_render_policy,
|
||||
portable_graph=arguments.portable_graph_policy,
|
||||
live_viewer=arguments.live_viewer_policy,
|
||||
manual_configured=project.descriptor.render is not None,
|
||||
portable_graph_configured=project.descriptor.graph_render is not None,
|
||||
application_enabled=False,
|
||||
)
|
||||
build = ProjectIndex(project).build()
|
||||
render = RenderService(project).render("manual")
|
||||
render = (
|
||||
{
|
||||
"status": "ok",
|
||||
"state": "skipped",
|
||||
"reason": "projection_policy_disabled",
|
||||
}
|
||||
if projection_policy.manual == "disabled"
|
||||
else RenderService(
|
||||
project,
|
||||
manual_policy=projection_policy.manual,
|
||||
).render("manual")
|
||||
)
|
||||
return {**scaffold, "build": build, "render": render}
|
||||
return assess_project(arguments.project_root, requested_languages=languages)
|
||||
project = Project.open(arguments.project_root)
|
||||
index = ProjectIndex(project)
|
||||
projection_policy = compose_projection_policy(
|
||||
manual=arguments.manual_render_policy,
|
||||
portable_graph=arguments.portable_graph_policy,
|
||||
live_viewer=arguments.live_viewer_policy,
|
||||
manual_configured=project.descriptor.render is not None,
|
||||
portable_graph_configured=project.descriptor.graph_render is not None,
|
||||
application_enabled=arguments.command == "apply",
|
||||
)
|
||||
if arguments.command == "info":
|
||||
snapshot = project.load()
|
||||
return {
|
||||
|
|
@ -257,30 +315,52 @@ def _run(arguments: argparse.Namespace) -> dict[str, object]:
|
|||
cursor=arguments.cursor,
|
||||
)
|
||||
if arguments.command == "render":
|
||||
return RenderService(project).render(arguments.view_id)
|
||||
return RenderService(
|
||||
project,
|
||||
manual_policy=projection_policy.manual,
|
||||
).render(arguments.view_id)
|
||||
if arguments.command == "render-status":
|
||||
rendering = RenderService(project)
|
||||
rendering = RenderService(
|
||||
project,
|
||||
manual_policy=projection_policy.manual,
|
||||
)
|
||||
return (
|
||||
rendering.deep_status(arguments.view_id)
|
||||
if arguments.deep
|
||||
else rendering.status(arguments.view_id)
|
||||
)
|
||||
if arguments.command == "graph-plan":
|
||||
return GraphRenderService(project).plan(arguments.view_id)
|
||||
return GraphRenderService(
|
||||
project,
|
||||
portable_graph_policy=projection_policy.portable_graph,
|
||||
).plan(arguments.view_id)
|
||||
if arguments.command == "graph-render":
|
||||
return GraphRenderService(project).render(arguments.view_id)
|
||||
return GraphRenderService(
|
||||
project,
|
||||
portable_graph_policy=projection_policy.portable_graph,
|
||||
).render(arguments.view_id)
|
||||
if arguments.command == "graph-render-status":
|
||||
return GraphRenderService(project).status(arguments.view_id)
|
||||
return GraphRenderService(
|
||||
project,
|
||||
portable_graph_policy=projection_policy.portable_graph,
|
||||
).status(arguments.view_id)
|
||||
if arguments.command == "preview":
|
||||
return RenderService(project).preview(arguments.changeset_id, arguments.view_id)
|
||||
return RenderService(
|
||||
project,
|
||||
manual_policy=projection_policy.manual,
|
||||
).preview(arguments.changeset_id, arguments.view_id)
|
||||
if arguments.command == "apply":
|
||||
return CanonicalApplicationService(
|
||||
project,
|
||||
applier_id=arguments.applier,
|
||||
applier=GenericCanonicalApplier(project),
|
||||
manual_policy=projection_policy.manual,
|
||||
).apply(arguments.changeset_id, arguments.changeset_hash)
|
||||
if arguments.command == "visualize":
|
||||
visualization = ViewerManagerClient(index).start(
|
||||
visualization = ViewerManagerClient(
|
||||
index,
|
||||
live_viewer_policy=projection_policy.live_viewer,
|
||||
).start(
|
||||
node_id=arguments.node,
|
||||
query=arguments.query,
|
||||
depth=arguments.depth,
|
||||
|
|
@ -297,9 +377,15 @@ def _run(arguments: argparse.Namespace) -> dict[str, object]:
|
|||
"visualization": visualization,
|
||||
}
|
||||
if arguments.command == "visualization-status":
|
||||
return ViewerManagerClient(index).status()
|
||||
return ViewerManagerClient(
|
||||
index,
|
||||
live_viewer_policy=projection_policy.live_viewer,
|
||||
).status()
|
||||
if arguments.command == "visualization-stop":
|
||||
return ViewerManagerClient(index).stop()
|
||||
return ViewerManagerClient(
|
||||
index,
|
||||
live_viewer_policy=projection_policy.live_viewer,
|
||||
).stop()
|
||||
raise DocForgeError("invalid_command", "Unknown command")
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue