hspylib-clitt 0.9.119__py3-none-any.whl → 0.9.120__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.
- build/lib/build/lib/build/lib/clitt/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/addons/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/term/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +22 -22
- build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +3 -3
- build/lib/build/lib/build/lib/clitt/utils/__init__.py +3 -3
- build/lib/build/lib/clitt/__init__.py +2 -2
- build/lib/build/lib/clitt/addons/__init__.py +2 -2
- build/lib/build/lib/clitt/addons/appman/__init__.py +2 -2
- build/lib/build/lib/clitt/addons/appman/templates/__init__.py +2 -2
- build/lib/build/lib/clitt/addons/widman/__init__.py +2 -2
- build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +2 -2
- build/lib/build/lib/clitt/core/__init__.py +2 -2
- build/lib/build/lib/clitt/core/exception/__init__.py +2 -2
- build/lib/build/lib/clitt/core/icons/__init__.py +2 -2
- build/lib/build/lib/clitt/core/icons/emojis/__init__.py +2 -2
- build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +2 -2
- build/lib/build/lib/clitt/core/term/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/line_input/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +22 -22
- build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/menu/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/minput/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/mselect/__init__.py +2 -2
- build/lib/build/lib/clitt/core/tui/table/__init__.py +2 -2
- build/lib/build/lib/clitt/utils/__init__.py +2 -2
- build/lib/clitt/__init__.py +2 -2
- build/lib/clitt/addons/__init__.py +2 -2
- build/lib/clitt/addons/appman/__init__.py +2 -2
- build/lib/clitt/addons/appman/templates/__init__.py +2 -2
- build/lib/clitt/addons/widman/__init__.py +2 -2
- build/lib/clitt/addons/widman/widgets/__init__.py +2 -2
- build/lib/clitt/core/__init__.py +2 -2
- build/lib/clitt/core/exception/__init__.py +2 -2
- build/lib/clitt/core/icons/__init__.py +2 -2
- build/lib/clitt/core/icons/emojis/__init__.py +2 -2
- build/lib/clitt/core/icons/font_awesome/__init__.py +2 -2
- build/lib/clitt/core/term/__init__.py +2 -2
- build/lib/clitt/core/tui/__init__.py +2 -2
- build/lib/clitt/core/tui/line_input/__init__.py +2 -2
- build/lib/clitt/core/tui/line_input/keyboard_input.py +22 -22
- build/lib/clitt/core/tui/mchoose/__init__.py +2 -2
- build/lib/clitt/core/tui/mdashboard/__init__.py +2 -2
- build/lib/clitt/core/tui/menu/__init__.py +2 -2
- build/lib/clitt/core/tui/minput/__init__.py +2 -2
- build/lib/clitt/core/tui/mselect/__init__.py +2 -2
- build/lib/clitt/core/tui/table/__init__.py +2 -2
- build/lib/clitt/utils/__init__.py +2 -2
- clitt/.version +1 -1
- clitt/__init__.py +2 -2
- clitt/addons/__init__.py +2 -2
- clitt/addons/appman/__init__.py +2 -2
- clitt/addons/appman/templates/__init__.py +2 -2
- clitt/addons/widman/__init__.py +2 -2
- clitt/addons/widman/widgets/__init__.py +2 -2
- clitt/core/__init__.py +2 -2
- clitt/core/exception/__init__.py +2 -2
- clitt/core/icons/__init__.py +2 -2
- clitt/core/icons/emojis/__init__.py +2 -2
- clitt/core/icons/font_awesome/__init__.py +2 -2
- clitt/core/term/__init__.py +2 -2
- clitt/core/tui/__init__.py +2 -2
- clitt/core/tui/line_input/__init__.py +2 -2
- clitt/core/tui/line_input/keyboard_input.py +22 -22
- clitt/core/tui/mchoose/__init__.py +2 -2
- clitt/core/tui/mdashboard/__init__.py +2 -2
- clitt/core/tui/menu/__init__.py +2 -2
- clitt/core/tui/minput/__init__.py +2 -2
- clitt/core/tui/mselect/__init__.py +2 -2
- clitt/core/tui/table/__init__.py +2 -2
- clitt/utils/__init__.py +2 -2
- {hspylib_clitt-0.9.119.dist-info → hspylib_clitt-0.9.120.dist-info}/METADATA +2 -2
- {hspylib_clitt-0.9.119.dist-info → hspylib_clitt-0.9.120.dist-info}/RECORD +93 -172
- build/lib/build/lib/build/lib/build/lib/clitt/__classpath__.py +0 -28
- build/lib/build/lib/build/lib/build/lib/clitt/__init__.py +0 -13
- build/lib/build/lib/build/lib/build/lib/clitt/__main__.py +0 -139
- build/lib/build/lib/build/lib/build/lib/clitt/addons/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/__init__.py +0 -13
- build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman.py +0 -305
- build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/appman_enums.py +0 -39
- build/lib/build/lib/build/lib/build/lib/clitt/addons/appman/templates/__init__.py +0 -11
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/__init__.py +0 -14
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget.py +0 -70
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widget_entry.py +0 -54
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/__init__.py +0 -14
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_free.py +0 -110
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_punch.py +0 -246
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_send_msg.py +0 -272
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widgets/widget_time_calc.py +0 -146
- build/lib/build/lib/build/lib/build/lib/clitt/addons/widman/widman.py +0 -123
- build/lib/build/lib/build/lib/build/lib/clitt/core/__init__.py +0 -15
- build/lib/build/lib/build/lib/build/lib/clitt/core/exception/__init__.py +0 -11
- build/lib/build/lib/build/lib/build/lib/clitt/core/exception/exceptions.py +0 -19
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/emojis.py +0 -41
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/emojis/face_smiling.py +0 -40
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/__init__.py +0 -18
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/app_icons.py +0 -55
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/awesome.py +0 -76
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/dashboard_icons.py +0 -93
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/form_icons.py +0 -69
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/game_icons.py +0 -59
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/nav_icons.py +0 -42
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/trickplay_icons.py +0 -39
- build/lib/build/lib/build/lib/build/lib/clitt/core/icons/font_awesome/widget_icons.py +0 -37
- build/lib/build/lib/build/lib/build/lib/clitt/core/preferences.py +0 -87
- build/lib/build/lib/build/lib/build/lib/clitt/core/term/__init__.py +0 -14
- build/lib/build/lib/build/lib/build/lib/clitt/core/term/commons.py +0 -106
- build/lib/build/lib/build/lib/build/lib/clitt/core/term/cursor.py +0 -174
- build/lib/build/lib/build/lib/build/lib/clitt/core/term/screen.py +0 -106
- build/lib/build/lib/build/lib/build/lib/clitt/core/term/terminal.py +0 -202
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/__init__.py +0 -20
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/keyboard_input.py +0 -229
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/line_input/line_input.py +0 -31
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/mchoose.py +0 -43
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mchoose/menu_choose.py +0 -192
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/__init__.py +0 -14
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_builder.py +0 -54
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/dashboard_item.py +0 -31
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/mdashboard.py +0 -26
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mdashboard/menu_dashboard.py +0 -148
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/__init__.py +0 -16
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu.py +0 -111
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_action.py +0 -47
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_factory.py +0 -117
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_item.py +0 -196
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_ui.py +0 -98
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/menu/tui_menu_view.py +0 -57
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/__init__.py +0 -19
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/access_type.py +0 -26
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/field_builder.py +0 -117
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_builder.py +0 -72
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/form_field.py +0 -180
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_type.py +0 -30
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/input_validator.py +0 -98
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/menu_input.py +0 -292
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput.py +0 -44
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/minput/minput_utils.py +0 -156
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/menu_select.py +0 -170
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/mselect/mselect.py +0 -36
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/__init__.py +0 -12
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_enums.py +0 -47
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/table/table_renderer.py +0 -339
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_application.py +0 -52
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_component.py +0 -154
- build/lib/build/lib/build/lib/build/lib/clitt/core/tui/tui_preferences.py +0 -103
- build/lib/build/lib/build/lib/build/lib/clitt/utils/__init__.py +0 -11
- build/lib/build/lib/build/lib/build/lib/clitt/utils/git_utils.py +0 -66
- {hspylib_clitt-0.9.119.dist-info → hspylib_clitt-0.9.120.dist-info}/WHEEL +0 -0
- {hspylib_clitt-0.9.119.dist-info → hspylib_clitt-0.9.120.dist-info}/top_level.txt +0 -0
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.addons.widman.widgets
|
|
7
|
-
@file: widget_time_calc.py
|
|
8
|
-
@created: Thu, 20 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
from clitt.addons.widman.widget import Widget
|
|
17
|
-
from clitt.core.icons.font_awesome.widget_icons import WidgetIcons
|
|
18
|
-
from clitt.core.tui.minput.minput import MenuInput, minput
|
|
19
|
-
from hspylib.core.exception.exceptions import WidgetExecutionError
|
|
20
|
-
from hspylib.core.tools.commons import sysout
|
|
21
|
-
from hspylib.modules.application.exit_status import ExitStatus
|
|
22
|
-
from hspylib.modules.application.version import Version
|
|
23
|
-
from typing import Optional, Tuple
|
|
24
|
-
|
|
25
|
-
import math
|
|
26
|
-
import re
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class WidgetTimeCalc(Widget):
|
|
30
|
-
"""HsPyLib Widget to calculate time based operations."""
|
|
31
|
-
|
|
32
|
-
# fmt: off
|
|
33
|
-
WIDGET_ICON = WidgetIcons.CLOCK
|
|
34
|
-
WIDGET_NAME = "TimeCalc"
|
|
35
|
-
VERSION = Version(0, 1, 0)
|
|
36
|
-
TOOLTIP = "Calculate time based operations."
|
|
37
|
-
USAGE = "Usage: TimeCalc [+d|++decimal] <HH1:MM1[:SS1]> <+|-> <HH2:MM2[:SS2]>"
|
|
38
|
-
# fmt: on
|
|
39
|
-
|
|
40
|
-
@staticmethod
|
|
41
|
-
def to_decimal(time_raw: int = 0) -> int:
|
|
42
|
-
"""Convert a raw time into decimal.
|
|
43
|
-
:param time_raw the raw time to be converted.
|
|
44
|
-
"""
|
|
45
|
-
return int(round(((time_raw / 60.00) * 100.00)))
|
|
46
|
-
|
|
47
|
-
@staticmethod
|
|
48
|
-
def calc_time(*args) -> Tuple[int, int, int]:
|
|
49
|
-
"""Calculate the time resulted from the specified operations.
|
|
50
|
-
:param args the widget arguments
|
|
51
|
-
"""
|
|
52
|
-
op, total_seconds = "+", 0
|
|
53
|
-
for tm in args:
|
|
54
|
-
if not tm:
|
|
55
|
-
continue
|
|
56
|
-
if re.match(r"[+-]", tm):
|
|
57
|
-
op = tm
|
|
58
|
-
elif re.match(r"^([0-9]{1,2}:?)+", tm):
|
|
59
|
-
try:
|
|
60
|
-
parts = [int(math.floor(float(s))) for s in tm.split(":")]
|
|
61
|
-
except ValueError as err:
|
|
62
|
-
raise WidgetExecutionError(f"Unable to extract time parts from '{tm}'") from err
|
|
63
|
-
f_hours = parts[0] if len(parts) > 0 else 0
|
|
64
|
-
f_minutes = parts[1] if len(parts) > 1 else 0
|
|
65
|
-
f_secs = parts[2] if len(parts) > 2 else 0
|
|
66
|
-
tm_amount = (f_hours * 60 + f_minutes) * 60 + f_secs
|
|
67
|
-
if op == "+":
|
|
68
|
-
total_seconds += tm_amount
|
|
69
|
-
elif op == "-":
|
|
70
|
-
total_seconds -= tm_amount
|
|
71
|
-
else:
|
|
72
|
-
raise WidgetExecutionError(f"Invalid time input: '{tm}'")
|
|
73
|
-
total_seconds, seconds = divmod(total_seconds, 60)
|
|
74
|
-
hours, minutes = divmod(abs(total_seconds), 60)
|
|
75
|
-
|
|
76
|
-
return hours if total_seconds > 0 else -1 * hours, minutes, seconds
|
|
77
|
-
|
|
78
|
-
def __init__(self) -> None:
|
|
79
|
-
super().__init__(self.WIDGET_ICON, self.WIDGET_NAME, self.TOOLTIP, self.USAGE, self.VERSION)
|
|
80
|
-
|
|
81
|
-
self._decimal = False
|
|
82
|
-
self._args = None
|
|
83
|
-
|
|
84
|
-
def _parse_args(self, *args) -> Optional[ExitStatus]:
|
|
85
|
-
"""Parse command line arguments.
|
|
86
|
-
:param args the widget arguments
|
|
87
|
-
"""
|
|
88
|
-
|
|
89
|
-
if not args and not self._read_args():
|
|
90
|
-
return ExitStatus.ABORTED
|
|
91
|
-
if args and any(a in args for a in ["+h", "++help"]):
|
|
92
|
-
sysout(self.usage())
|
|
93
|
-
return ExitStatus.SUCCESS
|
|
94
|
-
if args and any(a in args for a in ["+v", "++version"]):
|
|
95
|
-
sysout(self.version())
|
|
96
|
-
return ExitStatus.SUCCESS
|
|
97
|
-
if args and any(a in args for a in ["+d", "++decimal"]):
|
|
98
|
-
self._decimal = True
|
|
99
|
-
args = args[1:]
|
|
100
|
-
if not self._args:
|
|
101
|
-
self._args = args
|
|
102
|
-
|
|
103
|
-
return None
|
|
104
|
-
|
|
105
|
-
def execute(self, *args) -> ExitStatus:
|
|
106
|
-
ret_val = self._parse_args(*args)
|
|
107
|
-
|
|
108
|
-
if ret_val is not None:
|
|
109
|
-
return ret_val
|
|
110
|
-
|
|
111
|
-
hours, minutes, seconds = self.calc_time(*self._args)
|
|
112
|
-
|
|
113
|
-
if self._decimal:
|
|
114
|
-
print(f"{hours:02d}.{self.to_decimal(minutes):02d}.{self.to_decimal(seconds):02d}")
|
|
115
|
-
else:
|
|
116
|
-
print(f"{hours:02d}:{minutes:02d}:{seconds:02d}")
|
|
117
|
-
|
|
118
|
-
return ExitStatus.SUCCESS
|
|
119
|
-
|
|
120
|
-
def _read_args(self) -> bool:
|
|
121
|
-
"""When no input is provided (e.g:. when executed from dashboard). Prompt the user for the info."""
|
|
122
|
-
# fmt: off
|
|
123
|
-
form_fields = MenuInput.builder() \
|
|
124
|
-
.field() \
|
|
125
|
-
.label('Time 1') \
|
|
126
|
-
.itype('masked') \
|
|
127
|
-
.value('|##:##:##') \
|
|
128
|
-
.build() \
|
|
129
|
-
.field() \
|
|
130
|
-
.label('Operation') \
|
|
131
|
-
.itype('select') \
|
|
132
|
-
.value('+|-') \
|
|
133
|
-
.build() \
|
|
134
|
-
.field() \
|
|
135
|
-
.label('Time 2') \
|
|
136
|
-
.itype('masked') \
|
|
137
|
-
.value('|##:##:##') \
|
|
138
|
-
.build() \
|
|
139
|
-
.build()
|
|
140
|
-
# fmt: on
|
|
141
|
-
|
|
142
|
-
result = minput(form_fields)
|
|
143
|
-
self._args = result.values if result else None
|
|
144
|
-
sysout("%HOM%%ED2%%MOD(0)%", end="")
|
|
145
|
-
|
|
146
|
-
return bool(result)
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.addons.widman
|
|
7
|
-
@file: widman.py
|
|
8
|
-
@created: Thu, 20 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
from clitt.addons.widman.widget import Widget
|
|
16
|
-
from clitt.addons.widman.widget_entry import WidgetEntry
|
|
17
|
-
from clitt.core.tui.mdashboard.dashboard_item import DashboardItem
|
|
18
|
-
from clitt.core.tui.mdashboard.mdashboard import mdashboard
|
|
19
|
-
from hspylib.core.exception.exceptions import WidgetExecutionError, WidgetNotFoundError
|
|
20
|
-
from hspylib.core.metaclass.singleton import Singleton
|
|
21
|
-
from hspylib.core.preconditions import check_state
|
|
22
|
-
from hspylib.core.tools.commons import get_path
|
|
23
|
-
from hspylib.core.tools.text_tools import camelcase
|
|
24
|
-
from hspylib.modules.application.application import Application
|
|
25
|
-
from hspylib.modules.application.exit_status import ExitStatus
|
|
26
|
-
|
|
27
|
-
import atexit
|
|
28
|
-
import os
|
|
29
|
-
import sys
|
|
30
|
-
|
|
31
|
-
HERE = get_path(__file__)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class WidgetManager(metaclass=Singleton):
|
|
35
|
-
"""HsPyLib widget manager that handles HsPyLib widgets."""
|
|
36
|
-
|
|
37
|
-
WIDGETS_PATH = HERE / "widgets"
|
|
38
|
-
|
|
39
|
-
@staticmethod
|
|
40
|
-
def _name_matches(expected_name: str, provided_name: str) -> bool:
|
|
41
|
-
"""Check if two names matches using defined naming rules.
|
|
42
|
-
:param expected_name the expected widget name.
|
|
43
|
-
:param provided_name the provided widget name (read from file).
|
|
44
|
-
"""
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
expected_name.lower() == provided_name.lower()
|
|
48
|
-
or expected_name == provided_name.capitalize()
|
|
49
|
-
or expected_name == camelcase(provided_name, capitalized=True)
|
|
50
|
-
or expected_name.lower() == provided_name.lower().replace("_", "")
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
def __init__(self, parent_app: Application):
|
|
54
|
-
self._parent_app = parent_app
|
|
55
|
-
self._widgets = []
|
|
56
|
-
self._lookup_paths = os.environ.get("HHS_WIDGETS_PATH", "").split(":")
|
|
57
|
-
self._lookup_paths.insert(0, str(WidgetManager.WIDGETS_PATH))
|
|
58
|
-
list(map(sys.path.append, self._lookup_paths))
|
|
59
|
-
check_state(self._search_widgets() > 0, "Unable to find any widgets from: {}", self._lookup_paths)
|
|
60
|
-
|
|
61
|
-
def execute(self, widget_name: str, *widget_args) -> None:
|
|
62
|
-
"""Execute the specified widget.
|
|
63
|
-
:param widget_name the widget name.
|
|
64
|
-
:param widget_args the arguments to be provided to the widget.
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
widget = self._import_widget(camelcase(widget_name, capitalized=True))
|
|
68
|
-
try:
|
|
69
|
-
atexit.register(widget.cleanup)
|
|
70
|
-
exit_code = widget.execute(*widget_args)
|
|
71
|
-
if exit_code in [ExitStatus.ERROR, ExitStatus.FAILED]:
|
|
72
|
-
raise WidgetExecutionError(f"Widget '{widget_name}' failed to execute. exit_code={exit_code}")
|
|
73
|
-
except Exception as err:
|
|
74
|
-
raise WidgetExecutionError(f"Unable to execute widget '{widget_name}' -> {err}") from err
|
|
75
|
-
|
|
76
|
-
def dashboard(self) -> None:
|
|
77
|
-
"""Display all available widgets from the widget lookup paths on a dashboard."""
|
|
78
|
-
|
|
79
|
-
items = []
|
|
80
|
-
try:
|
|
81
|
-
for widget_entry in self._widgets:
|
|
82
|
-
widget = self._import_widget(widget_entry.name)
|
|
83
|
-
item = DashboardItem(
|
|
84
|
-
widget.icon(), f"{widget.name()} v{widget.version()}: {widget.tooltip()}", widget.execute
|
|
85
|
-
)
|
|
86
|
-
items.append(item)
|
|
87
|
-
check_state(len(items) > 0, "No widgets found from: {}", str(self._lookup_paths))
|
|
88
|
-
mdashboard(items, "Please select a widget to execute")
|
|
89
|
-
except Exception as err:
|
|
90
|
-
raise WidgetExecutionError(f"Failed to execute widget :: {str(err)}") from err
|
|
91
|
-
|
|
92
|
-
# pylint: disable=cell-var-from-loop
|
|
93
|
-
def _search_widgets(self) -> int:
|
|
94
|
-
"""Search and load all widgets from the widget lookup paths."""
|
|
95
|
-
|
|
96
|
-
for path in self._lookup_paths:
|
|
97
|
-
for root, _, files in os.walk(path):
|
|
98
|
-
filtered = list(filter(lambda p: p.startswith(WidgetEntry.MODULE_PREFIX) and p.endswith("py"), files))
|
|
99
|
-
widgets = list(map(lambda w: WidgetEntry(w, f"{root}/{w}"), filtered))
|
|
100
|
-
self._widgets.extend(widgets)
|
|
101
|
-
|
|
102
|
-
return len(self._widgets)
|
|
103
|
-
|
|
104
|
-
def _import_widget(self, widget_name: str) -> Widget:
|
|
105
|
-
"""Find, import and return a widget specified by the widget name.
|
|
106
|
-
:param widget_name the widget name.
|
|
107
|
-
"""
|
|
108
|
-
widget_entry = next((w for w in self._widgets if self._name_matches(widget_name, w.name)), None)
|
|
109
|
-
if not widget_entry:
|
|
110
|
-
raise WidgetNotFoundError(
|
|
111
|
-
f"Widget '{widget_name}' was not found on widget lookup paths: {str(self._lookup_paths)}"
|
|
112
|
-
)
|
|
113
|
-
try:
|
|
114
|
-
widget_module = __import__(widget_entry.module)
|
|
115
|
-
except ModuleNotFoundError as err:
|
|
116
|
-
raise WidgetNotFoundError(
|
|
117
|
-
f"Widget '{widget_name}' was not found on widget lookup paths: {str(self._lookup_paths)}"
|
|
118
|
-
) from err
|
|
119
|
-
widget_clazz = getattr(widget_module, widget_entry.clazz)
|
|
120
|
-
widget = widget_clazz()
|
|
121
|
-
check_state(isinstance(widget, Widget), 'All widgets must inherit from "clitt.addons.widman.Widget"')
|
|
122
|
-
|
|
123
|
-
return widget
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# _*_ coding: utf-8 _*_
|
|
2
|
-
#
|
|
3
|
-
# hspylib-clitt v0.9.119
|
|
4
|
-
#
|
|
5
|
-
# Package: main.build.lib.build.lib.build.lib.build.lib.clitt.core
|
|
6
|
-
"""Package initialization."""
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
'exception',
|
|
10
|
-
'icons',
|
|
11
|
-
'preferences',
|
|
12
|
-
'term',
|
|
13
|
-
'tui'
|
|
14
|
-
]
|
|
15
|
-
__version__ = '0.9.119'
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib
|
|
6
|
-
@package: clitt.core.exceptions
|
|
7
|
-
@file: exceptions.py
|
|
8
|
-
@created: Fri, 7 Jul 2023
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class NotATerminalError(NotImplementedError):
|
|
18
|
-
"""Raised when a TTY terminal is required"""
|
|
19
|
-
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.core.icons.emojis
|
|
7
|
-
@file: emojis.py
|
|
8
|
-
@created: Tue, 4 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
from emoji.core import emojize
|
|
17
|
-
from hspylib.core.enums.enumeration import Enumeration
|
|
18
|
-
from hspylib.core.tools.commons import sysout
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class Emoji(Enumeration):
|
|
22
|
-
"""
|
|
23
|
-
Emoji codes
|
|
24
|
-
Full list of emojis can be found here:
|
|
25
|
-
- https://unicode.org/emoji/charts/emoji-list.html
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
@staticmethod
|
|
29
|
-
def emj_print(emoji_str: str, end: str = "") -> None:
|
|
30
|
-
"""Print an emoji
|
|
31
|
-
:param emoji_str the emoji to be printed.
|
|
32
|
-
:param end string appended after the last value, default a newline.
|
|
33
|
-
"""
|
|
34
|
-
sysout(f"{emojize(emoji_str)} ", end=end)
|
|
35
|
-
|
|
36
|
-
def __str__(self) -> str:
|
|
37
|
-
return str(self.value)
|
|
38
|
-
|
|
39
|
-
@property
|
|
40
|
-
def placeholder(self) -> str:
|
|
41
|
-
return f":{self.name}:"
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.core.icons.emojis
|
|
7
|
-
@file: face_smiling.py
|
|
8
|
-
@created: Tue, 4 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
from clitt.core.icons.emojis.emojis import Emoji
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class FaceSmiling(Emoji):
|
|
19
|
-
"""
|
|
20
|
-
Face smiling emojis.
|
|
21
|
-
Codes can be found here:
|
|
22
|
-
- https://unicode.org/emoji/charts/emoji-list.html#face-smiling
|
|
23
|
-
"""
|
|
24
|
-
|
|
25
|
-
# fmt: off
|
|
26
|
-
_CUSTOM = ''
|
|
27
|
-
DEFAULT = '\U0001F600' # 😀
|
|
28
|
-
BEAMING = '\U0001F601' # 😁
|
|
29
|
-
TEARS_OF_JOY = '\U0001F602' # 😂
|
|
30
|
-
BIG_EYES = '\U0001F603' # 😃
|
|
31
|
-
SMILING_EYES = '\U0001F604' # 😄
|
|
32
|
-
SWEAT = '\U0001F605' # 😅
|
|
33
|
-
SQUINTING = '\U0001F606' # 😆
|
|
34
|
-
HALO = '\U0001F607' # 😇
|
|
35
|
-
WINKING = '\U0001F609' # 😉
|
|
36
|
-
BLUSHING = '\U0001F60A' # 😊
|
|
37
|
-
SLIGHTLY = '\U0001F642' # 🙂
|
|
38
|
-
UPSIDE_DOWN = '\U0001F643' # 🙃
|
|
39
|
-
ROFL = '\U0001F923' # 🤣
|
|
40
|
-
# fmt: on
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# _*_ coding: utf-8 _*_
|
|
2
|
-
#
|
|
3
|
-
# hspylib-clitt v0.9.119
|
|
4
|
-
#
|
|
5
|
-
# Package: main.build.lib.build.lib.build.lib.build.lib.clitt.core.icons.font_awesome
|
|
6
|
-
"""Package initialization."""
|
|
7
|
-
|
|
8
|
-
__all__ = [
|
|
9
|
-
'app_icons',
|
|
10
|
-
'awesome',
|
|
11
|
-
'dashboard_icons',
|
|
12
|
-
'form_icons',
|
|
13
|
-
'game_icons',
|
|
14
|
-
'nav_icons',
|
|
15
|
-
'trickplay_icons',
|
|
16
|
-
'widget_icons'
|
|
17
|
-
]
|
|
18
|
-
__version__ = '0.9.119'
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.core.icons.font_awesome
|
|
7
|
-
@file: app_icons.py
|
|
8
|
-
@created: Tue, 4 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
from clitt.core.icons.font_awesome.awesome import Awesome
|
|
16
|
-
from enum import auto
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class AppIcons(Awesome):
|
|
20
|
-
"""
|
|
21
|
-
Application icons.
|
|
22
|
-
Codes can be found here:
|
|
23
|
-
- https://fontawesome.com/cheatsheet?from=io
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
# fmt: off
|
|
27
|
-
_CUSTOM = auto()
|
|
28
|
-
AMAZON = '\uF270' #
|
|
29
|
-
APPLE = '\uF179' #
|
|
30
|
-
AWS = '\uF375' #
|
|
31
|
-
CPLUSPLUS = '\uF38C' #
|
|
32
|
-
DOCKER = '\uF308' #
|
|
33
|
-
DROPBOX = '\uF16B' #
|
|
34
|
-
GIT = '\uF813' #
|
|
35
|
-
GITHUB = '\uF408' #
|
|
36
|
-
GOOGLE = '\uF1A0' #
|
|
37
|
-
GOOGLE_DRIVE = '\uF3AA' #
|
|
38
|
-
FACEBOOK = '\uF082' #
|
|
39
|
-
FIREBASE = '\uF1D0' #
|
|
40
|
-
IE = '\uF7FF' #
|
|
41
|
-
INSTAGRAM = '\uF16D' #
|
|
42
|
-
JAVA = '\uF4E4' #
|
|
43
|
-
LINKED_IN = '\uF08C' #
|
|
44
|
-
LINUX = '\uF31A' #
|
|
45
|
-
PAYPAL = '\uF1ED' #
|
|
46
|
-
PYTHON = '\uF3E2' #
|
|
47
|
-
STACK_OVERFLOW = '\uF16C' #
|
|
48
|
-
TWITTER = '\uF081' #
|
|
49
|
-
UBUNTU = '\uF31B' #
|
|
50
|
-
VS_CODE = '\uF3AB' #
|
|
51
|
-
YOUTUBE = '\uF16A' #
|
|
52
|
-
WHATSAPP = '\uFAA2' # 甆
|
|
53
|
-
WINDOWS = '\uF17A' #
|
|
54
|
-
ALPINE = '\uF7F4' #
|
|
55
|
-
# fmt: on
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.core.icons.font_awesome
|
|
7
|
-
@file: awesome.py
|
|
8
|
-
@created: Tue, 4 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
from hspylib.core.enums.enumeration import Enumeration
|
|
17
|
-
from hspylib.core.tools.commons import sysout
|
|
18
|
-
from typing import Union
|
|
19
|
-
|
|
20
|
-
import re
|
|
21
|
-
import struct
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class Awesome(Enumeration):
|
|
25
|
-
"""
|
|
26
|
-
Font awesome codes
|
|
27
|
-
Full list of font awesome icons can be found here:
|
|
28
|
-
- https://fontawesome.com/cheatsheet?from=io
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
@classmethod
|
|
32
|
-
def no_icon(cls) -> "Awesome":
|
|
33
|
-
"""No awesome icon specified."""
|
|
34
|
-
|
|
35
|
-
def _str(self) -> str:
|
|
36
|
-
return " "
|
|
37
|
-
|
|
38
|
-
def _len(self) -> int:
|
|
39
|
-
return 1
|
|
40
|
-
|
|
41
|
-
def _fmt(self, fmt) -> str:
|
|
42
|
-
return " "
|
|
43
|
-
|
|
44
|
-
no_icon_cls = type("NoIcon", (object,), {"name": "NO_ICON", "value": ""})
|
|
45
|
-
setattr(no_icon_cls, "__str__", _str)
|
|
46
|
-
setattr(no_icon_cls, "__len__", _len)
|
|
47
|
-
setattr(no_icon_cls, "__format__", _fmt)
|
|
48
|
-
return no_icon_cls()
|
|
49
|
-
|
|
50
|
-
@staticmethod
|
|
51
|
-
def print_unicode(uni_code: Union[str, int], end: str = "") -> None:
|
|
52
|
-
"""Print the specified unicode character.
|
|
53
|
-
:param uni_code: the unicode to be printed.
|
|
54
|
-
:param end string appended after the last value, default a newline.
|
|
55
|
-
"""
|
|
56
|
-
if isinstance(uni_code, str) and re.match(r"^[a-fA-F0-9]{1,4}$", uni_code):
|
|
57
|
-
hex_val = bytes.decode(struct.pack("!I", int(uni_code.zfill(4), 16)), "utf_32_be")
|
|
58
|
-
sysout(f"{hex_val:2s}", end=end)
|
|
59
|
-
elif isinstance(uni_code, int):
|
|
60
|
-
hex_val = bytes.decode(struct.pack("!I", uni_code), "utf_32_be")
|
|
61
|
-
sysout(f"{hex_val:2s}", end=end)
|
|
62
|
-
else:
|
|
63
|
-
raise TypeError(f"Invalid unicode value: {uni_code}")
|
|
64
|
-
|
|
65
|
-
def __str__(self) -> str:
|
|
66
|
-
return str(self.value)
|
|
67
|
-
|
|
68
|
-
def __repr__(self) -> str:
|
|
69
|
-
return str(self)
|
|
70
|
-
|
|
71
|
-
def __len__(self) -> int:
|
|
72
|
-
return len(str(self.value))
|
|
73
|
-
|
|
74
|
-
@property
|
|
75
|
-
def unicode(self) -> str:
|
|
76
|
-
return str(self.value)
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
@project: HsPyLib-Clitt
|
|
6
|
-
@package: clitt.core.icons.font_awesome
|
|
7
|
-
@file: dashboard_icons.py
|
|
8
|
-
@created: Tue, 4 May 2021
|
|
9
|
-
@author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
|
|
10
|
-
@site: https://github.com/yorevs/hspylib
|
|
11
|
-
@license: MIT - Please refer to <https://opensource.org/licenses/MIT>
|
|
12
|
-
|
|
13
|
-
Copyright·(c)·2024,·HSPyLib
|
|
14
|
-
"""
|
|
15
|
-
from clitt.core.icons.font_awesome.awesome import Awesome
|
|
16
|
-
from enum import auto
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class DashboardIcons(Awesome):
|
|
20
|
-
"""
|
|
21
|
-
Dashboard UI icons.
|
|
22
|
-
Codes can be found here:
|
|
23
|
-
- https://fontawesome.com/cheatsheet?from=io
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
# fmt: off
|
|
27
|
-
_CUSTOM = auto()
|
|
28
|
-
ADJUSTMENTS = '\uF1DE' #
|
|
29
|
-
AGENDA = '\uF073' #
|
|
30
|
-
ALERT = '\uF071' #
|
|
31
|
-
ARCHIVE = '\uF01C' #
|
|
32
|
-
BALLOON = '\uF075' #
|
|
33
|
-
CAMERA = '\uF030' #
|
|
34
|
-
CHAT = '\uF78B' #
|
|
35
|
-
CLOUD_DOWNLOAD = '\uF0ED' #
|
|
36
|
-
CLOUD_UPLOAD = '\uF0EE' #
|
|
37
|
-
CODE = '\uFABF' # 謹
|
|
38
|
-
COMPASS = '\uF124' #
|
|
39
|
-
DASHBOARD = '\uF00A' #
|
|
40
|
-
DATABASE = '\uF1C0' #
|
|
41
|
-
DELIVERED = '\uFB3D' #
|
|
42
|
-
DOCUMENT = '\uF016' #
|
|
43
|
-
DOWNLOAD = '\uF019' #
|
|
44
|
-
EMAIL = '\uF003' #
|
|
45
|
-
ERROR = '\uF06A' #
|
|
46
|
-
EXIT = '\uF426' #
|
|
47
|
-
EXPORT = '\uF5F6' #
|
|
48
|
-
FAVORITE = '\uF02E' #
|
|
49
|
-
FLAG = '\uF024' #
|
|
50
|
-
FOLDER = '\uF74A' #
|
|
51
|
-
FOLDER_OPEN = '\uF07C' #
|
|
52
|
-
FORM = '\uF233' #
|
|
53
|
-
FORMAT = '\uF6C8' #
|
|
54
|
-
GRAPHS = '\uF627' #
|
|
55
|
-
HISTORY = '\uF017' #
|
|
56
|
-
HOME = '\uF015' #
|
|
57
|
-
IDENTITY = '\uF2BB' #
|
|
58
|
-
IMPORT = '\uF5F9' #
|
|
59
|
-
KILL = '\uF8C4' #
|
|
60
|
-
LIGHT_ON = '\uF834' #
|
|
61
|
-
LIGHT_OFF = '\uF835' #
|
|
62
|
-
LIKE = '\uF004' #
|
|
63
|
-
LIST = '\uF03A' #
|
|
64
|
-
LOCATION = '\uF450' #
|
|
65
|
-
MOBILE = '\uF61F' #
|
|
66
|
-
MOVIE = '\uF008' #
|
|
67
|
-
MUSIC = '\uF3B5' #
|
|
68
|
-
MUTE = '\uF86C' #
|
|
69
|
-
NOTIFICATION = '\uF0F3' #
|
|
70
|
-
PICTURE = '\uF03E' #
|
|
71
|
-
PLAY = '\uF01D' #
|
|
72
|
-
PLUGIN = '\uF12E' #
|
|
73
|
-
PLUG_IN = '\uF1E6' #
|
|
74
|
-
PLUG_OUT = '\uF492' #
|
|
75
|
-
PLUGGED = '\uF700' #
|
|
76
|
-
POWER = '\uF011' #
|
|
77
|
-
PRINTER = '\uF02F' #
|
|
78
|
-
READ = '\uF830' #
|
|
79
|
-
SAVE = '\uF0C7' #
|
|
80
|
-
SEARCH = '\uF002' #
|
|
81
|
-
SECRET = '\uF49C' #
|
|
82
|
-
SEND = '\uF3FE' #
|
|
83
|
-
SENT = '\uF0FB' #
|
|
84
|
-
SETTINGS = '\uF013' #
|
|
85
|
-
SHOPPING_CART = '\uF60F' #
|
|
86
|
-
TERMINAL = '\uF120' #
|
|
87
|
-
PROMPT = '\uF054' #
|
|
88
|
-
UN_MUTE = '\uF86E' #
|
|
89
|
-
UNPLUGGED = '\uF701' #
|
|
90
|
-
USER = '\uF007' #
|
|
91
|
-
VERIFIED = '\uF4A1' #
|
|
92
|
-
|
|
93
|
-
# fmt: on
|