absfuyu 3.1.1__py3-none-any.whl → 3.3.3__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 (61) hide show
  1. absfuyu/__init__.py +3 -10
  2. absfuyu/__main__.py +5 -250
  3. absfuyu/cli/__init__.py +51 -0
  4. absfuyu/cli/color.py +24 -0
  5. absfuyu/cli/config_group.py +56 -0
  6. absfuyu/cli/do_group.py +76 -0
  7. absfuyu/cli/game_group.py +109 -0
  8. absfuyu/config/__init__.py +117 -100
  9. absfuyu/config/config.json +0 -7
  10. absfuyu/core.py +5 -66
  11. absfuyu/everything.py +7 -9
  12. absfuyu/extensions/beautiful.py +30 -23
  13. absfuyu/extensions/dev/__init__.py +11 -8
  14. absfuyu/extensions/dev/password_hash.py +4 -2
  15. absfuyu/extensions/dev/passwordlib.py +7 -5
  16. absfuyu/extensions/dev/project_starter.py +4 -2
  17. absfuyu/extensions/dev/shutdownizer.py +148 -0
  18. absfuyu/extensions/extra/__init__.py +1 -2
  19. absfuyu/extensions/extra/data_analysis.py +182 -107
  20. absfuyu/fun/WGS.py +50 -26
  21. absfuyu/fun/__init__.py +6 -7
  22. absfuyu/fun/tarot.py +1 -1
  23. absfuyu/game/__init__.py +75 -81
  24. absfuyu/game/game_stat.py +36 -0
  25. absfuyu/game/sudoku.py +41 -48
  26. absfuyu/game/tictactoe.py +303 -548
  27. absfuyu/game/wordle.py +56 -47
  28. absfuyu/general/__init__.py +17 -7
  29. absfuyu/general/content.py +16 -15
  30. absfuyu/general/data_extension.py +282 -90
  31. absfuyu/general/generator.py +67 -67
  32. absfuyu/general/human.py +74 -78
  33. absfuyu/logger.py +94 -68
  34. absfuyu/pkg_data/__init__.py +29 -25
  35. absfuyu/py.typed +0 -0
  36. absfuyu/sort.py +61 -47
  37. absfuyu/tools/__init__.py +0 -1
  38. absfuyu/tools/converter.py +80 -62
  39. absfuyu/tools/keygen.py +62 -67
  40. absfuyu/tools/obfuscator.py +57 -53
  41. absfuyu/tools/stats.py +24 -24
  42. absfuyu/tools/web.py +10 -9
  43. absfuyu/util/__init__.py +71 -33
  44. absfuyu/util/api.py +53 -43
  45. absfuyu/util/json_method.py +25 -27
  46. absfuyu/util/lunar.py +20 -24
  47. absfuyu/util/path.py +362 -241
  48. absfuyu/util/performance.py +217 -135
  49. absfuyu/util/pkl.py +8 -8
  50. absfuyu/util/zipped.py +17 -19
  51. absfuyu/version.py +160 -147
  52. absfuyu-3.3.3.dist-info/METADATA +124 -0
  53. absfuyu-3.3.3.dist-info/RECORD +59 -0
  54. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/WHEEL +1 -2
  55. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/entry_points.txt +1 -0
  56. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info/licenses}/LICENSE +1 -1
  57. absfuyu/extensions/dev/pkglib.py +0 -98
  58. absfuyu/game/tictactoe2.py +0 -318
  59. absfuyu-3.1.1.dist-info/METADATA +0 -215
  60. absfuyu-3.1.1.dist-info/RECORD +0 -55
  61. absfuyu-3.1.1.dist-info/top_level.txt +0 -1
@@ -3,11 +3,10 @@ Absfuyu: Configuration
3
3
  ----------------------
4
4
  Package configuration module
5
5
 
