rgwfuncs 0.0.83__py3-none-any.whl → 0.0.84__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rgwfuncs/interactive_shell_lib.py +26 -14
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/METADATA +1 -1
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/RECORD +7 -7
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/LICENSE +0 -0
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/WHEEL +0 -0
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/entry_points.txt +0 -0
- {rgwfuncs-0.0.83.dist-info → rgwfuncs-0.0.84.dist-info}/top_level.txt +0 -0
@@ -19,19 +19,19 @@ RESET = "\033[0m"
|
|
19
19
|
class BlueStdout:
|
20
20
|
"""
|
21
21
|
A wrapper for sys.stdout that automatically prepends blue
|
22
|
-
color codes on output
|
22
|
+
color codes on output.
|
23
23
|
"""
|
24
24
|
def __init__(self, wrapped):
|
25
25
|
self.wrapped = wrapped
|
26
26
|
self.at_line_start = True
|
27
27
|
|
28
28
|
def write(self, s):
|
29
|
-
#
|
29
|
+
# Do not interfere with prompt strings.
|
30
30
|
if s == sys.ps1 or s == sys.ps2:
|
31
31
|
self.wrapped.write(s)
|
32
32
|
return
|
33
33
|
|
34
|
-
# Process text
|
34
|
+
# Process text line by line so that new lines are colored.
|
35
35
|
lines = s.split('\n')
|
36
36
|
for i, line in enumerate(lines):
|
37
37
|
if self.at_line_start and line:
|
@@ -43,7 +43,7 @@ class BlueStdout:
|
|
43
43
|
self.at_line_start = True
|
44
44
|
else:
|
45
45
|
self.at_line_start = (line == "")
|
46
|
-
|
46
|
+
|
47
47
|
def flush(self):
|
48
48
|
self.wrapped.flush()
|
49
49
|
|
@@ -54,9 +54,24 @@ class BlueStdout:
|
|
54
54
|
return self.wrapped.fileno()
|
55
55
|
|
56
56
|
def __getattr__(self, attr):
|
57
|
-
# Delegate
|
57
|
+
# Delegate attribute access to the original stdout.
|
58
58
|
return getattr(self.wrapped, attr)
|
59
59
|
|
60
|
+
class ColorInteractiveConsole(code.InteractiveConsole):
|
61
|
+
"""Subclass InteractiveConsole to temporarily restore the real stdout when reading input."""
|
62
|
+
def raw_input(self, prompt=""):
|
63
|
+
# Before calling input(), restore the original stdout so that readline works properly.
|
64
|
+
saved_stdout = sys.stdout
|
65
|
+
sys.stdout = sys.__stdout__
|
66
|
+
try:
|
67
|
+
line = input(prompt)
|
68
|
+
except EOFError:
|
69
|
+
raise
|
70
|
+
finally:
|
71
|
+
# Restore our blue-printing stdout.
|
72
|
+
sys.stdout = saved_stdout
|
73
|
+
return line
|
74
|
+
|
60
75
|
def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
61
76
|
"""
|
62
77
|
Launches an interactive prompt for inspecting and modifying local variables,
|
@@ -81,25 +96,22 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
|
81
96
|
if not isinstance(local_vars, dict):
|
82
97
|
raise TypeError("local_vars must be a dictionary")
|
83
98
|
|
84
|
-
# Set up readline
|
99
|
+
# Set up readline.
|
85
100
|
setup_readline()
|
86
101
|
|
87
102
|
# Make imported functions available in the REPL.
|
88
103
|
local_vars.update(globals())
|
89
104
|
|
90
|
-
#
|
91
|
-
# The \001 and \002 around the color codes tell readline that those characters
|
92
|
-
# have zero width.
|
105
|
+
# Note: Wrap ANSI codes in markers that readline understands so that they don’t count in prompt length.
|
93
106
|
sys.ps1 = "\001" + WHITE + "\002" + ">>> " + "\001" + RESET + "\002"
|
94
107
|
sys.ps2 = "\001" + WHITE + "\002" + "... " + "\001" + RESET + "\002"
|
95
108
|
|
96
|
-
# Wrap sys.stdout
|
97
|
-
sys.stdout = BlueStdout(sys.stdout
|
109
|
+
# Wrap sys.stdout for colored output.
|
110
|
+
sys.stdout = BlueStdout(sys.__stdout__) # Wrap the original stdout.
|
98
111
|
|
99
|
-
#
|
100
|
-
console =
|
112
|
+
# Use our custom interactive console.
|
113
|
+
console = ColorInteractiveConsole(locals=local_vars)
|
101
114
|
|
102
|
-
# Custom banner and exit message.
|
103
115
|
banner = ("Welcome to the rgwfuncs interactive shell.\n"
|
104
116
|
"Use up/down arrows for command history.\n"
|
105
117
|
"Type 'exit()' or Ctrl+D to quit.")
|
@@ -2,11 +2,11 @@ rgwfuncs/__init__.py,sha256=LSn54Tlyskcb6Wab_wUpPLB6UGMe5LdrB3GU88mDEbU,1712
|
|
2
2
|
rgwfuncs/algebra_lib.py,sha256=rKFITfpWfgdBswnbMUuS41XgndEt-jUVz2ObO_ik7eM,42234
|
3
3
|
rgwfuncs/df_lib.py,sha256=r6T-MwyDq9NAPW1Xf6NzSy7ZFicIKdemR-UKu6TZt5g,71111
|
4
4
|
rgwfuncs/docs_lib.py,sha256=y3wSAOPO3qsA4HZ7xAtW8HimM8w-c8hjcEzMRLJ96ao,1960
|
5
|
-
rgwfuncs/interactive_shell_lib.py,sha256=
|
5
|
+
rgwfuncs/interactive_shell_lib.py,sha256=fbm9FSGmyT0d2K-5DUmuPMbJxrBLzJvZq9UimS5fhck,4090
|
6
6
|
rgwfuncs/str_lib.py,sha256=rtAdRlnSJIu3JhI-tA_A0wCiPK2m-zn5RoGpBxv_g-4,2228
|
7
|
-
rgwfuncs-0.0.
|
8
|
-
rgwfuncs-0.0.
|
9
|
-
rgwfuncs-0.0.
|
10
|
-
rgwfuncs-0.0.
|
11
|
-
rgwfuncs-0.0.
|
12
|
-
rgwfuncs-0.0.
|
7
|
+
rgwfuncs-0.0.84.dist-info/LICENSE,sha256=jLvt20gcUZYB8UOvyBvyKQ1qhYYhD__qP7ZDx2lPFkU,1062
|
8
|
+
rgwfuncs-0.0.84.dist-info/METADATA,sha256=BGBOO2F9AXPg4l5_3fRD40q_zDg5i0sKJxr7dZ4RKts,60288
|
9
|
+
rgwfuncs-0.0.84.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
10
|
+
rgwfuncs-0.0.84.dist-info/entry_points.txt,sha256=j-c5IOPIQ0252EaOV6j6STio56sbXl2C4ym_fQ0lXx0,43
|
11
|
+
rgwfuncs-0.0.84.dist-info/top_level.txt,sha256=aGuVIzWsKiV1f2gCb6mynx0zx5ma0B1EwPGFKVEMTi4,9
|
12
|
+
rgwfuncs-0.0.84.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|