xulbux 1.7.1__tar.gz → 1.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of xulbux might be problematic. Click here for more details.
- {xulbux-1.7.1/src/xulbux.egg-info → xulbux-1.7.3}/PKG-INFO +17 -14
- {xulbux-1.7.1 → xulbux-1.7.3}/README.md +4 -2
- {xulbux-1.7.1 → xulbux-1.7.3}/pyproject.toml +16 -15
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/__init__.py +1 -1
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/_consts_.py +2 -4
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_code.py +1 -1
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_console.py +53 -44
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_format_codes.py +54 -26
- {xulbux-1.7.1 → xulbux-1.7.3/src/xulbux.egg-info}/PKG-INFO +17 -14
- {xulbux-1.7.1 → xulbux-1.7.3}/LICENSE +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/setup.cfg +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/_cli_.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_color.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_data.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_env_path.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_file.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_json.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_path.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_regex.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_string.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux/xx_system.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux.egg-info/SOURCES.txt +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux.egg-info/dependency_links.txt +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux.egg-info/entry_points.txt +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux.egg-info/requires.txt +3 -3
- {xulbux-1.7.1 → xulbux-1.7.3}/src/xulbux.egg-info/top_level.txt +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_code.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_color.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_color_types.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_console.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_data.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_env_path.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_file.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_format_codes.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_json.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_path.py +0 -0
- {xulbux-1.7.1 → xulbux-1.7.3}/tests/test_string.py +0 -0
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xulbux
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.3
|
|
4
4
|
Summary: A Python library which includes lots of helpful classes, types and functions aiming to make common programming tasks simpler.
|
|
5
5
|
Author-email: XulbuX <xulbux.real@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
|
-
Project-URL: Bug Reports, https://github.com/XulbuX/PythonLibraryXulbuX/issues
|
|
8
|
-
Project-URL: Changelog, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md
|
|
9
|
-
Project-URL: Documentation, https://github.com/XulbuX/PythonLibraryXulbuX/wiki
|
|
10
7
|
Project-URL: Homepage, https://github.com/XulbuX/PythonLibraryXulbuX
|
|
11
|
-
Project-URL:
|
|
8
|
+
Project-URL: Documentation, https://github.com/XulbuX/PythonLibraryXulbuX/wiki
|
|
12
9
|
Project-URL: Source Code, https://github.com/XulbuX/PythonLibraryXulbuX/tree/main/src
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
Project-URL: Changelog, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Bug Reports, https://github.com/XulbuX/PythonLibraryXulbuX/issues
|
|
12
|
+
Project-URL: License, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/LICENSE
|
|
13
|
+
Keywords: args,arguments,attributes,classes,client,cmd,code,codes,color,commands,console,constants,consts,conversion,convert,data,debug,easier,env,environment,error,file,format,formatting,functions,helper,hex,hexa,hsl,hsla,info,input,json,library,log,logging,methods,nice,operations,path,presets,pretty,printing,properties,python,re,regex,rgb,rgba,string,structures,system,tools,types,utility,warn,warning,xulbux
|
|
15
14
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Intended Audience :: Developers
|
|
20
21
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
22
|
Requires-Python: >=3.10.0
|
|
22
23
|
Description-Content-Type: text/markdown
|
|
@@ -27,20 +28,22 @@ Requires-Dist: prompt_toolkit>=3.0.41
|
|
|
27
28
|
Requires-Dist: pyperclip>=1.9.0
|
|
28
29
|
Requires-Dist: regex>=2023.10.3
|
|
29
30
|
Provides-Extra: dev
|
|
30
|
-
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
31
31
|
Requires-Dist: black>=23.7.0; extra == "dev"
|
|
32
|
-
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
33
|
-
Requires-Dist: flake8>=6.1.0; extra == "dev"
|
|
34
32
|
Requires-Dist: flake8-pyproject>=1.2.3; extra == "dev"
|
|
33
|
+
Requires-Dist: flake8>=6.1.0; extra == "dev"
|
|
34
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
35
36
|
Dynamic: license-file
|
|
36
37
|
|
|
37
|
-
#
|
|
38
|
+
# **XulbuX**
|
|
39
|
+
|
|
40
|
+
    
|
|
38
41
|
|
|
39
42
|
**XulbuX** is library that contains many useful classes, types, and functions,
|
|
40
43
|
ranging from console logging and working with colors to file management and system operations.
|
|
41
44
|
The library is designed to simplify common programming tasks and improve code readability through its collection of tools.
|
|
42
45
|
|
|
43
|
-
For precise information about the library, see the library's [**
|
|
46
|
+
For precise information about the library, see the library's [**documentation**](https://github.com/XulbuX/PythonLibraryXulbuX/wiki).<br>
|
|
44
47
|
For the libraries latest changes and updates, see the [**change log**](https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md).
|
|
45
48
|
|
|
46
49
|
<br>
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# **XulbuX**
|
|
2
|
+
|
|
3
|
+
    
