nercone-modern 1.5.0__tar.gz → 1.6.0__tar.gz
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.
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/PKG-INFO +1 -1
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/pyproject.toml +1 -1
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/__main__.py +4 -1
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/logging.py +60 -2
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/README.md +0 -0
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/__init__.py +0 -0
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/color.py +0 -0
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/progressbar.py +0 -0
- {nercone_modern-1.5.0 → nercone_modern-1.6.0}/src/nercone_modern/text.py +0 -0
|
@@ -22,8 +22,11 @@ try:
|
|
|
22
22
|
logger1.log("This is a warning message", "WARNING")
|
|
23
23
|
logger1.log("This is a error message", "ERROR")
|
|
24
24
|
logger1.log("This is a critical error message", "CRITICAL")
|
|
25
|
-
prompt_result = logger1.prompt("
|
|
25
|
+
prompt_result = logger1.prompt("Continue demo?", choices=["Y", "n"])
|
|
26
26
|
logger1.log(f"Answer is: {prompt_result}", "INFO")
|
|
27
|
+
if prompt_result == "n":
|
|
28
|
+
print("Exiting demo. See you!")
|
|
29
|
+
raise SystemExit(0)
|
|
27
30
|
|
|
28
31
|
progress_bar1 = ModernProgressBar(total=100, process_name="Task 1", spinner_mode=False)
|
|
29
32
|
progress_bar1.setMessage("WAITING")
|
|
@@ -59,10 +59,16 @@ class ModernLogging:
|
|
|
59
59
|
with open(self.filepath, "a") as f:
|
|
60
60
|
f.write(f"{log_line}\n")
|
|
61
61
|
|
|
62
|
-
def prompt(self, message: str = "", level_text: str = "INFO", level_color: str | None = None, ignore_kbdinterrupt: bool = True) -> str:
|
|
62
|
+
def prompt(self, message: str = "", level_text: str = "INFO", level_color: str | None = None, ignore_kbdinterrupt: bool = True, default: str | None = None, choices: list[str] | None = None, show_choices: bool = True) -> str:
|
|
63
63
|
if not is_higher_priority(level_text, self.display_level):
|
|
64
64
|
return
|
|
65
65
|
global _last_process, _last_level
|
|
66
|
+
if default:
|
|
67
|
+
message += f" ({default})"
|
|
68
|
+
if choices and show_choices:
|
|
69
|
+
message += f" [{'/'.join(choices)}]"
|
|
70
|
+
if not message.endswith(" "):
|
|
71
|
+
message += " "
|
|
66
72
|
log_line = self.make(message=message, level_text=level_text, level_color=level_color)
|
|
67
73
|
print(log_line, end="")
|
|
68
74
|
_last_process = self.process_name
|
|
@@ -75,10 +81,62 @@ class ModernLogging:
|
|
|
75
81
|
print()
|
|
76
82
|
else:
|
|
77
83
|
raise
|
|
84
|
+
if answer.strip() == "" and default is not None:
|
|
85
|
+
if choices:
|
|
86
|
+
selected_default = self._select_choice(default, choices)
|
|
87
|
+
if selected_default is not None:
|
|
88
|
+
answer = default
|
|
89
|
+
else:
|
|
90
|
+
answer = default
|
|
78
91
|
if self.filepath:
|
|
79
92
|
with open(self.filepath, "a") as f:
|
|
80
93
|
f.write(f"{log_line}{answer}\n")
|
|
81
|
-
|
|
94
|
+
if choices:
|
|
95
|
+
selected = self._select_choice(answer, choices)
|
|
96
|
+
if selected is not None:
|
|
97
|
+
return selected
|
|
98
|
+
else:
|
|
99
|
+
while True:
|
|
100
|
+
log_line = self.make(message=f"Invalid selection. Please select from: {'/'.join(choices)}", level_text=level_text, level_color=level_color)
|
|
101
|
+
print(log_line, end="")
|
|
102
|
+
if self.filepath:
|
|
103
|
+
with open(self.filepath, "a") as f:
|
|
104
|
+
f.write(f"{log_line}{answer}\n")
|
|
105
|
+
log_line = self.make(message=message, level_text=level_text, level_color=level_color)
|
|
106
|
+
print(log_line, end="")
|
|
107
|
+
try:
|
|
108
|
+
answer = input()
|
|
109
|
+
except KeyboardInterrupt:
|
|
110
|
+
if ignore_kbdinterrupt:
|
|
111
|
+
print()
|
|
112
|
+
else:
|
|
113
|
+
raise
|
|
114
|
+
if self.filepath:
|
|
115
|
+
with open(self.filepath, "a") as f:
|
|
116
|
+
f.write(f"{log_line}{answer}\n")
|
|
117
|
+
if answer.strip() == "" and default is not None:
|
|
118
|
+
if choices:
|
|
119
|
+
selected_default = self._select_choice(default, choices)
|
|
120
|
+
if selected_default is not None:
|
|
121
|
+
return default
|
|
122
|
+
else:
|
|
123
|
+
return default
|
|
124
|
+
selected = self._select_choice(answer, choices)
|
|
125
|
+
if selected is not None:
|
|
126
|
+
return selected
|
|
127
|
+
|
|
128
|
+
def _select_choice(self, answer: str, choices: list[str]) -> str | None:
|
|
129
|
+
if answer in choices:
|
|
130
|
+
return answer
|
|
131
|
+
stripped = answer.strip()
|
|
132
|
+
if stripped in choices:
|
|
133
|
+
return stripped
|
|
134
|
+
lower_map = {c.lower(): c for c in choices}
|
|
135
|
+
if answer.lower() in lower_map:
|
|
136
|
+
return lower_map[answer.lower()]
|
|
137
|
+
if stripped.lower() in lower_map:
|
|
138
|
+
return lower_map[stripped.lower()]
|
|
139
|
+
return None
|
|
82
140
|
|
|
83
141
|
def make(self, message: str = "", level_text: str = "INFO", level_color: str | None = None):
|
|
84
142
|
level_text = normalize_level(level_text.strip().upper())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|