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.

Files changed (103) hide show
  1. absfuyu/__init__.py +5 -3
  2. absfuyu/__main__.py +3 -3
  3. absfuyu/cli/__init__.py +13 -2
  4. absfuyu/cli/audio_group.py +98 -0
  5. absfuyu/cli/color.py +30 -14
  6. absfuyu/cli/config_group.py +9 -2
  7. absfuyu/cli/do_group.py +23 -6
  8. absfuyu/cli/game_group.py +27 -2
  9. absfuyu/cli/tool_group.py +81 -11
  10. absfuyu/config/__init__.py +3 -3
  11. absfuyu/core/__init__.py +12 -8
  12. absfuyu/core/baseclass.py +929 -96
  13. absfuyu/core/baseclass2.py +44 -3
  14. absfuyu/core/decorator.py +70 -4
  15. absfuyu/core/docstring.py +64 -41
  16. absfuyu/core/dummy_cli.py +3 -3
  17. absfuyu/core/dummy_func.py +19 -6
  18. absfuyu/dxt/__init__.py +2 -2
  19. absfuyu/dxt/base_type.py +93 -0
  20. absfuyu/dxt/dictext.py +204 -16
  21. absfuyu/dxt/dxt_support.py +2 -2
  22. absfuyu/dxt/intext.py +151 -34
  23. absfuyu/dxt/listext.py +969 -127
  24. absfuyu/dxt/strext.py +77 -17
  25. absfuyu/extra/__init__.py +2 -2
  26. absfuyu/extra/audio/__init__.py +8 -0
  27. absfuyu/extra/audio/_util.py +57 -0
  28. absfuyu/extra/audio/convert.py +192 -0
  29. absfuyu/extra/audio/lossless.py +281 -0
  30. absfuyu/extra/beautiful.py +3 -2
  31. absfuyu/extra/da/__init__.py +72 -0
  32. absfuyu/extra/da/dadf.py +1600 -0
  33. absfuyu/extra/da/dadf_base.py +186 -0
  34. absfuyu/extra/da/df_func.py +181 -0
  35. absfuyu/extra/da/mplt.py +219 -0
  36. absfuyu/extra/ggapi/__init__.py +8 -0
  37. absfuyu/extra/ggapi/gdrive.py +223 -0
  38. absfuyu/extra/ggapi/glicense.py +148 -0
  39. absfuyu/extra/ggapi/glicense_df.py +186 -0
  40. absfuyu/extra/ggapi/gsheet.py +88 -0
  41. absfuyu/extra/img/__init__.py +30 -0
  42. absfuyu/extra/img/converter.py +402 -0
  43. absfuyu/extra/img/dup_check.py +291 -0
  44. absfuyu/extra/pdf.py +87 -0
  45. absfuyu/extra/rclone.py +253 -0
  46. absfuyu/extra/xml.py +90 -0
  47. absfuyu/fun/__init__.py +7 -20
  48. absfuyu/fun/rubik.py +442 -0
  49. absfuyu/fun/tarot.py +2 -2
  50. absfuyu/game/__init__.py +2 -2
  51. absfuyu/game/game_stat.py +2 -2
  52. absfuyu/game/schulte.py +78 -0
  53. absfuyu/game/sudoku.py +2 -2
  54. absfuyu/game/tictactoe.py +2 -3
  55. absfuyu/game/wordle.py +6 -4
  56. absfuyu/general/__init__.py +4 -4
  57. absfuyu/general/content.py +4 -4
  58. absfuyu/general/human.py +2 -2
  59. absfuyu/general/resrel.py +213 -0
  60. absfuyu/general/shape.py +3 -8
  61. absfuyu/general/tax.py +344 -0
  62. absfuyu/logger.py +806 -59
  63. absfuyu/numbers/__init__.py +13 -0
  64. absfuyu/numbers/number_to_word.py +321 -0
  65. absfuyu/numbers/shorten_number.py +303 -0
  66. absfuyu/numbers/time_duration.py +217 -0
  67. absfuyu/pkg_data/__init__.py +2 -2
  68. absfuyu/pkg_data/deprecated.py +2 -2
  69. absfuyu/pkg_data/logo.py +1462 -0
  70. absfuyu/sort.py +4 -4
  71. absfuyu/tools/__init__.py +28 -2
  72. absfuyu/tools/checksum.py +144 -9
  73. absfuyu/tools/converter.py +120 -34
  74. absfuyu/tools/generator.py +461 -0
  75. absfuyu/tools/inspector.py +752 -0
  76. absfuyu/tools/keygen.py +2 -2
  77. absfuyu/tools/obfuscator.py +47 -9
  78. absfuyu/tools/passwordlib.py +89 -25
  79. absfuyu/tools/shutdownizer.py +3 -8
  80. absfuyu/tools/sw.py +718 -0
  81. absfuyu/tools/web.py +10 -13
  82. absfuyu/typings.py +138 -0
  83. absfuyu/util/__init__.py +114 -6
  84. absfuyu/util/api.py +41 -18
  85. absfuyu/util/cli.py +119 -0
  86. absfuyu/util/gui.py +91 -0
  87. absfuyu/util/json_method.py +43 -14
  88. absfuyu/util/lunar.py +2 -2
  89. absfuyu/util/package.py +124 -0
  90. absfuyu/util/path.py +702 -82
  91. absfuyu/util/performance.py +122 -7
  92. absfuyu/util/shorten_number.py +244 -21
  93. absfuyu/util/text_table.py +481 -0
  94. absfuyu/util/zipped.py +8 -7
  95. absfuyu/version.py +79 -59
  96. {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/METADATA +52 -11
  97. absfuyu-6.1.2.dist-info/RECORD +105 -0
  98. {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/WHEEL +1 -1
  99. absfuyu/extra/data_analysis.py +0 -1078
  100. absfuyu/general/generator.py +0 -303
  101. absfuyu-5.0.0.dist-info/RECORD +0 -68
  102. {absfuyu-5.0.0.dist-info → absfuyu-6.1.2.dist-info}/entry_points.txt +0 -0
  103. {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: 2.1.1
7
- Date updated: 14/04/2024 (dd/mm/yyyy)
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 typing import List, Tuple, TypedDict, Union
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.logger import logger
33
+ from absfuyu.core import BaseClass
34
+ from absfuyu.logger import LoggerMixin
29
35
 
30
36
 
31
- class ReleaseOption:
37
+ # Class
38
+ # ---------------------------------------------------------------------------
39
+ class ReleaseOption(StrEnum):
32
40
  """
33
41
  ``MAJOR``, ``MINOR``, ``PATCH``
34
42
  """
35
43
 
36
- MAJOR: str = "major"
37
- MINOR: str = "minor"
38
- PATCH: str = "patch"
44
+ MAJOR = "major"
45
+ MINOR = "minor"
46
+ PATCH = "patch"
39
47
 
40
- def all_option() -> List[str]: # type: ignore
48
+ @classmethod
49
+ def all_option(cls) -> list[str]:
41
50
  """Return a list of release options"""
42
- return [__class__.MAJOR, __class__.MINOR, __class__.PATCH] # type: ignore
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: str = "final"
51
- DEV: str = "dev"
52
- RC: str = "rc" # Release candidate
59
+ FINAL = "final"
60
+ DEV = "dev"
61
+ RC = "rc" # Release candidate
53
62
 
54
- def all_level() -> List[str]: # type: ignore
63
+ @classmethod
64
+ def all_level(cls) -> list[str]:
55
65
  """Return a list of release levels"""
56
- return [__class__.FINAL, __class__.DEV, __class__.RC] # type: ignore
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: Union[int, str],
83
- minor: Union[int, str],
84
- patch: Union[int, str],
92
+ major: int | str,
93
+ minor: int | str,
94
+ patch: int | str,
85
95
  release_level: str = ReleaseLevel.FINAL,
86
- serial: Union[int, str] = 0,
96
+ serial: int | str = 0,
87
97
  ) -> None:
88
98
  """
89
99
  Create ``Version`` instance
90
100
 
91
- :param major: Major change
92
- :type major: int | str
93
- :param minor: Minor change
94
- :type minor: int | str
95
- :param patch: Patch
96
- :type patch: int | str
97
- :param release_level: Release level: ``final``|``rc``|``dev``
98
- :type release_level: str
99
- :param serial: Serial for release level ``rc``|``dev``
100
- :type serial: int | str
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
- if self.release_level.startswith(ReleaseLevel.FINAL):
113
- return f"{self.__class__.__name__}(major={self.major}, minor={self.minor}, patch={self.patch})"
114
- else:
115
- return (
116
- f"{self.__class__.__name__}("
117
- f"major={self.major}, minor={self.minor}, patch={self.patch}, "
118
- f"release_level={self.release_level}, serial={self.serial})"
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) # test.__str__()
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: Union[Tuple[int, int, int], Tuple[int, int, int, str, int]]
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
- @staticmethod
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
- cmd = f"pip install -U {self.package_name}".split()
434
- return subprocess.run(cmd)
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: 5.0.0
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.11
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: dev
35
- Requires-Dist: hatch; extra == 'dev'
36
- Requires-Dist: pytest; extra == 'dev'
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 foundational components for additional functionalities.
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, ShowAllMethodsMixin
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any