diff options
author | 2022-02-13 14:32:50 -0500 | |
---|---|---|
committer | 2022-02-13 14:32:50 -0500 | |
commit | afdb2b4d5ebeda20d90e794711ca7e56244cfd6b (patch) | |
tree | a49414038338879a309698d35c4721570d8e3c83 | |
parent | tests: Add a test for timeit command codeblock preparation (diff) |
docs: Document the timeit setup wrapper
-rw-r--r-- | bot/exts/utils/snekbox.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/bot/exts/utils/snekbox.py b/bot/exts/utils/snekbox.py index a932b96ff..3c1009d2a 100644 --- a/bot/exts/utils/snekbox.py +++ b/bot/exts/utils/snekbox.py @@ -31,26 +31,35 @@ from collections import deque if not hasattr(sys, "_setup_finished"): class Writer(deque): + '''A single-item deque wrapper for sys.stdout that will return the last line when read() is called.''' + def __init__(self): super().__init__(maxlen=1) def write(self, string): + '''Append the line to the queue if it is not empty.''' if string.strip(): self.append(string) def read(self): + '''This method will be called when print() is called. + + The queue is emptied as we don't need the output later. + ''' return self.pop() def flush(self): + '''This method will be called eventually, but we don't need to do anything here.''' pass sys.stdout = Writer() def print_last_line(): - if sys.stdout: + if sys.stdout: # If the deque is empty (i.e. an error happened), calling read() will raise an error + # Use sys.__stdout__ here because sys.stdout is set to a Writer() instance print(sys.stdout.read(), file=sys.__stdout__) - atexit.register(print_last_line) + atexit.register(print_last_line) # When exiting, print the last line (hopefully it will be the timeit output) sys._setup_finished = None {setup} """ |