absfuyu 3.2.0__py3-none-any.whl → 3.4.0__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 +98 -0
  7. absfuyu/cli/game_group.py +109 -0
  8. absfuyu/config/__init__.py +55 -94
  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 +110 -58
  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 +314 -109
  31. absfuyu/general/generator.py +67 -67
  32. absfuyu/general/human.py +148 -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 +38 -40
  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 +36 -98
  49. absfuyu/util/pkl.py +8 -8
  50. absfuyu/util/zipped.py +17 -19
  51. absfuyu/version.py +137 -148
  52. absfuyu-3.4.0.dist-info/METADATA +124 -0
  53. absfuyu-3.4.0.dist-info/RECORD +59 -0
  54. {absfuyu-3.2.0.dist-info → absfuyu-3.4.0.dist-info}/WHEEL +1 -2
  55. {absfuyu-3.2.0.dist-info → absfuyu-3.4.0.dist-info}/entry_points.txt +1 -0
  56. {absfuyu-3.2.0.dist-info → absfuyu-3.4.0.dist-info/licenses}/LICENSE +1 -1
  57. absfuyu/extensions/dev/pkglib.py +0 -98
  58. absfuyu/game/tictactoe2.py +0 -318
  59. absfuyu-3.2.0.dist-info/METADATA +0 -216
  60. absfuyu-3.2.0.dist-info/RECORD +0 -55
  61. absfuyu-3.2.0.dist-info/top_level.txt +0 -1
@@ -3,8 +3,8 @@ Absfuyu: Generator
3
3
  ------------------