6
- Version: 2.0.1
7
- Date updated: 24/11/2023 (dd/mm/yyyy)
6
+ Version: 2.0.4
7
+ Date updated: 06/04/2024 (dd/mm/yyyy)
8
8
  """
9
9
 
10
-
11
10
  # Module level
12
11
  ###########################################################################
13
12
  __all__ = [
@@ -20,28 +19,51 @@ __all__ = [
20
19
  # Library
21
20
  ###########################################################################
22
21
  from pathlib import Path
23
- from typing import Any, Dict, List, Optional, Union
22
+ from typing import Any, Dict, List, Optional, TypedDict
24
23
 
25
24
  from absfuyu.core import CONFIG_PATH
26
25
  from absfuyu.util.json_method import JsonFile
27
26
 
28
-
29
27
  # Setting
30
28
  ###########################################################################
31
- _SPACE_REPLACE = "-" # Replace " " character in setting name
29
+ _SPACE_REPLACE = "-" # Replace " " character in setting name
30
+
31
+
32
+ # Type hint
33
+ ###########################################################################
34
+ class SettingDictFormat(TypedDict):
35
+ """
36
+ Format for the ``setting`` section in ``config``
37
+
38
+ :param default: Default value for the setting
39
+ :param help: Description for the setting
40
+ :param value: Current value of the setting
41
+ """
42
+
43
+ default: Any
44
+ help: str
45
+ value: Any
46
+
47
+
48
+ class ConfigFormat(TypedDict):
49
+ """
50
+ Config file format
51
+
52
+ :param setting: setting section
53
+ :type setting: dict[str, SettingDictFormat]
54
+ :param version: version section
55
+ :type version: VersionDictFormat
56
+ """
57
+
58
+ setting: Dict[str, SettingDictFormat]
32
59
 
33
60
 
34
61
  # Class
35
62
  ###########################################################################
36
63
  class Setting:
37
64
  """Setting"""
38
- def __init__(
39
- self,
40
- name: str,
41
- value: Any,
42
- default: Any,
43
- help_: str = ""
44
- ) -> None:
65
+
66
+ def __init__(self, name: str, value: Any, default: Any, help_: str = "") -> None:
45
67
  """
46
68
  :param name: Name of the setting
47
69
  :param value: Value of the setting
@@ -52,40 +74,42 @@ class Setting:
52
74
  self.value = value
53
75
  self.default = default
54
76
  self.help = help_
77
+
55
78
  def __str__(self) -> str:
56
79
  return f"{self.__class__.__name__}({self.name}: {self.value})"
80
+
57
81
  def __repr__(self) -> str:
58
82
  return self.__str__()
59
-
83
+
60
84
  @classmethod
61
- def from_dict(cls, dict_data: Dict[str, Dict[str, Any]]):
62
- """Convert ``dict`` into ``Setting`` (``len==1`` only)"""
63
- name = list(dict_data.keys())[0]
64
- _val = list(dict_data.values())[0]
65
- value: Any = _val.get("value")
66
- default: Any = _val.get("default")
67
- help_: str = _val.get("help")
85
+ def from_dict(cls, dict_data: Dict[str, SettingDictFormat]):
86
+ """
87
+ Convert ``dict`` into ``Setting`` (``len==1`` only)
88
+ """
89
+ name: str = list(dict_data.keys())[0]
90
+ _val: SettingDictFormat = list(dict_data.values())[0]
91
+ value: Any = _val["value"]
92
+ default: Any = _val["default"]
93
+ help_: str = _val["help"]
68
94
  return cls(name, value, default, help_)
69
-
95
+
70
96
  def reset(self) -> None:
71
97
  """
72
- Reset setting to default value
98
+ Reset setting to default value
73
99
  (``Setting.value = Setting.default``)
74
100
  """
75
101
  self.value = self.default
76
-
102
+
77
103
  def update_value(self, value: Any) -> None:
78
104
  """Update current value"""
79
105
  self.value = value
80
106
 
