nercone-modern 1.2.2__py3-none-any.whl → 1.4.5__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.
- nercone_modern/__main__.py +4 -4
- nercone_modern/color.py +38 -0
- nercone_modern/logging.py +5 -5
- nercone_modern/progressbar.py +10 -8
- nercone_modern/text.py +24 -0
- {nercone_modern-1.2.2.dist-info → nercone_modern-1.4.5.dist-info}/METADATA +61 -8
- nercone_modern-1.4.5.dist-info/RECORD +9 -0
- {nercone_modern-1.2.2.dist-info → nercone_modern-1.4.5.dist-info}/WHEEL +1 -1
- nercone_modern-1.2.2.dist-info/RECORD +0 -7
nercone_modern/__main__.py
CHANGED
|
@@ -18,11 +18,11 @@ try:
|
|
|
18
18
|
logger1.log("This is a info message", "INFO")
|
|
19
19
|
logger1.log("This is a info message", "INFO")
|
|
20
20
|
logger1.log("This is a info message", "INFO")
|
|
21
|
-
logger2.log("This is
|
|
21
|
+
logger2.log("This is a info message", "INFO")
|
|
22
22
|
logger1.log("This is a warning message", "WARNING")
|
|
23
|
-
logger1.log("This is
|
|
24
|
-
logger1.log("This is
|
|
25
|
-
prompt_result = logger1.prompt("This is
|
|
23
|
+
logger1.log("This is a error message", "ERROR")
|
|
24
|
+
logger1.log("This is a critical error message", "CRITICAL")
|
|
25
|
+
prompt_result = logger1.prompt("This is a Prompt. Let's try it: ")
|
|
26
26
|
logger1.log(f"Answer is: {prompt_result}", "INFO")
|
|
27
27
|
|
|
28
28
|
progress_bar1 = ModernProgressBar(total=100, process_name="Task 1", spinner_mode=False)
|
nercone_modern/color.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
class ModernColor:
|
|
2
|
+
def ansi_color_by_code(color_code: int | str = 0):
|
|
3
|
+
return f"\033[{color_code}m"
|
|
4
|
+
|
|
5
|
+
def ansi_color(color_name: str = "reset"):
|
|
6
|
+
if color_name == "reset":
|
|
7
|
+
return ModernColor.ansi_color_by_code(0)
|
|
8
|
+
elif color_name == "black":
|
|
9
|
+
return ModernColor.ansi_color_by_code(30)
|
|
10
|
+
elif color_name == "red":
|
|
11
|
+
return ModernColor.ansi_color_by_code(31)
|
|
12
|
+
elif color_name == "green":
|
|
13
|
+
return ModernColor.ansi_color_by_code(32)
|
|
14
|
+
elif color_name == "yellow":
|
|
15
|
+
return ModernColor.ansi_color_by_code(33)
|
|
16
|
+
elif color_name == "blue":
|
|
17
|
+
return ModernColor.ansi_color_by_code(34)
|
|
18
|
+
elif color_name == "magenta":
|
|
19
|
+
return ModernColor.ansi_color_by_code(35)
|
|
20
|
+
elif color_name == "cyan":
|
|
21
|
+
return ModernColor.ansi_color_by_code(36)
|
|
22
|
+
elif color_name == "white":
|
|
23
|
+
return ModernColor.ansi_color_by_code(37)
|
|
24
|
+
elif color_name in ("gray", "grey"):
|
|
25
|
+
return ModernColor.ansi_color_by_code(90)
|
|
26
|
+
else:
|
|
27
|
+
return ""
|
|
28
|
+
|
|
29
|
+
RESET = "\033[0m"
|
|
30
|
+
BLACK = "\033[30m"
|
|
31
|
+
RED = "\033[31m"
|
|
32
|
+
GREEN = "\033[32m"
|
|
33
|
+
YELLOW = "\033[33m"
|
|
34
|
+
BLUE = "\033[34m"
|
|
35
|
+
MAGENTA = "\033[35m"
|
|
36
|
+
CYAN = "\033[36m"
|
|
37
|
+
WHITE = "\033[37m"
|
|
38
|
+
GRAY = "\033[90m"
|
nercone_modern/logging.py
CHANGED
|
@@ -47,7 +47,7 @@ class ModernLogging:
|
|
|
47
47
|
global _max_proc_width
|
|
48
48
|
_max_proc_width = max(_max_proc_width, len(process_name))
|
|
49
49
|
|
|
50
|
-
def log(self, message="", level="INFO"):
|
|
50
|
+
def log(self, message: str = "", level: str = "INFO"):
|
|
51
51
|
if not is_higher_priority(level, self.display_level):
|
|
52
52
|
return
|
|
53
53
|
|
|
@@ -74,7 +74,7 @@ class ModernLogging:
|
|
|
74
74
|
_last_process = self.process_name
|
|
75
75
|
_last_level = level_text
|
|
76
76
|
|
|
77
|
-
def prompt(self, message="", level="INFO") -> str:
|
|
77
|
+
def prompt(self, message: str = "", level: str = "INFO") -> str:
|
|
78
78
|
if not is_higher_priority(level, self.display_level):
|
|
79
79
|
return
|
|
80
80
|
|
|
@@ -102,7 +102,7 @@ class ModernLogging:
|
|
|
102
102
|
_last_level = level_text
|
|
103
103
|
return input()
|
|
104
104
|
|
|
105
|
-
def _make(self, message, level_text, color, show_proc, show_level):
|
|
105
|
+
def _make(self, message: str, level_text: str, color: str, show_proc: bool, show_level: bool):
|
|
106
106
|
global _max_proc_width
|
|
107
107
|
level_width = max(MAX_LOG_LEVEL_WIDTH, len(level_text))
|
|
108
108
|
|
|
@@ -116,7 +116,7 @@ class ModernLogging:
|
|
|
116
116
|
|
|
117
117
|
return f"{proc_part} {level_part} {str(message)}"
|
|
118
118
|
|
|
119
|
-
def _color(self, color_name):
|
|
119
|
+
def _color(self, color_name: str = "reset"):
|
|
120
120
|
if color_name == "cyan":
|
|
121
121
|
return self._color_by_code(36)
|
|
122
122
|
elif color_name == "magenta":
|
|
@@ -140,5 +140,5 @@ class ModernLogging:
|
|
|
140
140
|
else:
|
|
141
141
|
return ""
|
|
142
142
|
|
|
143
|
-
def _color_by_code(self, color_code):
|
|
143
|
+
def _color_by_code(self, color_code: int | str = 0):
|
|
144
144
|
return f"\033[{color_code}m"
|
nercone_modern/progressbar.py
CHANGED
|
@@ -14,7 +14,7 @@ class ModernProgressBar:
|
|
|
14
14
|
_last_rendered = False
|
|
15
15
|
_lock = threading.RLock()
|
|
16
16
|
|
|
17
|
-
def __init__(self, total: int, process_name: str, spinner_mode=
|
|
17
|
+
def __init__(self, total: int, process_name: str, spinner_mode=False):
|
|
18
18
|
self.total = total
|
|
19
19
|
self.spinner_mode = spinner_mode
|
|
20
20
|
self.current = 0
|
|
@@ -55,7 +55,7 @@ class ModernProgressBar:
|
|
|
55
55
|
self._start_spinner_thread_if_needed()
|
|
56
56
|
self._render(advance_spinner=False)
|
|
57
57
|
|
|
58
|
-
def setMessage(self, message):
|
|
58
|
+
def setMessage(self, message: str = ""):
|
|
59
59
|
self.message = message
|
|
60
60
|
|
|
61
61
|
def start(self):
|
|
@@ -78,11 +78,13 @@ class ModernProgressBar:
|
|
|
78
78
|
self._stop_spinner_thread()
|
|
79
79
|
self._render(final=True, advance_spinner=False)
|
|
80
80
|
|
|
81
|
-
def makeModernLogging(self, process_name):
|
|
81
|
+
def makeModernLogging(self, process_name: str = None):
|
|
82
82
|
from .logging import ModernLogging
|
|
83
|
+
if not process_name:
|
|
84
|
+
process_name = self.process_name
|
|
83
85
|
return ModernLogging(process_name)
|
|
84
86
|
|
|
85
|
-
def logging(self, message, level="INFO", modernLogging=None):
|
|
87
|
+
def logging(self, message: str = "", level: str = "INFO", modernLogging=None):
|
|
86
88
|
with ModernProgressBar._lock:
|
|
87
89
|
self.log_lines = 0
|
|
88
90
|
if modernLogging is None:
|
|
@@ -119,7 +121,7 @@ class ModernProgressBar:
|
|
|
119
121
|
continue
|
|
120
122
|
self._render()
|
|
121
123
|
|
|
122
|
-
def _render(self, final=False, advance_spinner=True):
|
|
124
|
+
def _render(self, final: bool = False, advance_spinner: bool = True):
|
|
123
125
|
with ModernProgressBar._lock:
|
|
124
126
|
progress = self.current / self.total if self.total else 0
|
|
125
127
|
bar = self._progress_bar(progress, advance_spinner=advance_spinner and self._should_spin())
|
|
@@ -145,7 +147,7 @@ class ModernProgressBar:
|
|
|
145
147
|
sys.stdout.write(f"\033[{down_lines}B")
|
|
146
148
|
sys.stdout.flush()
|
|
147
149
|
|
|
148
|
-
def _progress_bar(self, progress, advance_spinner=True):
|
|
150
|
+
def _progress_bar(self, progress: int, advance_spinner: bool = True):
|
|
149
151
|
bar_length = 20
|
|
150
152
|
if not self._should_spin():
|
|
151
153
|
empty_bar = "-"
|
|
@@ -174,7 +176,7 @@ class ModernProgressBar:
|
|
|
174
176
|
def _should_spin(self):
|
|
175
177
|
return self.spinner_mode and self._spinner_ready
|
|
176
178
|
|
|
177
|
-
def _color(self, color_name):
|
|
179
|
+
def _color(self, color_name: str = "reset"):
|
|
178
180
|
if color_name == "cyan":
|
|
179
181
|
return self._color_by_code(36)
|
|
180
182
|
elif color_name == "magenta":
|
|
@@ -198,5 +200,5 @@ class ModernProgressBar:
|
|
|
198
200
|
else:
|
|
199
201
|
return ""
|
|
200
202
|
|
|
201
|
-
def _color_by_code(self, color_code):
|
|
203
|
+
def _color_by_code(self, color_code: int | str = 0):
|
|
202
204
|
return f"\033[{color_code}m"
|
nercone_modern/text.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import Union
|
|
2
|
+
from .color import ModernColor
|
|
3
|
+
|
|
4
|
+
class ModernText:
|
|
5
|
+
def __init__(self, content="", color: str = ModernColor.WHITE):
|
|
6
|
+
self.content = content
|
|
7
|
+
if not color.startswith("\033"):
|
|
8
|
+
color = getattr(ModernColor, color.upper(), ModernColor.WHITE)
|
|
9
|
+
self.color = color
|
|
10
|
+
|
|
11
|
+
def __add__(self, other: Union[str, "ModernText"]):
|
|
12
|
+
if isinstance(other, ModernText):
|
|
13
|
+
if self.color == other.color:
|
|
14
|
+
return ModernText(self.content + other.content, self.color)
|
|
15
|
+
else:
|
|
16
|
+
combined = f"{self.color}{self.content}{ModernColor.RESET}{other.color}{other.content}"
|
|
17
|
+
return ModernText(combined, ModernColor.RESET)
|
|
18
|
+
elif isinstance(other, str):
|
|
19
|
+
return ModernText(self.content + other, self.color)
|
|
20
|
+
else:
|
|
21
|
+
raise TypeError(f"Unsupported operand type(s) for +: 'ModernText' and '{type(other).__name__}'")
|
|
22
|
+
|
|
23
|
+
def __str__(self):
|
|
24
|
+
return f"{self.color}{self.content}{ModernColor.RESET}"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: nercone-modern
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: Modern
|
|
3
|
+
Version: 1.4.5
|
|
4
|
+
Summary: Modern CLI Library
|
|
5
5
|
Author: Nercone
|
|
6
6
|
Author-email: Nercone <nercone@diamondgotcat.net>
|
|
7
7
|
License: MIT
|
|
@@ -16,7 +16,7 @@ Description-Content-Type: text/markdown
|
|
|
16
16
|
<img width="1920" alt="Nercone Modern" src="https://github.com/user-attachments/assets/c92b0407-916f-46ec-9116-c3388b38c88c" />
|
|
17
17
|
|
|
18
18
|
# nercone-modern
|
|
19
|
-
Modern
|
|
19
|
+
Modern CLI Library
|
|
20
20
|
|
|
21
21
|
## Installation
|
|
22
22
|
|
|
@@ -38,31 +38,84 @@ pip3 install nercone-modern
|
|
|
38
38
|
|
|
39
39
|
## Usage
|
|
40
40
|
|
|
41
|
+
### Import
|
|
42
|
+
|
|
41
43
|
```python
|
|
44
|
+
from nercone_modern.color import ModernColor
|
|
45
|
+
from nercone_modern.text import ModernText
|
|
42
46
|
from nercone_modern.logging import ModernLogging
|
|
43
47
|
from nercone_modern.progressbar import ModernProgressBar
|
|
44
48
|
```
|
|
45
49
|
|
|
46
|
-
###
|
|
50
|
+
### Color
|
|
51
|
+
```python
|
|
52
|
+
from nercone_modern.color import ModernColor as Color
|
|
53
|
+
print(f"Build {Color.GREEN}Success{Color.RESET}")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Supported colors:**
|
|
57
|
+
- `CYAN`
|
|
58
|
+
- `MAGENTA`
|
|
59
|
+
- `YELLOW`
|
|
60
|
+
- `GREEN`
|
|
61
|
+
- `RED`
|
|
62
|
+
- `BLUE`
|
|
63
|
+
- `WHITE`
|
|
64
|
+
- `BLACK`
|
|
65
|
+
- `GRAY`
|
|
66
|
+
- `RESET`
|
|
67
|
+
|
|
68
|
+
### Text
|
|
69
|
+
```python
|
|
70
|
+
from nercone_modern.text import ModernText as Text
|
|
71
|
+
from nercone_modern.color import ModernColor as Color
|
|
72
|
+
print("Build" + Text("Success", color="green"))
|
|
73
|
+
print("Build" + Text("Failed", color=Color.RED))
|
|
74
|
+
```
|
|
47
75
|
|
|
76
|
+
### Logging
|
|
48
77
|
```python
|
|
78
|
+
from nercone_modern.logging import ModernLogging
|
|
49
79
|
logger = ModernLogging("Main", display_level="DEBUG")
|
|
50
80
|
logger.log("This is a test message", level="INFO")
|
|
81
|
+
answer = logger.prompt("What's your name?", level="INFO")
|
|
82
|
+
logger.log(f"Answer: {answer}", level="DEBUG")
|
|
51
83
|
```
|
|
52
84
|
|
|
53
|
-
|
|
85
|
+
**Supported levels:**
|
|
86
|
+
- `DEBUG`
|
|
87
|
+
- `INFO`
|
|
88
|
+
- `WARN`
|
|
89
|
+
- `ERROR`
|
|
90
|
+
- `CRITICAL`
|
|
54
91
|
|
|
92
|
+
### Progress Bar
|
|
55
93
|
```python
|
|
94
|
+
from nercone_modern.progressbar import ModernProgressBar
|
|
56
95
|
progress_bar = ModernProgressBar(total=100, process_name="Task 1", spinner_mode=True)
|
|
57
|
-
progress_bar.start()
|
|
58
96
|
|
|
97
|
+
progress_bar.start()
|
|
59
98
|
time.sleep(5)
|
|
60
99
|
|
|
61
100
|
progress_bar.spinner(False)
|
|
62
101
|
|
|
63
|
-
|
|
102
|
+
progress_bar.setMessage("Step 1")
|
|
103
|
+
|
|
104
|
+
for i in range(50):
|
|
64
105
|
time.sleep(0.05)
|
|
65
|
-
progress_bar.update()
|
|
106
|
+
progress_bar.update(amount=1)
|
|
107
|
+
|
|
108
|
+
progress_bar.setMessage("Step 2")
|
|
109
|
+
|
|
110
|
+
for i in range(25):
|
|
111
|
+
time.sleep(0.03)
|
|
112
|
+
progress_bar.update(amount=1)
|
|
113
|
+
|
|
114
|
+
progress_bar.setMessage("Step 3")
|
|
115
|
+
|
|
116
|
+
for i in range(5):
|
|
117
|
+
time.sleep(1)
|
|
118
|
+
progress_bar.update(amount=5)
|
|
66
119
|
|
|
67
120
|
progress_bar.finish()
|
|
68
121
|
```
|
|
@@ -0,0 +1,9 @@
|
|
|
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=p9biozctXNQmesChmn8ozCUKwBSC_5mdelCgbuZ3q0M,4945
|
|
5
|
+
nercone_modern/progressbar.py,sha256=bzlGg0dSj88eli2lM0cI4xTw2FNJqlJb352jdtJbsWQ,8088
|
|
6
|
+
nercone_modern/text.py,sha256=eGxGQOJ3b-783ocLibkG62cOcYD4HLG_3diA52tU8jI,1031
|
|
7
|
+
nercone_modern-1.4.5.dist-info/WHEEL,sha256=5w2T7AS2mz1-rW9CNagNYWRCaB0iQqBMYLwKdlgiR4Q,78
|
|
8
|
+
nercone_modern-1.4.5.dist-info/METADATA,sha256=jZPhPnjGBngxi4j_NgDVtFeiZKaedAmJcaPhXTn7CWY,2472
|
|
9
|
+
nercone_modern-1.4.5.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
nercone_modern/__init__.py,sha256=ArF3T8FdWIhwGcL4MfYcHqMse3n5gjuyzbLNlcqRcxs,443
|
|
2
|
-
nercone_modern/__main__.py,sha256=7ZhJgTJOF73XO3HwSed9LAyf9K9A-Bnqd8N3pTuV2b0,1962
|
|
3
|
-
nercone_modern/logging.py,sha256=CVMyOGoHAP87A578hvFFc0mNNtNjXCn49rTQDWLo-fE,4860
|
|
4
|
-
nercone_modern/progressbar.py,sha256=xPUDQG77pXyKT3YuEVQl8ERjWrZ1YXOnujEUwkFc0YA,7915
|
|
5
|
-
nercone_modern-1.2.2.dist-info/WHEEL,sha256=UH59_qNuDUAa1VxQvC6fxmbl24EMw6DOIlT1yp8oeuU,78
|
|
6
|
-
nercone_modern-1.2.2.dist-info/METADATA,sha256=e5rADnucSyZHDsNRyVJqG_aoocdU9igp85kt3s0u3Io,1403
|
|
7
|
-
nercone_modern-1.2.2.dist-info/RECORD,,
|