band-aider-pub/band_aider/ui/stream_capture.py
2026-07-16 18:38:58 -07:00

49 lines
1.3 KiB
Python

# SPDX-FileCopyrightText: 2026 Art Sea LLC
#
# SPDX-License-Identifier: AGPL-3.0-only
from __future__ import annotations
import time
from multiprocessing.queues import Queue
from band_aider.ui.dto.log_message import LogMessageDTO
class QueueTextWriter:
"""QueueTextWriter turns worker stream writes into log DTOs."""
def __init__(self, queue: Queue, logger_name: str, level: str = "INFO") -> None:
self.queue = queue
self.logger_name = logger_name
self.level = level
self._buffer = ""
def write(self, text: str) -> int:
if not text:
return 0
self._buffer += text
while "\n" in self._buffer:
line, self._buffer = self._buffer.split("\n", 1)
self._publish(line)
return len(text)
def flush(self) -> None:
if self._buffer:
self._publish(self._buffer)
self._buffer = ""
def isatty(self) -> bool:
return False
def _publish(self, line: str) -> None:
if not line.strip():
return
self.queue.put(
LogMessageDTO(
created=time.time(),
level=self.level,
logger_name=self.logger_name,
message=line,
)
)