From 49b33ec85e74222fcffb99536e5b2cbb65ed83d6 Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Mon, 5 Aug 2024 17:24:16 -0300 Subject: [PATCH] feat: Add spinner functionality to IO class --- aider/io.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/aider/io.py b/aider/io.py index 7a836c10c..57dab867d 100644 --- a/aider/io.py +++ b/aider/io.py @@ -1,5 +1,7 @@ import base64 import os +import time +import itertools from collections import defaultdict from datetime import datetime from pathlib import Path @@ -142,6 +144,7 @@ class InputOutput: llm_history_file=None, editingmode=EditingMode.EMACS, ): + self.spinner_chars = itertools.cycle(["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]) self.editingmode = editingmode no_color = os.environ.get("NO_COLOR") if no_color is not None and no_color != "": @@ -414,3 +417,21 @@ class InputOutput: if self.chat_history_file is not None: with self.chat_history_file.open("a", encoding=self.encoding) as f: f.write(text) + + def spinner(self, text): + class Spinner: + def __init__(self, io, text): + self.io = io + self.text = text + self.start_time = time.time() + print(f"{self.text} {next(self.io.spinner_chars)}", end="\r", flush=True) + + def step(self): + elapsed = time.time() - self.start_time + print(f"{self.text} {next(self.io.spinner_chars)} ({elapsed:.1f}s)", end="\r", flush=True) + + def end(self): + elapsed = time.time() - self.start_time + print(f"{self.text} Done! ({elapsed:.1f}s)") + + return Spinner(self, text)