81
- def to_dict(self) -> Dict[str, Dict[str, Any]]:
82
- """Convert ``Setting`` into ``dict``"""
83
- output = {
84
- self.name: {
85
- "default": self.default,
86
- "help": self.help,
87
- "value": self.value
88
- }
107
+ def to_dict(self) -> Dict[str, SettingDictFormat]:
108
+ """
109
+ Convert ``Setting`` into ``dict``
110
+ """
111
+ output: Dict[str, SettingDictFormat] = {
112
+ self.name: {"default": self.default, "help": self.help, "value": self.value}
89
113
  }
90
114
  return output
91
115
 
@@ -94,12 +118,13 @@ class Config:
94
118
  """
95
119
  Config handling
96
120
  """
121
+
97
122
  def __init__(self, config_file: Path, name: Optional[str] = None) -> None:
98
123
  """
99
124
  config_file: Path to `.json` config file
100
125
  """
101
- self.config_path = config_file
102
- self.json_engine = JsonFile(self.config_path)
126
+ self.config_path: Path = config_file
127
+ self.json_engine: JsonFile = JsonFile(self.config_path)
103
128
 
104
129
  if name:
105
130
  self.name = name
@@ -107,62 +132,60 @@ class Config:
107
132
  self.name = self.config_path.name
108
133
 
109
134
  # Data
110
- self.settings: List[Setting] = None
111
- self.version: dict = None
112
- self._fetch_data() # Load data
135
+ self.settings: List[Setting] = None # type: ignore
136
+ self._fetch_data() # Load data
113
137
 
114
138
  def __str__(self) -> str:
115
139
  return f"{self.__class__.__name__}({self.config_path.name})"
140
+
116
141
  def __repr__(self) -> str:
117
142
  return self.__str__()
118
-
143
+
119
144
  # Data prepare and export
120
145
  def _fetch_data(self) -> None:
121
146
  """Load data from ``self.config_file`` file"""
122
- data = self.json_engine.load_json()
123
- settings: dict = data.get("setting")
147
+ data: dict = self.json_engine.load_json()
148
+ settings: Dict[str, SettingDictFormat] = data.get("setting") # type: ignore
124
149
  self.settings = [Setting.from_dict({k: v}) for k, v in settings.items()]
125
- self.version = data.get("version")
126
-
127
- def _prepare_data(self) -> Dict[str, dict]:
150
+
151
+ def _prepare_data(self) -> ConfigFormat:
128
152
  """Prepare data to save config"""
129
153
  settings = dict()
130
- for x in self.settings:
131
- settings.update(x.to_dict())
154
+ for setting in self.settings:
155
+ settings.update(setting.to_dict())
132
156
 
133
- out = {
134
- "setting": settings,
135
- "version": self.version
136
- }
157
+ out: ConfigFormat = {"setting": settings}
137
158
  return out
138
-
159
+
139
160
  def save(self) -> None:
140
161
  """Save config to ``.json`` file"""
141
- self.json_engine.update_data(
142
- self._prepare_data()
143
- )
162
+ self.json_engine.update_data(self._prepare_data()) # type: ignore
144
163
  self.json_engine.save_json()
145
164
 
146
165
  # Setting method
166
+ @property
167
+ def setting_list(self) -> List[str]:
168
+ """List of name of available settings"""
169
+ return [setting.name for setting in self.settings]
170
+
147
171
  def _get_setting(self, name: str):
148
172
  """Get setting"""
149
173
  name = name.strip().lower().replace(" ", _SPACE_REPLACE)
150
- setting_list = [x.name for x in self.settings]
151
- if name in setting_list:
152
- for x in self.settings:
153
- if x.name.startswith(name):
154
- return x
174
+ if name in self.setting_list:
175
+ for setting in self.settings:
176
+ if setting.name.startswith(name):
177
+ return setting
155
178
  else:
156
- raise ValueError(f"Setting list: {setting_list}")
157
-
179
+ raise ValueError(f"Setting list: {self.setting_list}")
180
+
158
181
  def reset_config(self) -> None:
159
182
  """Reset all settings to default value"""
160
- [x.reset() for x in self.settings]
183
+ [setting.reset() for setting in self.settings] # type: ignore
161
184
  self.save()
162
-
163
- def show_settings(self) -> None:
185
+
186
+ def show_settings(self) -> List[Setting]:
164
187
  """
165
- Print a list of available settings
188
+ Returns a list of available settings
166
189
  (wrapper for ``Config.settings``)
167
190
  """
168
191
  return self.settings
@@ -170,29 +193,28 @@ class Config:
170
193
  def change_setting(self, name: str, value: Any) -> None:
171
194
  """
172
195
  Change ``Setting`` (if available)
173
-
196
+
174
197
  Parameters
175
198
  ----------
176
199
  name : str
177
200
  Name of the setting
178
-
201
+
179
202
  value : Any
180
203
  Value of the setting
181
204
  """
182
205
  name = name.strip().lower().replace(" ", _SPACE_REPLACE)
183
- setting_list = [x.name for x in self.settings]
184
- if name in setting_list:
185
- for x in self.settings:
186
- if x.name.startswith(name):
187
- x.update_value(value)
206
+ if name in self.setting_list:
207
+ for setting in self.settings:
208
+ if setting.name.startswith(name):
209
+ setting.update_value(value)
188
210
  break
189
211
  else:
190
- raise ValueError(f"Setting list: {setting_list}")
212
+ raise ValueError(f"Setting list: {self.setting_list}")
191
213
  self.save()
192
-
214
+
193
215
  def toggle_setting(self, name: str) -> None:
194
216
  """
195
- Special ``change_setting()`` method.
217
+ Special ``change_setting()`` method.
196
218
  Turn on/off if ``type(<setting>) is bool``
197
219
 
198
220
  Parameters
@@ -207,13 +229,13 @@ class Config:
207
229
  # Change value
208
230
  try:
209
231
  self.change_setting(name, not setting_value)
210
- except:
211
- raise SystemExit("This setting is not type: bool")
212
-
232
+ except Exception:
233
+ raise SystemExit("This setting is not type: bool") # noqa: B904
234
+
213
235
  def add_setting(self, name: str, value: Any, default: Any, help_: str = "") -> None:
214
236
  """
215
237
  Add ``Setting`` if not exist
216
-
238
+
217
239
  Parameters
218
240
  ----------
219
241
  name : str
@@ -226,51 +248,46 @@ class Config:
226
248
  Default value of the setting
227
249
 
228
250
  help_ : str
229
- Description of the setting (Default: None)
251
+ Description of the setting (Default: ``None``)
230
252
  """
231
253
  name = name.strip().lower().replace(" ", _SPACE_REPLACE)
232
254
  new_setting = Setting(name, value, default, help_)
233
255
  if new_setting not in self.settings:
234
256
  self.settings.append(new_setting)
235
257
  self.save()
236
-
258
+
237
259
  def del_setting(self, name: str) -> None:
238
260
  """
239
261
  Delete ``Setting``
240
-
262
+
241
263
  Parameters
242
264
  ----------
243
265
  name : str
244
266
  Name of the setting
245
267
  """
246
268
  name = name.strip().lower().replace(" ", _SPACE_REPLACE)
247
- self.settings = [x for x in self.settings if not x.name == name]
269
+ self.settings = [x for x in self.settings if x.name != name]
248
270
  self.save()
249
271
 
250
272
  def welcome(self) -> None:
251
273
  """Run first-run script (if any)"""
252
274
  self.change_setting("first-run", False)
253
275
 
254
- # Version
255
- def update_version(self, version_data: Dict[str, Union[str, int]]):
256
- """
257
- Update version
258
-
259
- Parameters
260
- ----------
261
- version_data : dict[str, str | int]
262
- Version data
263
- """
264
- self.version = version_data
265
- self.save()
266
-
267
276
 
268
277
  # Init
269
278
  ###########################################################################
270
279
  ABSFUYU_CONFIG = Config(CONFIG_PATH)
271
280
 
272
-
273
- # Run
274
- ###########################################################################
275
- if __name__ == "__main__":
276
- pass
281
+ # TODO: Create a config file when not available [W.I.P]
282
+ # _settings = [
283
+ # Setting(
284
+ # "auto-install-extra", False, False, "Automatically install required packages"
285
+ # ),
286
+ # Setting("first-run", True, True, "Check if this package has ever been run"),
287
+ # Setting(
288
+ # "luckgod-mode",
289
+ # False,
290
+ # False,
291
+ # "A chance that the machine will be randomly shutdown",
292
+ # ),
293
+ # ]
@@ -20,12 +20,5 @@
20
20
  "help": "Test",
21
21
  "value": false
22
22
  }
23
- },
24
- "version": {
25
- "major": 3,
26
- "minor": 1,
27
- "patch": 1,
28
- "release_level": "final",
29
- "serial": 0
30
23
  }
31
24
  }
absfuyu/core.py CHANGED
@@ -3,19 +3,14 @@ Absfuyu: Core
3
3
  -------------
4
4
  Contain type hints and other stuffs
5
5
 
6
- Version: 2.1.9
7
- Date updated: 27/11/2023 (dd/mm/yyyy)
6
+ Version: 2.2.0
7
+ Date updated: 14/04/2024 (dd/mm/yyyy)
8
8
  """
9
9
 
10
-
11
10
  # Module Package
12
11
  ###########################################################################
13
12
  __all__ = [
14
- # module
15
- "ModulePackage",
16
- "ModuleList",
17
13
  # color
18
- "Color",
19
14
  "CLITextColor",
20
15
  # path
21
16
  "CORE_PATH",
@@ -23,25 +18,13 @@ __all__ = [
23
18
  "DATA_PATH",
24
19
  ]
25
20
 
26
- ModulePackage = ["all", "cli", "beautiful", "extra", "res", "full", "dev"]
27
- ModuleList = [
28
- "config",
29
- "extensions",
30
- "fun",
31
- "game",
32
- "general",
33
- "pkg_data",
34
- "sort",
35
- "tools",
36
- "util",
37
- "version",
38
- ]
21
+ __package_feature__ = ["beautiful", "extra", "res", "full", "dev"]
39
22
 
40
23
 
41
- # Library
42
- ###########################################################################
43
24
  from pathlib import Path
25
+
44
26
  # import sys
27
+ # from sys import version_info as _python_version
45
28
 
46
29
  # if sys.version_info.minor >= 10:
47
30
  # from importlib.resources import files
@@ -52,41 +35,6 @@ from pathlib import Path
52
35
  # raise ImportError("Please install importlib-resources")
53
36
 
54
37
 
55
- try:
56
- import colorama as __colorama
57
- except ImportError:
58
- __colorama = None
59
-
60
-
61
- # Color - colorama
62
- ###########################################################################
63
- if __colorama is not None:
64
- # __colorama.init(autoreset=True)
65
- Color = {
66
- "green": __colorama.Fore.LIGHTGREEN_EX,
67
- "GREEN": __colorama.Fore.GREEN,
68
- "blue": __colorama.Fore.LIGHTCYAN_EX,
69
- "BLUE": __colorama.Fore.CYAN,
70
- "red": __colorama.Fore.LIGHTRED_EX,
71
- "RED": __colorama.Fore.RED,
72
- "yellow": __colorama.Fore.LIGHTYELLOW_EX,
73
- "YELLOW": __colorama.Fore.YELLOW,
74
- "reset": __colorama.Fore.RESET,
75
- }
76
- else:
77
- Color = {
78
- "green": "",
79
- "GREEN": "",
80
- "blue": "",
81
- "BLUE": "",
82
- "red": "",
83
- "RED": "",
84
- "yellow": "",
85
- "YELLOW": "",
86
- "reset": "",
87
- }
88
-
89
-
90
38
  class CLITextColor:
91
39
  """Color code for text in terminal"""
92
40
 
@@ -102,16 +50,7 @@ class CLITextColor:
102
50
  RESET = "\x1b[39m"
103
51
 
104
52
 
105
- # Path
106
- ###########################################################################
107
- # CORE_PATH = Path(os.path.abspath(os.path.dirname(__file__)))
108
53
  CORE_PATH = Path(__file__).parent.absolute()
109
54
  # CORE_PATH = files("absfuyu")
110
55
  CONFIG_PATH = CORE_PATH.joinpath("config", "config.json")
111
56
  DATA_PATH = CORE_PATH.joinpath("pkg_data")
112
-
113
-
114
- # Run
115
- ###########################################################################
116
- if __name__ == "__main__":
117
- print(CORE_PATH)
absfuyu/everything.py CHANGED
@@ -1,3 +1,4 @@
1
+ # flake8: noqa
1
2
  """
2
3
  Absfuyu: Everything
3
4
  -------------------
@@ -11,23 +12,20 @@ Usage:
11
12
  >>> from absfuyu import everything as ab
12
13
  """
13
14
 
14
-
15
15
  # Library
16
16
  ###########################################################################
17
- from absfuyu.core import *
18
17
  from absfuyu.config import *
18
+ from absfuyu.core import *
19
+ from absfuyu.extensions import *
19
20
  from absfuyu.fun import *
20
- from absfuyu.pkg_data import *
21
+ from absfuyu.game import *
22
+ from absfuyu.general import *
21
23
  from absfuyu.logger import *
24
+ from absfuyu.pkg_data import *
22
25
  from absfuyu.sort import *
23
- from absfuyu.version import *
24
-
25
- from absfuyu.general import *
26
- from absfuyu.extensions import *
27
- from absfuyu.game import *
28
26
  from absfuyu.tools import *
29
27
  from absfuyu.util import *
30
-
28
+ from absfuyu.version import *
31
29
 
32
30
  # Is loaded
33
31
  ###########################################################################
@@ -1,3 +1,4 @@
1
+ # type: ignore
1
2
  """
2
3
  Absfuyu: Beautiful
3
4
  ------------------
@@ -7,15 +8,15 @@ Version: 1.0.2
7
8
  Date updated: 24/11/2023 (dd/mm/yyyy)
8
9
  """
9
10
 
10
-
11
11
  # Module level
12
12
  ###########################################################################
13
13
  __all__ = [
14
- "beautiful_output", "print", "demo",
14
+ "beautiful_output",
15
+ "print",
16
+ "demo",
15
17
  ]
16
18
 
17
19
 
18
-
19
20
  # Library
20
21
  ###########################################################################
21
22
  from functools import wraps as __wraps
@@ -33,24 +34,25 @@ try:
33
34
  from rich.text import Text as __Text
34
35
  except ImportError:
35
36
  from absfuyu.config import ABSFUYU_CONFIG
37
+
36
38
  if ABSFUYU_CONFIG._get_setting("auto-install-extra").value:
37
39
  __cmd: str = "python -m pip install -U absfuyu[beautiful]".split()
38
40
  from subprocess import run as __run
41
+
39
42
  __run(__cmd)
40
43
  else:
41
- raise SystemExit("This feature is in absfuyu[beautiful] package")
44
+ raise SystemExit("This feature is in absfuyu[beautiful] package") # noqa: B904
42
45
  else:
43
46
  BEAUTIFUL_MODE = True
44
47
 
45
48
 
46
-
47
49
  # Function
48
50
  ###########################################################################
49
51
  def beautiful_output(
50
- layout_option: int = 2,
51
- header_visible: __Optional[bool] = True,
52
- footer_visible: __Optional[bool] = False,
53
- ):
52
+ layout_option: int = 2,
53
+ header_visible: __Optional[bool] = True,
54
+ footer_visible: __Optional[bool] = False,
55
+ ):
54
56
  """
55
57
  Beautify function output
56
58
 
@@ -62,21 +64,19 @@ def beautiful_output(
62
64
  footer_visible : True | False | None
63
65
  Show footer
64
66
  """
65
-
67
+
66
68
  if not BEAUTIFUL_MODE:
67
69
  raise SystemExit("This feature is in absfuyu[beautiful] package")
68
70
 
69
71
  def decorator(func):
70
-
71
72
  @__wraps(func)
72
73
  def wrapper(*args, **kwargs):
73
-
74
74
  # Measure performance
75
75
  start_time = __perf()
76
76
  f = func(*args, **kwargs)
77
77
  finished_time = __perf()
78
78
  elapsed = f"Time elapsed: {finished_time - start_time:,.6f} s"
79
-
79
+
80
80
  # Make header
81
81
  header_table = __Table.grid(expand=True)
82
82
  header_table.add_row(
@@ -94,11 +94,11 @@ def beautiful_output(
94
94
  style="white on blue",
95
95
  ),
96
96
  )
97
-
97
+
98
98
  # Make output table
99
99
  out_table = __Table.grid(expand=True)
100
- out_table.add_column(ratio=2) # result
101
- out_table.add_column() # performance
100
+ out_table.add_column(ratio=2) # result
101
+ out_table.add_column() # performance
102
102
  r_txt = __Text(
103
103
  str(f),
104
104
  overflow="fold",
@@ -132,16 +132,21 @@ def beautiful_output(
132
132
  True: header_table,
133
133
  False: line,
134
134
  None: __Text(),
135
- } # header[header_visible]
135
+ } # header[header_visible]
136
136
  footer = {
137
137
  True: footer_table,
138
138
  False: line,
139
139
  None: __Text(),
140
- } # footer[footer_visible]
140
+ } # footer[footer_visible]
141
141
  layout = {
142
142
  1: __Group(header[header_visible], out_table, footer[footer_visible]),
143
- 2: __Group(header[header_visible], result_panel, performance_panel, footer[footer_visible]),
144
- 3: __Group(result_panel)
143
+ 2: __Group(
144
+ header[header_visible],
145
+ result_panel,
146
+ performance_panel,
147
+ footer[footer_visible],
148
+ ),
149
+ 3: __Group(result_panel),
145
150
  }
146
151
  if layout_option in layout:
147
152
  return layout[layout_option]
@@ -150,7 +155,7 @@ def beautiful_output(
150
155
  # return layout[3]
151
156
 
152
157
  return wrapper
153
-
158
+
154
159
  return decorator
155
160
 
156
161
 
@@ -162,7 +167,7 @@ if BEAUTIFUL_MODE:
162
167
  # demo
163
168
  @beautiful_output()
164
169
  def __demo_decorator(x: any = None):
165
- code="""\
170
+ code = """\
166
171
  # demo
167
172
  from absfuyu.extensions import beautiful as bu
168
173
  @bu.beautiful_output()
@@ -174,8 +179,10 @@ bu.print(testcode())"""
174
179
  x = code
175
180
  return x
176
181
 
182
+
177
183
  def demo(x: any = None):
178
184
  print(__demo_decorator(x))
179
185
 
186
+
180
187
  if __name__ == "__main__":
181
- demo()
188
+ demo()