Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
7f65efa728 | |
|
|
3af8780f51 |
|
|
@ -0,0 +1,8 @@
|
||||||
|
from typing import Protocol
|
||||||
|
from .models import MarkdownPanel, StageHeader, TaskHeader, StatusMessage
|
||||||
|
|
||||||
|
class OutputRenderer(Protocol):
|
||||||
|
def render_panel(self, panel: MarkdownPanel) -> None: ...
|
||||||
|
def render_stage(self, header: StageHeader) -> None: ...
|
||||||
|
def render_task(self, header: TaskHeader) -> None: ...
|
||||||
|
def render_status(self, message: StatusMessage) -> None: ...
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MarkdownPanel:
|
||||||
|
content: str
|
||||||
|
title: Optional[str] = None
|
||||||
|
icon: Optional[str] = None
|
||||||
|
border_style: Optional[str] = None
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class StageHeader:
|
||||||
|
text: str
|
||||||
|
icon: Optional[str] = None
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TaskHeader:
|
||||||
|
text: str
|
||||||
|
icon: Optional[str] = None
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class StatusMessage:
|
||||||
|
text: str
|
||||||
|
style: Optional[str] = None
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
"""Console renderer implementation using Rich."""
|
||||||
|
|
||||||
|
from rich.markdown import Markdown
|
||||||
|
from rich.panel import Panel
|
||||||
|
|
||||||
|
from ra_aid.console.formatting import console
|
||||||
|
from ra_aid.output.interface.base import OutputRenderer
|
||||||
|
from ra_aid.output.interface.models import (
|
||||||
|
MarkdownPanel,
|
||||||
|
StageHeader,
|
||||||
|
TaskHeader,
|
||||||
|
StatusMessage,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ConsoleRenderer(OutputRenderer):
|
||||||
|
"""Rich console implementation of the OutputRenderer interface."""
|
||||||
|
|
||||||
|
def render_panel(self, panel: MarkdownPanel) -> None:
|
||||||
|
"""Render a markdown panel using Rich.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
panel: Panel configuration containing content and styling
|
||||||
|
"""
|
||||||
|
console.print(
|
||||||
|
Panel(
|
||||||
|
Markdown(panel.content),
|
||||||
|
title=f"{panel.icon + ' ' if panel.icon else ''}{panel.title or ''}".strip() or None,
|
||||||
|
border_style=panel.border_style or "bright_blue",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def render_stage(self, header: StageHeader) -> None:
|
||||||
|
"""Render a stage header.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
header: Stage header configuration
|
||||||
|
"""
|
||||||
|
icon = f"{header.icon} " if header.icon else "🚀 " # Default icon
|
||||||
|
panel_content = f"{icon}{header.text.title()}"
|
||||||
|
console.print(Panel(panel_content, style="green bold", padding=0))
|
||||||
|
|
||||||
|
def render_task(self, header: TaskHeader) -> None:
|
||||||
|
"""Render a task header with markdown support.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
header: Task header configuration
|
||||||
|
"""
|
||||||
|
icon = f"{header.icon} " if header.icon else "🔧 " # Default icon
|
||||||
|
console.print(Panel(Markdown(header.text), title=f"{icon}Task", border_style="yellow bold"))
|
||||||
|
|
||||||
|
def render_status(self, message: StatusMessage) -> None:
|
||||||
|
"""Render a status message.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
message: Status message configuration
|
||||||
|
"""
|
||||||
|
console.print(message.text, style=message.style or "blue")
|
||||||
Loading…
Reference in New Issue