absfuyu 5.5.0__tar.gz → 5.6.0__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 absfuyu might be problematic. Click here for more details.

Files changed (122) hide show
  1. {absfuyu-5.5.0 → absfuyu-5.6.0}/PKG-INFO +6 -1
  2. {absfuyu-5.5.0 → absfuyu-5.6.0}/pyproject.toml +6 -3
  3. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/__init__.py +1 -1
  4. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/__main__.py +2 -2
  5. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/__init__.py +2 -2
  6. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/color.py +2 -2
  7. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/config_group.py +2 -2
  8. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/do_group.py +2 -2
  9. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/game_group.py +2 -2
  10. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/cli/tool_group.py +2 -2
  11. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/config/__init__.py +2 -2
  12. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/__init__.py +2 -2
  13. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/baseclass.py +9 -3
  14. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/baseclass2.py +2 -2
  15. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/decorator.py +2 -2
  16. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/docstring.py +2 -2
  17. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/dummy_cli.py +2 -2
  18. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/core/dummy_func.py +2 -2
  19. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/__init__.py +2 -2
  20. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/dictext.py +2 -2
  21. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/dxt_support.py +2 -2
  22. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/intext.py +2 -2
  23. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/listext.py +2 -2
  24. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/dxt/strext.py +3 -3
  25. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/__init__.py +2 -2
  26. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/beautiful.py +2 -2
  27. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/da/__init__.py +3 -3
  28. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/da/dadf.py +2 -2
  29. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/da/dadf_base.py +2 -2
  30. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/da/df_func.py +2 -2
  31. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/da/mplt.py +2 -2
  32. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/extra/data_analysis.py +2 -2
  33. absfuyu-5.6.0/src/absfuyu/extra/pdf.py +89 -0
  34. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/fun/__init__.py +2 -2
  35. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/fun/rubik.py +2 -2
  36. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/fun/tarot.py +2 -2
  37. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/game/__init__.py +2 -2
  38. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/game/game_stat.py +2 -2
  39. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/game/sudoku.py +2 -2
  40. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/game/tictactoe.py +2 -2
  41. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/game/wordle.py +2 -2
  42. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/general/__init__.py +2 -2
  43. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/general/content.py +2 -2
  44. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/general/human.py +2 -2
  45. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/general/shape.py +2 -2
  46. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/logger.py +2 -2
  47. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/pkg_data/__init__.py +2 -2
  48. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/pkg_data/deprecated.py +2 -2
  49. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/sort.py +2 -2
  50. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/__init__.py +2 -2
  51. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/checksum.py +2 -2
  52. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/converter.py +2 -2
  53. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/generator.py +2 -2
  54. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/inspector.py +5 -7
  55. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/keygen.py +2 -2
  56. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/obfuscator.py +2 -2
  57. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/passwordlib.py +2 -2
  58. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/shutdownizer.py +2 -2
  59. absfuyu-5.6.0/src/absfuyu/tools/sw.py +514 -0
  60. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/tools/web.py +2 -2
  61. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/typings.py +2 -2
  62. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/__init__.py +14 -3
  63. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/api.py +2 -2
  64. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/json_method.py +2 -2
  65. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/lunar.py +2 -2
  66. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/path.py +38 -2
  67. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/performance.py +2 -2
  68. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/shorten_number.py +2 -2
  69. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/text_table.py +2 -2
  70. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/util/zipped.py +2 -2
  71. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/version.py +2 -2
  72. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/conftest.py +2 -2
  73. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_api.py +2 -2
  74. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_beautiful.py +2 -2
  75. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_config.py +2 -2
  76. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_converter.py +2 -2
  77. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_core.py +2 -2
  78. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_data_analysis.py +2 -2
  79. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_dictext.py +2 -2
  80. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_everything.py +2 -2
  81. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_extra.py +2 -2
  82. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_fun.py +2 -2
  83. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_game.py +2 -2
  84. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_generator.py +2 -2
  85. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_inspector.py +2 -2
  86. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_intext.py +2 -2
  87. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_listext.py +2 -2
  88. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_logger.py +2 -2
  89. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_obfuscator.py +2 -2
  90. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_passwordlib.py +2 -2
  91. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_performance.py +2 -2
  92. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_pkg_data.py +2 -2
  93. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_shape.py +2 -2
  94. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_shorten_number.py +2 -2
  95. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_strext.py +2 -2
  96. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_text_table.py +2 -2
  97. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_tools.py +2 -2
  98. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_util.py +2 -2
  99. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/test_version.py +2 -2
  100. {absfuyu-5.5.0 → absfuyu-5.6.0}/.gitignore +0 -0
  101. {absfuyu-5.5.0 → absfuyu-5.6.0}/LICENSE +0 -0
  102. {absfuyu-5.5.0 → absfuyu-5.6.0}/README.md +0 -0
  103. {absfuyu-5.5.0 → absfuyu-5.6.0}/dev_requirements.txt +0 -0
  104. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/Makefile +0 -0
  105. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/_template/versioning.html +0 -0
  106. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/conf.py +0 -0
  107. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/index.rst +0 -0
  108. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/info.md +0 -0
  109. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/make.bat +0 -0
  110. {absfuyu-5.5.0 → absfuyu-5.6.0}/docs/modules.rst +0 -0
  111. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/Logo Full.png +0 -0
  112. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/Logo Square.png +0 -0
  113. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/Logo White.png +0 -0
  114. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/repository-image-crop.png +0 -0
  115. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/repository-image-white.png +0 -0
  116. {absfuyu-5.5.0 → absfuyu-5.6.0}/images/repository-image.png +0 -0
  117. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/config/config.json +0 -0
  118. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
  119. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
  120. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/pkg_data/tarot.pkl +0 -0
  121. {absfuyu-5.5.0 → absfuyu-5.6.0}/src/absfuyu/py.typed +0 -0
  122. {absfuyu-5.5.0 → absfuyu-5.6.0}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: absfuyu