|
|
2
4
|
|
|
3
5
|
**XulbuX** is library that contains many useful classes, types, and functions,
|
|
4
6
|
ranging from console logging and working with colors to file management and system operations.
|
|
5
7
|
The library is designed to simplify common programming tasks and improve code readability through its collection of tools.
|
|
6
8
|
|
|
7
|
-
For precise information about the library, see the library's [**
|
|
9
|
+
For precise information about the library, see the library's [**documentation**](https://github.com/XulbuX/PythonLibraryXulbuX/wiki).<br>
|
|
8
10
|
For the libraries latest changes and updates, see the [**change log**](https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md).
|
|
9
11
|
|
|
10
12
|
<br>
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "xulbux"
|
|
7
|
-
version = "1.7.
|
|
7
|
+
version = "1.7.3"
|
|
8
8
|
authors = [{ name = "XulbuX", email = "xulbux.real@gmail.com" }]
|
|
9
9
|
description = "A Python library which includes lots of helpful classes, types and functions aiming to make common programming tasks simpler."
|
|
10
10
|
readme = "README.md"
|
|
@@ -19,19 +19,20 @@ dependencies = [
|
|
|
19
19
|
"regex>=2023.10.3",
|
|
20
20
|
]
|
|
21
21
|
optional-dependencies = { dev = [
|
|
22
|
-
"pytest>=7.4.2",
|
|
23
22
|
"black>=23.7.0",
|
|
24
|
-
"isort>=5.12.0",
|
|
25
|
-
"flake8>=6.1.0",
|
|
26
23
|
"flake8-pyproject>=1.2.3",
|
|
24
|
+
"flake8>=6.1.0",
|
|
25
|
+
"isort>=5.12.0",
|
|
26
|
+
"pytest>=7.4.2",
|
|
27
27
|
] }
|
|
28
28
|
classifiers = [
|
|
29
|
-
"Intended Audience :: Developers",
|
|
30
29
|
"Programming Language :: Python :: 3",
|
|
31
|
-
"Programming Language :: Python :: 3.
|
|
32
|
-
"Programming Language :: Python :: 3.11",
|
|
30
|
+
"Programming Language :: Python :: 3.13",
|
|
33
31
|
"Programming Language :: Python :: 3.12",
|
|
32
|
+
"Programming Language :: Python :: 3.11",
|
|
33
|
+
"Programming Language :: Python :: 3.10",
|
|
34
34
|
"Operating System :: OS Independent",
|
|
35
|
+
"Intended Audience :: Developers",
|
|
35
36
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
36
37
|
]
|
|
37
38
|
keywords = [
|
|
@@ -39,17 +40,17 @@ keywords = [
|
|
|
39
40
|
"arguments",
|
|
40
41
|
"attributes",
|
|
41
42
|
"classes",
|
|
42
|
-
"cmd",
|
|
43
43
|
"client",
|
|
44
|
+
"cmd",
|
|
44
45
|
"code",
|
|
45
46
|
"codes",
|
|
46
47
|
"color",
|
|
47
48
|
"commands",
|
|
48
49
|
"console",
|
|
49
|
-
"consts",
|
|
50
50
|
"constants",
|
|
51
|
-
"
|
|
51
|
+
"consts",
|
|
52
52
|
"conversion",
|
|
53
|
+
"convert",
|
|
53
54
|
"data",
|
|
54
55
|
"debug",
|
|
55
56
|
"easier",
|
|
@@ -96,12 +97,12 @@ keywords = [
|
|
|
96
97
|
]
|
|
97
98
|
|
|
98
99
|
[project.urls]
|
|
99
|
-
"Bug Reports" = "https://github.com/XulbuX/PythonLibraryXulbuX/issues"
|
|
100
|
-
"Changelog" = "https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md"
|
|
101
|
-
"Documentation" = "https://github.com/XulbuX/PythonLibraryXulbuX/wiki"
|
|
102
100
|
"Homepage" = "https://github.com/XulbuX/PythonLibraryXulbuX"
|
|
103
|
-
"
|
|
101
|
+
"Documentation" = "https://github.com/XulbuX/PythonLibraryXulbuX/wiki"
|
|
104
102
|
"Source Code" = "https://github.com/XulbuX/PythonLibraryXulbuX/tree/main/src"
|
|
103
|
+
"Changelog" = "https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md"
|
|
104
|
+
"Bug Reports" = "https://github.com/XulbuX/PythonLibraryXulbuX/issues"
|
|
105
|
+
"License" = "https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/LICENSE"
|
|
105
106
|
|
|
106
107
|
|
|
107
108
|
[project.scripts]
|
|
@@ -152,8 +153,8 @@ addopts = "-ra -q"
|
|
|
152
153
|
pythonpath = ["src"]
|
|
153
154
|
testpaths = [
|
|
154
155
|
"tests/test_code.py",
|
|
155
|
-
"tests/test_color.py",
|
|
156
156
|
"tests/test_color_types.py",
|
|
157
|
+
"tests/test_color.py",
|
|
157
158
|
"tests/test_console.py",
|
|
158
159
|
"tests/test_data.py",
|
|
159
160
|
"tests/test_env_path.py",
|
|
@@ -94,8 +94,6 @@ class ANSI:
|
|
|
94
94
|
"""The separator between ANSI escape sequence parts."""
|
|
95
95
|
END = end = "m"
|
|
96
96
|
"""The end of an ANSI escape sequence."""
|
|
97
|
-
default_color_modifiers: dict[str, str] = {"lighten": "+l", "darken": "-d"}
|
|
98
|
-
"""Characters to modify the lightness of the default color with."""
|
|
99
97
|
|
|
100
98
|
@classmethod
|
|
101
99
|
def seq(cls, parts: int = 1) -> FormattableString:
|
|
@@ -107,7 +105,7 @@ class ANSI:
|
|
|
107
105
|
seq_bg_color: FormattableString = CHAR + START + "48" + SEP + "2" + SEP + "{}" + SEP + "{}" + SEP + "{}" + END
|
|
108
106
|
"""The ANSI escape sequence for setting the background RGB color."""
|
|
109
107
|
|
|
110
|
-
color_map:
|
|
108
|
+
color_map: tuple[str, ...] = (
|
|
111
109
|
########### DEFAULT CONSOLE COLOR NAMES ############
|
|
112
110
|
"black",
|
|
113
111
|
"red",
|
|
@@ -117,7 +115,7 @@ class ANSI:
|
|
|
117
115
|
"magenta",
|
|
118
116
|
"cyan",
|
|
119
117
|
"white",
|
|
120
|
-
|
|
118
|
+
)
|
|
121
119
|
"""The console default color names."""
|
|
122
120
|
|
|
123
121
|
codes_map: dict[str | tuple[str, ...], int] = {
|
|
@@ -53,7 +53,7 @@ class Code:
|
|
|
53
53
|
return list(Data.remove_duplicates(funcs + nested_func_calls))
|
|
54
54
|
|
|
55
55
|
@staticmethod
|
|
56
|
-
def is_js(code: str, funcs: list = ["__", "$t", "$lang"]) -> bool:
|
|
56
|
+
def is_js(code: str, funcs: list[str] = ["__", "$t", "$lang"]) -> bool:
|
|
57
57
|
"""Will check if the code is very likely to be JavaScript."""
|
|
58
58
|
if not code or len(code.strip()) < 3:
|
|
59
59
|
return False
|
|
@@ -25,20 +25,29 @@ import os as _os
|
|
|
25
25
|
class _ConsoleWidth:
|
|
26
26
|
|
|
27
27
|
def __get__(self, obj, owner=None):
|
|
28
|
-
|
|
28
|
+
try:
|
|
29
|
+
return _os.get_terminal_size().columns
|
|
30
|
+
except OSError:
|
|
31
|
+
return 80
|
|
29
32
|
|
|
30
33
|
|
|
31
34
|
class _ConsoleHeight:
|
|
32
35
|
|
|
33
36
|
def __get__(self, obj, owner=None):
|
|
34
|
-
|
|
37
|
+
try:
|
|
38
|
+
return _os.get_terminal_size().lines
|
|
39
|
+
except OSError:
|
|
40
|
+
return 24
|
|
35
41
|
|
|
36
42
|
|
|
37
43
|
class _ConsoleSize:
|
|
38
44
|
|
|
39
45
|
def __get__(self, obj, owner=None):
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
try:
|
|
47
|
+
size = _os.get_terminal_size()
|
|
48
|
+
return (size.columns, size.lines)
|
|
49
|
+
except OSError:
|
|
50
|
+
return (80, 24)
|
|
42
51
|
|
|
43
52
|
|
|
44
53
|
class _ConsoleUser:
|
|
@@ -231,13 +240,13 @@ class Console:
|
|
|
231
240
|
exit_code: int = 0,
|
|
232
241
|
reset_ansi: bool = False,
|
|
233
242
|
) -> None:
|
|
234
|
-
"""Will print the `
|
|
243
|
+
"""Will print the `prompt` and then pause the program if `pause` is set
|
|
235
244
|
to `True` and after the pause, exit the program if `exit` is set to `True`."""
|
|
236
245
|
print(prompt, end="", flush=True)
|
|
237
246
|
if reset_ansi:
|
|
238
247
|
FormatCodes.print("[_]", end="")
|
|
239
248
|
if pause:
|
|
240
|
-
_keyboard.
|
|
249
|
+
_keyboard.read_key(suppress=True)
|
|
241
250
|
if exit:
|
|
242
251
|
_sys.exit(exit_code)
|
|
243
252
|
|
|
@@ -344,8 +353,7 @@ class Console:
|
|
|
344
353
|
format_linebreaks: bool = True,
|
|
345
354
|
start: str = "",
|
|
346
355
|
end: str = "\n",
|
|
347
|
-
|
|
348
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
356
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
349
357
|
pause: bool = False,
|
|
350
358
|
exit: bool = False,
|
|
351
359
|
) -> None:
|
|
@@ -353,7 +361,7 @@ class Console:
|
|
|
353
361
|
at the message and exit the program after the message was printed.
|
|
354
362
|
If `active` is false, no debug message will be printed."""
|
|
355
363
|
if active:
|
|
356
|
-
Console.log("DEBUG", prompt, format_linebreaks, start, end,
|
|
364
|
+
Console.log("DEBUG", prompt, format_linebreaks, start, end, COLOR.yellow, default_color)
|
|
357
365
|
Console.pause_exit(pause, exit)
|
|
358
366
|
|
|
359
367
|
@staticmethod
|
|
@@ -362,14 +370,13 @@ class Console:
|
|
|
362
370
|
format_linebreaks: bool = True,
|
|
363
371
|
start: str = "",
|
|
364
372
|
end: str = "\n",
|
|
365
|
-
|
|
366
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
373
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
367
374
|
pause: bool = False,
|
|
368
375
|
exit: bool = False,
|
|
369
376
|
) -> None:
|
|
370
377
|
"""A preset for `log()`: `INFO` log message with the options to pause
|
|
371
378
|
at the message and exit the program after the message was printed."""
|
|
372
|
-
Console.log("INFO", prompt, format_linebreaks, start, end,
|
|
379
|
+
Console.log("INFO", prompt, format_linebreaks, start, end, COLOR.blue, default_color)
|
|
373
380
|
Console.pause_exit(pause, exit)
|
|
374
381
|
|
|
375
382
|
@staticmethod
|
|
@@ -378,14 +385,13 @@ class Console:
|
|
|
378
385
|
format_linebreaks: bool = True,
|
|
379
386
|
start: str = "",
|
|
380
387
|
end: str = "\n",
|
|
381
|
-
|
|
382
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
388
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
383
389
|
pause: bool = False,
|
|
384
390
|
exit: bool = False,
|
|
385
391
|
) -> None:
|
|
386
392
|
"""A preset for `log()`: `DONE` log message with the options to pause
|
|
387
393
|
at the message and exit the program after the message was printed."""
|
|
388
|
-
Console.log("DONE", prompt, format_linebreaks, start, end,
|
|
394
|
+
Console.log("DONE", prompt, format_linebreaks, start, end, COLOR.teal, default_color)
|
|
389
395
|
Console.pause_exit(pause, exit)
|
|
390
396
|
|
|
391
397
|
@staticmethod
|
|
@@ -394,14 +400,13 @@ class Console:
|
|
|
394
400
|
format_linebreaks: bool = True,
|
|
395
401
|
start: str = "",
|
|
396
402
|
end: str = "\n",
|
|
397
|
-
|
|
398
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
403
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
399
404
|
pause: bool = False,
|
|
400
405
|
exit: bool = False,
|
|
401
406
|
) -> None:
|
|
402
407
|
"""A preset for `log()`: `WARN` log message with the options to pause
|
|
403
408
|
at the message and exit the program after the message was printed."""
|
|
404
|
-
Console.log("WARN", prompt, format_linebreaks, start, end,
|
|
409
|
+
Console.log("WARN", prompt, format_linebreaks, start, end, COLOR.orange, default_color)
|
|
405
410
|
Console.pause_exit(pause, exit)
|
|
406
411
|
|
|
407
412
|
@staticmethod
|
|
@@ -410,15 +415,14 @@ class Console:
|
|
|
410
415
|
format_linebreaks: bool = True,
|
|
411
416
|
start: str = "",
|
|
412
417
|
end: str = "\n",
|
|
413
|
-
|
|
414
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
418
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
415
419
|
pause: bool = False,
|
|
416
420
|
exit: bool = True,
|
|
417
|
-
reset_ansi=True,
|
|
421
|
+
reset_ansi: bool = True,
|
|
418
422
|
) -> None:
|
|
419
423
|
"""A preset for `log()`: `FAIL` log message with the options to pause
|
|
420
424
|
at the message and exit the program after the message was printed."""
|
|
421
|
-
Console.log("FAIL", prompt, format_linebreaks, start, end,
|
|
425
|
+
Console.log("FAIL", prompt, format_linebreaks, start, end, COLOR.red, default_color)
|
|
422
426
|
Console.pause_exit(pause, exit, reset_ansi=reset_ansi)
|
|
423
427
|
|
|
424
428
|
@staticmethod
|
|
@@ -427,15 +431,14 @@ class Console:
|
|
|
427
431
|
format_linebreaks: bool = True,
|
|
428
432
|
start: str = "",
|
|
429
433
|
end: str = "\n",
|
|
430
|
-
|
|
431
|
-
default_color: Rgba | Hexa = COLOR.text,
|
|
434
|
+
default_color: Optional[Rgba | Hexa] = COLOR.text,
|
|
432
435
|
pause: bool = False,
|
|
433
436
|
exit: bool = True,
|
|
434
|
-
reset_ansi=True,
|
|
437
|
+
reset_ansi: bool = True,
|
|
435
438
|
) -> None:
|
|
436
439
|
"""A preset for `log()`: `EXIT` log message with the options to pause
|
|
437
440
|
at the message and exit the program after the message was printed."""
|
|
438
|
-
Console.log("EXIT", prompt, format_linebreaks, start, end,
|
|
441
|
+
Console.log("EXIT", prompt, format_linebreaks, start, end, COLOR.magenta, default_color)
|
|
439
442
|
Console.pause_exit(pause, exit, reset_ansi=reset_ansi)
|
|
440
443
|
|
|
441
444
|
@staticmethod
|
|
@@ -443,10 +446,11 @@ class Console:
|
|
|
443
446
|
*values: object,
|
|
444
447
|
start: str = "",
|
|
445
448
|
end: str = "\n",
|
|
446
|
-
box_bg_color: Rgba | Hexa = "green",
|
|
447
|
-
default_color: Rgba | Hexa =
|
|
449
|
+
box_bg_color: str | Rgba | Hexa = "green",
|
|
450
|
+
default_color: Optional[Rgba | Hexa] = None,
|
|
448
451
|
w_padding: int = 2,
|
|
449
452
|
w_full: bool = False,
|
|
453
|
+
indent: int = 0,
|
|
450
454
|
) -> None:
|
|
451
455
|
"""Will print a box with a colored background, containing a formatted log message:
|
|
452
456
|
- `*values` -⠀the box content (each value is on a new line)
|
|
@@ -455,7 +459,8 @@ class Console:
|
|
|
455
459
|
- `box_bg_color` -⠀the background color of the box
|
|
456
460
|
- `default_color` -⠀the default text color of the `*values`
|
|
457
461
|
- `w_padding` -⠀the horizontal padding (in chars) to the box content
|
|
458
|
-
- `w_full` -⠀whether to make the box be the full console width or not
|
|
462
|
+
- `w_full` -⠀whether to make the box be the full console width or not
|
|
463
|
+
- `indent` -⠀the indentation of the box (in chars)\n
|
|
459
464
|
-----------------------------------------------------------------------------------
|
|
460
465
|
The box content can be formatted with special formatting codes. For more detailed
|
|
461
466
|
information about formatting codes, see `xx_format_codes` module documentation."""
|
|
@@ -463,15 +468,16 @@ class Console:
|
|
|
463
468
|
pad_w_full = (Console.w - (max_line_len + (2 * w_padding))) if w_full else 0
|
|
464
469
|
if box_bg_color is not None and Color.is_valid(box_bg_color):
|
|
465
470
|
box_bg_color = Color.to_hexa(box_bg_color)
|
|
471
|
+
spaces_l = " " * indent
|
|
466
472
|
lines = [
|
|
467
|
-
f"[bg:{box_bg_color}]{' ' * w_padding}
|
|
468
|
-
|
|
473
|
+
f"{spaces_l}[bg:{box_bg_color}]{' ' * w_padding}"
|
|
474
|
+
+ _COMPILED["formatting"].sub(lambda m: f"{m.group(0)}[bg:{box_bg_color}]", line) +
|
|
475
|
+
(" " * ((w_padding + max_line_len - len(unfmt)) + pad_w_full)) + "[*]" for line, unfmt in zip(lines, unfmt_lines)
|
|
469
476
|
]
|
|
470
477
|
pady = " " * (Console.w if w_full else max_line_len + (2 * w_padding))
|
|
471
478
|
FormatCodes.print(
|
|
472
|
-
f"{start}[bg:{box_bg_color}]{pady}[*]\n"
|
|
473
|
-
+
|
|
474
|
-
+ f"\n[bg:{box_bg_color}]{pady}[_]",
|
|
479
|
+
f"{start}{spaces_l}[bg:{box_bg_color}]{pady}[*]\n" + "\n".join(lines)
|
|
480
|
+
+ f"\n{spaces_l}[bg:{box_bg_color}]{pady}[_]",
|
|
475
481
|
default_color=default_color or "#000",
|
|
476
482
|
sep="\n",
|
|
477
483
|
end=end,
|
|
@@ -487,6 +493,7 @@ class Console:
|
|
|
487
493
|
default_color: Optional[Rgba | Hexa] = None,
|
|
488
494
|
w_padding: int = 1,
|
|
489
495
|
w_full: bool = False,
|
|
496
|
+
indent: int = 0,
|
|
490
497
|
_border_chars: Optional[tuple[str, str, str, str, str, str, str, str]] = None,
|
|
491
498
|
) -> None:
|
|
492
499
|
"""Will print a bordered box, containing a formatted log message:
|
|
@@ -494,9 +501,11 @@ class Console:
|
|
|
494
501
|
- `start` -⠀something to print before the log box is printed (e.g. `\\n`)
|
|
495
502
|
- `end` -⠀something to print after the log box is printed (e.g. `\\n`)
|
|
496
503
|
- `border_type` -⠀one of the predefined border character sets
|
|
504
|
+
- `border_style` -⠀the style of the border (special formatting codes)
|
|
497
505
|
- `default_color` -⠀the default text color of the `*values`
|
|
498
506
|
- `w_padding` -⠀the horizontal padding (in chars) to the box content
|
|
499
507
|
- `w_full` -⠀whether to make the box be the full console width or not
|
|
508
|
+
- `indent` -⠀the indentation of the box (in chars)
|
|
500
509
|
- `_border_chars` -⠀define your own border characters set (overwrites `border_type`)\n
|
|
501
510
|
---------------------------------------------------------------------------------------
|
|
502
511
|
The box content can be formatted with special formatting codes. For more detailed
|
|
@@ -524,18 +533,18 @@ class Console:
|
|
|
524
533
|
}
|
|
525
534
|
border_chars = borders.get(border_type, borders["standard"]) if _border_chars is None else _border_chars
|
|
526
535
|
lines, unfmt_lines, max_line_len = Console.__prepare_log_box(values, default_color)
|
|
527
|
-
print(unfmt_lines)
|
|
528
536
|
pad_w_full = (Console.w - (max_line_len + (2 * w_padding)) - (len(border_chars[1] * 2))) if w_full else 0
|
|
529
537
|
if border_style is not None and Color.is_valid(border_style):
|
|
530
538
|
border_style = Color.to_hexa(border_style)
|
|
539
|
+
spaces_l = " " * indent
|
|
531
540
|
border_l = f"[{border_style}]{border_chars[7]}[*]"
|
|
532
541
|
border_r = f"[{border_style}]{border_chars[3]}[_]"
|
|
533
542
|
lines = [
|
|
534
|
-
f"{border_l}{' ' * w_padding}{line}[_]" + " " *
|
|
535
|
-
for line, unfmt in zip(lines, unfmt_lines)
|
|
543
|
+
f"{spaces_l}{border_l}{' ' * w_padding}{line}[_]" + " " *
|
|
544
|
+
((w_padding + max_line_len - len(unfmt)) + pad_w_full) + border_r for line, unfmt in zip(lines, unfmt_lines)
|
|
536
545
|
]
|
|
537
|
-
border_t = f"[{border_style}]{border_chars[0]}{border_chars[1] * (Console.w - (len(border_chars[1] * 2)) if w_full else max_line_len + (2 * w_padding))}{border_chars[2]}[_]"
|
|
538
|
-
border_b = f"[{border_style}]{border_chars[6]}{border_chars[5] * (Console.w - (len(border_chars[1] * 2)) if w_full else max_line_len + (2 * w_padding))}{border_chars[4]}[_]"
|
|
546
|
+
border_t = f"{spaces_l}[{border_style}]{border_chars[0]}{border_chars[1] * (Console.w - (len(border_chars[1] * 2)) if w_full else max_line_len + (2 * w_padding))}{border_chars[2]}[_]"
|
|
547
|
+
border_b = f"{spaces_l}[{border_style}]{border_chars[6]}{border_chars[5] * (Console.w - (len(border_chars[1] * 2)) if w_full else max_line_len + (2 * w_padding))}{border_chars[4]}[_]"
|
|
539
548
|
FormatCodes.print(
|
|
540
549
|
f"{start}{border_t}[_]\n" + "\n".join(lines) + f"\n{border_b}[_]",
|
|
541
550
|
default_color=default_color,
|
|
@@ -559,7 +568,7 @@ class Console:
|
|
|
559
568
|
prompt: object = "Do you want to continue?",
|
|
560
569
|
start="",
|
|
561
570
|
end="\n",
|
|
562
|
-
default_color: Rgba | Hexa = COLOR.cyan,
|
|
571
|
+
default_color: Optional[Rgba | Hexa] = COLOR.cyan,
|
|
563
572
|
default_is_yes: bool = True,
|
|
564
573
|
) -> bool:
|
|
565
574
|
"""Ask a yes/no question.\n
|
|
@@ -569,7 +578,7 @@ class Console:
|
|
|
569
578
|
confirmed = input(
|
|
570
579
|
FormatCodes.to_ansi(
|
|
571
580
|
f'{start} {str(prompt)} [_|dim](({"Y" if default_is_yes else "y"}/{"n" if default_is_yes else "N"}): )',
|
|
572
|
-
default_color,
|
|
581
|
+
default_color=default_color,
|
|
573
582
|
)
|
|
574
583
|
).strip().lower() in (("", "y", "yes") if default_is_yes else ("y", "yes"))
|
|
575
584
|
if end:
|
|
@@ -581,7 +590,7 @@ class Console:
|
|
|
581
590
|
prompt: object = "",
|
|
582
591
|
start="",
|
|
583
592
|
end="\n",
|
|
584
|
-
default_color: Rgba | Hexa = COLOR.cyan,
|
|
593
|
+
default_color: Optional[Rgba | Hexa] = COLOR.cyan,
|
|
585
594
|
show_keybindings=True,
|
|
586
595
|
input_prefix=" ⮡ ",
|
|
587
596
|
reset_ansi=True,
|
|
@@ -616,7 +625,7 @@ class Console:
|
|
|
616
625
|
prompt: object = "",
|
|
617
626
|
start="",
|
|
618
627
|
end="\n",
|
|
619
|
-
default_color: Rgba | Hexa = COLOR.cyan,
|
|
628
|
+
default_color: Optional[Rgba | Hexa] = COLOR.cyan,
|
|
620
629
|
allowed_chars: str = CHARS.all, # type: ignore[assignment]
|
|
621
630
|
min_len: Optional[int] = None,
|
|
622
631
|
max_len: Optional[int] = None,
|
|
@@ -720,7 +729,7 @@ class Console:
|
|
|
720
729
|
prompt: object = "Password: ",
|
|
721
730
|
start="",
|
|
722
731
|
end="\n",
|
|
723
|
-
default_color: Rgba | Hexa = COLOR.cyan,
|
|
732
|
+
default_color: Optional[Rgba | Hexa] = COLOR.cyan,
|
|
724
733
|
allowed_chars: str = CHARS.standard_ascii,
|
|
725
734
|
min_len: Optional[int] = None,
|
|
726
735
|
max_len: Optional[int] = None,
|
|
@@ -56,11 +56,13 @@ the formatting code:
|
|
|
56
56
|
- `[(255, 0, 136)]`
|
|
57
57
|
- `[255, 0, 136]`
|
|
58
58
|
- HEX colors:
|
|
59
|
-
Change the text color directly with a HEX color inside the square brackets. (
|
|
59
|
+
Change the text color directly with a HEX color inside the square brackets. (Whether the `RGB` or `RRGGBB` HEX format is used,
|
|
60
60
|
and if there's a `#` or `0x` prefix, doesn't matter.)
|
|
61
61
|
Examples:
|
|
62
|
+
- `[0x7788FF]`
|
|
62
63
|
- `[#7788FF]`
|
|
63
64
|
- `[7788FF]`
|
|
65
|
+
- `[0x78F]`
|
|
64
66
|
- `[#78F]`
|
|
65
67
|
- `[78F]`
|
|
66
68
|
- background RGB / HEX colors:
|
|
@@ -133,10 +135,13 @@ the formatting code:
|
|
|
133
135
|
#### Additional Formatting Codes when a `default_color` is set
|
|
134
136
|
|
|
135
137
|
1. `[*]` resets everything, just like `[_]`, but the text color will remain in `default_color`
|
|
136
|
-
(
|
|
138
|
+
(if no `default_color` is set, it resets everything, exactly like `[_]`)
|
|
137
139
|
2. `[*color]` `[*c]` will reset the text color, just like `[_color]`, but then also make it `default_color`
|
|
140
|
+
(if no `default_color` is set, both are treated as invalid formatting codes)
|
|
138
141
|
3. `[default]` will just color the text in `default_color`
|
|
142
|
+
(if no `default_color` is set, it's treated as an invalid formatting code)
|
|
139
143
|
4. `[background:default]` `[BG:default]` will color the background in `default_color`
|
|
144
|
+
(if no `default_color` is set, both are treated as invalid formatting codes)\n
|
|
140
145
|
|
|
141
146
|
Unlike the standard console colors, the default color can be changed by using the following modifiers:
|
|
142
147
|
|
|
@@ -149,6 +154,7 @@ Unlike the standard console colors, the default color can be changed by using th
|
|
|
149
154
|
- `[ddd]` will darken the `default_color` text by `3 × brightness_steps`%
|
|
150
155
|
- ... etc.
|
|
151
156
|
Per default, you can also use `+` and `-` to get lighter and darker `default_color` versions.
|
|
157
|
+
All of these lighten/darken formatting codes are treated as invalid if no `default_color` is set.
|
|
152
158
|
"""
|
|
153
159
|
|
|
154
160
|
from ._consts_ import ANSI
|
|
@@ -165,6 +171,11 @@ import re as _re
|
|
|
165
171
|
|
|
166
172
|
_CONSOLE_ANSI_CONFIGURED: bool = False
|
|
167
173
|
|
|
174
|
+
_ANSI_SEQ_1: str = ANSI.seq(1)
|
|
175
|
+
_DEFAULT_COLOR_MODS: dict[str, str] = {
|
|
176
|
+
"lighten": "+l",
|
|
177
|
+
"darken": "-d",
|
|
178
|
+
}
|
|
168
179
|
_PREFIX: dict[str, set[str]] = {
|
|
169
180
|
"BG": {"background", "bg"},
|
|
170
181
|
"BR": {"bright", "br"},
|
|
@@ -190,7 +201,7 @@ _COMPILED: dict[str, Pattern] = { # PRECOMPILE REGULAR EXPRESSIONS
|
|
|
190
201
|
"modifier": _re.compile(
|
|
191
202
|
r"(?i)((?:BG\s*:)?)\s*("
|
|
192
203
|
+ "|".join(
|
|
193
|
-
[f"{_re.escape(m)}+" for m in
|
|
204
|
+
[f"{_re.escape(m)}+" for m in _DEFAULT_COLOR_MODS["lighten"] + _DEFAULT_COLOR_MODS["darken"]]
|
|
194
205
|
)
|
|
195
206
|
+ r")$"
|
|
196
207
|
),
|
|
@@ -247,6 +258,7 @@ class FormatCodes:
|
|
|
247
258
|
default_color: Optional[Rgba | Hexa] = None,
|
|
248
259
|
brightness_steps: int = 20,
|
|
249
260
|
_default_start: bool = True,
|
|
261
|
+
_validate_default: bool = True,
|
|
250
262
|
) -> str:
|
|
251
263
|
"""Convert the formatting codes inside a string to ANSI formatting.\n
|
|
252
264
|
-------------------------------------------------------------------------
|
|
@@ -254,16 +266,20 @@ class FormatCodes:
|
|
|
254
266
|
`xx_format_codes` module documentation."""
|
|
255
267
|
if not isinstance(string, str):
|
|
256
268
|
string = str(string)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
269
|
+
use_default, default_specified = False, default_color is not None
|
|
270
|
+
if _validate_default and default_specified:
|
|
271
|
+
if Color.is_valid_rgba(default_color, False):
|
|
272
|
+
use_default = True
|
|
273
|
+
elif Color.is_valid_hexa(default_color, False):
|
|
274
|
+
use_default, default_color = True, Color.to_rgba(default_color) # type: ignore[assignment]
|
|
261
275
|
else:
|
|
262
|
-
use_default =
|
|
263
|
-
default_color = cast(rgba, default_color)
|
|
276
|
+
use_default = default_specified
|
|
277
|
+
default_color = cast(Optional[rgba], default_color)
|
|
264
278
|
if use_default:
|
|
265
279
|
string = _COMPILED["*"].sub(r"[\1_|default\2]", string) # REPLACE `[…|*|…]` WITH `[…|_|default|…]`
|
|
266
|
-
string = _COMPILED["*color"].sub(
|
|
280
|
+
string = _COMPILED["*color"].sub(
|
|
281
|
+
r"[\1default\2]", string
|
|
282
|
+
) # REPLACE `[…|*color|…]` OR `[…|*c|…]` WITH `[…|default|…]`
|
|
267
283
|
else:
|
|
268
284
|
string = _COMPILED["*"].sub(r"[\1_\2]", string) # REPLACE `[…|*|…]` WITH `[…|_|…]`
|
|
269
285
|
|
|
@@ -277,11 +293,23 @@ class FormatCodes:
|
|
|
277
293
|
if formats_escaped := bool(_COMPILED["escape_char_cond"].match(match.group(0))):
|
|
278
294
|
_formats = formats = _COMPILED["escape_char"].sub(r"\1", formats) # REMOVE / OR \\
|
|
279
295
|
if auto_reset_txt and auto_reset_txt.count("[") > 0 and auto_reset_txt.count("]") > 0:
|
|
280
|
-
auto_reset_txt = FormatCodes.to_ansi(
|
|
296
|
+
auto_reset_txt = FormatCodes.to_ansi(
|
|
297
|
+
auto_reset_txt,
|
|
298
|
+
default_color,
|
|
299
|
+
brightness_steps,
|
|
300
|
+
_default_start=False,
|
|
301
|
+
_validate_default=False,
|
|
302
|
+
)
|
|
281
303
|
if not formats:
|
|
282
304
|
return match.group(0)
|
|
283
305
|
if formats.count("[") > 0 and formats.count("]") > 0:
|
|
284
|
-
formats = FormatCodes.to_ansi(
|
|
306
|
+
formats = FormatCodes.to_ansi(
|
|
307
|
+
formats,
|
|
308
|
+
default_color,
|
|
309
|
+
brightness_steps,
|
|
310
|
+
_default_start=False,
|
|
311
|
+
_validate_default=False,
|
|
312
|
+
)
|
|
285
313
|
format_keys = [k.strip() for k in formats.split("|") if k.strip()]
|
|
286
314
|
ansi_formats = [
|
|
287
315
|
r if (r := FormatCodes.__get_replacement(k, default_color, brightness_steps)) != k else f"[{k}]"
|
|
@@ -323,13 +351,13 @@ class FormatCodes:
|
|
|
323
351
|
else:
|
|
324
352
|
return (
|
|
325
353
|
"".join(ansi_formats) + (
|
|
326
|
-
f"({FormatCodes.to_ansi(auto_reset_txt, default_color, brightness_steps, False)})"
|
|
354
|
+
f"({FormatCodes.to_ansi(auto_reset_txt, default_color, brightness_steps, _default_start=False, _validate_default=False)})"
|
|
327
355
|
if auto_reset_escaped and auto_reset_txt else auto_reset_txt if auto_reset_txt else ""
|
|
328
356
|
) + ("" if auto_reset_escaped else "".join(ansi_resets))
|
|
329
357
|
)
|
|
330
358
|
|
|
331
359
|
string = "\n".join(_COMPILED["formatting"].sub(replace_keys, line) for line in string.split("\n"))
|
|
332
|
-
return (((FormatCodes.__get_default_ansi(default_color
|
|
360
|
+
return (((FormatCodes.__get_default_ansi(default_color) or "") if _default_start else "")
|
|
333
361
|
+ string) if default_color is not None else string
|
|
334
362
|
|
|
335
363
|
@staticmethod
|
|
@@ -399,19 +427,21 @@ class FormatCodes:
|
|
|
399
427
|
|
|
400
428
|
@staticmethod
|
|
401
429
|
def __get_default_ansi(
|
|
402
|
-
default_color:
|
|
430
|
+
default_color: rgba,
|
|
403
431
|
format_key: Optional[str] = None,
|
|
404
432
|
brightness_steps: Optional[int] = None,
|
|
405
|
-
_modifiers: tuple[str, str] = (
|
|
433
|
+
_modifiers: tuple[str, str] = (_DEFAULT_COLOR_MODS["lighten"], _DEFAULT_COLOR_MODS["darken"]),
|
|
406
434
|
) -> Optional[str]:
|
|
407
435
|
"""Get the `default_color` and lighter/darker versions of it as ANSI code."""
|
|
408
|
-
if not
|
|
436
|
+
if not isinstance(default_color, rgba):
|
|
437
|
+
return None
|
|
438
|
+
_default_color: tuple[int, int, int] = tuple(default_color)[:3]
|
|
439
|
+
if brightness_steps is None or (format_key and _COMPILED["bg?_default"].search(format_key)):
|
|
409
440
|
return (ANSI.seq_bg_color if format_key and _COMPILED["bg_default"].search(format_key) else ANSI.seq_color).format(
|
|
410
|
-
*
|
|
441
|
+
*_default_color
|
|
411
442
|
)
|
|
412
443
|
if format_key is None or not (format_key in _modifiers[0] or format_key in _modifiers[1]):
|
|
413
444
|
return None
|
|
414
|
-
assert format_key is not None
|
|
415
445
|
match = _COMPILED["modifier"].match(format_key)
|
|
416
446
|
if not match:
|
|
417
447
|
return None
|
|
@@ -422,7 +452,7 @@ class FormatCodes:
|
|
|
422
452
|
if adjust and adjust > 0:
|
|
423
453
|
modifiers = mod
|
|
424
454
|
break
|
|
425
|
-
new_rgb =
|
|
455
|
+
new_rgb = _default_color
|
|
426
456
|
if adjust == 0:
|
|
427
457
|
return None
|
|
428
458
|
elif modifiers in _modifiers[0]:
|
|
@@ -436,15 +466,13 @@ class FormatCodes:
|
|
|
436
466
|
"""Gives you the corresponding ANSI code for the given format key.
|
|
437
467
|
If `default_color` is not `None`, the text color will be `default_color` if all formats
|
|
438
468
|
are reset or you can get lighter or darker version of `default_color` (also as BG)"""
|
|
439
|
-
use_default = default_color and Color.is_valid_rgba(default_color, False)
|
|
440
|
-
_default_color = tuple(Color.to_rgba(default_color)) if default_color is not None else tuple()
|
|
441
469
|
_format_key, format_key = format_key, FormatCodes.__normalize_key(format_key) # NORMALIZE KEY AND SAVE ORIGINAL
|
|
442
|
-
if
|
|
443
|
-
|
|
444
|
-
|
|
470
|
+
if default_color and (new_default_color := FormatCodes.__get_default_ansi(default_color, format_key,
|
|
471
|
+
brightness_steps)):
|
|
472
|
+
return new_default_color
|
|
445
473
|
for map_key in ANSI.codes_map:
|
|
446
474
|
if (isinstance(map_key, tuple) and format_key in map_key) or format_key == map_key:
|
|
447
|
-
return
|
|
475
|
+
return _ANSI_SEQ_1.format(
|
|
448
476
|
next((
|
|
449
477
|
v for k, v in ANSI.codes_map.items() if format_key == k or (isinstance(k, tuple) and format_key in k)
|
|
450
478
|
), None)
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: xulbux
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.3
|
|
4
4
|
Summary: A Python library which includes lots of helpful classes, types and functions aiming to make common programming tasks simpler.
|
|
5
5
|
Author-email: XulbuX <xulbux.real@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
|
-
Project-URL: Bug Reports, https://github.com/XulbuX/PythonLibraryXulbuX/issues
|
|
8
|
-
Project-URL: Changelog, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md
|
|
9
|
-
Project-URL: Documentation, https://github.com/XulbuX/PythonLibraryXulbuX/wiki
|
|
10
7
|
Project-URL: Homepage, https://github.com/XulbuX/PythonLibraryXulbuX
|
|
11
|
-
Project-URL:
|
|
8
|
+
Project-URL: Documentation, https://github.com/XulbuX/PythonLibraryXulbuX/wiki
|
|
12
9
|
Project-URL: Source Code, https://github.com/XulbuX/PythonLibraryXulbuX/tree/main/src
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
Project-URL: Changelog, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Bug Reports, https://github.com/XulbuX/PythonLibraryXulbuX/issues
|
|
12
|
+
Project-URL: License, https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/LICENSE
|
|
13
|
+
Keywords: args,arguments,attributes,classes,client,cmd,code,codes,color,commands,console,constants,consts,conversion,convert,data,debug,easier,env,environment,error,file,format,formatting,functions,helper,hex,hexa,hsl,hsla,info,input,json,library,log,logging,methods,nice,operations,path,presets,pretty,printing,properties,python,re,regex,rgb,rgba,string,structures,system,tools,types,utility,warn,warning,xulbux
|
|
15
14
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
19
|
Classifier: Operating System :: OS Independent
|
|
20
|
+
Classifier: Intended Audience :: Developers
|
|
20
21
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
22
|
Requires-Python: >=3.10.0
|
|
22
23
|
Description-Content-Type: text/markdown
|
|
@@ -27,20 +28,22 @@ Requires-Dist: prompt_toolkit>=3.0.41
|
|
|
27
28
|
Requires-Dist: pyperclip>=1.9.0
|
|
28
29
|
Requires-Dist: regex>=2023.10.3
|
|
29
30
|
Provides-Extra: dev
|
|
30
|
-
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
31
31
|
Requires-Dist: black>=23.7.0; extra == "dev"
|
|
32
|
-
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
33
|
-
Requires-Dist: flake8>=6.1.0; extra == "dev"
|
|
34
32
|
Requires-Dist: flake8-pyproject>=1.2.3; extra == "dev"
|
|
33
|
+
Requires-Dist: flake8>=6.1.0; extra == "dev"
|
|
34
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
35
36
|
Dynamic: license-file
|
|
36
37
|
|
|
37
|
-
#
|
|
38
|
+
# **XulbuX**
|
|
39
|
+
|
|
40
|
+
    
|
|
38
41
|
|
|
39
42
|
**XulbuX** is library that contains many useful classes, types, and functions,
|
|
40
43
|
ranging from console logging and working with colors to file management and system operations.
|
|
41
44
|
The library is designed to simplify common programming tasks and improve code readability through its collection of tools.
|
|
42
45
|
|
|
43
|
-
For precise information about the library, see the library's [**
|
|
46
|
+
For precise information about the library, see the library's [**documentation**](https://github.com/XulbuX/PythonLibraryXulbuX/wiki).<br>
|
|
44
47
|
For the libraries latest changes and updates, see the [**change log**](https://github.com/XulbuX/PythonLibraryXulbuX/blob/main/CHANGELOG.md).
|
|
45
48
|
|
|
46
49
|
<br>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|