hspylib-clitt 0.9.121__py3-none-any.whl → 0.9.123__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.

Potentially problematic release.


This version of hspylib-clitt might be problematic. Click here for more details.

clitt/.version CHANGED
@@ -1 +1 @@
1
- 0.9.121
1
+ 0.9.123
clitt/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt
6
6
  """Package initialization."""
@@ -10,4 +10,4 @@ __all__ = [
10
10
  'core',
11
11
  'utils'
12
12
  ]
13
- __version__ = '0.9.121'
13
+ __version__ = '0.9.123'
clitt/addons/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.addons
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'appman',
10
10
  'widman'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.addons.appman
6
6
  """Package initialization."""
@@ -10,4 +10,4 @@ __all__ = [
10
10
  'appman_enums',
11
11
  'templates'
12
12
  ]
13
- __version__ = '0.9.121'
13
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.addons.appman.templates
6
6
  """Package initialization."""
@@ -8,4 +8,4 @@
8
8
  __all__ = [
9
9
 
10
10
  ]
11
- __version__ = '0.9.121'
11
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.addons.widman
6
6
  """Package initialization."""
@@ -11,4 +11,4 @@ __all__ = [
11
11
  'widgets',
12
12
  'widman'
13
13
  ]
14
- __version__ = '0.9.121'
14
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.addons.widman.widgets
6
6
  """Package initialization."""
@@ -11,4 +11,4 @@ __all__ = [
11
11
  'widget_send_msg',
12
12
  'widget_time_calc'
13
13
  ]
14
- __version__ = '0.9.121'
14
+ __version__ = '0.9.123'
clitt/core/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core
6
6
  """Package initialization."""
@@ -12,4 +12,4 @@ __all__ = [
12
12
  'term',
13
13
  'tui'
14
14
  ]
15
- __version__ = '0.9.121'
15
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.exception
6
6
  """Package initialization."""
@@ -8,4 +8,4 @@
8
8
  __all__ = [
9
9
  'exceptions'
10
10
  ]
11
- __version__ = '0.9.121'
11
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.icons
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'emojis',
10
10
  'font_awesome'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.icons.emojis
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'emojis',
10
10
  'face_smiling'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.icons.font_awesome
6
6
  """Package initialization."""
@@ -15,4 +15,4 @@ __all__ = [
15
15
  'trickplay_icons',
16
16
  'widget_icons'
17
17
  ]
18
- __version__ = '0.9.121'
18
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.term
6
6
  """Package initialization."""
@@ -11,4 +11,4 @@ __all__ = [
11
11
  'screen',
12
12
  'terminal'
13
13
  ]
14
- __version__ = '0.9.121'
14
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui
6
6
  """Package initialization."""
@@ -17,4 +17,4 @@ __all__ = [
17
17
  'tui_component',
18
18
  'tui_preferences'
19
19
  ]
20
- __version__ = '0.9.121'
20
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.line_input
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'keyboard_input',
10
10
  'line_input'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -43,9 +43,9 @@ class KeyboardInput(TUIComponent):
43
43
  """Preload the input with the provided dictionary.
44
44
  :param history: The history keyboard inputs.
45
45
  """
46
- for entry in reversed(history):
46
+ for entry in history:
47
47
  cls._add_history(entry)
48
- cls._HIST_INDEX = max(0, len(cls._HISTORY) - 1)
48
+ cls._HIST_INDEX = max(0, len(cls._HISTORY))
49
49
 
50
50
  @classmethod
51
51
  def forget_history(cls) -> None:
@@ -64,12 +64,14 @@ class KeyboardInput(TUIComponent):
64
64
  """Add the following input to the history set.
65
65
  :param input_text: The input text to add to the history.
66
66
  """
67
- if input_text and input_text not in list(cls._HISTORY)[1:]:
67
+ if cls._HISTORY[-1] != '':
68
+ cls._HISTORY.append('')
69
+ if input_text:
68
70
  idx: int = max(1, len(cls._HISTORY))
69
- if input_text not in cls._HISTORY:
70
- cls._HISTORY.insert(idx - 1, input_text)
71
- else:
72
- cls._HISTORY = cls._HISTORY[1:-1] + cls._HISTORY[:1] + cls._HISTORY[-1:]
71
+ if input_text in cls._HISTORY:
72
+ idx -= 1
73
+ cls._HISTORY.remove(input_text)
74
+ cls._HISTORY.insert(idx - 1, input_text)
73
75
  cls._HIST_INDEX = idx
74
76
 
75
77
  @classmethod
@@ -89,17 +91,21 @@ class KeyboardInput(TUIComponent):
89
91
  def __init__(
90
92
  self,
91
93
  prompt: str = "",
94
+ placeholder: str = "",
92
95
  prompt_color: VtColor = VtColor.NC,
93
96
  text_color: VtColor = VtColor.NC,
94
97
  navbar_enable: bool = False,
95
98
  ):
96
99
  super().__init__(prompt)
100
+ self._placeholder: str = placeholder
97
101
  self._prompt_color: VtColor = prompt_color
98
102
  self._text_color: VtColor = text_color
99
103
  self._navbar_enable: bool = navbar_enable
100
104
  self._input_index: int = 0
101
105
  self._input_text: str = ""
106
+ self._suggestion: str = ""
102
107
  self._HISTORY[-1] = ""
108
+ self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
103
109
 
104
110
  @property
105
111
  def length(self) -> int:
@@ -116,12 +122,13 @@ class KeyboardInput(TUIComponent):
116
122
  keypress = self._loop() or Keyboard.VK_ESC
117
123
 
118
124
  if keypress.isEnter():
119
- self._HISTORY.append('')
125
+ self._add_history(self._input_text)
120
126
  self._UNDO_HISTORY.clear()
121
127
  self._REDO_HISTORY.clear()
122
128
  elif keypress == Keyboard.VK_ESC:
123
129
  self._input_text = None
124
130
 
131
+ self._terminal.cursor.erase(Direction.RIGHT)
125
132
  self.writeln("%NC%")
126
133
 
127
134
  return self._input_text
@@ -149,8 +156,13 @@ class KeyboardInput(TUIComponent):
149
156
  Terminal.set_show_cursor(False)
150
157
  self.cursor.restore()
151
158
  self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
152
- self.write(self._input_text)
153
- self._terminal.cursor.erase(Direction.DOWN)
159
+ if self._input_text:
160
+ self.write(self._input_text)
161
+ self._write_suggestion()
162
+ else:
163
+ self.write(f"%GRAY%{self._placeholder}%NC%")
164
+ self._terminal.cursor.erase(Direction.DOWN)
165
+ self.cursor.move(len(self._placeholder), Direction.LEFT)
154
166
  self._re_render = False