3
- Version: 5.5.0
3
+ Version: 5.6.0
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/
@@ -38,13 +38,18 @@ 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: spire-pdf; extra == 'extra'
44
47
  Provides-Extra: full
45
48
  Requires-Dist: numpy; extra == 'full'
49
+ Requires-Dist: openpyxl; extra == 'full'
46
50
  Requires-Dist: pandas; extra == 'full'
47
51
  Requires-Dist: rich; extra == 'full'
52
+ Requires-Dist: spire-pdf; extra == 'full'
48
53
  Requires-Dist: tqdm; extra == 'full'
49
54
  Requires-Dist: unidecode; extra == 'full'
50
55
  Description-Content-Type: text/markdown
@@ -57,10 +57,13 @@ Repository = "https://github.com/AbsoluteWinter/absfuyu-public"
57
57
  Issues = "https://github.com/AbsoluteWinter/absfuyu-public/issues"
58
58
 
59
59
  [project.optional-dependencies]
60
- full = ["numpy", "pandas", "rich", "tqdm", "unidecode"]
61
- docs = ["numpy", "pandas", "rich"]
60
+ full = [
61
+ "numpy", "pandas", "rich", "tqdm", "unidecode", "openpyxl", "spire-pdf",
62
+ # "jinja2"
63
+ ]
64
+ docs = ["numpy", "pandas", "rich", "spire-pdf"]
62
65
  beautiful = ["rich"]
63
- extra = ["numpy", "pandas"]
66
+ extra = ["numpy", "pandas", "openpyxl", "spire-pdf"]
64
67
  dev = ["hatch", "pytest"]
65
68
 
66
69
  [project.scripts]
@@ -22,7 +22,7 @@ Using in cmd:
22
22
  __title__ = "absfuyu"
23
23
  __author__ = "AbsoluteWinter"
24
24
  __license__ = "MIT License"