4
4
  This generate stuff (Not python's ``generator``)
5
5
 
6
- Version: 1.1.0
7
- Date updated: 06/03/2024 (dd/mm/yyyy)
6
+ Version: 1.1.1
7
+ Date updated: 05/04/2024 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -14,20 +14,17 @@ Features:
14
14
  - Generate combinations of list in range
15
15
  """
16
16
 
17
-
18
17
  # Module level
19
18
  ###########################################################################
20
- __all__ = [
21
- "Charset",
22
- "Generator"
23
- ]
19
+ __all__ = ["Charset", "Generator"]
24
20
 
25
21
 
26
22
  # Library
27
23
  ###########################################################################
24
+ import string
28
25
  from itertools import chain, combinations
29
26
  from random import choice
30
- import string
27
+
31
28
  # from string import (
32
29
  # ascii_letters as _ascii_letters,
33
30
  # ascii_uppercase as _ascii_uppercase,
@@ -48,6 +45,7 @@ class Charset:
48
45
  """
49
46
  Character set data class
50
47
  """
48
+
51
49
  DEFAULT = string.ascii_letters + string.digits
52
50
  ALPHABET = string.ascii_letters
53
51
  FULL = string.ascii_letters + string.digits + string.punctuation
@@ -56,7 +54,7 @@ class Charset:
56
54
  DIGIT = string.digits
57
55
  SPECIAL = string.punctuation
58
56
  ALL = string.printable
59
- PRODUCT_KEY = "BCDFGHJKMNPQRTVWXY2346789" # Charset that various key makers use
57
+ PRODUCT_KEY = "BCDFGHJKMNPQRTVWXY2346789" # Charset that various key makers use
60
58
  # DEFAULT = _ascii_letters + _digits
61
59
  # ALPHABET = _ascii_letters
62
60
  # FULL = _ascii_letters + _digits + _punctuation
@@ -67,7 +65,7 @@ class Charset:
67
65
  # ALL = _printable
68
66
 
69
67
  def __str__(self) -> str:
70
- charset = [x for x in __class__.__dict__.keys() if not x.startswith("__")]
68
+ charset = [x for x in self.__class__.__dict__.keys() if not x.startswith("__")]
71
69
  return f"List of Character set: {charset}"
72
70
 
73
71
  def __repr__(self) -> str:
@@ -78,24 +76,27 @@ class Generator:
78
76
  """
79
77
  Generator that generate stuffs
80
78
  """
79
+
81
80
  def __init__(self) -> None:
82
81
  logger.debug("Class initiated!")
82
+
83
83
  def __str__(self) -> str:
84
84
  return f"{self.__class__.__name__}()"
85
+
85
86
  def __repr__(self) -> str:
86
87
  return self.__str__()
87
88
 
88
89
  @staticmethod
89
90
  def generate_string(
90
- charset: str = Charset.DEFAULT,
91
- size: int = 8,
92
- times: int = 1,
93
- unique: bool = False,
94
- string_type_if_1: bool = False
95
- ):
91
+ charset: str = Charset.DEFAULT,
92
+ size: int = 8,
93
+ times: int = 1,
94
+ unique: bool = False,
95
+ string_type_if_1: bool = False,
96
+ ):
96
97
  """
97
98
  Generate a list of random string from character set (Random string generator)
98
-
99
+
99
100
  Parameters
100
101
  ----------
101
102
  charset : str
@@ -108,31 +109,31 @@ class Generator:
108
109
  - ``Charset.DIGIT``: character in [0-9]
109
110
  - ``Charset.SPECIAL``: character in [!@#$%^&*()_+=-]
110
111
  - ``Charset.ALL``: character in every printable character
111
-
112
+
112
113
  size : int
113
- Length of each string in list
114
+ Length of each string in list
114
115
  (Default: ``8``)
115
-
116
+
116
117
  times : int
117
- How many random string generated
118
+ How many random string generated
118
119
  (Default: ``1``)
119
-
120
+
120
121
  unique : bool
121
- Each generated text is unique
122
+ Each generated text is unique
122
123
  (Default: ``False``)
123
-
124
+
124
125
  string_type_if_1 : bool
125
- Return a ``str`` type result if ``times == 1``
126
+ Return a ``str`` type result if ``times == 1``
126
127
  (Default: ``False``)
127
-
128
+
128
129
  Returns
129
130
  -------
130
131
  list
131
132
  List of random string generated
132
-
133
+
133
134
  str
134
135
  When ``string_type_if_1`` is ``True``
135
-
136
+
136
137
  None
137
138
  When invalid option
138
139
 
@@ -145,15 +146,15 @@ class Generator:
145
146
 
146
147
  try:
147
148
  char_lst = list(charset)
148
- except:
149
- char_lst = charset
149
+ except Exception:
150
+ char_lst = charset # type: ignore # ! review this sometime
150
151
  # logger.debug(char_lst)
151
152
 
152
153
  unique_string = []
153
154
  count = 0
154
155
  logger.debug(f"Unique generated text: {unique}")
155
156
 
156
- while (count < times):
157
+ while count < times:
157
158
  s = "".join(choice(char_lst) for _ in range(size))
158
159
  logger.debug(f"Time generated: {count+1}. Remaining: {times-count-1}. {s}")
159
160
  if not unique:
@@ -163,39 +164,39 @@ class Generator:
163
164
  if s not in unique_string:
164
165
  unique_string.append(s)
165
166
  count += 1
166
-
167
+
167
168
  logger.debug(unique_string)
168
169
  if string_type_if_1 and times == 1:
169
170
  return unique_string[0]
170
171
  else:
171
172
  return unique_string
172
-
173
+
173
174
  @staticmethod
174
175
  def generate_key(
175
- charset: str = Charset.PRODUCT_KEY,
176
- letter_per_block: int = 5,
177
- number_of_block: int = 5,
178
- sep: str = "-"
179
- ) -> str:
176
+ charset: str = Charset.PRODUCT_KEY,
177
+ letter_per_block: int = 5,
178
+ number_of_block: int = 5,
179
+ sep: str = "-",
180
+ ) -> str:
180
181
  """
181
182
  Generate custom key
182
183
 
183
184
  Parameters
184
185
  ----------
185
186
  charset : str
186
- Character set
187
+ Character set
187
188
  (Default: ``Charset.PRODUCT_KEY``)
188
-
189
+
189
190
  letter_per_block : int
190
- Number of letter per key block
191
+ Number of letter per key block
191
192
  (Default: ``5``)
192
-
193
+
193
194
  number_of_block : int
194
- Number of key block
195
+ Number of key block
195
196
  (Default: ``5``)
196
-
197
+
197
198
  sep : str
198
- Key block separator
199
+ Key block separator
199
200
  (Default: ``-``)
200
201
 
201
202
  Returns
@@ -210,12 +211,12 @@ class Generator:
210
211
  'VKKPJVYD2H-M7R687QCV2'
211
212
  """
212
213
  out = sep.join(
213
- __class__.generate_string(
214
+ __class__.generate_string( # type: ignore
214
215
  charset,
215
216
  size=letter_per_block,
216
217
  times=number_of_block,
217
218
  unique=False,
218
- string_type_if_1=False
219
+ string_type_if_1=False,
219
220
  )
220
221
  )
221
222
  logger.debug(out)
@@ -225,7 +226,7 @@ class Generator:
225
226
  def generate_check_digit(number: int) -> int:
226
227
  """
227
228
  Check digit generator
228
-
229
+
229
230
  "A check digit is a form of redundancy check used for
230
231
  error detection on identification numbers, such as
231
232
  bank account numbers, which are used in an application
@@ -238,20 +239,20 @@ class Generator:
238
239
  the input of a series of characters (usually digits)
239
240
  such as a single mistyped digit or some permutations
240
241
  of two successive digits." (Wikipedia)
241
-
242
+
242
243
  This function use Luhn's algorithm to calculate
243
-
244
+
244
245
  Parameters
245
246
  ----------
246
247
  number : int
247
248
  Number to calculate check digit
248
-
249
+
249
250
  Returns
250
251
  -------
251
252
  int
252
253
  Check digit
253
-
254
-
254
+
255
+
255
256
  Example:
256
257
  --------
257
258
  >>> Generator.generate_check_digit("4129984562545")
@@ -265,22 +266,24 @@ class Generator:
265
266
  logger.debug(f"Reversed: {''.join(num)}")
266
267
  for i in range(len(num)):
267
268
  # convert back into integer
268
- num[i] = int(num[i])
269
- if i%2 == 0:
269
+ num[i] = int(num[i]) # type: ignore
270
+ if i % 2 == 0:
270
271
  # double value of the even-th digit
271
272
  num[i] *= 2
272
273
  # sum the character of digit if it's >= 10
273
- if num[i] >= 10:
274
- num[i] -= 9
275
- sum += num[i]
274
+ if num[i] >= 10: # type: ignore
275
+ num[i] -= 9 # type: ignore
276
+ sum += num[i] # type: ignore
276
277
  logger.debug(f"Loop {i+1}: {num[i]}, {sum}")
277
-
278
+
278
279
  out = (10 - (sum % 10)) % 10
279
280
  logger.debug(f"Output: {out}")
280
281
  return out
281
282
 
282
283
  @staticmethod
283
- def combinations_range(sequence: list, *, min_len: int = 1, max_len: int = 0) -> List[tuple]:
284
+ def combinations_range(
285
+ sequence: list, *, min_len: int = 1, max_len: int = 0
286
+ ) -> List[tuple]:
284
287
  """
285
288
  Generate all combinations of a ``sequence`` from ``min_len`` to ``max_len``
286
289
 
@@ -305,17 +308,14 @@ class Generator:
305
308
  # Restrain
306
309
  if max_len < 1:
307
310
  max_len = len(sequence)
308
- max_len = set_max(max_len, max_value=len(sequence))
309
- min_len = set_min_max(min_len, min_value=1, max_value=max_len)
311
+ max_len = int(set_max(max_len, max_value=len(sequence)))
312
+ min_len = int(set_min_max(min_len, min_value=1, max_value=max_len))
310
313
  logger.debug(f"Combination range: [{min_len}, {max_len}]")
311
314
 
312
315
  # Return
313
316
  return list(
314
317
  chain.from_iterable(
315
- [
316
- list(combinations(sequence, i))
317
- for i in range(min_len, max_len + 1)
318
- ]
318
+ [list(combinations(sequence, i)) for i in range(min_len, max_len + 1)]
319
319
  )
320
320
  )
321
321
 
@@ -323,4 +323,4 @@ class Generator:
323
323
  # Run
324
324
  ###########################################################################
325
325
  if __name__ == "__main__":
326
- logger.setLevel(10) # DEBUG
326
+ logger.setLevel(10) # DEBUG