rgwfuncs 0.0.85__py3-none-any.whl → 0.0.87__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/docs_lib.py +1 -0
- rgwfuncs/interactive_shell_lib.py +20 -17
- {rgwfuncs-0.0.85.dist-info → rgwfuncs-0.0.87.dist-info}/METADATA +1 -1
- rgwfuncs-0.0.87.dist-info/RECORD +12 -0
- rgwfuncs-0.0.85.dist-info/RECORD +0 -12
- {rgwfuncs-0.0.85.dist-info → rgwfuncs-0.0.87.dist-info}/LICENSE +0 -0
- {rgwfuncs-0.0.85.dist-info → rgwfuncs-0.0.87.dist-info}/WHEEL +0 -0
- {rgwfuncs-0.0.85.dist-info → rgwfuncs-0.0.87.dist-info}/entry_points.txt +0 -0
- {rgwfuncs-0.0.85.dist-info → rgwfuncs-0.0.87.dist-info}/top_level.txt +0 -0
rgwfuncs/docs_lib.py
CHANGED
@@ -14,9 +14,10 @@ from .docs_lib import * # noqa: F401, F403, E402
|
|
14
14
|
def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
15
15
|
"""
|
16
16
|
Launch an interactive prompt for inspecting and modifying local variables,
|
17
|
-
with
|
17
|
+
with blue-colored output and a white prompt. An extra blank line appears before each new prompt,
|
18
|
+
and the welcome banner is in blue.
|
18
19
|
|
19
|
-
local_vars: dictionary
|
20
|
+
local_vars: dictionary of local variables available to the interactive shell.
|
20
21
|
"""
|
21
22
|
|
22
23
|
# ANSI color escape codes.
|
@@ -24,7 +25,7 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
|
24
25
|
WHITE = "\033[37m"
|
25
26
|
RESET = "\033[0m"
|
26
27
|
|
27
|
-
#
|
28
|
+
# Function to set up readline history.
|
28
29
|
def setup_readline() -> None:
|
29
30
|
HISTORY_FILE = os.path.expanduser("~/.rgwfuncs_shell_history")
|
30
31
|
readline.set_history_length(1000)
|
@@ -36,18 +37,18 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
|
36
37
|
print(f"Warning: Could not load history file: {e}")
|
37
38
|
atexit.register(readline.write_history_file, HISTORY_FILE)
|
38
39
|
|
39
|
-
#
|
40
|
+
# BlueStdout: wrapper for stdout to output text in blue.
|
40
41
|
class BlueStdout:
|
41
42
|
def __init__(self, wrapped):
|
42
43
|
self.wrapped = wrapped
|
43
44
|
self.at_line_start = True
|
44
45
|
|
45
46
|
def write(self, s):
|
46
|
-
#
|
47
|
+
# If s matches our prompt strings, write it as-is.
|
47
48
|
if s == sys.ps1 or s == sys.ps2:
|
48
49
|
self.wrapped.write(s)
|
49
50
|
return
|
50
|
-
# Process output line by line.
|
51
|
+
# Process output line by line so each new line is colored.
|
51
52
|
lines = s.split('\n')
|
52
53
|
for i, line in enumerate(lines):
|
53
54
|
if self.at_line_start and line:
|
@@ -72,8 +73,8 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
|
72
73
|
def __getattr__(self, attr):
|
73
74
|
return getattr(self.wrapped, attr)
|
74
75
|
|
75
|
-
#
|
76
|
-
#
|
76
|
+
# ColorInteractiveConsole: subclass InteractiveConsole to temporarily restore the original
|
77
|
+
# stdout during input, and print a blank line before each prompt.
|
77
78
|
class ColorInteractiveConsole(code.InteractiveConsole):
|
78
79
|
def raw_input(self, prompt=""):
|
79
80
|
saved_stdout = sys.stdout
|
@@ -86,30 +87,32 @@ def interactive_shell(local_vars: Dict[str, Any]) -> None:
|
|
86
87
|
sys.stdout = saved_stdout
|
87
88
|
return line
|
88
89
|
|
89
|
-
# Ensure
|
90
|
+
# Ensure local_vars is a dictionary.
|
90
91
|
if not isinstance(local_vars, dict):
|
91
92
|
raise TypeError("local_vars must be a dictionary")
|
92
93
|
|
93
|
-
# Setup readline.
|
94
|
+
# Setup readline for history and completion.
|
94
95
|
setup_readline()
|
95
96
|
|
96
|
-
#
|
97
|
+
# Merge globals into local_vars.
|
97
98
|
local_vars.update(globals())
|
98
99
|
|
99
|
-
# Wrap ANSI escape
|
100
|
-
# toward the visible prompt length.
|
100
|
+
# Wrap ANSI escape codes with markers so that readline ignores them in prompt length.
|
101
101
|
sys.ps1 = "\001" + WHITE + "\002" + ">>> " + "\001" + RESET + "\002"
|
102
102
|
sys.ps2 = "\001" + WHITE + "\002" + "... " + "\001" + RESET + "\002"
|
103
103
|
|
104
|
-
# Replace sys.stdout with our
|
104
|
+
# Replace sys.stdout with our BlueStdout to globally paint output.
|
105
105
|
sys.stdout = BlueStdout(sys.__stdout__)
|
106
106
|
|
107
|
-
#
|
107
|
+
# Create our custom interactive console using the modified locals.
|
108
108
|
console = ColorInteractiveConsole(locals=local_vars)
|
109
109
|
|
110
|
-
banner
|
110
|
+
# The banner is now explicitly wrapped in BLUE and RESET so it prints in blue.
|
111
|
+
banner = (BLUE +
|
112
|
+
"Welcome to the rgwfuncs interactive shell.\n"
|
111
113
|
"Use up/down arrows for command history.\n"
|
112
|
-
"Type 'exit()' or Ctrl+D to quit."
|
114
|
+
"Type 'exit()' or Ctrl+D to quit." +
|
115
|
+
RESET)
|
113
116
|
exitmsg = "Goodbye."
|
114
117
|
|
115
118
|
try:
|
@@ -0,0 +1,12 @@
|
|
1
|
+
rgwfuncs/__init__.py,sha256=LSn54Tlyskcb6Wab_wUpPLB6UGMe5LdrB3GU88mDEbU,1712
|
2
|
+
rgwfuncs/algebra_lib.py,sha256=rKFITfpWfgdBswnbMUuS41XgndEt-jUVz2ObO_ik7eM,42234
|
3
|
+
rgwfuncs/df_lib.py,sha256=r6T-MwyDq9NAPW1Xf6NzSy7ZFicIKdemR-UKu6TZt5g,71111
|
4
|
+
rgwfuncs/docs_lib.py,sha256=i63NzX-V8cGhikYdtkRGAEe2VcuwpXxDUyTRa9xI7l8,1972
|
5
|
+
rgwfuncs/interactive_shell_lib.py,sha256=KnGb3JgMH1B3JFfxWAzcTZUveQO63l_Gd1lHulEHm0g,4375
|
6
|
+
rgwfuncs/str_lib.py,sha256=rtAdRlnSJIu3JhI-tA_A0wCiPK2m-zn5RoGpBxv_g-4,2228
|
7
|
+
rgwfuncs-0.0.87.dist-info/LICENSE,sha256=jLvt20gcUZYB8UOvyBvyKQ1qhYYhD__qP7ZDx2lPFkU,1062
|
8
|
+
rgwfuncs-0.0.87.dist-info/METADATA,sha256=OIhgNbvYN8PewH9ESzS_A8n-L7HsCh13f_zoQdPntEM,60288
|
9
|
+
rgwfuncs-0.0.87.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
10
|
+
rgwfuncs-0.0.87.dist-info/entry_points.txt,sha256=j-c5IOPIQ0252EaOV6j6STio56sbXl2C4ym_fQ0lXx0,43
|
11
|
+
rgwfuncs-0.0.87.dist-info/top_level.txt,sha256=aGuVIzWsKiV1f2gCb6mynx0zx5ma0B1EwPGFKVEMTi4,9
|
12
|
+
rgwfuncs-0.0.87.dist-info/RECORD,,
|
rgwfuncs-0.0.85.dist-info/RECORD
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
rgwfuncs/__init__.py,sha256=LSn54Tlyskcb6Wab_wUpPLB6UGMe5LdrB3GU88mDEbU,1712
|
2
|
-
rgwfuncs/algebra_lib.py,sha256=rKFITfpWfgdBswnbMUuS41XgndEt-jUVz2ObO_ik7eM,42234
|
3
|
-
rgwfuncs/df_lib.py,sha256=r6T-MwyDq9NAPW1Xf6NzSy7ZFicIKdemR-UKu6TZt5g,71111
|
4
|
-
rgwfuncs/docs_lib.py,sha256=y3wSAOPO3qsA4HZ7xAtW8HimM8w-c8hjcEzMRLJ96ao,1960
|
5
|
-
rgwfuncs/interactive_shell_lib.py,sha256=zM4WrG425WK3MsPOfSgxvJxRJsUV177IYrSGvE-uAQE,4254
|
6
|
-
rgwfuncs/str_lib.py,sha256=rtAdRlnSJIu3JhI-tA_A0wCiPK2m-zn5RoGpBxv_g-4,2228
|
7
|
-
rgwfuncs-0.0.85.dist-info/LICENSE,sha256=jLvt20gcUZYB8UOvyBvyKQ1qhYYhD__qP7ZDx2lPFkU,1062
|
8
|
-
rgwfuncs-0.0.85.dist-info/METADATA,sha256=28YYKElMTP4Fm5TnxB8iU2F088nrhzQEg8YhM1XaoI4,60288
|
9
|
-
rgwfuncs-0.0.85.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
10
|
-
rgwfuncs-0.0.85.dist-info/entry_points.txt,sha256=j-c5IOPIQ0252EaOV6j6STio56sbXl2C4ym_fQ0lXx0,43
|
11
|
-
rgwfuncs-0.0.85.dist-info/top_level.txt,sha256=aGuVIzWsKiV1f2gCb6mynx0zx5ma0B1EwPGFKVEMTi4,9
|
12
|
-
rgwfuncs-0.0.85.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|