25
- __version__ = "5.5.0"
25
+ __version__ = "5.6.0"
26
26
  __all__ = [
27
27
  "core",
28
28
  "config",
@@ -3,8 +3,8 @@ ABSFUYU
3
3
  -------
4
4
  COMMAND LINE INTERFACE
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Library
@@ -3,8 +3,8 @@ ABSFUYU
3
3
  -------
4
4
  COMMAND LINE INTERFACE
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["cli"]
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Color
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Config
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Do
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Game
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Tool
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Configuration
3
3
  ----------------------
4
4
  Package configuration module
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -1041,7 +1041,13 @@ class BaseClass(GetClassMembersMixin, AutoREPRMixin):
1041
1041
  # Metaclass
1042
1042
  # ---------------------------------------------------------------------------
1043
1043
  class PositiveInitArgsMeta(type):
1044
- """Make sure that every args in a class __init__ is positive"""
1044
+ """
1045
+ Make sure that every args in a class __init__ is positive
1046
+
1047
+ Usage
1048
+ -----
1049
+ >>> class Test(metaclass=PositiveInitArgsMeta): pass
1050
+ """
1045
1051
 
1046
1052
  def __call__(cls, *args, **kwargs):
1047
1053
  # Check if all positional and keyword arguments are positive
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features (with library)
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Decorator
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Sphinx docstring decorator
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Dummy cli
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Dummy functions when other libraries are unvailable
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  Extension for data type such as ``list``, ``str``, ``dict``, ...
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  dict extension
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  Support classes
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  int extension
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  list extension
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  str extension
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -69,7 +69,7 @@ def _generate_string(
69
69
  count = 0
70
70
 
71
71
  while count < times:
72
- gen_string = "".join(random.choice(char_lst) for _ in range(size))
72
+ gen_string = "".join(random.choice(char_lst) for _ in range(size)) # type: ignore
73
73
  if not unique:
74
74
  unique_string.append(gen_string)
75
75
  count += 1
@@ -3,8 +3,8 @@ Absfuyu: Extra
3
3
  --------------
4
4
  Features that require additional libraries
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
 
@@ -3,8 +3,8 @@ Absfuyu: Beautiful
3
3
  ------------------
4
4
  A decorator that makes output more beautiful
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -24,7 +24,7 @@ except ImportError:
24
24
 
25
25
  from absfuyu.config import ABSFUYU_CONFIG
26
26
 
27
- if ABSFUYU_CONFIG._get_setting("auto-install-extra").value:
27
+ if ABSFUYU_CONFIG._get_setting("auto-install-extra").value: # type: ignore
28
28
  cmd = "python -m pip install -U absfuyu[full]".split()
29
29
  run(cmd)
30
30
  else:
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame - Base/Core
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  DF Function
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Matplotlib Helper
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -4,8 +4,8 @@ Absfuyu: Data Analysis [W.I.P]
4
4
  Extension for ``pd.DataFrame``
5
5
  (deprecated)
6
6
 
7
- Version: 5.5.0
8
- Date updated: 23/04/2025 (dd/mm/yyyy)
7
+ Version: 5.6.0
8
+ Date updated: 12/09/2025 (dd/mm/yyyy)
9
9
  """
10
10
 
11
11
  # Library
@@ -0,0 +1,89 @@
1
+ """
2
+ Absfuyu: PDF
3
+ ------------
4
+ PDF Tool [W.I.P]
5
+
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
+ """
9
+
10
+ # Module level
11
+ # ---------------------------------------------------------------------------
12
+ __all__ = ["PDFTool"]
13
+
14
+
15
+ # Library
16
+ # ---------------------------------------------------------------------------
17
+ from collections.abc import Sequence
18
+ from pathlib import Path
19
+ from typing import overload
20
+
21
+ from absfuyu.core import BaseClass
22
+ from absfuyu.core.dummy_func import tqdm
23
+
24
+ PDF_MODE = False
25
+
26
+ try:
27
+ from spire.pdf import PdfDocument, PdfTextExtractOptions, PdfTextExtractor
28
+ except ImportError:
29
+ from subprocess import run
30
+
31
+ from absfuyu.config import ABSFUYU_CONFIG
32
+
33
+ if ABSFUYU_CONFIG._get_setting("auto-install-extra").value: # type: ignore
34
+ cmd = "python -m pip install -U absfuyu[full]".split()
35
+ run(cmd)
36
+ else:
37
+ raise SystemExit("This feature is in absfuyu[full] package") # noqa: B904
38
+ else:
39
+ PDF_MODE = True
40
+
41
+
42
+ # Class
43
+ # ---------------------------------------------------------------------------
44
+
45
+
46
+ class PDFTool(BaseClass):
47
+ def __init__(self) -> None:
48
+ super().__init__()
49
+ self.engine = PdfDocument() # type: ignore
50
+
51
+ self.files: list[Path] = []
52
+
53
+ @overload
54
+ def add_file(self, file: Path | str) -> None: ...
55
+
56
+ @overload
57
+ def add_file(self, file: Sequence[Path | str]) -> None: ...
58
+
59
+ def add_file(self, file: Path | Sequence[Path | str] | str) -> None:
60
+ if isinstance(file, Sequence) and not isinstance(file, str):
61
+ self.files.extend([Path(x) for x in file])
62
+ else:
63
+ self.files.append(Path(file))
64
+
65
+ def load_file(self) -> list[str]:
66
+ """
67
+ Extract text from all file
68
+
69
+ Returns
70
+ -------
71
+ list[str]
72
+ Extracted text
73
+ """
74
+ engine = PdfDocument() # type: ignore
75
+
76
+ extracted: list[str] = []
77
+ for x in tqdm(self.files, desc="Extracting", unit_scale=True):
78
+ engine.LoadFromFile(x.absolute().__str__())
79
+
80
+ # Get pages
81
+ for page in engine.Pages:
82
+ # Create a PdfTextExtractor for the page
83
+ extractor = PdfTextExtractor(page) # type: ignore
84
+
85
+ # Extract all text from the page
86
+ text = extractor.ExtractText(PdfTextExtractOptions()) # type: ignore
87
+ extracted.append(text)
88
+
89
+ return extracted
@@ -3,8 +3,8 @@ Absfuyu: Fun
3
3
  ------------
4
4
  Some fun or weird stuff
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Fun
3
3
  ------------
4
4
  Rubik
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
 
9
9
 
10
10
  Version added: 5.4.0
@@ -4,8 +4,8 @@ Absfuyu: Tarot
4
4
  Tarot stuff
5
5
 
6
6
 
7
- Version: 5.5.0
8
- Date updated: 23/04/2025 (dd/mm/yyyy)
7
+ Version: 5.6.0
8
+ Date updated: 12/09/2025 (dd/mm/yyyy)
9
9
 
10
10
  Usage:
11
11
  ------
@@ -3,8 +3,8 @@ Absfuyu: Game
3
3
  -------------
4
4
  Contain some game that can be played on terminal
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -1,8 +1,8 @@
1
1
  """
2
2
  Game: Game Stat
3
3
 
4
- Version: 5.5.0
5
- Date updated: 23/04/2025 (dd/mm/yyyy)
4
+ Version: 5.6.0
5
+ Date updated: 12/09/2025 (dd/mm/yyyy)
6
6
  """
7
7
 
8
8
  # Module level
@@ -3,8 +3,8 @@ Game: Sudoku
3
3
  ------------
4
4
  Sudoku 9x9 Solver
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Credit:
10
10
  -------
@@ -2,8 +2,8 @@
2
2
  Game: Tic Tac Toe
3
3
  -----------------
4
4
 
5
- Version: 5.5.0
6
- Date updated: 23/04/2025 (dd/mm/yyyy)
5
+ Version: 5.6.0
6
+ Date updated: 12/09/2025 (dd/mm/yyyy)
7
7
  """
8
8
 
9
9
  # Module level
@@ -2,8 +2,8 @@
2
2
  Game: Wordle Solver
3
3
  -------------------
4
4
 
5
- Version: 5.5.0
6
- Date updated: 23/04/2025 (dd/mm/yyyy)
5
+ Version: 5.6.0
6
+ Date updated: 12/09/2025 (dd/mm/yyyy)
7
7
 
8
8
  Usage:
9
9
  ------
@@ -3,8 +3,8 @@ Absfuyu: General
3
3
  ----------------
4
4
  Collection of useful classes
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -3,8 +3,8 @@ Absfuyu: Content
3
3
  ----------------
4
4
  Handle .txt file
5
5
 
6
- Version: 5.5.0
7
- Date updated: 23/04/2025 (dd/mm/yyyy)
6
+ Version: 5.6.0
7
+ Date updated: 12/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Usage:
10
10
  ------