155
167
  self._set_cursor_pos()
156
168
  Terminal.set_show_cursor()
@@ -165,11 +177,11 @@ class KeyboardInput(TUIComponent):
165
177
  if self._input_index > 0:
166
178
  self._input_index = max(0, self._input_index - 1)
167
179
  self._update_input(
168
- self._input_text[: self._input_index] + self._input_text[1 + self._input_index :]
180
+ self._input_text[: self._input_index] + self._input_text[1 + self._input_index:]
169
181
  )
170
182
  case Keyboard.VK_DELETE:
171
183
  self._update_input(
172
- self._input_text[: self._input_index] + self._input_text[1 + self._input_index :]
184
+ self._input_text[: self._input_index] + self._input_text[1 + self._input_index:]
173
185
  )
174
186
  case Keyboard.VK_CTRL_R:
175
187
  self.reset()
@@ -189,11 +201,17 @@ class KeyboardInput(TUIComponent):
189
201
  self._input_index = 0
190
202
  case Keyboard.VK_END:
191
203
  self._input_index = self.length
204
+ case Keyboard.VK_TAB:
205
+ self._update_input(self._input_text + self._suggestion)
206
+ self._input_index = self.length
192
207
  case _ as key if key.val.isprintable():
208
+ text: str = key.val
209
+ while (key := Keyboard.wait_keystroke(False)) != Keyboard.VK_NONE:
210
+ if key.val and key.val.isprintable():
211
+ text += key.val
193
212
  self._update_input(
194
- self._input_text[: self._input_index] + key.val + self._input_text[self._input_index :]
195
- )
196
- self._input_index += 1
213
+ self._input_text[: self._input_index] + text + self._input_text[self._input_index:])
214
+ self._input_index += len(text)
197
215
  case _ as key if key in Keyboard.break_keys():
198
216
  self._done = True
199
217
  case _:
@@ -215,22 +233,50 @@ class KeyboardInput(TUIComponent):
215
233
  self._UNDO_HISTORY.append(self._input_text)
216
234
  self._HISTORY[-1] = text if text not in self._HISTORY else self._input_text
217
235
  self._input_text = text
236
+ self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
218
237
  return text
219
238
 
220
239
  def _next_in_history(self) -> str:
221
240
  """Return the next input in history."""
222
241
  edt_text: str = self._HISTORY[-1]
223
- filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
224
- index = min(len(filtered) - 1, self._HIST_INDEX + 1)
225
- text = get_or_default(filtered, index, "")
226
- self._HIST_INDEX = index
227
- return text or filtered[-1]
242
+ filtered: list[str] = list(filter(lambda h: h.lower().startswith(edt_text.lower()), self._HISTORY))
243
+ if edt_text in filtered:
244
+ edt_idx = filtered.index(edt_text)
245
+ index = min(edt_idx, self._HIST_INDEX + 1)
246
+ text = get_or_default(filtered, index, None) or filtered[-1]
247
+ self._HIST_INDEX = filtered.index(text)
248
+ return text
249
+ return edt_text
228
250
 
229
251
  def _prev_in_history(self) -> str:
230
252
  """Return the previous input in history."""
231
253
  edt_text: str = self._HISTORY[-1]
232
254
  filtered: list[str] = list(filter(lambda h: h.lower().startswith(edt_text.lower()), self._HISTORY))
233
- index = max(0, min(len(filtered) - 2, self._HIST_INDEX - 1))
234
- text = get_or_default(filtered, index, "")
235
- self._HIST_INDEX = index
236
- return text or filtered[-1]
255
+ if edt_text in filtered:
256
+ edt_idx = filtered.index(edt_text) - 1
257
+ index = max(0, min(edt_idx, self._HIST_INDEX - 1))
258
+ text = get_or_default(filtered, index, None) or filtered[-1]
259
+ self._HIST_INDEX = filtered.index(text)
260
+ return text
261
+ return edt_text
262
+
263
+ def _write_suggestion(self) -> None:
264
+ """TODO """
265
+ edt_text: str = self._input_text
266
+ filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
267
+ hint: str = ''
268
+
269
+ if edt_text and edt_text in filtered:
270
+ edt_idx = filtered.index(edt_text) - 1
271
+ index = max(0, min(edt_idx, self._HIST_INDEX))
272
+ hint: str = get_or_default(filtered, index, '') or filtered[-1]
273
+ if hint and (hint := hint[len(edt_text):]):
274
+ self.write(f"%GRAY%{hint}%NC%")
275
+ self._terminal.cursor.erase(Direction.DOWN)
276
+ self.cursor.move(len(hint), Direction.LEFT)
277
+ else:
278
+ self._terminal.cursor.erase(Direction.DOWN)
279
+ else:
280
+ self._terminal.cursor.erase(Direction.DOWN)
281
+
282
+ self._suggestion = hint
@@ -19,13 +19,18 @@ from typing import Optional
19
19
 
20
20
 
21
21
  def line_input(
22
- prompt: str = "", prompt_color: VtColor = VtColor.NC, text_color: VtColor = VtColor.NC, navbar_enable: bool = False
22
+ prompt: str = "",
23
+ placeholder: str = "",
24
+ prompt_color: VtColor = VtColor.NC,
25
+ text_color: VtColor = VtColor.NC,
26
+ navbar_enable: bool = False,
23
27
  ) -> Optional[str | Keyboard]:
24
28
  """Read a string from standard input.
25
29
  :param prompt: The message to be displayed to the user.
30
+ :param placeholder: The placeholder text.
26
31
  :param prompt_color: The color of the prompt text.
27
32
  :param text_color: The color of the input text.
28
33
  :param navbar_enable: Whether to display the navbar or not.
29
34
  """
30
- ptt = KeyboardInput(prompt, prompt_color, text_color, navbar_enable)
35
+ ptt = KeyboardInput(prompt, placeholder, prompt_color, text_color, navbar_enable)
31
36
  return ptt.execute()
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.mchoose
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'mchoose',
10
10
  'menu_choose'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.mdashboard
6
6
  """Package initialization."""
@@ -11,4 +11,4 @@ __all__ = [
11
11
  'mdashboard',
12
12
  'menu_dashboard'
13
13
  ]
14
- __version__ = '0.9.121'
14
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.menu
6
6
  """Package initialization."""
@@ -13,4 +13,4 @@ __all__ = [
13
13
  'tui_menu_ui',
14
14
  'tui_menu_view'
15
15
  ]
