absfuyu 5.0.0__py3-none-any.whl → 6.1.2__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 absfuyu might be problematic. Click here for more details.
- absfuyu/__init__.py +5 -3
- absfuyu/__main__.py +3 -3
- absfuyu/cli/__init__.py +13 -2
- absfuyu/cli/audio_group.py +98 -0
- absfuyu/cli/color.py +30 -14
- absfuyu/cli/config_group.py +9 -2
- absfuyu/cli/do_group.py +23 -6
- absfuyu/cli/game_group.py +27 -2
- absfuyu/cli/tool_group.py +81 -11
- absfuyu/config/__init__.py +3 -3
- absfuyu/core/__init__.py +12 -8
- absfuyu/core/baseclass.py +929 -96
- absfuyu/core/baseclass2.py +44 -3
- absfuyu/core/decorator.py +70 -4
- absfuyu/core/docstring.py +64 -41
- absfuyu/core/dummy_cli.py +3 -3
- absfuyu/core/dummy_func.py +19 -6
- absfuyu/dxt/__init__.py +2 -2
- absfuyu/dxt/base_type.py +93 -0
- absfuyu/dxt/dictext.py +204 -16
- absfuyu/dxt/dxt_support.py +2 -2
- absfuyu/dxt/intext.py +151 -34
- absfuyu/dxt/listext.py +969 -127
- absfuyu/dxt/strext.py +77 -17
- absfuyu/extra/__init__.py +2 -2
- absfuyu/extra/audio/__init__.py +8 -0
- absfuyu/extra/audio/_util.py +57 -0
- absfuyu/extra/audio/convert.py +192 -0
- absfuyu/extra/audio/lossless.py +281 -0
- absfuyu/extra/beautiful.py +3 -2
- absfuyu/extra/da/__init__.py +72 -0
- absfuyu/extra/da/dadf.py +1600 -0
- absfuyu/extra/da/dadf_base.py +186 -0
- absfuyu/extra/da/df_func.py +181 -0
- absfuyu/extra/da/mplt.py +219 -0
- absfuyu/extra/ggapi/__init__.py +8 -0
- absfuyu/extra/ggapi/gdrive.py +223 -0
- absfuyu/extra/ggapi/glicense.py +148 -0
- absfuyu/extra/ggapi/glicense_df.py +186 -0
- absfuyu/extra/ggapi/gsheet.py +88 -0
- absfuyu/extra/img/__init__.py +30 -0
- absfuyu/extra/img/converter.py +402 -0
- absfuyu/extra/img/dup_check.py +291 -0
- absfuyu/extra/pdf.py +87 -0
- absfuyu/extra/rclone.py +253 -0
- absfuyu/extra/xml.py +90 -0
- absfuyu/fun/__init__.py +7 -20
- absfuyu/fun/rubik.py +442 -0
- absfuyu/fun/tarot.py +2 -2
- absfuyu/game/__init__.py +2 -2
- absfuyu/game/game_stat.py +2 -2
- absfuyu/game/schulte.py +78 -0
- absfuyu/game/sudoku.py +2 -2
- absfuyu/game/tictactoe.py +2 -3
- absfuyu/game/wordle.py +6 -4
- absfuyu/general/__init__.py +4 -4
- absfuyu/general/content.py +4 -4
- absfuyu/general/human.py +2 -2
- absfuyu/general/resrel.py +213 -0
- absfuyu/general/shape.py +3 -8
- absfuyu/general/tax.py +344 -0
- absfuyu/logger.py +806 -59
- absfuyu/numbers/__init__.py +13 -0
- absfuyu/numbers/number_to_word.py +321 -0
- absfuyu/numbers/shorten_number.py +303 -0
- absfuyu/numbers/time_duration.py +217 -0
- absfuyu/pkg_data/__init__.py +2 -2
- absfuyu/pkg_data/deprecated.py +2 -2
- absfuyu/pkg_data/logo.py +1462 -0
- absfuyu/sort.py +4 -4
- absfuyu/tools/__init__.py +28 -2
- absfuyu/tools/checksum.py +144 -9
- absfuyu/tools/converter.py +120 -34
- absfuyu/tools/generator.py +461 -0
- absfuyu/tools/inspector.py +752 -0
- absfuyu/tools/keygen.py +2 -2
- absfuyu/tools/obfuscator.py +47 -9
- absfuyu/tools/passwordlib.py +89 -25
- absfuyu/tools/shutdownizer.py +3 -8
- absfuyu/tools/sw.py +718 -0
- absfuyu/tools/web.py +10 -13
- absfuyu/typings.py +138 -0
- absfuyu/util/__init__.py +114 -6
- absfuyu/util/api.py +41 -18
- absfuyu/util/cli.py +119 -0
- absfuyu/util/gui.py +91 -0
- absfuyu/util/json_method.py +43 -14
- absfuyu/util/lunar.py +2 -2
- absfuyu/util/package.py +124 -0
- absfuyu/util/path.py +702 -82
- absfuyu/util/performance.py +122 -7
- absfuyu/util/shorten_number.py +244 -21
- absfuyu/util/text_table.py +481 -0
- absfuyu/util/zipped.py +8 -7
- absfuyu/version.py +79 -59
- {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/METADATA +52 -11
- absfuyu-6.1.2.dist-info/RECORD +105 -0
- {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/WHEEL +1 -1
- absfuyu/extra/data_analysis.py +0 -1078
- absfuyu/general/generator.py +0 -303
- absfuyu-5.0.0.dist-info/RECORD +0 -68
- {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/entry_points.txt +0 -0
- {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/licenses/LICENSE +0 -0
absfuyu/version.py
CHANGED
|
@@ -3,10 +3,12 @@ Absfuyu: Version
|
|
|
3
3
|
----------------
|
|
4
4
|
Package versioning module
|
|
5
5
|
|
|
6
|
-
Version:
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 6.1.1
|
|
7
|
+
Date updated: 30/12/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
# Module level
|
|
11
|
+
# ---------------------------------------------------------------------------
|
|
10
12
|
__all__ = [
|
|
11
13
|
# Options
|
|
12
14
|
"ReleaseOption",
|
|
@@ -18,42 +20,50 @@ __all__ = [
|
|
|
18
20
|
]
|
|
19
21
|
|
|
20
22
|
|
|
23
|
+
# Library
|
|
24
|
+
# ---------------------------------------------------------------------------
|
|
21
25
|
import json
|
|
22
26
|
import re
|
|
23
27
|
import subprocess
|
|
24
|
-
from
|
|
28
|
+
from enum import StrEnum
|
|
29
|
+
from typing import Self, TypedDict
|
|
25
30
|
from urllib.error import URLError
|
|
26
31
|
from urllib.request import Request, urlopen
|
|
27
32
|
|
|
28
|
-
from absfuyu.
|
|
33
|
+
from absfuyu.core import BaseClass
|
|
34
|
+
from absfuyu.logger import LoggerMixin
|
|
29
35
|
|
|
30
36
|
|
|
31
|
-
|
|
37
|
+
# Class
|
|
38
|
+
# ---------------------------------------------------------------------------
|
|
39
|
+
class ReleaseOption(StrEnum):
|
|
32
40
|
"""
|
|
33
41
|
``MAJOR``, ``MINOR``, ``PATCH``
|
|
34
42
|
"""
|
|
35
43
|
|
|
36
|
-
MAJOR
|
|
37
|
-
MINOR
|
|
38
|
-
PATCH
|
|
44
|
+
MAJOR = "major"
|
|
45
|
+
MINOR = "minor"
|
|
46
|
+
PATCH = "patch"
|
|
39
47
|
|
|
40
|
-
|
|
48
|
+
@classmethod
|
|
49
|
+
def all_option(cls) -> list[str]:
|
|
41
50
|
"""Return a list of release options"""
|
|
42
|
-
return [
|
|
51
|
+
return [cls.MAJOR.value, cls.MINOR.value, cls.PATCH.value]
|
|
43
52
|
|
|
44
53
|
|
|
45
|
-
class ReleaseLevel:
|
|
54
|
+
class ReleaseLevel(StrEnum):
|
|
46
55
|
"""
|
|
47
56
|
``FINAL``, ``DEV``, ``RC``
|
|
48
57
|
"""
|
|
49
58
|
|
|
50
|
-
FINAL
|
|
51
|
-
DEV
|
|
52
|
-
RC
|
|
59
|
+
FINAL = "final"
|
|
60
|
+
DEV = "dev"
|
|
61
|
+
RC = "rc" # Release candidate
|
|
53
62
|
|
|
54
|
-
|
|
63
|
+
@classmethod
|
|
64
|
+
def all_level(cls) -> list[str]:
|
|
55
65
|
"""Return a list of release levels"""
|
|
56
|
-
return [
|
|
66
|
+
return [cls.FINAL.value, cls.DEV.value, cls.RC.value]
|
|
57
67
|
|
|
58
68
|
|
|
59
69
|
class VersionDictFormat(TypedDict):
|
|
@@ -74,30 +84,36 @@ class VersionDictFormat(TypedDict):
|
|
|
74
84
|
serial: int
|
|
75
85
|
|
|
76
86
|
|
|
77
|
-
class Version:
|
|
87
|
+
class Version(LoggerMixin, BaseClass):
|
|
78
88
|
"""Version"""
|
|
79
89
|
|
|
80
90
|
def __init__(
|
|
81
91
|
self,
|
|
82
|
-
major:
|
|
83
|
-
minor:
|
|
84
|
-
patch:
|
|
92
|
+
major: int | str,
|
|
93
|
+
minor: int | str,
|
|
94
|
+
patch: int | str,
|
|
85
95
|
release_level: str = ReleaseLevel.FINAL,
|
|
86
|
-
serial:
|
|
96
|
+
serial: int | str = 0,
|
|
87
97
|
) -> None:
|
|
88
98
|
"""
|
|
89
99
|
Create ``Version`` instance
|
|
90
100
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
Parameters
|
|
102
|
+
----------
|
|
103
|
+
major : int | str
|
|
104
|
+
Major change
|
|
105
|
+
|
|
106
|
+
minor : int | str
|
|
107
|
+
Minor change
|
|
108
|
+
|
|
109
|
+
patch : int | str
|
|
110
|
+
Patch
|
|
111
|
+
|
|
112
|
+
release_level : str, optional
|
|
113
|
+
Release level: ``final`` | ``rc`` | ``dev``, by default ``ReleaseLevel.FINAL``
|
|
114
|
+
|
|
115
|
+
serial : int | str, optional
|
|
116
|
+
Serial for release level ``rc`` | ``dev``, by default ``0``
|
|
101
117
|
"""
|
|
102
118
|
self.major: int = major if isinstance(major, int) else int(major)
|
|
103
119
|
self.minor: int = minor if isinstance(minor, int) else int(minor)
|
|
@@ -108,15 +124,16 @@ class Version:
|
|
|
108
124
|
def __str__(self) -> str:
|
|
109
125
|
return self.version
|
|
110
126
|
|
|
111
|
-
def __repr__(self) -> str:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
127
|
+
# def __repr__(self) -> str:
|
|
128
|
+
# cls_name = self.__class__.__name__
|
|
129
|
+
# if self.release_level.startswith(ReleaseLevel.FINAL):
|
|
130
|
+
# return f"{cls_name}(major={self.major}, minor={self.minor}, patch={self.patch})"
|
|
131
|
+
# else:
|
|
132
|
+
# return (
|
|
133
|
+
# f"{cls_name}("
|
|
134
|
+
# f"major={self.major}, minor={self.minor}, patch={self.patch}, "
|
|
135
|
+
# f"release_level={self.release_level}, serial={self.serial})"
|
|
136
|
+
# )
|
|
120
137
|
|
|
121
138
|
def __format__(self, format_spec: str) -> str:
|
|
122
139
|
"""
|
|
@@ -152,7 +169,7 @@ class Version:
|
|
|
152
169
|
>>> test = Version(1, 0, 0)
|
|
153
170
|
>>> test.version
|
|
154
171
|
1.0.0
|
|
155
|
-
>>> str(test)
|
|
172
|
+
>>> str(test) # test.__str__()
|
|
156
173
|
1.0.0
|
|
157
174
|
|
|
158
175
|
>>> test_serial = Version(1, 0, 0, "dev", 1)
|
|
@@ -166,8 +183,8 @@ class Version:
|
|
|
166
183
|
|
|
167
184
|
@classmethod
|
|
168
185
|
def from_tuple(
|
|
169
|
-
cls, iterable:
|
|
170
|
-
):
|
|
186
|
+
cls, iterable: tuple[int, int, int] | tuple[int, int, int, str, int]
|
|
187
|
+
) -> Self:
|
|
171
188
|
"""
|
|
172
189
|
Convert to ``Version`` from a ``tuple``
|
|
173
190
|
|
|
@@ -203,7 +220,7 @@ class Version:
|
|
|
203
220
|
raise ValueError("iterable must have len of 5 or 3")
|
|
204
221
|
|
|
205
222
|
@classmethod
|
|
206
|
-
def from_str(cls, version_string: str):
|
|
223
|
+
def from_str(cls, version_string: str) -> Self:
|
|
207
224
|
"""
|
|
208
225
|
Convert to ``Version`` from a ``str``
|
|
209
226
|
|
|
@@ -323,12 +340,12 @@ class Bumper(Version):
|
|
|
323
340
|
"""
|
|
324
341
|
# Check conditions - use default values if fail
|
|
325
342
|
if option not in ReleaseOption.all_option():
|
|
326
|
-
logger.warning(f"Available option: {ReleaseOption.all_option()}")
|
|
343
|
+
self.logger.warning(f"Available option: {ReleaseOption.all_option()}")
|
|
327
344
|
option = ReleaseOption.PATCH
|
|
328
345
|
if channel not in ReleaseLevel.all_level():
|
|
329
|
-
logger.warning(f"Available level: {ReleaseLevel.all_level()}")
|
|
346
|
+
self.logger.warning(f"Available level: {ReleaseLevel.all_level()}")
|
|
330
347
|
channel = ReleaseLevel.FINAL
|
|
331
|
-
logger.debug(f"Target: {option} {channel}")
|
|
348
|
+
self.logger.debug(f"Target: {option} {channel}")
|
|
332
349
|
|
|
333
350
|
# Bump ver
|
|
334
351
|
if channel.startswith(ReleaseLevel.FINAL): # Final release level
|
|
@@ -364,7 +381,7 @@ class Bumper(Version):
|
|
|
364
381
|
self._bump_ver(option)
|
|
365
382
|
|
|
366
383
|
|
|
367
|
-
class PkgVersion:
|
|
384
|
+
class PkgVersion(LoggerMixin):
|
|
368
385
|
"""
|
|
369
386
|
Package Version
|
|
370
387
|
"""
|
|
@@ -373,8 +390,7 @@ class PkgVersion:
|
|
|
373
390
|
self.package_name = package_name
|
|
374
391
|
|
|
375
392
|
# Check for update
|
|
376
|
-
|
|
377
|
-
def _fetch_data_from_server(link: str):
|
|
393
|
+
def _fetch_data_from_server(self, link: str):
|
|
378
394
|
"""Fetch data from API"""
|
|
379
395
|
req = Request(link)
|
|
380
396
|
try:
|
|
@@ -382,13 +398,13 @@ class PkgVersion:
|
|
|
382
398
|
# return response
|
|
383
399
|
except URLError as e:
|
|
384
400
|
if hasattr(e, "reason"):
|
|
385
|
-
logger.error("Failed to reach server.")
|
|
386
|
-
logger.error("Reason: ", e.reason)
|
|
401
|
+
self.logger.error("Failed to reach server.")
|
|
402
|
+
self.logger.error("Reason: ", e.reason)
|
|
387
403
|
elif hasattr(e, "code"):
|
|
388
|
-
logger.error("The server couldn't fulfill the request.")
|
|
389
|
-
logger.error("Error code: ", e.code)
|
|
404
|
+
self.logger.error("The server couldn't fulfill the request.")
|
|
405
|
+
self.logger.error("Error code: ", e.code)
|
|
390
406
|
except Exception:
|
|
391
|
-
logger.error("Fetch failed!")
|
|
407
|
+
self.logger.error("Fetch failed!")
|
|
392
408
|
else:
|
|
393
409
|
return response.read().decode()
|
|
394
410
|
|
|
@@ -423,15 +439,19 @@ class PkgVersion:
|
|
|
423
439
|
"""
|
|
424
440
|
link = f"https://pypi.org/pypi/{self.package_name}/json"
|
|
425
441
|
ver: str = self._load_data_from_json(link)["info"]["version"]
|
|
426
|
-
logger.debug(f"Latest: {ver}")
|
|
442
|
+
self.logger.debug(f"Latest: {ver}")
|
|
427
443
|
return ver
|
|
428
444
|
|
|
429
445
|
def _get_update(self):
|
|
430
446
|
"""
|
|
431
447
|
Run pip upgrade command
|
|
432
448
|
"""
|
|
433
|
-
|
|
434
|
-
|
|
449
|
+
try:
|
|
450
|
+
cmd = f"pip install -U {self.package_name}".split()
|
|
451
|
+
return subprocess.run(cmd)
|
|
452
|
+
except Exception:
|
|
453
|
+
cmd = f"python -m pip install -U {self.package_name}".split()
|
|
454
|
+
return subprocess.run(cmd)
|
|
435
455
|
|
|
436
456
|
def check_for_update(
|
|
437
457
|
self,
|
|
@@ -458,7 +478,7 @@ class PkgVersion:
|
|
|
458
478
|
except Exception:
|
|
459
479
|
current = ""
|
|
460
480
|
|
|
461
|
-
logger.debug(f"Current: {current} | Lastest: {latest}")
|
|
481
|
+
self.logger.debug(f"Current: {current} | Lastest: {latest}")
|
|
462
482
|
|
|
463
483
|
if current == latest:
|
|
464
484
|
print(f"You are using the latest version ({latest})")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: absfuyu
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.1.2
|
|
4
4
|
Summary: A small collection of code
|
|
5
5
|
Project-URL: Homepage, https://github.com/AbsoluteWinter/absfuyu-public
|
|
6
6
|
Project-URL: Documentation, https://absolutewinter.github.io/absfuyu-docs/
|
|
@@ -18,35 +18,69 @@ Classifier: Natural Language :: English
|
|
|
18
18
|
Classifier: Operating System :: OS Independent
|
|
19
19
|
Classifier: Programming Language :: Python :: 3
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
24
|
Classifier: Topic :: Software Development :: Libraries
|
|
25
25
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
26
|
Classifier: Topic :: Utilities
|
|
27
|
-
Requires-Python: <4,>=3.
|
|
28
|
-
Requires-Dist: bs4
|
|
27
|
+
Requires-Python: <4,>=3.12
|
|
29
28
|
Requires-Dist: click>=8.0.0
|
|
30
29
|
Requires-Dist: colorama
|
|
31
|
-
Requires-Dist: requests
|
|
32
30
|
Provides-Extra: beautiful
|
|
33
31
|
Requires-Dist: rich; extra == 'beautiful'
|
|
34
|
-
Provides-Extra:
|
|
35
|
-
Requires-Dist:
|
|
36
|
-
Requires-Dist:
|
|
32
|
+
Provides-Extra: dadf
|
|
33
|
+
Requires-Dist: numpy; extra == 'dadf'
|
|
34
|
+
Requires-Dist: openpyxl; extra == 'dadf'
|
|
35
|
+
Requires-Dist: pandas; extra == 'dadf'
|
|
36
|
+
Requires-Dist: xlsxwriter; extra == 'dadf'
|
|
37
37
|
Provides-Extra: docs
|
|
38
38
|
Requires-Dist: numpy; extra == 'docs'
|
|
39
39
|
Requires-Dist: pandas; extra == 'docs'
|
|
40
40
|
Requires-Dist: rich; extra == 'docs'
|
|
41
|
+
Requires-Dist: spire-pdf; extra == 'docs'
|
|
41
42
|
Provides-Extra: extra
|
|
42
43
|
Requires-Dist: numpy; extra == 'extra'
|
|
44
|
+
Requires-Dist: openpyxl; extra == 'extra'
|
|
43
45
|
Requires-Dist: pandas; extra == 'extra'
|
|
46
|
+
Requires-Dist: pillow; extra == 'extra'
|
|
47
|
+
Requires-Dist: spire-pdf; extra == 'extra'
|
|
48
|
+
Requires-Dist: xlsxwriter; extra == 'extra'
|
|
49
|
+
Requires-Dist: xmltodict; extra == 'extra'
|
|
44
50
|
Provides-Extra: full
|
|
51
|
+
Requires-Dist: bs4; extra == 'full'
|
|
52
|
+
Requires-Dist: defusedxml; extra == 'full'
|
|
53
|
+
Requires-Dist: google-api-python-client>=2.187.0; extra == 'full'
|
|
54
|
+
Requires-Dist: google-auth>=2.45.0; extra == 'full'
|
|
55
|
+
Requires-Dist: imagehash; extra == 'full'
|
|
45
56
|
Requires-Dist: numpy; extra == 'full'
|
|
57
|
+
Requires-Dist: olefile; extra == 'full'
|
|
58
|
+
Requires-Dist: openpyxl; extra == 'full'
|
|
46
59
|
Requires-Dist: pandas; extra == 'full'
|
|
60
|
+
Requires-Dist: pillow; extra == 'full'
|
|
61
|
+
Requires-Dist: pillow-heif; extra == 'full'
|
|
62
|
+
Requires-Dist: rclone-crypt; extra == 'full'
|
|
63
|
+
Requires-Dist: requests; extra == 'full'
|
|
47
64
|
Requires-Dist: rich; extra == 'full'
|
|
65
|
+
Requires-Dist: spire-pdf; extra == 'full'
|
|
48
66
|
Requires-Dist: tqdm; extra == 'full'
|
|
49
67
|
Requires-Dist: unidecode; extra == 'full'
|
|
68
|
+
Requires-Dist: xlsxwriter; extra == 'full'
|
|
69
|
+
Requires-Dist: xmltodict; extra == 'full'
|
|
70
|
+
Provides-Extra: ggapi
|
|
71
|
+
Requires-Dist: google-api-python-client; extra == 'ggapi'
|
|
72
|
+
Requires-Dist: google-auth; extra == 'ggapi'
|
|
73
|
+
Requires-Dist: requests; extra == 'ggapi'
|
|
74
|
+
Provides-Extra: pdf
|
|
75
|
+
Requires-Dist: spire-pdf; extra == 'pdf'
|
|
76
|
+
Provides-Extra: pic
|
|
77
|
+
Requires-Dist: defusedxml; extra == 'pic'
|
|
78
|
+
Requires-Dist: imagehash; extra == 'pic'
|
|
79
|
+
Requires-Dist: pillow; extra == 'pic'
|
|
80
|
+
Provides-Extra: rclone
|
|
81
|
+
Requires-Dist: rclone-crypt; extra == 'rclone'
|
|
82
|
+
Provides-Extra: xml
|
|
83
|
+
Requires-Dist: xmltodict; extra == 'xml'
|
|
50
84
|
Description-Content-Type: text/markdown
|
|
51
85
|
|
|
52
86
|
<div align="center">
|
|
@@ -86,14 +120,14 @@ help(absfuyu)
|
|
|
86
120
|
|
|
87
121
|
### Notable features
|
|
88
122
|
|
|
89
|
-
**absfuyu.core**: Provides
|
|
123
|
+
**absfuyu.core**: Provides base components for additional functionalities.
|
|
90
124
|
|
|
91
125
|
```python
|
|
92
126
|
# Decorators that adds info to __doc__
|
|
93
127
|
from absfuyu.core.docstring import versionadded, versionchanged, deprecated
|
|
94
128
|
|
|
95
129
|
# Class mixins for enhanced functionality
|
|
96
|
-
from absfuyu.core.baseclass import AutoREPRMixin,
|
|
130
|
+
from absfuyu.core.baseclass import AutoREPRMixin, GetClassMembersMixin
|
|
97
131
|
```
|
|
98
132
|
|
|
99
133
|
**absfuyu.dxt**: Extension for `list`, `str`, `dict`, `int`.
|
|
@@ -104,13 +138,20 @@ for x in [DictExt, IntExt, ListExt, Text]:
|
|
|
104
138
|
x.show_all_methods(print_result=1)
|
|
105
139
|
```
|
|
106
140
|
|
|
141
|
+
**absfuyu.tools.Inspector**: An object inspector
|
|
142
|
+
|
|
143
|
+
```python
|
|
144
|
+
from absfuyu.tools import Inspector
|
|
145
|
+
print(Inspector(Inspector))
|
|
146
|
+
```
|
|
147
|
+
|
|
107
148
|
There are many additional features available to explore.
|
|
108
149
|
|
|
109
150
|
## **DOCUMENTATION:**
|
|
110
151
|
|
|
111
152
|
For more detailed information about the project, please refer to the documentation available at the following link:
|
|
112
153
|
|
|
113
|
-
> [Project Documentation](https://absolutewinter.github.io/absfuyu/)
|
|
154
|
+
> [Project Documentation](https://absolutewinter.github.io/absfuyu-docs/)
|
|
114
155
|
|
|
115
156
|
## **DEVELOPMENT SETUP**
|
|
116
157
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
absfuyu/__init__.py,sha256=LrtRarCi8OX3rwpmMLk_SrLrlOoDYPBU7FUpKORXao4,632
|
|
2
|
+
absfuyu/__main__.py,sha256=dS_wTwII035popUqt21jRvWivpxTNrb9mfVCB-xKajw,595
|
|
3
|
+
absfuyu/logger.py,sha256=wJ3xtrAjh0NHR35DwgjOQTz8P91KqZiJ-j7W_2eTWQM,36312
|
|
4
|
+
absfuyu/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
absfuyu/sort.py,sha256=DJtlloXMLh41Rm4X3IuuyT4Bid8eTYgjPFOQxEODlhk,3268
|
|
6
|
+
absfuyu/typings.py,sha256=Dqczu9_YLizDy2cGq6sbToHvPqRUIm9mwKV_X3G-drM,4645
|
|
7
|
+
absfuyu/version.py,sha256=TzUxU0Mq_wLggPvZYjcroByTqVR5dIdPUwWRoLqc_p0,14722
|
|
8
|
+
absfuyu/cli/__init__.py,sha256=MRUsAt9rfIBAaPPlP1o0HDwR2XJTtlsMUgQO6Xy2lMk,1526
|
|
9
|
+
absfuyu/cli/audio_group.py,sha256=wmb0L3bzcWyFPkDI5MKmCBfFlaaJDuwdCpZoUQCtf2Y,2516
|
|
10
|
+
absfuyu/cli/color.py,sha256=kGJoySQPjlezpbwLRv5hvMWYtX311364cHV_gVHtapk,1139
|
|
11
|
+
absfuyu/cli/config_group.py,sha256=51seuQrpoMHytL6-pn7kpQ0xUtIUn8okKiq-WNES_go,1505
|
|
12
|
+
absfuyu/cli/do_group.py,sha256=56swhJ1_tWxg9hnxM7QGHrjLh0324IPVFT--p3qx3Lo,2720
|
|
13
|
+
absfuyu/cli/game_group.py,sha256=xSJXlDVO7-KajFWuVIjGogpKdOm8rd3OP4N9P0CWBVs,3016
|
|
14
|
+
absfuyu/cli/tool_group.py,sha256=eyMCPMr6XktNIxEFjYhWz6NvMF26IsuNe7ziop1QdCU,5192
|
|
15
|
+
absfuyu/config/__init__.py,sha256=2rzeDF3yQXHwpf1YtVamX-QK4sjx799gUa8eMGyv49s,8253
|
|
16
|
+
absfuyu/config/config.json,sha256=-ZQnmDuLq0aAFfsrQbSNR3tq5k9Eu9IVUQgYD9htIQM,646
|
|
17
|
+
absfuyu/core/__init__.py,sha256=ntGkKWzW9_n5_Me33ya9vogrbYb7n-XNMTB4xFz4G6o,1300
|
|
18
|
+
absfuyu/core/baseclass.py,sha256=YsAKfU8dEWHxHQQt7-TghfpQ1jEB6QBusgZs773YRXs,37016
|
|
19
|
+
absfuyu/core/baseclass2.py,sha256=MWbrwQANsSIYkfS2RYZi8Wbv-_XUoXgh5w-1WTCfTxY,6338
|
|
20
|
+
absfuyu/core/decorator.py,sha256=JoswEI4sS5fqg-SSsPrfYgtF066-XiGn2SckS4QnCsE,4176
|
|
21
|
+
absfuyu/core/docstring.py,sha256=_dK_bXMshWsEMZ1oYdMP0F4LuuyfvVGxe5TRsTMJJzQ,5916
|
|
22
|
+
absfuyu/core/dummy_cli.py,sha256=c4CbV5cJV0IFi8mgrAdE726QXXfduj9kxt6_IesqlTo,1877
|
|
23
|
+
absfuyu/core/dummy_func.py,sha256=WM10EivEA5rYb3rgCjB5g8oQDPD5IDCW_LczXSoHJ0o,1426
|
|
24
|
+
absfuyu/dxt/__init__.py,sha256=KTQVVEr1IjOrgepuvCr0hJTjlgnSl4B3fx3Y3BNzeBU,986
|
|
25
|
+
absfuyu/dxt/base_type.py,sha256=wDqjd_zZllW773rhz-YdGizHup3CYNkZMMxLB08Eyys,2815
|
|
26
|
+
absfuyu/dxt/dictext.py,sha256=ufOljeEory6Qw0NITqjbmDW5WrN2IjDUkhvgqBUcXxU,12267
|
|
27
|
+
absfuyu/dxt/dxt_support.py,sha256=cV1vQB6_xI3fY86M30c2TYmEwv730a6fKOhuBjNI6OE,2109
|
|
28
|
+
absfuyu/dxt/intext.py,sha256=OXbFuAA2WmAzjpAcFwFNP-NoDlx3VtdHU-eI7XTuy5Y,19805
|
|
29
|
+
absfuyu/dxt/listext.py,sha256=jtHr3OOngqsTkQoxmNQFIyBinYk1IXq2C8L6xDbpz48,36838
|
|
30
|
+
absfuyu/dxt/strext.py,sha256=gfN11_GZFYklBsWCAgNXr6Fr0opVHZ5Q1V8-U_o47No,16275
|
|
31
|
+
absfuyu/extra/__init__.py,sha256=Z052dILT65vdSQVx2FRKRSzH0Prb_edGzWx926Nzzcc,182
|
|
32
|
+
absfuyu/extra/beautiful.py,sha256=YNXyuHBjKeaGeQUJ4okFCjROl8FqNYCHZNSJ3cYFYhY,8137
|
|
33
|
+
absfuyu/extra/pdf.py,sha256=YlGTXwwFWjn22nk6bmxYarkLQfPBp7DR8qm5X9HSm_E,2481
|
|
34
|
+
absfuyu/extra/rclone.py,sha256=0qwroIXU0AVNWFgDJpW6VRX17XE5_2rcZgJrd4uMhc8,8484
|
|
35
|
+
absfuyu/extra/xml.py,sha256=GCcwubQNLllrB25Oj5WlWKjw5WLV0A1aIb7JWZ1vyN4,2157
|
|
36
|
+
absfuyu/extra/audio/__init__.py,sha256=wBVRuCp9Sfx3tuDTTJq5u9CgAWVfiOH-8tY_LiJgLWo,114
|
|
37
|
+
absfuyu/extra/audio/_util.py,sha256=Wwy4nLqD--Kz06EgMcqYl7QTxqi0Lv-97XHq5M3oWgg,1451
|
|
38
|
+
absfuyu/extra/audio/convert.py,sha256=hCIAGtZJTm5tqjnA_Jyr4RXBbuzw_5oNjjCd3WewzZs,5771
|
|
39
|
+
absfuyu/extra/audio/lossless.py,sha256=xXD22N6zCxwIV5L3sy1YUWu4sN_Kk7sq9K-4GZYwV2Y,8295
|
|
40
|
+
absfuyu/extra/da/__init__.py,sha256=xm-qHpMa3mOx4DUlg_7EhVm-u7kQ9wOqonS6_i2Oe0g,1886
|
|
41
|
+
absfuyu/extra/da/dadf.py,sha256=3ZL4VSeAoSzcgeYLfbECLuPtr2-Ic6P2pseot91_5wk,53364
|
|
42
|
+
absfuyu/extra/da/dadf_base.py,sha256=_DhhJ6NyS4TAljMkj6cSHIpi-8MfocOHmtlz9bod2fI,5167
|
|
43
|
+
absfuyu/extra/da/df_func.py,sha256=_ubTdzDNKg4b0Z4U9H6rW4D3oG5wWjdXWHknK8v_wi0,5021
|
|
44
|
+
absfuyu/extra/da/mplt.py,sha256=pyZ12SC3OQzdGYIVIH8oKIiqYw_FWEpEvZr3OWruoa0,6305
|
|
45
|
+
absfuyu/extra/ggapi/__init__.py,sha256=c2Mf-QEvSVTshB1wnXN9qip3yqo_shbd2jgW7YZWH54,129
|
|
46
|
+
absfuyu/extra/ggapi/gdrive.py,sha256=j5MNWQJNOrFn1pTFOzttazyj1C8PSt2zYgryh_ZH79g,7204
|
|
47
|
+
absfuyu/extra/ggapi/glicense.py,sha256=r-xSdcA1q2DaJmiL20jiT9wS96VAi78BCiNJNq2yip4,4343
|
|
48
|
+
absfuyu/extra/ggapi/glicense_df.py,sha256=_VwaF1W3NXbz1mFpLNS-POPDLwmsKJsCCKm1RXWJ9Us,5376
|
|
49
|
+
absfuyu/extra/ggapi/gsheet.py,sha256=c1rrQWFO-f1fbh0r7S0vKSkZ1OG64aMX2LUB8hf_IoY,2418
|
|
50
|
+
absfuyu/extra/img/__init__.py,sha256=eGAKT6OzQThELwO7GKmqB1K0Scp7abOfSC5VGZC1ESQ,782
|
|
51
|
+
absfuyu/extra/img/converter.py,sha256=kFIUR5WKeaKqjpv_gFfhTNTY8X_rHjLBHQ8kCSS7XBM,11704
|
|
52
|
+
absfuyu/extra/img/dup_check.py,sha256=uB0KEHzsjq_8309UI-Cnx71alGJk0mfmvdizZhdT0M4,9352
|
|
53
|
+
absfuyu/fun/__init__.py,sha256=4xXXs9ckW_2xtgFka9qu2XUIFWO7LIR3MWN5-4NVn6M,5129
|
|
54
|
+
absfuyu/fun/rubik.py,sha256=Hd7Jgn3O05-ZtndpDnMkNFv5HuhLayS2wmwu2pTKwqw,29677
|
|
55
|
+
absfuyu/fun/tarot.py,sha256=u2Sb_efur0KqkTKEOCuTk_EUUZckrd8ZXbjg8t8OF5Q,2401
|
|
56
|
+
absfuyu/game/__init__.py,sha256=s2fLQY5IXwZgrm1y-L6IKQ8BFmGVk3euhHEBS93J9lc,4691
|
|
57
|
+
absfuyu/game/game_stat.py,sha256=yG-FPxqPEHgTdvsvnpt76qeNOJ3JkZbam_Mlaz6mndA,1236
|
|
58
|
+
absfuyu/game/schulte.py,sha256=Tnlmz1DtqHjXGr45GC1AZg7OVm_u0eLc0kKyqfeb1B0,2705
|
|
59
|
+
absfuyu/game/sudoku.py,sha256=JN2uVlYLeng1MoH7Sm2TEPhRG9-X3QmqebPRhd4Hink,10405
|
|
60
|
+
absfuyu/game/tictactoe.py,sha256=sUMlX7j1jy8gripv2rvt5COy7UHkJHD3aNpoDKk5eYo,9958
|
|
61
|
+
absfuyu/game/wordle.py,sha256=ECRPHl6WiLVmijWWTwRBoAQvHuB5XEX7xjLncE4QNWQ,101683
|
|
62
|
+
absfuyu/general/__init__.py,sha256=mhILgSk2yZkr-z5ZhgUbLoQB81O-3jrgWovX30c5yNQ,472
|
|
63
|
+
absfuyu/general/content.py,sha256=UjwUwp0VaNud3aciWq9-MuDOxXQHOjRHsxn4DtjATus,17124
|
|
64
|
+
absfuyu/general/human.py,sha256=P04XLzIQqC43VdtH9ZohBp_7NPfEqDVbTdItW6yz_So,8099
|
|
65
|
+
absfuyu/general/resrel.py,sha256=i_BNDqEDTuYewPrQ8SFdnby4ONrTJgaNg1oAEBxHdzA,6132
|
|
66
|
+
absfuyu/general/shape.py,sha256=JiQA40x0OcPhk9jDqM8Ue0VyCd-2_dXliQPB10Sfcu0,38483
|
|
67
|
+
absfuyu/general/tax.py,sha256=FiVoZmUx1JKWL_DUv1UuF4_RvlFsNYrPz3WMD-0DWO4,11133
|
|
68
|
+
absfuyu/numbers/__init__.py,sha256=MTTEYSsj0TzeK8RFIoez3zREAtTaVkDpoT3-w4A6xdI,286
|
|
69
|
+
absfuyu/numbers/number_to_word.py,sha256=lJbPnJbdI8l7spoyzf0OciJQeDBJgvraslYt0GH5B0E,8113
|
|
70
|
+
absfuyu/numbers/shorten_number.py,sha256=K66Zj0vmkNZa7f8pVX5zBAlrbaHWDr8CIVeBP6Ai59M,8238
|
|
71
|
+
absfuyu/numbers/time_duration.py,sha256=VMGm1GC1NciuZdGUaYVh4qfppOJWBGQyfDMnNfiZTOA,6462
|
|
72
|
+
absfuyu/pkg_data/__init__.py,sha256=sbwefP-4nvzG8CffOoti_3wUmXAvSEAKN7m4LkQTiX0,5510
|
|
73
|
+
absfuyu/pkg_data/chemistry.pkl,sha256=kYWNa_PVffoDnzT8b9Jvimmf_GZshPe1D-SnEKERsLo,4655
|
|
74
|
+
absfuyu/pkg_data/deprecated.py,sha256=e68pgsHSNxHFV8kzfWm3gfFblfdGJiqZqL_IMjqgPSQ,4349
|
|
75
|
+
absfuyu/pkg_data/logo.py,sha256=fjjP6z2MLmadbvyuGdiXBNqL0HzIW_pT6X6LJTBXIy0,160798
|
|
76
|
+
absfuyu/pkg_data/passwordlib_lzma.pkl,sha256=rT5lJT8t42BATU5Cp2qFwbnZkbx-QlUgodSvR0wFY6I,891877
|
|
77
|
+
absfuyu/pkg_data/tarot.pkl,sha256=ssXTCC_BQgslO5F-3a9HivbxFQ6BioIe2E1frPVi2m0,56195
|
|
78
|
+
absfuyu/tools/__init__.py,sha256=uEBw44vS_XEWUjxQ07YFsXO8jn1uCZdAvwGkl2BzPV8,916
|
|
79
|
+
absfuyu/tools/checksum.py,sha256=Nwe8zH130dM6L-4vWWz2iXUGq1M8otv-aksd6TC6r8o,9336
|
|
80
|
+
absfuyu/tools/converter.py,sha256=A6bcnisBF6q0wfyEiFdiQ9KBxub_fZstAh643zyamYU,13566
|
|
81
|
+
absfuyu/tools/generator.py,sha256=aNmjOXHCXU2-D1eDM0qL1J29jDAWgOxFSMQWp1Jr0Po,13961
|
|
82
|
+
absfuyu/tools/inspector.py,sha256=j8lc5rwjFexODQjdXHBwb7va5tNKVo27BFYVLQVRBwU,23951
|
|
83
|
+
absfuyu/tools/keygen.py,sha256=mHU5v3MK2ayVGWtedaRHCHDyRQ56yZNhS2dAMLAqWyA,7115
|
|
84
|
+
absfuyu/tools/obfuscator.py,sha256=5H-8q-I2JOem7ChYuyilg2JkbQxFQM97dhxprDvR5iw,13671
|
|
85
|
+
absfuyu/tools/passwordlib.py,sha256=HvJ2g4xv0AjBSjVYmYzg8cRm2-Ab4viU1OSkefmBBm0,11080
|
|
86
|
+
absfuyu/tools/shutdownizer.py,sha256=TgOT0kvp9fNwWluqiHlqnfaO8QcwBDRl3eUefbHqb5I,8413
|
|
87
|
+
absfuyu/tools/sw.py,sha256=sA1H0Fk-6K7sXb3tXSURstj6b0CkD1PEGHfqoSUXTMs,21318
|
|
88
|
+
absfuyu/tools/web.py,sha256=vscU2RHkDBBY2gDmGugWgahuVSj4HzcBSSK2TpTbsgo,1108
|
|
89
|
+
absfuyu/util/__init__.py,sha256=iGLCzOgP-GoTo9wEUiGzoR8kBi8boyNg2OPVIBFFOxY,6618
|
|
90
|
+
absfuyu/util/api.py,sha256=kq8ZXDt1DJrlWgl-xJwfptqEK0YXWOVxrqndH3CQh1Q,4552
|
|
91
|
+
absfuyu/util/cli.py,sha256=-2YPA1HBGEDq3FmlT9blZqLjUYyASOGvGN_mzDxg6kU,3584
|
|
92
|
+
absfuyu/util/gui.py,sha256=ZVXR6YBAHwv8YNYxnJF4q5vi9NlxbKuvuuu-PXItzNo,2605
|
|
93
|
+
absfuyu/util/json_method.py,sha256=x6bFG2QK4HYqyB-kaI6mZfNz3ngziKtLPf3PBVYm1ok,2847
|
|
94
|
+
absfuyu/util/lunar.py,sha256=_uyV-hWENIzkRQv6JpNzQhgkeoI-PSZ6uFc9yx4IVb4,13630
|
|
95
|
+
absfuyu/util/package.py,sha256=gdnwMhmtD2t2DL4-M2jaPR8peOlLdTEDLc3dNoMavpM,3788
|
|
96
|
+
absfuyu/util/path.py,sha256=-78QSAvKtDiudb-jwjVSd44C6bs0fUwbZCor5oyqksE,32421
|
|
97
|
+
absfuyu/util/performance.py,sha256=_-kX_NxO4afKbgj7_259Wz5OW6GbMPalBBLQDdi4K8g,12094
|
|
98
|
+
absfuyu/util/shorten_number.py,sha256=3MxyQsiDQxaIW1N7B6yKJPVeJ5-gDWWsCWf8m-5fGus,14372
|
|
99
|
+
absfuyu/util/text_table.py,sha256=mg0hl6Ac25sthw-LxZ8iz-em0Q0uQAuaPYs2chfm1e4,13351
|
|
100
|
+
absfuyu/util/zipped.py,sha256=LxZ6FPXNBdSve3fBaklhRhp1ouGUdth1YU0ToH5hQQc,3042
|
|
101
|
+
absfuyu-6.1.2.dist-info/METADATA,sha256=U4MrYwCeegm3Av_RlqJOKlQ-XgXkUkGwGFg3SP0wSf4,6380
|
|
102
|
+
absfuyu-6.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
103
|
+
absfuyu-6.1.2.dist-info/entry_points.txt,sha256=bW5CgJRTTWJ2Pywojo07sf-YucRPcnHzMmETh5avbX0,79
|
|
104
|
+
absfuyu-6.1.2.dist-info/licenses/LICENSE,sha256=pFCHBSNSzdXwYG1AHpq7VcofI1NMQ1Fc77RzZ4Ln2O4,1097
|
|
105
|
+
absfuyu-6.1.2.dist-info/RECORD,,
|