nercone-modern 1.5.0__py3-none-any.whl → 1.6.1__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.
@@ -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("This is a Prompt. Let's try it: ")
25
+ prompt_result = logger1.prompt("Continue demo?", default="Y", 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")
nercone_modern/logging.py CHANGED
@@ -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, show_default: bool = False, 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 and show_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
- return answer
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)
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())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nercone-modern
3
- Version: 1.5.0
3
+ Version: 1.6.1
4
4
  Summary: Modern CLI Library
5
5
  Author: Nercone
6
6
  Author-email: Nercone <nercone@diamondgotcat.net>
@@ -0,0 +1,9 @@
1
+ nercone_modern/__init__.py,sha256=ArF3T8FdWIhwGcL4MfYcHqMse3n5gjuyzbLNlcqRcxs,443
2
+ nercone_modern/__main__.py,sha256=EDFIQTNrAwT4V5nzcjyn-FtAbR1g8iskDiBR7Kco1WQ,2069
3
+ nercone_modern/color.py,sha256=sy7f0Fe07PZWNfM1AOt7HeuhF7uGK2_IuZHEckwgxc4,1328
4
+ nercone_modern/logging.py,sha256=S_OyfAe-XbqII0wvB0wgyjlfKPokWBSG5aOu0YsPgJE,8219
5
+ nercone_modern/progressbar.py,sha256=bzlGg0dSj88eli2lM0cI4xTw2FNJqlJb352jdtJbsWQ,8088
6
+ nercone_modern/text.py,sha256=eGxGQOJ3b-783ocLibkG62cOcYD4HLG_3diA52tU8jI,1031
7
+ nercone_modern-1.6.1.dist-info/WHEEL,sha256=DpNsHFUm_gffZe1FgzmqwuqiuPC6Y-uBCzibcJcdupM,78
8
+ nercone_modern-1.6.1.dist-info/METADATA,sha256=SseIvl73T1dY3ypUeuHVr2zUB7nREj1yBgQSwPxIyLw,2472
9
+ nercone_modern-1.6.1.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- nercone_modern/__init__.py,sha256=ArF3T8FdWIhwGcL4MfYcHqMse3n5gjuyzbLNlcqRcxs,443
2
- nercone_modern/__main__.py,sha256=wKQnrGpTKemaaMv1oow_KKQFfPqxzhkz4KAhWBjVcYg,1957
3
- nercone_modern/color.py,sha256=sy7f0Fe07PZWNfM1AOt7HeuhF7uGK2_IuZHEckwgxc4,1328
4
- nercone_modern/logging.py,sha256=javSGxKRnbJIYjh1deIuhcI7jOSAZud4Wdo0x0S5yOM,5489
5
- nercone_modern/progressbar.py,sha256=bzlGg0dSj88eli2lM0cI4xTw2FNJqlJb352jdtJbsWQ,8088
6
- nercone_modern/text.py,sha256=eGxGQOJ3b-783ocLibkG62cOcYD4HLG_3diA52tU8jI,1031
7
- nercone_modern-1.5.0.dist-info/WHEEL,sha256=DpNsHFUm_gffZe1FgzmqwuqiuPC6Y-uBCzibcJcdupM,78
8
- nercone_modern-1.5.0.dist-info/METADATA,sha256=d5dS4gyv-nl5SJZknqjZgGKdjJ2VyzQ72HnATOIFwtA,2472
9
- nercone_modern-1.5.0.dist-info/RECORD,,