reykit 1.1.27__py3-none-any.whl → 1.1.29__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.
reykit/__init__.py CHANGED
@@ -5,7 +5,7 @@
5
5
  @Time : 2022-12-05 14:09:21
6
6
  @Author : Rey
7
7
  @Contact : reyxbo@163.com
8
- @Explain : Rey's kit method set.
8
+ @Explain : Kit method set.
9
9
 
10
10
  Modules
11
11
  -------
reykit/rbase.py CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  from typing import Any, Literal, Self, TypeVar, NoReturn, overload
13
13
  from types import TracebackType
14
- from collections.abc import Callable, Iterable, Mapping
14
+ from collections.abc import Callable, Iterable, Container, Mapping
15
15
  from sys import exc_info as sys_exc_info
16
16
  from os.path import exists as os_exists
17
17
  from traceback import format_exc
@@ -20,7 +20,8 @@ from traceback import format_stack, extract_stack
20
20
  from atexit import register as atexit_register
21
21
  from time import sleep as time_sleep
22
22
  from inspect import signature as inspect_signature, _ParameterKind, _empty
23
- from varname import VarnameRetrievingError, argname
23
+ from ast import Starred
24
+ from varname import VarnameException, argname as varname_argname
24
25
 
25
26
 
26
27
  __all__ = (
@@ -55,7 +56,7 @@ __all__ = (
55
56
  'get_stack_text',
56
57
  'get_stack_param',
57
58
  'get_arg_info',
58
- 'get_name',
59
+ 'get_varname',
59
60
  'block',
60
61
  'at_exit'
61
62
  )
@@ -231,11 +232,9 @@ class Error(BaseError):
231
232
 
232
233
 
233
234
  def throw(
234
- exception: type[BaseException] = AssertionError,
235
- value: Any = null,
235
+ exception: type[BaseException],
236
236
  *values: Any,
237
- text: str | None = None,
238
- frame: int = 2
237
+ text: str | None = None
239
238
  ) -> NoReturn:
240
239
  """
241
240
  Throw exception.
@@ -243,10 +242,8 @@ def throw(
243
242
  Parameters
244
243
  ----------
245
244
  exception : Exception Type.
246
- value : Exception value.
247
245
  values : Exception values.
248
246
  text : Exception text.
249
- frame : Number of code to upper level.
250
247
  """
251
248
 
252
249
  # Text.
@@ -262,33 +259,27 @@ def throw(
262
259
  text = text[0].lower() + text[1:]
263
260
 
264
261
  ## Value.
265
- if value != null:
266
- values = (value,) + values
262
+ if values != ():
267
263
 
268
264
  ### Name.
269
- name = get_name(value, frame)
270
- names = (name,)
271
- if values != ():
272
- names_values = get_name(values)
273
- if names_values is not None:
274
- names += names_values
265
+ names = get_varname('values')
275
266
 
276
267
  ### Convert.
277
- match exception:
278
- case TypeError():
279
- values = [
280
- type(value)
281
- for value in values
282
- if value is not None
283
- ]
284
- case TimeoutError():
285
- values = [
286
- int(value)
287
- if value % 1 == 0
288
- else round(value, 3)
289
- for value in values
290
- if type(value) == float
291
- ]
268
+ if exception == TypeError:
269
+ print(11111)
270
+ values = [
271
+ type(value)
272
+ for value in values
273
+ if value is not None
274
+ ]
275
+ elif exception == TimeoutError:
276
+ values = [
277
+ int(value)
278
+ if value % 1 == 0
279
+ else round(value, 3)
280
+ for value in values
281
+ if type(value) == float
282
+ ]
292
283
  values = [
293
284
  repr(value)
294
285
  for value in values
@@ -406,7 +397,7 @@ def check_least_one(*values: Any) -> None:
406
397
  return
407
398
 
408
399
  # Throw exception.
409
- vars_name = get_name(values)
400
+ vars_name: list[str] = get_varname('values')
410
401
  if vars_name is not None:
411
402
  vars_name_de_dup = list(set(vars_name))
412
403
  vars_name_de_dup.sort(key=vars_name.index)
@@ -432,7 +423,7 @@ def check_most_one(*values: Any) -> None:
432
423
  if exist is True:
433
424
 
434
425
  # Throw exception.
435
- vars_name = get_name(values)
426
+ vars_name: list[str] = get_varname('values')
436
427
  if vars_name is not None:
437
428
  vars_name_de_dup = list(set(vars_name))
438
429
  vars_name_de_dup.sort(key=vars_name.index)
@@ -511,7 +502,7 @@ def check_response_code(
511
502
 
512
503
  # Throw exception.
513
504
  if not result:
514
- throw(value=code)
505
+ throw(AssertionError, code)
515
506
 
516
507
  return result
517
508
 
@@ -556,7 +547,7 @@ def is_instance(obj: Any) -> bool:
556
547
 
557
548
  def is_iterable(
558
549
  obj: Any,
559
- exclude_types: Iterable[type] | None = None
550
+ exclude_types: Container[type] | None = None
560
551
  ) -> bool:
561
552
  """
562
553
  Judge whether it is iterable.
@@ -564,7 +555,7 @@ def is_iterable(
564
555
  Parameters
565
556
  ----------
566
557
  obj : Judge object.
567
- exclude_types : Non iterative types.
558
+ exclude_types : Exclude types.
568
559
 
569
560
  Returns
570
561
  -------
@@ -604,15 +595,15 @@ def is_table(
604
595
  # Judge.
605
596
  if type(obj) != list:
606
597
  return False
607
- for element in obj:
608
- if type(element) != dict:
598
+ for elem in obj:
599
+ if type(elem) != dict:
609
600
  return False
610
601
 
611
602
  ## Check fields of table.
612
603
  if check_fields:
613
604
  keys_strs = [
614
- ':'.join([str(key) for key in element.keys()])
615
- for element in obj
605
+ ':'.join([str(key) for key in elem.keys()])
606
+ for elem in obj
616
607
  ]
617
608
  keys_strs_only = set(keys_strs)
618
609
  if len(keys_strs_only) != 1:
@@ -677,7 +668,7 @@ def get_first_notnone(*values: T, default: U = null) -> T | U:
677
668
 
678
669
  # Throw exception.
679
670
  if default == null:
680
- vars_name = get_name(values)
671
+ vars_name: list[str] = get_varname('values')
681
672
  if vars_name is not None:
682
673
  vars_name_de_dup = list(set(vars_name))
683
674
  vars_name_de_dup.sort(key=vars_name.index)
@@ -716,7 +707,7 @@ def get_stack_text(format_: Literal['plain', 'full'] = 'plain', limit: int = 2)
716
707
 
717
708
  ### Check.
718
709
  if len(stacks) != limit:
719
- throw(value=limit)
710
+ throw(AssertionError, limit)
720
711
 
721
712
  ### Convert.
722
713
  text = stacks[0]
@@ -731,7 +722,7 @@ def get_stack_text(format_: Literal['plain', 'full'] = 'plain', limit: int = 2)
731
722
 
732
723
  ### Check.
733
724
  if len(stacks) == 0:
734
- throw(value=limit)
725
+ throw(AssertionError, limit)
735
726
 
736
727
  ### Convert.
737
728
  stacks = [
@@ -777,7 +768,7 @@ def get_stack_param(format_: Literal['floor', 'full'] = 'floor', limit: int = 2)
777
768
 
778
769
  # Check.
779
770
  if len(stacks) == 0:
780
- throw(value=limit)
771
+ throw(AssertionError, limit)
781
772
 
782
773
  # Convert.
783
774
  match format_:
@@ -869,48 +860,49 @@ def get_arg_info(func: Callable) -> list[
869
860
  return info
870
861
 
871
862
 
872
- @overload
873
- def get_name(obj: tuple, frame: int = 2) -> tuple[str, ...] | None: ...
874
-
875
- @overload
876
- def get_name(obj: Any, frame: int = 2) -> str | None: ...
877
-
878
- def get_name(obj: Any, frame: int = 2) -> str | tuple[str, ...] | None:
863
+ def get_varname(argname: str, level: int = 1) -> str | list[str] | None:
879
864
  """
880
- Get name of object or variable.
865
+ Get variable name of function input argument, can backtrack.
881
866
 
882
867
  Parameters
883
868
  ----------
884
- obj : Object.
885
- - `tuple`: Variable length position parameter of previous layer.
886
- - `Any`: Parameter of any layer.
887
- frame : Number of code to upper level.
869
+ argname : Function argument name, the `*` symbol can be omitted.
870
+ level : Backtrack level count.
871
+ - `Literal[1]`: In the function that calls function `get_varname`.
888
872
 
889
873
  Returns
890
874
  -------
891
- Name or None.
875
+ Variable name.
876
+ - `General argument`: Return `str`.
877
+ - `Variable length argument`: Return `list[str]`.
878
+ - `Throw VarnameException`: Return `None`.
892
879
  """
893
880
 
894
- # Get name using built in method.
895
- if hasattr(obj, '__name__'):
896
- name = obj.__name__
897
- return name
881
+ # Handle parameter.
882
+ level += 1
883
+
884
+ # Get.
885
+ try:
886
+ result = varname_argname(argname, frame=level)
887
+ except VarnameException:
888
+ return
898
889
 
899
- # Get name using module method.
900
- name = 'obj'
901
- for frame_ in range(1, frame + 1):
902
- if type(name) != str:
903
- return
904
- try:
905
- name = argname(name, frame=frame_)
906
- except VarnameRetrievingError:
907
- return
908
- if type(name) == tuple:
909
- for element in name:
910
- if type(element) != str:
911
- return
890
+ # Convert.
891
+ if type(result) != tuple:
892
+ result = (result,)
893
+ varnames: list[str] = [
894
+ name
895
+ for elem in result
896
+ for name in (
897
+ (elem.value.id,)
898
+ if type(elem) == Starred
899
+ else tuple(elem.values())
900
+ if type(elem) == dict
901
+ else (elem,)
902
+ )
903
+ ]
912
904
 
913
- return name
905
+ return varnames
914
906
 
915
907
 
916
908
  def block() -> None:
reykit/rdata.py CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
  from typing import Any, TypedDict, Literal, overload
13
- from collections import defaultdict as Defaultdict, ChainMap
13
+ from collections import Counter, defaultdict as Defaultdict, ChainMap
14
14
  from collections.abc import Callable, Iterable, Generator
15
15
  from itertools import chain as IChain
16
16
 
@@ -30,20 +30,16 @@ __all__ = (
30
30
  )
31
31
 
32
32
 
33
- CountResult = TypedDict('CountResult', {'value': Any, 'count': int})
33
+ CountResult = TypedDict('CountResult', {'element': Any, 'number': int})
34
34
 
35
35
 
36
- def count(
37
- data: Iterable,
38
- ascend: bool = False
39
- ) -> list[CountResult]:
36
+ def count(data: Iterable) -> list[CountResult]:
40
37
  """
41
38
  Group count data element value.
42
39
 
43
40
  Parameters
44
41
  ----------
45
42
  data : Data.
46
- ascend : Whether ascending by count, otherwise descending order.
47
43
 
48
44
  Returns
49
45
  -------
@@ -51,41 +47,19 @@ def count(
51
47
 
52
48
  Examples
53
49
  --------
54
- >>> count([1, True, 1, '1', (2, 3)])
55
- [{'value': 1, 'count': 2}, {'value': True, 'count': 1}, {'value': '1', 'count': 1}, {'value': (2, 3), 'count': 1}]
50
+ >>> count([1, True, False, 0, (2, 3)])
51
+ [{'element': 1, 'number': 2}, {'element': False, 'number': 2}, {'element': (2, 3), 'number': 1}]
56
52
  """
57
53
 
58
- # Set parameter.
59
- value_list = []
60
- count_list = []
61
-
62
54
  # Count.
63
- for element in data:
64
- for index, value in enumerate(value_list):
65
- element_str = str(element)
66
- value_str = str(value)
67
- if element_str == value_str:
68
- count_list[index] += 1
69
- break
70
- else:
71
- value_list.append(element)
72
- count_list.append(1)
55
+ counter = Counter(data)
73
56
 
74
57
  # Convert.
75
58
  result = [
76
- {
77
- 'value': value,
78
- 'count': count
79
- }
80
- for value, count in zip(value_list, count_list)
59
+ {'element': elem, 'number': num}
60
+ for elem, num in counter.items()
81
61
  ]
82
62
 
83
- # Sort.
84
- result.sort(
85
- key=lambda info: info['count'],
86
- reverse=not ascend
87
- )
88
-
89
63
  return result
90
64
 
91
65
 
@@ -110,17 +84,17 @@ def flatten(data: Any, *, _flattern_data: list | None = None) -> list:
110
84
 
111
85
  ## Recursion dict object.
112
86
  if type(data) == dict:
113
- for element in data.values():
87
+ for elem in data.values():
114
88
  _flattern_data = flatten(
115
- element,
89
+ elem,
116
90
  _flattern_data = _flattern_data
117
91
  )
118
92
 
119
93
  ## Recursion iterator.
120
94
  elif is_iterable(data, (str, bytes)):
121
- for element in data:
95
+ for elem in data:
122
96
  _flattern_data = flatten(
123
- element,
97
+ elem,
124
98
  _flattern_data = _flattern_data
125
99
  )
126
100
 
reykit/rmonkey.py CHANGED
@@ -323,7 +323,7 @@ def monkey_path_pil_image_get_bytes():
323
323
 
324
324
  from PIL.Image import Image
325
325
  from io import BytesIO
326
- from reykit.rbase import Base
326
+ from .rbase import Base
327
327
 
328
328
 
329
329
  # Define.
reykit/ros.py CHANGED
@@ -1999,6 +1999,6 @@ def extract_file_content(path: str) -> str:
1999
1999
 
2000
2000
  ## Throw exception.
2001
2001
  case _:
2002
- throw(value=suffix)
2002
+ throw(AssertionError, suffix)
2003
2003
 
2004
2004
  return content