absfuyu 5.0.0__tar.gz → 5.0.1__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.
Files changed (111) hide show
  1. {absfuyu-5.0.0 → absfuyu-5.0.1}/PKG-INFO +2 -2
  2. {absfuyu-5.0.0 → absfuyu-5.0.1}/README.md +1 -1
  3. {absfuyu-5.0.0 → absfuyu-5.0.1}/dev_requirements.txt +1 -1
  4. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/conf.py +1 -1
  5. {absfuyu-5.0.0 → absfuyu-5.0.1}/pyproject.toml +2 -2
  6. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/__init__.py +1 -1
  7. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/__main__.py +1 -1
  8. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/__init__.py +2 -2
  9. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/color.py +2 -2
  10. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/config_group.py +2 -2
  11. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/do_group.py +2 -2
  12. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/game_group.py +2 -2
  13. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/cli/tool_group.py +2 -2
  14. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/config/__init__.py +1 -1
  15. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/__init__.py +1 -1
  16. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/baseclass.py +5 -5
  17. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/baseclass2.py +1 -1
  18. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/docstring.py +24 -21
  19. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/dummy_func.py +7 -5
  20. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/__init__.py +1 -1
  21. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/dictext.py +1 -1
  22. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/dxt_support.py +1 -1
  23. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/intext.py +1 -1
  24. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/listext.py +1 -1
  25. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/dxt/strext.py +2 -2
  26. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/extra/__init__.py +2 -2
  27. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/extra/beautiful.py +2 -1
  28. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/extra/data_analysis.py +1 -1
  29. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/fun/__init__.py +1 -1
  30. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/fun/tarot.py +2 -2
  31. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/game/__init__.py +2 -2
  32. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/game/game_stat.py +2 -2
  33. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/game/sudoku.py +2 -2
  34. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/game/tictactoe.py +2 -2
  35. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/game/wordle.py +2 -2
  36. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/general/__init__.py +4 -4
  37. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/general/content.py +2 -2
  38. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/general/shape.py +1 -1
  39. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/logger.py +2 -2
  40. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/pkg_data/__init__.py +1 -1
  41. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/pkg_data/deprecated.py +2 -2
  42. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/sort.py +2 -2
  43. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/__init__.py +1 -1
  44. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/checksum.py +1 -1
  45. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/converter.py +1 -1
  46. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/obfuscator.py +2 -2
  47. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/passwordlib.py +2 -2
  48. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/web.py +2 -2
  49. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/__init__.py +2 -2
  50. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/api.py +1 -1
  51. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/lunar.py +2 -2
  52. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/path.py +1 -1
  53. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/performance.py +1 -1
  54. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/shorten_number.py +1 -1
  55. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/zipped.py +2 -2
  56. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/version.py +59 -42
  57. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/conftest.py +2 -2
  58. absfuyu-5.0.1/tests/test_api.py +41 -0
  59. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_beautiful.py +7 -0
  60. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_config.py +2 -2
  61. absfuyu-5.0.1/tests/test_converter.py +49 -0
  62. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_core.py +1 -1
  63. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_data_analysis.py +3 -3
  64. absfuyu-5.0.1/tests/test_dictext.py +68 -0
  65. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_everything.py +2 -2
  66. absfuyu-5.0.0/tests/test_extensions.py → absfuyu-5.0.1/tests/test_extra.py +3 -3
  67. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_fun.py +2 -2
  68. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_game.py +2 -2
  69. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_generator.py +3 -3
  70. absfuyu-5.0.1/tests/test_intext.py +139 -0
  71. absfuyu-5.0.1/tests/test_listext.py +132 -0
  72. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_logger.py +2 -2
  73. absfuyu-5.0.0/tests/test_tools.py → absfuyu-5.0.1/tests/test_obfuscator.py +2 -64
  74. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_passwordlib.py +2 -2
  75. absfuyu-5.0.1/tests/test_performance.py +66 -0
  76. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_pkg_data.py +2 -2
  77. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_shape.py +1 -1
  78. absfuyu-5.0.1/tests/test_shorten_number.py +34 -0
  79. absfuyu-5.0.1/tests/test_strext.py +181 -0
  80. absfuyu-5.0.1/tests/test_tools.py +30 -0
  81. absfuyu-5.0.1/tests/test_util.py +55 -0
  82. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/test_version.py +2 -2
  83. absfuyu-5.0.0/tests/test_data_extension.py +0 -502
  84. absfuyu-5.0.0/tests/test_util.py +0 -163
  85. {absfuyu-5.0.0 → absfuyu-5.0.1}/.gitignore +0 -0
  86. {absfuyu-5.0.0 → absfuyu-5.0.1}/LICENSE +0 -0
  87. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/Makefile +0 -0
  88. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/_template/versioning.html +0 -0
  89. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/index.rst +0 -0
  90. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/info.md +0 -0
  91. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/make.bat +0 -0
  92. {absfuyu-5.0.0 → absfuyu-5.0.1}/docs/modules.rst +0 -0
  93. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/Logo Full.png +0 -0
  94. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/Logo Square.png +0 -0
  95. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/Logo White.png +0 -0
  96. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/repository-image-crop.png +0 -0
  97. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/repository-image-white.png +0 -0
  98. {absfuyu-5.0.0 → absfuyu-5.0.1}/images/repository-image.png +0 -0
  99. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/config/config.json +0 -0
  100. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/decorator.py +0 -0
  101. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/core/dummy_cli.py +0 -0
  102. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/general/human.py +0 -0
  103. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
  104. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
  105. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/pkg_data/tarot.pkl +0 -0
  106. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/py.typed +0 -0
  107. {absfuyu-5.0.0/src/absfuyu/general → absfuyu-5.0.1/src/absfuyu/tools}/generator.py +0 -0
  108. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/keygen.py +0 -0
  109. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/tools/shutdownizer.py +0 -0
  110. {absfuyu-5.0.0 → absfuyu-5.0.1}/src/absfuyu/util/json_method.py +0 -0
  111. {absfuyu-5.0.0 → absfuyu-5.0.1}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: absfuyu
