nercone-modern 1.11.4__tar.gz → 1.12.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: nercone-modern
3
- Version: 1.11.4
3
+ Version: 1.12.0
4
4
  Summary: Modern CLI Library
5
5
  Author: Nercone
6
6
  Author-email: Nercone <nercone@diamondgotcat.net>
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "nercone-modern"
7
- version = "1.11.4"
7
+ version = "1.12.0"
8
8
  description = "Modern CLI Library"
9
9
  readme = { file = "README.md", content-type = "text/markdown" }
10
10
  authors = [
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # -- nercone-modern --------------------------------------------- #
4
+ # color.py on nercone-modern #
5
+ # Made by DiamondGotCat, Licensed under MIT License #
6
+ # Copyright (c) 2025 DiamondGotCat #
7
+ # ---------------------------------------------- DiamondGotCat -- #
8
+
9
+ from enum import Enum
10
+
11
+ class ModernColor:
12
+ def from_code(color_code: int | str = 0):
13
+ return f"\033[{color_code}m"
14
+
15
+ def from_name(name: str = "default", background: bool = False):
16
+ name = name.strip().lower()
17
+ if name in ("default", "reset"):
18
+ return ModernColor.from_code(0)
19
+ elif name == "bold":
20
+ return ModernColor.from_code(1)
21
+ elif name == "underline":
22
+ return ModernColor.from_code(4)
23
+ elif not background:
24
+ if name == "black":
25
+ return ModernColor.from_code(30)
26
+ elif name == "red":
27
+ return ModernColor.from_code(31)
28
+ elif name == "green":
29
+ return ModernColor.from_code(32)
30
+ elif name == "yellow":
31
+ return ModernColor.from_code(33)
32
+ elif name == "blue":
33
+ return ModernColor.from_code(34)
34
+ elif name == "magenta":
35
+ return ModernColor.from_code(35)
36
+ elif name == "cyan":
37
+ return ModernColor.from_code(36)
38
+ elif name == ("white", "bright_gray", "bright_gray", "light_gray", "light_gray"):
39
+ return ModernColor.from_code(37)
40
+ elif name in ("bright_black", "gray", "grey"):
41
+ return ModernColor.from_code(90)
42
+ elif name == "bright_red":
43
+ return ModernColor.from_code(91)
44
+ elif name == "bright_green":
45
+ return ModernColor.from_code(92)
46
+ elif name == "bright_yellow":
47
+ return ModernColor.from_code(93)
48
+ elif name == "bright_blue":
49
+ return ModernColor.from_code(94)
50
+ elif name == "bright_magenta":
51
+ return ModernColor.from_code(95)
52
+ elif name == "bright_cyan":
53
+ return ModernColor.from_code(96)
54
+ elif name == "bright_white":
55
+ return ModernColor.from_code(97)
56
+ else:
57
+ return ""
58
+ elif background:
59
+ if name == "black":
60
+ return ModernColor.from_code(40)
61
+ elif name == "red":
62
+ return ModernColor.from_code(41)
63
+ elif name == "green":
64
+ return ModernColor.from_code(42)
65
+ elif name == "yellow":
66
+ return ModernColor.from_code(43)
67
+ elif name == "blue":
68
+ return ModernColor.from_code(44)
69
+ elif name == "magenta":
70
+ return ModernColor.from_code(45)
71
+ elif name == "cyan":
72
+ return ModernColor.from_code(46)
73
+ elif name == ("white", "bright_gray", "bright_gray", "light_gray", "light_gray"):
74
+ return ModernColor.from_code(47)
75
+ elif name in ("bright_black", "gray", "grey"):
76
+ return ModernColor.from_code(100)
77
+ elif name == "bright_red":
78
+ return ModernColor.from_code(101)
79
+ elif name == "bright_green":
80
+ return ModernColor.from_code(102)
81
+ elif name == "bright_yellow":
82
+ return ModernColor.from_code(103)
83
+ elif name == "bright_blue":
84
+ return ModernColor.from_code(104)
85
+ elif name == "bright_magenta":
86
+ return ModernColor.from_code(105)
87
+ elif name == "bright_cyan":
88
+ return ModernColor.from_code(106)
89
+ elif name == "bright_white":
90
+ return ModernColor.from_code(107)
91
+ else:
92
+ return ""
@@ -67,7 +67,7 @@ class ModernLogging:
67
67
 
68
68
  def prompt(self, message: str = "", level_text: str = "INFO", level_color: str | None = None, default: str | None = None, show_default: bool = False, choices: list[str] | None = None, show_choices: bool = True, interrupt_ignore: bool = False, interrupt_default: str | None = None) -> str:
69
69
  if not is_higher_priority(level_text, self.display_level):
70
- return
70
+ return ""
71
71
  global _last_process, _last_level
72
72
  if default and show_default:
73
73
  message += f" ({default})"
@@ -202,4 +202,4 @@ class ModernLogging:
202
202
  log_level = level_text.ljust(MAX_LOG_LEVEL_WIDTH)
203
203
  proc_name = self.process_name.ljust(_max_proc_width)
204
204
  _max_prefix_width = max(_max_prefix_width, len(f"[{timestamp} {log_level} {proc_name}]"))
205
- return f"[{timestamp} {ModernColor.color(level_color)}{log_level}{ModernColor.color('reset')} {proc_name}] {message}"
205
+ return f"[{timestamp} {ModernColor.from_name(level_color)}{log_level}{ModernColor.from_name('reset')} {proc_name}] {message}"
@@ -90,12 +90,12 @@ class ModernProgressBar:
90
90
  self._stop_spinner_thread()
91
91
  self._render(final=True, advance_spinner=False)
92
92
 
93
- def log(self, message: str = "", level_text: str = "INFO", level_color: str | None = None, show_proc: bool | None = None, show_level: bool | None = None, modernLogging: ModernLogging = None):
93
+ def log(self, message: str = "", level_text: str = "INFO", level_color: str | None = None, show_proc: bool | None = None, show_level: bool | None = None, modernLogging: ModernLogging | None = None):
94
94
  with ModernProgressBar._lock:
95
95
  self.log_lines = 0
96
96
  if modernLogging is None:
97
97
  modernLogging = ModernLogging(self.process_name)
98
- result = modernLogging.make(message=message, level_text=level_text, level_color=level_color, show_proc=show_proc, show_level=show_level)
98
+ result = modernLogging.make(message=message, level_text=level_text, level_color=level_color)
99
99
  if self.log_lines > 0:
100
100
  move_up = self.log_lines
101
101
  else:
@@ -150,7 +150,7 @@ class ModernProgressBar:
150
150
  status = f" ({' ' * total_width}/{' ' * total_width})"
151
151
  else:
152
152
  status = f" ({self.current:>{total_width}}/{self.total:>{total_width}})"
153
- line = f"{ModernColor.color(self.box_color)}{self.box_left}{ModernColor.color('reset')}{ModernColor.color('gray')}{bar}{ModernColor.color('reset')}{ModernColor.color(self.box_color)}{self.box_right}{ModernColor.color('reset')} {ModernColor.color(self.primary_color)}{proc_name}{ModernColor.color('reset')} {ModernColor.color(self.secondary_color)}{percentage_alt if self.spinner_mode else percentage}{ModernColor.color('reset')}{ModernColor.color('gray')}{status}{ModernColor.color('reset')} {self.message}"
153
+ line = f"{ModernColor.from_name(self.box_color)}{self.box_left}{ModernColor.from_name('reset')}{ModernColor.from_name('gray')}{bar}{ModernColor.from_name('reset')}{ModernColor.from_name(self.box_color)}{self.box_right}{ModernColor.from_name('reset')} {ModernColor.from_name(self.primary_color)}{proc_name}{ModernColor.from_name('reset')} {ModernColor.from_name(self.secondary_color)}{percentage_alt if self.spinner_mode else percentage}{ModernColor.from_name('reset')}{ModernColor.from_name('gray')}{status}{ModernColor.from_name('reset')} {self.message}"
154
154
  total_move_up = self.log_lines + (len(ModernProgressBar._active_bars) - self.index)
155
155
  if total_move_up > 0:
156
156
  sys.stdout.write(f"\033[{total_move_up}A")
@@ -163,7 +163,7 @@ class ModernProgressBar:
163
163
  sys.stdout.write(f"\033[{down_lines}B")
164
164
  sys.stdout.flush()
165
165
 
166
- def _progress_bar(self, progress: int, advance_spinner: bool = True):
166
+ def _progress_bar(self, progress: int | float, advance_spinner: bool = True):
167
167
  bar_length = logging._max_prefix_width - 3
168
168
  if not self._should_spin():
169
169
  if self.current == self.total:
@@ -171,18 +171,18 @@ class ModernProgressBar:
171
171
  else:
172
172
  center_bar = self.centor_bar
173
173
  if self.current <= 0 and not self._spinner_ready:
174
- return f"{ModernColor.color('gray')}{self.secondary_bar * (bar_length + 1)}"
174
+ return f"{ModernColor.from_name('gray')}{self.secondary_bar * (bar_length + 1)}"
175
175
  filled_length = int(progress * bar_length) + 1
176
- return f"{ModernColor.color(self.primary_color)}{self.primary_bar * filled_length}{ModernColor.color(self.third_color)}{center_bar}{ModernColor.color('gray')}{self.secondary_bar * (bar_length - filled_length)}"
176
+ return f"{ModernColor.from_name(self.primary_color)}{self.primary_bar * filled_length}{ModernColor.from_name(self.third_color)}{center_bar}{ModernColor.from_name('gray')}{self.secondary_bar * (bar_length - filled_length)}"
177
177
  else:
178
178
  if self.current <= 0 and not self._spinner_ready:
179
- return f"{ModernColor.color('gray')}{'-' * (bar_length + 1)}"
179
+ return f"{ModernColor.from_name('gray')}{'-' * (bar_length + 1)}"
180
180
  spinner_symbol_length = 1
181
181
  spinner_end_bar_length = bar_length - self.spinner_step
182
182
  spinner_start_bar_length = bar_length - spinner_end_bar_length
183
183
  if advance_spinner:
184
184
  self.spinner_step = (self.spinner_step + 1) % (bar_length + 1)
185
- return f"{ModernColor.color('gray')}{'-' * spinner_start_bar_length}{ModernColor.color(self.third_color)}{'-' * spinner_symbol_length}{ModernColor.color('gray')}{'-' * spinner_end_bar_length}"
185
+ return f"{ModernColor.from_name('gray')}{'-' * spinner_start_bar_length}{ModernColor.from_name(self.third_color)}{'-' * spinner_symbol_length}{ModernColor.from_name('gray')}{'-' * spinner_end_bar_length}"
186
186
 
187
187
  def _should_spin(self):
188
188
  return self.spinner_mode and self._spinner_ready
@@ -10,10 +10,10 @@ from typing import Union
10
10
  from .color import ModernColor
11
11
 
12
12
  class ModernText:
13
- def __init__(self, content="", color: str = ModernColor.WHITE):
13
+ def __init__(self, content="", color: str = ModernColor.from_name("white")):
14
14
  self.content = content
15
15
  if not color.startswith("\033"):
16
- color = getattr(ModernColor, color.upper(), ModernColor.WHITE)
16
+ color = getattr(ModernColor, color.upper(), ModernColor.from_name("white"))
17
17
  self.color = color
18
18
 
19
19
  def __add__(self, other: Union[str, "ModernText"]):
@@ -21,12 +21,12 @@ class ModernText:
21
21
  if self.color == other.color:
22
22
  return ModernText(self.content + other.content, self.color)
23
23
  else:
24
- combined = f"{self.color}{self.content}{ModernColor.RESET}{other.color}{other.content}"
25
- return ModernText(combined, ModernColor.RESET)
24
+ combined = f"{self.color}{self.content}{ModernColor.from_name('reset')}{other.color}{other.content}"
25
+ return ModernText(combined, ModernColor.from_name("reset"))
26
26
  elif isinstance(other, str):
27
27
  return ModernText(self.content + other, self.color)
28
28
  else:
29
29
  raise TypeError(f"Unsupported operand type(s) for +: 'ModernText' and '{type(other).__name__}'")
30
30
 
31
31
  def __str__(self):
32
- return f"{self.color}{self.content}{ModernColor.RESET}"
32
+ return f"{self.color}{self.content}{ModernColor.from_name('reset')}"
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- # -- nercone-modern --------------------------------------------- #
4
- # color.py on nercone-modern #
5
- # Made by DiamondGotCat, Licensed under MIT License #
6
- # Copyright (c) 2025 DiamondGotCat #
7
- # ---------------------------------------------- DiamondGotCat -- #
8
-
9
- class ModernColor:
10
- def color_by_code(color_code: int | str = 0):
11
- return f"\033[{color_code}m"
12
-
13
- def color(color_name: str = "reset"):
14
- if color_name in ("reset", "default"):
15
- return ModernColor.color_by_code(0)
16
- elif color_name == "black":
17
- return ModernColor.color_by_code(30)
18
- elif color_name == "red":
19
- return ModernColor.color_by_code(31)
20
- elif color_name == "green":
21
- return ModernColor.color_by_code(32)
22
- elif color_name == "yellow":
23
- return ModernColor.color_by_code(33)
24
- elif color_name == "blue":
25
- return ModernColor.color_by_code(34)
26
- elif color_name == "magenta":
27
- return ModernColor.color_by_code(35)
28
- elif color_name == "cyan":
29
- return ModernColor.color_by_code(36)
30
- elif color_name == "white":
31
- return ModernColor.color_by_code(37)
32
- elif color_name in ("gray", "grey"):
33
- return ModernColor.color_by_code(90)
34
- else:
35
- return ""
36
-
37
- RESET = "\033[0m"
38
- BLACK = "\033[30m"
39
- RED = "\033[31m"
40
- GREEN = "\033[32m"
41
- YELLOW = "\033[33m"
42
- BLUE = "\033[34m"
43
- MAGENTA = "\033[35m"
44
- CYAN = "\033[36m"
45
- WHITE = "\033[37m"
46
- GRAY = "\033[90m"