16
- __version__ = '0.9.121'
16
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.minput
6
6
  """Package initialization."""
@@ -16,4 +16,4 @@ __all__ = [
16
16
  'minput',
17
17
  'minput_utils'
18
18
  ]
19
- __version__ = '0.9.121'
19
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.mselect
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'menu_select',
10
10
  'mselect'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.core.tui.table
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'table_enums',
10
10
  'table_renderer'
11
11
  ]
12
- __version__ = '0.9.121'
12
+ __version__ = '0.9.123'
clitt/utils/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.121
3
+ # hspylib-clitt v0.9.123
4
4
  #
5
5
  # Package: main.clitt.utils
6
6
  """Package initialization."""
@@ -8,4 +8,4 @@
8
8
  __all__ = [
9
9
  'git_utils'
10
10
  ]
11
- __version__ = '0.9.121'
11
+ __version__ = '0.9.123'
@@ -0,0 +1,353 @@
1
+ Metadata-Version: 2.1
2
+ Name: hspylib-clitt
3
+ Version: 0.9.123
4
+ Summary: HsPyLib - CLI Terminal Tools
5
+ Home-page: https://github.com/yorevs/hspylib
6
+ Author: Hugo Saporetti Junior
7
+ Author-email: yorevs@hotmail.com
8
+ License: MIT
9
+ Project-URL: GitHub, https://github.com/yorevs/hspylib
10
+ Project-URL: PyPi, https://pypi.org/project/hspylib-clitt/
11
+ Keywords: cli,clitt,terminal,tui,manager,application,widgets
12
+ Platform: Darwin
13
+ Platform: Linux
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Operating System :: MacOS :: MacOS X
17
+ Classifier: Operating System :: POSIX :: Linux
18
+ Classifier: Operating System :: Unix
19
+ Classifier: Development Status :: 3 - Alpha
20
+ Classifier: Environment :: Console
21
+ Classifier: Natural Language :: English
22
+ Classifier: Topic :: Terminals
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
25
+ Classifier: Intended Audience :: Developers
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ Requires-Dist: hspylib
29
+ Requires-Dist: pyperclip
30
+ Requires-Dist: emoji
31
+ Requires-Dist: urllib3 <2.0.0
32
+
33
+ <img src="https://iili.io/HYBJFA7.png" width="64" height="64" align="right" />
34
+
35
+ # HomeSetup Python Library
36
+ >
37
+ > Because your Python code is not JUST a script !
38
+
39
+ [![PyPi](https://badgen.net/badge/icon/python?icon=pypi&label)](https://pypi.org/project/hspylib)
40
+ [![Gitter](https://badgen.net/badge/icon/gitter?icon=gitter&label)](https://gitter.im/hspylib/community)
41
+ [![Donate](https://badgen.net/badge/paypal/donate/yellow)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J5CDEFLF6M3H4)
42
+ [![License](https://badgen.net/badge/license/MIT/gray)](LICENSE.md)
43
+ [![Release](https://badgen.net/badge/release/v0.9.123/gray)](docs/CHANGELOG.md#unreleased)
44
+ [![build-and-test](https://github.com/yorevs/hspylib/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/yorevs/hspylib/actions/workflows/build-and-test.yml)
45
+
46
+ HsPyLib is not just a Python library; it's a gateway to elevating your programming experience to new heights. Built on
47
+ established principles like **SOLID**, **DRY** (Don't Repeat Yourself), **KISS** (Keep It Simple, Stupid), and **YAGNI**
48
+ (You Ain’t Gonna Need It), HsPyLib offers a wealth of frameworks and features. It empowers you to craft sophisticated
49
+ Python3 applications, adhering to the philosophy that code should not merely be a simple script - it should be a part
50
+ of the 'PYCSNBASS' (Python Code Should Not Be A Simple Script) mindset.
51
+
52
+ > This project is a part of the [HomeSetup](https://github.com/yorevs/homesetup) project.
53
+
54
+ ## Key Features
55
+
56
+ - Seamless installation process.
57
+ - Application manager offering a helpful scaffold for Python applications.
58
+ - Widgets manager for running both 'built-in' and custom Python widgets.
59
+ - Improved TUI (Text User Interface) helpers and input methods to enhance your User Experience with terminal applications.
60
+ - CRUD (Create, Read, Update, Delete) framework aiding with databases, repositories, and services.
61
+ - HTTP request helpers for simplified communication.
62
+ - Support for enabling Properties and AppConfigs using popular extensions like .properties, toml, yml, and more.
63
+ - Code rigorously tested and consistently adhering to Pylint standards.
64
+ - Utilizes the Gradle build system with numerous extensions.
65
+ - Diverse set of demos to facilitate a deeper understanding of the library.
66
+ - AI model integrations (currently supporting OpenAI).
67
+
68
+ > Create beautiful menu-select inputs
69
+
70
+ ```python
71
+ class SelectableItem:
72
+ def __init__(self, name: str, value: str):
73
+ self.name = name
74
+ self.value = value
75
+
76
+ def __str__(self):
77
+ return f"Name: {self.name} Value: {self.value}"
78
+
79
+ def __repr__(self):
80
+ return str(self)
81
+
82
+
83
+ if __name__ == "__main__":
84
+ quantity = 22
85
+ digits = len(str(quantity))
86
+ it = [SelectableItem(f"Item-{n:>0{digits}}", f"Value-{n:>0{digits}}") for n in range(1, quantity)]
87
+ sel = mselect(it)
88
+ print(str(sel))
89
+ ```
90
+
91
+ ![MenuSelect](https://iili.io/HYBFh74.png "MenuSelect")
92
+
93
+ > And create beautiful menu-choose inputs
94
+
95
+ ```python
96
+ class ChooseableItem:
97
+ def __init__(self, name: str, value: str):
98
+ self.name = name
99
+ self.value = value
100
+
101
+ def __str__(self):
102
+ return f"Name: {self.name} Value: {self.value}"
103
+
104
+ def __repr__(self):
105
+ return str(self)
106
+
107
+
108
+ if __name__ == "__main__":
109
+ quantity = 22
110
+ digits = len(str(quantity))
111
+ it = [ChooseableItem(f"Item-{n:>0{digits}}", f"Value-{n:>0{digits}}") for n in range(1, quantity)]
112
+ sel = mchoose(it, [n % 2 == 0 for n in range(1, quantity)])
113
+ print(str(sel))
114
+ ```
115
+
116
+ ![MenuChoose](https://iili.io/HYBFwp2.png "MenuChoose")
117
+
118
+ > And also, create beautiful form inputs
119
+
120
+ ```python
121
+ from clitt.core.tui.minput.input_validator import InputValidator
122
+ from clitt.core.tui.minput.minput import MenuInput, minput
123
+
124
+ if __name__ == "__main__":
125
+ # fmt: off
126
+ form_fields = MenuInput.builder() \
127
+ .field() \
128
+ .label('letters') \
129
+ .validator(InputValidator.letters()) \
130
+ .build() \
131
+ .field() \
132
+ .label('word') \
133
+ .validator(InputValidator.words()) \
134
+ .build() \
135
+ .field() \
136
+ .label('number') \
137
+ .validator(InputValidator.numbers()) \
138
+ .min_max_length(1, 4) \
139
+ .build() \
140
+ .field() \
141
+ .label('masked') \
142
+ .itype('masked') \
143
+ .value('|##::##::## @@') \
144
+ .build() \
145
+ .field() \
146
+ .label('selectable') \
147
+ .itype('select') \
148
+ .value('one|two|three') \
149
+ .build() \
150
+ .field() \
151
+ .label('checkbox') \
152
+ .itype('checkbox') \
153
+ .build() \
154
+ .field() \
155
+ .label('password') \
156
+ .itype('password') \
157
+ .validator(InputValidator.anything()) \
158
+ .min_max_length(4, 8) \
159
+ .build() \
160
+ .field() \
161
+ .label('read-only') \
162
+ .access_type('read-only') \
163
+ .value('READ-ONLY') \
164
+ .build() \
165
+ .build()
166
+ # fmt: on
167
+
168
+ result = minput(form_fields)
169
+ print(result.__dict__ if result else "None")
170
+ ```
171
+
172
+ ![MenuInput](https://iili.io/HYBFVrG.png "MenuInput")
173
+
174
+ > Or even, create nice dashboards:
175
+
176
+ ```python
177
+ if __name__ == "__main__":
178
+ # fmt: off
179
+ dashboard_items = MenuDashBoard.builder() \
180
+ .item() \
181
+ .icon(DashboardIcons.POWER) \
182
+ .tooltip('Do something') \
183
+ .on_trigger(lambda: print('Something')) \
184
+ .build() \
185
+ .item() \
186
+ .icon(DashboardIcons.MOVIE) \
187
+ .tooltip('Another something') \
188
+ .on_trigger(lambda: print('Another')) \
189
+ .build() \
190
+ .item() \
191
+ .icon(DashboardIcons.NOTIFICATION) \
192
+ .tooltip('Notify something') \
193
+ .on_trigger(lambda: print('Notification')) \
194
+ .build() \
195
+ .item() \
196
+ .icon(DashboardIcons.LIST) \
197
+ .tooltip('List everything') \
198
+ .on_trigger(lambda: print('List')) \
199
+ .build() \
200
+ .item() \
201
+ .icon(DashboardIcons.DATABASE) \
202
+ .tooltip('Database console') \
203
+ .on_trigger(lambda: print('Database')) \
204
+ .build() \
205
+ .item() \
206
+ .icon(DashboardIcons.EXIT) \
207
+ .tooltip('Exit application') \
208
+ .on_trigger(lambda: print('Exit')) \
209
+ .build() \
210
+ .build()
211
+ # fmt: on
212
+
213
+ result = mdashboard(dashboard_items)
214
+ ```
215
+
216
+ ![MenuDashboard](https://iili.io/HYBFX2f.png "MenuDashboard")
217
+
218
+ > And even more, create beautiful menus !
219
+
220
+ ```bash
221
+ if __name__ == "__main__":
222
+ # fmt: off
223
+ main_menu = TUIMenuFactory \
224
+ .create_main_menu('TUI Main Menu', tooltip='Test Terminal UI Menus') \
225
+ .with_item('Sub-Menu-1') \
226
+ .with_action("DO IT 1", "Let's do it") \
227
+ .on_trigger(lambda x: print("ACTION 1", x)) \
228
+ .with_view("Just a View 1", "Show the view 1") \
229
+ .on_render("MY BEAUTIFUL VIEW 1") \
230
+ .with_action("Back", "Back to the previous menu") \
231
+ .on_trigger(TUIMenuUi.back) \
232
+ .then() \
233
+ .with_item('Sub-Menu-2') \
234
+ .with_action("DO IT 2", "Let's do it too") \
235
+ .on_trigger(lambda x: print("ACTION 2", x)) \
236
+ .with_view("Just a View 2", "Show the view 2") \
237
+ .on_render("MY BEAUTIFUL VIEW 2") \
238
+ .with_action("Back", "Back to the previous menu") \
239
+ .on_trigger(TUIMenuUi.back) \
240
+ .then() \
241
+ .then() \
242
+ .build()
243
+ # fmt: on
244
+
245
+ TUIMenuUi(main_menu, "TUI Main Menu").execute()
246
+ ```
247
+
248
+ ![Menus](https://iili.io/JAGQJkJ.png "Menus")
249
+
250
+ ## PyPi Modules
251
+
252
+ - [A Pivotal Cloud Foundry](https://pypi.org/project/hspylib-cfman) application tool.
253
+ - [A CLI Terminal](https://pypi.org/project/hspylib-clitt) tools.
254
+ - [Datasource](https://pypi.org/project/hspylib-datasource) framework.
255
+ - [A Firebase](https://pypi.org/project/hspylib-firebase) integration tool.
256
+ - [A PyQt](https://pypi.org/project/hspylib-hqt) application framework.
257
+ - [Core](https://pypi.org/project/hspylib) HomeSetup library.
258
+ - [A Kafka manager](https://pypi.org/project/hspylib-kafman) application tool.
259
+ - [A System Settings](https://pypi.org/project/hspylib-kafman) application tool.
260
+ - [A Vault](https://pypi.org/project/hspylib-vault) application tool.
261
+
262
+ ## Installation
263
+
264
+ ### Requirements
265
+
266
+ #### Python
267
+
268
+ - Python 3.10 and higher
269
+
270
+ #### Operating Systems
271
+
272
+ - Darwin
273
+ + High Sierra and higher
274
+ - Linux
275
+ + Ubuntu 16 and higher
276
+ + CentOS 7 and higher
277
+ + Fedora 31 and higher
278
+
279
+ You may want to install HsPyLib on other OS's and it will probably work, but there are no guarantees that it
280
+ **WILL ACTUALLY WORK**.
281
+
282
+ #### Required software
283
+
284
+ The following software are required:
285
+
286
+ - Git (To clone the github repository)
287
+ - Gradle (To build the HsPyLib project)
288
+
289
+ There are some python dependencies, but they will be automatically downloaded when the build runs.
290
+
291
+ ### PyPi
292
+
293
+ To install HsPyLib from PyPi issue the command:
294
+
295
+ `# python3 -m pip install hspylib`
296
+
297
+ To upgrade HsPyLib use the command:
298
+
299
+ `# python3 -m pip install hspylib --upgrade`
300
+
301
+ Additional modules that can also be installed:
302
+
303
+ - [CLItt](https://pypi.org/project/hspylib-clitt) : `# python3 -m pip install hspylib-clitt` to install HsPyLib CLI terminal tools.
304
+ - [Firebase](https://pypi.org/project/hspylib-firebase) : `# python3 -m pip install hspylib-firebase` to install HsPyLib Firebase application.
305
+ - [Vault](https://pypi.org/project/hspylib-vault) : `# python3 -m pip install hspylib-vault` to install HsPyLib Vault application.
306
+ - [CFMan](https://pypi.org/project/hspylib-cfman) : `# python3 -m pip install hspylib-cfman` to install CloudFoundry manager.
307
+ - [Kafman](https://pypi.org/project/hspylib-kafman) : `# python3 -m pip install hspylib-kafman` to install Kafka manager.
308
+ - [Datasource](https://pypi.org/project/hspylib-datasource) : `# python3 -m pip install hspylib-datasource` to install datasource helpers.
309
+ - [HQT](https://pypi.org/project/hspylib-hqt) : `# python3 -m pip install hspylib-hqt` to install HsPyLib PyQt framework.
310
+
311
+ ### GitHub
312
+
313
+ To clone HsPyLib into your local machine type the command:
314
+
315
+ `# git clone https://github.com/yorevs/hspylib.git`
316
+
317
+ ## Documentation
318
+
319
+ The API documentation can be found [here](docs/api/index.html)
320
+
321
+ ## Support
322
+
323
+ > Your support and contributions are greatly appreciated in helping us improve and enhance HomeSetup. Together, we can
324
+ make it even better!
325
+
326
+ You can support HomeSetup by [donating](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J5CDEFLF6M3H4)
327
+ or contributing code. Feel free to contact me for further details. When making code contributions, please make sure to
328
+ review our [guidelines](docs/CONTRIBUTING.md) and adhere to our [code of conduct](docs/CODE_OF_CONDUCT.md).
329
+
330
+ [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/yorevs)
331
+
332
+ You can also sponsor it by using our [GitHub Sponsors](https://github.com/sponsors/yorevs) page.
333
+
334
+ This project is already supported by:
335
+
336
+ <a href="https://www.jetbrains.com/community/opensource/?utm_campaign=opensource&utm_content=approved&utm_medium=email&utm_source=newsletter&utm_term=jblogo#support">
337
+ <img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png" width="120" height="120">
338
+ </a>
339
+
340
+ Thank you <3 !!
341
+
342
+ ## Known Issues
343
+
344
+ - [In-Progress] We are aware that there is a problems when using python@3.12 and we are already working on a fix.
345
+
346
+ ## Contacts
347
+
348
+ - Documentation: [API](docs/api/index.html)
349
+ - License: [MIT](LICENSE.md)
350
+ - Issue tracker: [HSPyLib-Issues](https://github.com/yorevs/hspylib/issues)
351
+ - Official chat: [HSPyLib](https://gitter.im/hspylib/community)
352
+ - Contact: [yorevs](https://www.reddit.com/user/yorevs)
353
+ - Mailto: [yorevs](mailto:yorevs@hotmail.com)
@@ -1,13 +1,13 @@
1
- clitt/.version,sha256=bFh-kX5Kl2Y3ttCSCpvjQy-mlCB1K8aVAOs33R3Wkmk,8
1
+ clitt/.version,sha256=o-IaDKb62u3JYdgWVpmqDuzA3CixksVYBBySqQ-WNwc,8
2
2
  clitt/__classpath__.py,sha256=_woVRfXoFlEHBbtg-we43FJOrIlvdyumxsUV2IloHhE,884
3
- clitt/__init__.py,sha256=3iVZDsXf6NoPPizabRYffe4Rm3Eb_B7OSo-u3o9hoJA,184
3
+ clitt/__init__.py,sha256=JP3SnYfkuj5bfjTqXfscOjbv3wq7DNUSkISFIjG2k-U,184
4
4
  clitt/__main__.py,sha256=43Ugh79L57yhShIvtVqQwrQvsLy2rOtYgVm6g9Nsz_o,5321
5
5
  clitt/welcome.txt,sha256=z72ySJw-1VQHvWmd8pZ95P6t4zEkIWGbqTRT83P2hJw,169
6
- clitt/addons/__init__.py,sha256=cfc0pyHnLUFHAe1GnlMDRfwjsTt6XQDeffMSgfUmqRo,179
7
- clitt/addons/appman/__init__.py,sha256=AIvtD26KqHEusFEh9zgkKriAVkypU4n52aOpTar9sjs,210
6
+ clitt/addons/__init__.py,sha256=Kb5XEiO8jZbT5QT26Oy8SmFjQAQkQpsxptERdRnMA_U,179
7
+ clitt/addons/appman/__init__.py,sha256=sVFroG4TiZCguXe3otp5OURSTUx8Qub-Klm5Gt-pYAI,210
8
8
  clitt/addons/appman/appman.py,sha256=m3cUZzeNuZtky6U26q5way7xMNcLxKeQEdfpGXzboL8,13154
9
9
  clitt/addons/appman/appman_enums.py,sha256=DL99b1gQXdTF-u0VkyknMQDqROHomzN4J570B1NYbqs,874
10
- clitt/addons/appman/templates/__init__.py,sha256=qTtJshZT9Kt0tiIKDoAx81Vp0v9sY6vFNZP7M8MTV3U,173
10
+ clitt/addons/appman/templates/__init__.py,sha256=3-fC7PgtlXPc-n2cnA7y7uYL-N7e2DvMK8Fmbk0sSYI,173
11
11
  clitt/addons/appman/templates/build.gradle.tpl,sha256=VQKs4r41xPr7P14PtQPt3alYCmNuXaGraaXbKB_FKkM,1817
12
12
  clitt/addons/appman/templates/classpath.py.tpl,sha256=R60uLvVxeJ7nJCXCvav_9LAnDe5VOfJqWO-T1QAlwAc,397
13
13
  clitt/addons/appman/templates/dependencies.hspd.tpl,sha256=bbVNU6XBm5QT28lvH7Bp_4nlXvoD-LwX5kGQ-CPhOEA,764
@@ -20,24 +20,24 @@ clitt/addons/appman/templates/run.sh.tpl,sha256=2xpuHjZP9-7j14dAA2CqPm4G2xtnuenf
20
20
  clitt/addons/appman/templates/test_main.py.tpl,sha256=y5Bo0ku6FP67WjHfYUF4Kt9tdQ67MSlN6LgoF_NUm-U,1241
21
21
  clitt/addons/appman/templates/usage.txt.tpl,sha256=R0e48HCeD7PDbWnX6HGIjz6gr_hBdp-zK6V42U1Aexw,217
22
22
  clitt/addons/appman/templates/widget.py.tpl,sha256=-4q8hYP1Xdx8ttexeHuFnjMH_DoBANEoN9f59jzHDR4,1670
23
- clitt/addons/widman/__init__.py,sha256=5sVtnsZlgiugv5wzvnukA-damYPjMTTy_RCtbN1Sp-Y,223
23
+ clitt/addons/widman/__init__.py,sha256=ruK9XyrkhPm3fsA7zLHWguPzm7465EpzFkHEiJoN9bw,223
24
24
  clitt/addons/widman/widget.py,sha256=mOTpd1O3Cf37Ulz_nKSw9sU_gkE5X6wD28mIupOfVSM,1922
25
25
  clitt/addons/widman/widget_entry.py,sha256=jFvfV2xX_0-Qdj3dDp_UdDtWoy5YkJr0x84X629_iGY,1358
26
26
  clitt/addons/widman/widman.py,sha256=-PGBiWHxK7YJE632DRXisrUumVKES8U_Pemb_7xsFGM,5274
27
- clitt/addons/widman/widgets/__init__.py,sha256=dXEgAXAnJdlsm0ahkXHdXkVQdDds18P3nNUGjnEtoj4,254
27
+ clitt/addons/widman/widgets/__init__.py,sha256=0tEVQc1uBZ7HrbHFT_-bC0ZcMxfebugV0T0SPYeJTo8,254
28
28
  clitt/addons/widman/widgets/widget_free.py,sha256=z_4-1cZG0l_LUEDvtjU5dLbCG2XzqD_Rnw49T45_awc,3995
29
29
  clitt/addons/widman/widgets/widget_punch.py,sha256=L8nIrQGtMsEOr6o3t2-BlSBhca3rB0b_hKuYQrYyeTU,10607
30
30
  clitt/addons/widman/widgets/widget_send_msg.py,sha256=SjK3w36uvsVoOeVs5JiKmlqO9GhQn5dYvIqmbNdkFaQ,11058
31
31
  clitt/addons/widman/widgets/widget_time_calc.py,sha256=kfwwDzp8E-4uE2jt3v_DIZA8RSbK9vQWVOqqTpOvYYo,5037
32
- clitt/core/__init__.py,sha256=YCEFaXrxNI8vveBo_hxR7Uzim-87HVbQww7Ldy295Z8,224
32
+ clitt/core/__init__.py,sha256=Zjbo3sfv8jGYU9YvXuxC8gZrLIkEW1LdNVc-rKRD4o8,224
33
33
  clitt/core/preferences.py,sha256=-A5fewJQY0rOqUIrlNKycdW5rpf60-GniHUE03jNWgY,3142
34
- clitt/core/exception/__init__.py,sha256=7g7tdy8Z9NJTJvTjN-ujn5aek859C0MbpiXKeN_cLSY,176
34
+ clitt/core/exception/__init__.py,sha256=G-G9tYx1R4OiEvp3spTgnktvoHCxUjMx4uZ_-awk3qU,176
35
35
  clitt/core/exception/exceptions.py,sha256=WBY5vDokKkrrdc4UjJZdEhxzdYjtFo-HuAx3EmXwanA,478
36
- clitt/core/icons/__init__.py,sha256=-kshPQMn_UqXXGVr5nSBb77H94LqoAQ0_igPvwMj8eU,189
37
- clitt/core/icons/emojis/__init__.py,sha256=LK3J1qCr3CyrTPJf-24NtUzD4mofGMr7c3U1LWpAjsc,196
36
+ clitt/core/icons/__init__.py,sha256=4ipFGUiC36w2RLIEvRy0qs5DIkSpKNwAoqb9p2kaSsI,189
37
+ clitt/core/icons/emojis/__init__.py,sha256=FWDhghV5_6hYavLnxCOKlRV3JpmjZVEnvcGaAgvW5w8,196
38
38
  clitt/core/icons/emojis/emojis.py,sha256=pNh3lEk-dNZlDS8hReK4FMyZq0Pz9zU1BXT-C2QyNno,1111
39
39
  clitt/core/icons/emojis/face_smiling.py,sha256=rpMozq6ahAh6sw-7xVOUL3-ViIZsquamDrdvvwUtacU,1271
40
- clitt/core/icons/font_awesome/__init__.py,sha256=LtRB2vTJ1LLw4G1QI_SCC_wP85cf3gxH7vwAWd9NE9Y,325
40
+ clitt/core/icons/font_awesome/__init__.py,sha256=-S-1Sgmb9gV1Fw8_tboAc9IBcSTtLG6XkDJHUgxvc1g,325
41
41
  clitt/core/icons/font_awesome/app_icons.py,sha256=6Voo5dDbyeYN8ZLawm6jUQwq62Cfe669bQ1HOtAYB4A,1702
42
42
  clitt/core/icons/font_awesome/awesome.py,sha256=sR7H2U2TQSDf9ZtmRsU5EOef-gYboEmsob1TG3VYRQE,2243
43
43
  clitt/core/icons/font_awesome/dashboard_icons.py,sha256=iaAHme-DBlcvER5-R33w80x5vOOBDvebp332B6ql5zA,3122
@@ -46,34 +46,34 @@ clitt/core/icons/font_awesome/game_icons.py,sha256=veZuoz3Dz7ubzH3hoAoNzD9WLkuSu
46
46
  clitt/core/icons/font_awesome/nav_icons.py,sha256=D75lokoZUHAIH4WLb0Xj0DWvGLoOoXTNKpteQpL4iPk,1183
47
47
  clitt/core/icons/font_awesome/trickplay_icons.py,sha256=NGItIGhqYBamyxNT5kJmqV1jjrD5rXPT-DRsy3jKwCE,1081
48
48
  clitt/core/icons/font_awesome/widget_icons.py,sha256=YO3eMOjAeBszLNkH998G0rMjTuUfJ3t3t3T_KqYOeQc,1026
49
- clitt/core/term/__init__.py,sha256=GvMQtjlm9iqqQ5oY7iuMNSGdSM7j5mCXOtpYGjZ-QmQ,215
49
+ clitt/core/term/__init__.py,sha256=nY-e4mXuHMFdM2xkw-o_OpeFCXQfBN68YytxY06cVWE,215
50
50
  clitt/core/term/commons.py,sha256=_zcX6_Bzo9gnFexik1-ETggMGixgAFS6lPfGWUyLfVs,3125
51
51
  clitt/core/term/cursor.py,sha256=OC3j24mrKsz73lD6zmwec9ICdxIxfpWGBr96pzupmnk,6326
52
52
  clitt/core/term/screen.py,sha256=1lj8iwoko741favNBik9Ue6K-OCe2nrv2mprs_c9YRo,3331
53
53
  clitt/core/term/terminal.py,sha256=NBdant1M4SbwVddA2CNtLt-6gw00-XNgMUSWSX0j5GE,7724
54
- clitt/core/tui/__init__.py,sha256=kHdTuQ86UQvY5KB6EMjhrWuzK-re5SsL0Jt9gI2ujM8,333
54
+ clitt/core/tui/__init__.py,sha256=iN5Coy719CUbLPTr5_PT5n0pkXG2-OqHvvRccuMIKzc,333
55
55
  clitt/core/tui/tui_application.py,sha256=jD2_RbiUAnWtEOC6NndniFziHrhguIHx4i9T1_PuYgo,1653
56
56
  clitt/core/tui/tui_component.py,sha256=qIeGF_Dog6JuKYIaYy4sRDTDz3ai8WHSturYuh5Iy7w,4880
57
57
  clitt/core/tui/tui_preferences.py,sha256=7GbnlhjbSQjzwixbMb4HHX913dpJCPnMaryLdY7TJuI,3110
58
- clitt/core/tui/line_input/__init__.py,sha256=AVB5reOUqYqTsxmjJ5Py0r2HR5i_OlJpicNMFb_du1E,204
59
- clitt/core/tui/line_input/keyboard_input.py,sha256=MX5aBRJBfuFX5BOlonad9vgWnx7qt_5dWP1G9x7llKg,8668
60
- clitt/core/tui/line_input/line_input.py,sha256=_-TiKg0YlKnXDSi4w8rWSv2jDJB5b8-1SoT0ui2tdVA,1144
61
- clitt/core/tui/mchoose/__init__.py,sha256=qsMylj_rQ5i3bVxYREvJb45QncQIqWKBGFJBM5_N7KY,195
58
+ clitt/core/tui/line_input/__init__.py,sha256=MpC-tS_h8V2hr33u1A_GFlce8Zrj2IYPGPuHtiPLsK8,204
59
+ clitt/core/tui/line_input/keyboard_input.py,sha256=PB0waWrfdJjVO83ZB32rH_ald6EfLJhSeKIrEi6U0Fk,10653
60
+ clitt/core/tui/line_input/line_input.py,sha256=L3G1UcZii-kzfBof37B9f4qIkb_yNSipdrTzLAI9ico,1243
61
+ clitt/core/tui/mchoose/__init__.py,sha256=PGpZqU-WEh4Ww46ZhZZVXXG4itiG5Bb5eFJqK5E-Qn0,195
62
62
  clitt/core/tui/mchoose/mchoose.py,sha256=iqfyRYKLAslfFsQuZnra0lcMfx2GjZ8r4KuQrPSzAf0,1284
63
63
  clitt/core/tui/mchoose/menu_choose.py,sha256=4kRvZCFpQxFPskUS7LcpPg4FgneKxnMe8z9DLzRsqMg,7136
64
- clitt/core/tui/mdashboard/__init__.py,sha256=iPJfqh8t2ngIRXgq9VYeMd6ooqguPemzo7e4XVjgJw0,253
64
+ clitt/core/tui/mdashboard/__init__.py,sha256=mp6Tc0QMv9tagy95cbVS2bb1QzoUB87rOXhb2PG0s9Y,253
65
65
  clitt/core/tui/mdashboard/dashboard_builder.py,sha256=RJm_XnrNJX8jE-G_a9dFEa3DDWLNxN2Xnc6HVvQV1FE,1660
66
66
  clitt/core/tui/mdashboard/dashboard_item.py,sha256=AhQm1IAj4RlHhj9AH4CHEIqX4SjrOZsGEUkwqiUs3js,888
67
67
  clitt/core/tui/mdashboard/mdashboard.py,sha256=VWzNw_bQf8sQGRXrIqvNdIxauOmYiZ_ZnX0PTr0i5-M,892
68
68
  clitt/core/tui/mdashboard/menu_dashboard.py,sha256=GxJnq_AeZJmNySoLUX3wSSfPYW3B5ip3tI4zSFNo1KQ,5612
69
- clitt/core/tui/menu/__init__.py,sha256=dwluxdatFjbwKTNrZ9DFG0hxlnLkDvMf-0GhY7RzInw,286
69
+ clitt/core/tui/menu/__init__.py,sha256=I6j-Qt78G9yM_CSmEPG2aYOFxeQpK89i6L5TmAufFyQ,286
70
70
  clitt/core/tui/menu/tui_menu.py,sha256=Yro2ug3MSRWA9mJiqq3Jm2FCRVZI-gc_YyxX0Fc4g4g,3574
71
71
  clitt/core/tui/menu/tui_menu_action.py,sha256=20ZfmIkKKuf_y_hBPUQRx_QPtjNvTxV-3ui9opn74Yo,1537
72
72
  clitt/core/tui/menu/tui_menu_factory.py,sha256=tsQiYJqQdAZjs5aNxlXgwHT3EueSs9mbV4-Ec9HqtRM,4590
73
73
  clitt/core/tui/menu/tui_menu_item.py,sha256=5IcDZ8MSy47WHlpTnDLty2fHjOr13CDvTGWsHU_briE,7442
74
74
  clitt/core/tui/menu/tui_menu_ui.py,sha256=BdebIp3kmycTgrcPyDk20fS1kNQwqed_hQl7TiHx9Z4,3255
75
75
  clitt/core/tui/menu/tui_menu_view.py,sha256=eGoaw_krAR5WQhqYu7fAnmuzz4ouYdWe8wUopBiZE1I,1922
76
- clitt/core/tui/minput/__init__.py,sha256=so70VQj2B0nBchT3msumKR_ntN0BTS_wCu0rA1RYtbE,338
76
+ clitt/core/tui/minput/__init__.py,sha256=lRq8GKgpMNeYyZLqbBld5t0nbAR_2C-04qdtLNsj5Ic,338
77
77
  clitt/core/tui/minput/access_type.py,sha256=xNW-Qq0T4Je9WXG69BiTY2piFKCgAd87djam6zJeQ6Q,638
78
78
  clitt/core/tui/minput/field_builder.py,sha256=TJEoZ2X1RH3uy0zaipL_yFfAy0j7rNU-PORPZvjqAfQ,4373
79
79
  clitt/core/tui/minput/form_builder.py,sha256=XDKnDLz7UeYn9UHYCOrAFwjyR59BWnJ7XQVNdy4gf6w,2867
@@ -83,15 +83,15 @@ clitt/core/tui/minput/input_validator.py,sha256=yLnuDS5at1_COGNhljpeCkiQQpVOS5ws
83
83
  clitt/core/tui/minput/menu_input.py,sha256=KgIrhGCDegNlrcJPO_DqcuZdQJtCI85Ncgkj0Vz0hDo,12574
84
84
  clitt/core/tui/minput/minput.py,sha256=qWG5ykYd5GU_50lANJ7egrCALvxh1aGVnq9JlJKsXdE,1609
85
85
  clitt/core/tui/minput/minput_utils.py,sha256=J9iuX9lbw5RWKoEIkMMkRjfm0RcOpjZfEAQTeizwzMc,5267
86
- clitt/core/tui/mselect/__init__.py,sha256=IyYQJZO9bK2FymJ9VFQuetRp7lLmLxns362-Mn5HkRI,195
86
+ clitt/core/tui/mselect/__init__.py,sha256=6HlTJD-RM6DF4z3f1MWv23bf15K24h0M7LM0ehVM0rU,195
87
87
  clitt/core/tui/mselect/menu_select.py,sha256=BWodSGtjaU-5jBZ8AqEbWGBZ4M71is6GDsWHG3n-yl8,6177
88
88
  clitt/core/tui/mselect/mselect.py,sha256=9O9-OKSNwCnZGYzvXhoLyT-2Ssoyg4x8N6REELdt0P8,1116
89
- clitt/core/tui/table/__init__.py,sha256=Cb_NOFkv0uCJjS3UaWnagSOpuENpFJEsd8keeozQWHU,200
89
+ clitt/core/tui/table/__init__.py,sha256=pNNJ3xJGREZ5FokxfYCOMQ0fx2r4WDR9kdZylodvwZg,200
90
90
  clitt/core/tui/table/table_enums.py,sha256=bTIr5h8dWBUfVJTagdd2cxie6KyPJleTgcaS-t7ioX4,1282
91
91
  clitt/core/tui/table/table_renderer.py,sha256=gzvXQ7GtE1gqsLsGCcUAidv-DnS8uRUm-ksjqkmoMQs,12800
92
- clitt/utils/__init__.py,sha256=H926-8ge00xGoc8DlyIyLRRP6IEHM0lXhkhgdgmWD5s,166
92
+ clitt/utils/__init__.py,sha256=-z-3WQUumgcq38V02qXBjeGVhX7vxt_oWD17fV5-tvo,166
93
93
  clitt/utils/git_utils.py,sha256=B-QZtRpxAXa3Cw3im5qhJTla0LrlWQouMq_-GR8SOHU,2392
94
- hspylib_clitt-0.9.121.dist-info/METADATA,sha256=7X48t2olrUeRPat2rhYmm4npAAx3TX53bd3rwUhWob0,1855
95
- hspylib_clitt-0.9.121.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
96
- hspylib_clitt-0.9.121.dist-info/top_level.txt,sha256=4aPEfxPvYp14dwV0l6cjCd90nbDutt1Yr27ZqCunZLI,11
97
- hspylib_clitt-0.9.121.dist-info/RECORD,,
94
+ hspylib_clitt-0.9.123.dist-info/METADATA,sha256=PT5Sm07m7B-w7JzcfN30y3yLalfUyS3Ael1SQW7TlUI,13043
95
+ hspylib_clitt-0.9.123.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
96
+ hspylib_clitt-0.9.123.dist-info/top_level.txt,sha256=4aPEfxPvYp14dwV0l6cjCd90nbDutt1Yr27ZqCunZLI,11
97
+ hspylib_clitt-0.9.123.dist-info/RECORD,,
@@ -1,42 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: hspylib-clitt
3
- Version: 0.9.121
4
- Summary: HsPyLib - CLI Terminal Tools
5
- Home-page: https://github.com/yorevs/hspylib
6
- Author: Hugo Saporetti Junior
7
- Author-email: yorevs@hotmail.com
8
- License: MIT
9
- Project-URL: GitHub, https://github.com/yorevs/hspylib
10
- Project-URL: PyPi, https://pypi.org/project/hspylib-clitt/
11
- Keywords: cli,clitt,terminal,tui,manager,application,widgets
12
- Platform: Darwin
13
- Platform: Linux
14
- Classifier: License :: OSI Approved :: MIT License
15
- Classifier: Programming Language :: Python :: 3.10
16
- Classifier: Operating System :: MacOS :: MacOS X
17
- Classifier: Operating System :: POSIX :: Linux
18
- Classifier: Operating System :: Unix
19
- Classifier: Development Status :: 3 - Alpha
20
- Classifier: Environment :: Console
21
- Classifier: Natural Language :: English
22
- Classifier: Topic :: Terminals
23
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
- Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
25
- Classifier: Intended Audience :: Developers
26
- Requires-Python: >=3.10
27
- Description-Content-Type: text/markdown
28
- Requires-Dist: hspylib
29
- Requires-Dist: pyperclip
30
- Requires-Dist: emoji
31
- Requires-Dist: urllib3 <2.0.0
32
-
33
- # HsPyLib - CLI Terminal Tools
34
-
35
- ## Create professional CLI applications
36
-
37
- [![License](https://badgen.net/badge/license/MIT/gray)](LICENSE.md)
38
- [![Release](https://badgen.net/badge/release/v0.9.121/gray)](CHANGELOG.md#unreleased)
39
- [![PyPi](https://badgen.net/badge/icon/python?icon=pypi&label)](https://pypi.org/project/hspylib-clitt)
40
- [![GitHub](https://badgen.net/badge/icon/github?icon=github&label)](https://github.com/yorevs/hspylib)
41
- [![Gitter](https://badgen.net/badge/icon/gitter?icon=gitter&label)](https://gitter.im/hspylib/community)
42
- [![Donate](https://badgen.net/badge/paypal/donate/yellow)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=J5CDEFLF6M3H4)