3
- Version: 5.0.0
3
+ Version: 5.0.1
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/
@@ -110,7 +110,7 @@ There are many additional features available to explore.
110
110
 
111
111
  For more detailed information about the project, please refer to the documentation available at the following link:
112
112
 
113
- > [Project Documentation](https://absolutewinter.github.io/absfuyu/)
113
+ > [Project Documentation](https://absolutewinter.github.io/absfuyu-docs/)
114
114
 
115
115
  ## **DEVELOPMENT SETUP**
116
116
 
@@ -59,7 +59,7 @@ There are many additional features available to explore.
59
59
 
60
60
  For more detailed information about the project, please refer to the documentation available at the following link:
61
61
 
62
- > [Project Documentation](https://absolutewinter.github.io/absfuyu/)
62
+ > [Project Documentation](https://absolutewinter.github.io/absfuyu-docs/)
63
63
 
64
64
  ## **DEVELOPMENT SETUP**
65
65
 
@@ -4,7 +4,7 @@ pytest-cov
4
4
  black
5
5
  mypy
6
6
  ruff
7
- sphinx>=7.0.0
7
+ sphinx>=8.1.0
8
8
  sphinx_rtd_theme
9
9
  sphinx_copybutton
10
10
  myst-parser
@@ -33,7 +33,7 @@ extensions = [
33
33
  # "sphinx.ext.extlinks", # short link
34
34
  "sphinx.ext.githubpages",
35
35
  "sphinx.ext.napoleon",
36
- # "sphinx.ext.viewcode" # This shows source code
36
+ "sphinx.ext.viewcode" # This shows source code
37
37
  "sphinx_copybutton",
38
38
  "myst_parser", # Markdown support
39
39
  ]
@@ -77,7 +77,7 @@ only-include = ["src", "tests", "docs", "images", "dev_requirements.txt"]
77
77
 
78
78
  # Set up virtual env: use hatch env show
79
79
  [tool.hatch.envs.default]
80
- dependencies = ["coverage[toml]", "pytest", "pytest-cov"]
80
+ dependencies = ["coverage[toml]", "pytest", "pytest-cov", "pytest-mock"]
81
81
  description = """
82
82
  Default environment
83
83
 
@@ -95,7 +95,7 @@ cov = ["test-cov", "cov-report"] # use this
95
95
  cov2 = "pytest --cov-report=term-missing --cov=absfuyu --cov=tests" # use this
96
96
 
97
97
  [tool.hatch.envs.all]
98
- dependencies = ["coverage[toml]", "pytest", "pytest-cov", "pytest-xdist"]
98
+ dependencies = ["coverage[toml]", "pytest", "pytest-cov", "pytest-mock", "pytest-xdist"]
99
99
  features = ["full"]
100
100
  description = """
101
101
  All python version to test:
@@ -22,7 +22,7 @@ Using in cmd:
22
22
  __title__ = "absfuyu"
23
23
  __author__ = "AbsoluteWinter"
24
24
  __license__ = "MIT License"
25
- __version__ = "5.0.0"
25
+ __version__ = "5.0.1"
26
26
  __all__ = [
27
27
  "core",
28
28
  "config",
@@ -4,7 +4,7 @@ ABSFUYU
4
4
  COMMAND LINE INTERFACE
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 18/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/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: 1.1.0
7
- Date updated: 09/02/2025 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 16/02/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: 1.0.0
7
- Date updated: 14/04/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/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: 1.0.0
7
- Date updated: 14/04/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 16/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["config_group"]
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Do
5
5
 
6
- Version: 1.4.0
7
- Date updated: 07/02/2025 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["do_group"]
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Game
5
5
 
6
- Version: 1.0.0
7
- Date updated: 14/04/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 16/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["game_group"]
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Tool
5
5
 
6
- Version: 1.0.0
7
- Date updated: 10/02/2025 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["tool_group"]
@@ -4,7 +4,7 @@ Absfuyu: Configuration
4
4
  Package configuration module
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 12/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -4,7 +4,7 @@ Absfuyu: Core
4
4
  Bases for other features
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 13/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Core
4
4
  Bases for other features
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 12/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -51,12 +51,12 @@ class ShowAllMethodsMixin:
51
51
  @classmethod
52
52
  def show_all_methods(
53
53
  cls,
54
+ print_result: bool = False,
54
55
  include_classmethod: bool = True,
55
56
  classmethod_indicator: str = "<classmethod>",
56
57
  include_staticmethod: bool = True,
57
58
  staticmethod_indicator: str = "<staticmethod>",
58
59
  include_private_method: bool = False,
59
- print_result: bool = False,
60
60
  ) -> dict[str, list[str]]:
61
61
  """
62
62
  Class method to display all methods of the class and its parent classes,
@@ -64,6 +64,9 @@ class ShowAllMethodsMixin:
64
64
 
65
65
  Parameters
66
66
  ----------
67
+ print_result : bool, optional
68
+ Beautifully print the output, by default ``False``
69
+
67
70
  include_classmethod : bool, optional
68
71
  Whether to include classmethod in the output, by default ``True``
69
72
 
@@ -83,9 +86,6 @@ class ShowAllMethodsMixin:
83
86
  include_private_method : bool, optional
84
87
  Whether to include private method in the output, by default ``False``
85
88
 
86
- print_result : bool, optional
87
- Beautifully print the output, by default ``False``
88
-
89
89
  Returns
90
90
  -------
91
91
  dict[str, list[str]]
@@ -4,7 +4,7 @@ Absfuyu: Core
4
4
  Bases for other features (with library)
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 12/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Core
4
4
  Sphinx docstring decorator
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 13/02/2025 (dd/mm/yyyy)
7
+ Date updated: 23/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -28,9 +28,9 @@ from typing import ClassVar, ParamSpec, TypeVar, overload
28
28
 
29
29
  # Type
30
30
  # ---------------------------------------------------------------------------
31
- P = ParamSpec("P") # Parameter type
32
- R = TypeVar("R") # Return type - Can be anything
33
- T = TypeVar("T", bound=type) # Type type - Can be any subtype of `type`
31
+ _P = ParamSpec("_P") # Parameter type
32
+ _R = TypeVar("_R") # Return type - Can be anything
33
+ _T = TypeVar("_T", bound=type) # Type type - Can be any subtype of `type`
34
34
 
35
35
  _SPHINX_DOCS_TEMPLATE = Template("$line_break*$mode in version $version$reason*")
36
36
 
@@ -88,10 +88,13 @@ class SphinxDocstring:
88
88
  self.mode = mode
89
89
 
90
90
  @overload
91
- def __call__(self, obj: T) -> T: ... # Class overload
91
+ def __call__(self, obj: _T) -> _T: ... # Class overload
92
+
92
93
  @overload
93
- def __call__(self, obj: Callable[P, R]) -> Callable[P, R]: ... # Function overload
94
- def __call__(self, obj: T | Callable[P, R]) -> T | Callable[P, R]:
94
+ def __call__(
95
+ self, obj: Callable[_P, _R]
96
+ ) -> Callable[_P, _R]: ... # Function overload
97
+ def __call__(self, obj: _T | Callable[_P, _R]) -> _T | Callable[_P, _R]:
95
98
  # Class wrapper
96
99
  if isinstance(obj, type): # if inspect.isclass(obj):
97
100
  obj.__doc__ = (obj.__doc__ or "") + self._generate_version_note(
@@ -101,7 +104,7 @@ class SphinxDocstring:
101
104
 
102
105
  # Function wrapper
103
106
  @wraps(obj)
104
- def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
107
+ def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _R:
105
108
  return obj(*args, **kwargs)
106
109
 
107
110
  # Add docstring
@@ -127,19 +130,19 @@ class SphinxDocstring:
127
130
  if docs is None:
128
131
  return res
129
132
 
130
- # # Index of the last whitespaces
131
- # # https://stackoverflow.com/a/13649118
132
- # res = next((i for i, c in enumerate(docs) if not c.isspace()), 0)
133
- # return res if res % 2 == 0 else res - 1
134
-
135
- # Alternative solution
136
- for char in docs:
137
- if char == " ":
138
- res += 1
139
- if char == "\t":
140
- res += 4
141
- if not char.isspace():
142
- break
133
+ try:
134
+ # Replace tabs with space and split line
135
+ lines = docs.expandtabs(4).splitlines()
136
+ except UnicodeError:
137
+ return res
138
+ else:
139
+ # Get indentation of each line and unique it
140
+ indent_set = {len(line) - len(line.lstrip()) for line in lines[1:]}
141
+ # Drop 0
142
+ res_list = sorted([x for x in indent_set if x > 0])
143
+
144
+ if res_list:
145
+ return res_list[0]
143
146
  return res
144
147
 
145
148
  def _generate_version_note(self, num_of_white_spaces: int) -> str:
@@ -4,7 +4,7 @@ Absfuyu: Core
4
4
  Dummy functions when other libraries are unvailable
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 14/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -23,8 +23,9 @@ from importlib import import_module
23
23
  # ---------------------------------------------------------------------------
24
24
  # tqdm wrapper
25
25
  try:
26
- tqdm = import_module("tqdm").tqdm
27
- except ModuleNotFoundError:
26
+ _tqdm = import_module("tqdm")
27
+ tqdm = getattr(_tqdm, "tqdm") # noqa
28
+ except (ModuleNotFoundError, AttributeError):
28
29
 
29
30
  def tqdm(iterable, *args, **kwargs):
30
31
  """
@@ -36,8 +37,9 @@ except ModuleNotFoundError:
36
37
 
37
38
  # unidecode wrapper
38
39
  try:
39
- unidecode = import_module("unidecode").unidecode
40
- except ModuleNotFoundError:
40
+ _unidecode = import_module("unidecode")
41
+ unidecode = getattr(_unidecode, "unidecode") # noqa
42
+ except (ModuleNotFoundError, AttributeError):
41
43
 
42
44
  def unidecode(*args, **kwargs):
43
45
  """
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  Extension for data type such as ``list``, ``str``, ``dict``, ...
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 11/01/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  dict extension
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 14/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  Support classes
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 11/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  int extension
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 11/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  list extension
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 11/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -4,7 +4,7 @@ Absfuyu: Data Extension
4
4
  str extension
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 11/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -18,8 +18,8 @@ import random
18
18
  from typing import NotRequired, Self, TypedDict
19
19
 
20
20
  from absfuyu.core import ShowAllMethodsMixin, deprecated, versionadded, versionchanged
21
- from absfuyu.general.generator import Charset, Generator
22
21
  from absfuyu.logger import logger
22
+ from absfuyu.tools.generator import Charset, Generator
23
23
  from absfuyu.util import set_min_max
24
24
 
25
25
 
@@ -3,8 +3,8 @@ Absfuyu: Extra
3
3
  --------------
4
4
  Features that require additional libraries
5
5
 
6
- Version: 1.0.1
7
- Date updated: 24/11/2023 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
 
@@ -4,7 +4,7 @@ Absfuyu: Beautiful
4
4
  A decorator that makes output more beautiful
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 18/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -77,6 +77,7 @@ class PerformanceOutput(NamedTuple):
77
77
  return out
78
78
 
79
79
 
80
+ # TODO: header and footer layout to 1,2,3 instead of true false
80
81
  class BeautifulOutput:
81
82
  """A decorator that makes output more beautiful"""
82
83
 
@@ -4,7 +4,7 @@ Absfuyu: Data Analysis [W.I.P]
4
4
  Extension for ``pd.DataFrame``
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 13/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -4,7 +4,7 @@ Absfuyu: Fun
4
4
  Some fun or weird stuff
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 13/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Library
@@ -4,8 +4,8 @@ Absfuyu: Tarot
4
4
  Tarot stuff
5
5
 
6
6
 
7
- Version: 1.0.4
8
- Date updated: 14/11/2024 (dd/mm/yyyy)
7
+ Version: 5.0.0
8
+ Date updated: 22/02/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: 1.1.0
7
- Date updated: 14/04/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/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: 1.0.0
5
- Date updated: 14/04/2024 (dd/mm/yyyy)
4
+ Version: 5.0.0
5
+ Date updated: 22/02/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: 1.0.3
7
- Date updated: 15/11/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/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: 2.0.4
6
- Date updated: 15/11/2024 (dd/mm/yyyy)
5
+ Version: 5.0.0
6
+ Date updated: 22/02/2025 (dd/mm/yyyy)
7
7
  """
8
8
 
9
9
 
@@ -2,8 +2,8 @@
2
2
  Game: Wordle Solver
3
3
  -------------------
4
4
 
5
- Version: 1.1.4
6
- Date updated: 14/04/2024 (dd/mm/yyyy)
5
+ Version: 5.0.0
6
+ Date updated: 22/02/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: 1.1.4
7
- Date updated: 15/03/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -15,9 +15,9 @@ Features:
15
15
 
16
16
  # Module level
17
17
  # ---------------------------------------------------------------------------
18
- __all__ = ["content", "generator", "human"]
18
+ __all__ = ["content", "shape", "human"]
19
19
 
20
20
 
21
21
  # Libary
22
22
  # ---------------------------------------------------------------------------
23
- from absfuyu.general import content, generator, human
23
+ from absfuyu.general import content, human, shape
@@ -3,8 +3,8 @@ Absfuyu: Content
3
3
  ----------------
4
4
  Handle .txt file
5
5
 
6
- Version: 1.2.6
7
- Date updated: 05/04/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
 
9
9
  Usage:
10
10
  ------
@@ -4,7 +4,7 @@ Absfuyu: Shape
4
4
  Shapes
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 19/02/2025 (dd/mm/yyyy)
7
+ Date updated: 23/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Logger
3
3
  ---------------
4
4
  Custom Logger Module
5
5
 
6
- Version: 1.3.2
7
- Date updated: 05/04/2024 (mm/dd/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
 
9
9
  Usage:
10
10
  ------
@@ -4,7 +4,7 @@ Absfuyu: Package data
4
4
  Load package data
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 14/11/2024 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Package data
3
3
  ---------------------
4
4
  Deprecated (but might have some use)
5
5
 
6
- Version: 2.2.3
7
- Date updated: 14/11/2024 (dd/mm/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Library
@@ -3,8 +3,8 @@ Absfuyu: Sort
3
3
  -------------
4
4
  Sort Module
5
5
 
6
- Version: 1.3.0
7
- Date updated: 11/02/2025 (mm/dd/yyyy)
6
+ Version: 5.0.0
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -4,5 +4,5 @@ Absfuyu: Tools
4
4
  Some useful tools
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 15/02/2025 (dd/mm/yyyy)
7
+ Date updated: 22/02/2025 (dd/mm/yyyy)
8
8
  """
@@ -4,7 +4,7 @@ Absufyu: Checksum
4
4
  Check MD5, SHA256, ...
5
5
 
6
6
  Version: 5.0.0
7
- Date updated: 13/02/2025 (dd/mm/yyyy)
7
+ Date updated: 25/02/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level