reykit 1.1.13__py3-none-any.whl → 1.1.15__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/rexception.py CHANGED
@@ -20,7 +20,7 @@
20
20
  """
21
21
 
22
22
 
23
- from typing import Any, NoReturn
23
+ from typing import Any, NoReturn, overload
24
24
  from types import TracebackType
25
25
  from collections.abc import Iterable
26
26
  from sys import exc_info as sys_exc_info
@@ -213,6 +213,12 @@ def catch_exc(
213
213
  return exc_report, exc_type, exc_instance, exc_traceback
214
214
 
215
215
 
216
+ @overload
217
+ def check_least_one(*values: None) -> NoReturn: ...
218
+
219
+ @overload
220
+ def check_least_one(*values: Any) -> None: ...
221
+
216
222
  def check_least_one(*values: Any) -> None:
217
223
  """
218
224
  Check that at least one of multiple values is not null, when check fail, then throw exception.
@@ -249,22 +255,23 @@ def check_most_one(*values: Any) -> None:
249
255
  """
250
256
 
251
257
  # Check.
252
- none_count = 0
258
+ exist = False
253
259
  for value in values:
254
260
  if value is not None:
255
- none_count += 1
256
-
257
- # Throw exception.
258
- if none_count > 1:
259
- from .rsystem import get_name
260
- vars_name = get_name(values)
261
- if vars_name is not None:
262
- vars_name_de_dup = list(set(vars_name))
263
- vars_name_de_dup.sort(key=vars_name.index)
264
- vars_name_str = ' ' + ' and '.join([f'"{var_name}"' for var_name in vars_name_de_dup])
265
- else:
266
- vars_name_str = ''
267
- raise TypeError(f'at most one of parameters{vars_name_str} is not None')
261
+ if exist is True:
262
+
263
+ # Throw exception.
264
+ from .rsystem import get_name
265
+ vars_name = get_name(values)
266
+ if vars_name is not None:
267
+ vars_name_de_dup = list(set(vars_name))
268
+ vars_name_de_dup.sort(key=vars_name.index)
269
+ vars_name_str = ' ' + ' and '.join([f'"{var_name}"' for var_name in vars_name_de_dup])
270
+ else:
271
+ vars_name_str = ''
272
+ raise TypeError(f'at most one of parameters{vars_name_str} is not None')
273
+
274
+ exist = True
268
275
 
269
276
 
270
277
  def check_file_found(path: str) -> None:
reykit/rlog.py CHANGED
@@ -998,7 +998,7 @@ class RRecord(object):
998
998
  rfile(value, True)
999
999
 
1000
1000
 
1001
- def is_record(
1001
+ def is_recorded(
1002
1002
  self,
1003
1003
  value: Any
1004
1004
  ) -> bool:
@@ -1036,4 +1036,4 @@ class RRecord(object):
1036
1036
  __call__ = record
1037
1037
 
1038
1038
 
1039
- __contains__ = is_record
1039
+ __contains__ = is_recorded
reykit/rmultitask.py CHANGED
@@ -50,6 +50,11 @@ __all__ = (
50
50
  class RThreadPool(object):
51
51
  """
52
52
  Rey's `thread pool` type.
53
+
54
+ Attributes
55
+ ----------
56
+ Queue : Thread queue type.
57
+ Lock : Thread lock type.
53
58
  """
54
59
 
55
60
  Queue = QQueue
@@ -668,6 +673,11 @@ async def async_request(
668
673
  class RAsyncPool(object):
669
674
  """
670
675
  Rey's `asynchronous pool` type.
676
+
677
+ Attributes
678
+ ----------
679
+ Queue : asynchronous queue type.
680
+ Lock : asynchronous lock type.
671
681
  """
672
682
 
673
683
  Queue = AQueue
reykit/ros.py CHANGED
@@ -195,26 +195,27 @@ def get_file_str(file: FileStr) -> str:
195
195
  File string data.
196
196
  """
197
197
 
198
+ # Get.
198
199
  match file:
199
200
 
200
- # Path or string.
201
+ ## Path or string.
201
202
  case str():
202
203
  exist = os_exists(file)
203
204
 
204
- # Path.
205
+ ## Path.
205
206
  if exist:
206
207
  rfile = RFile(file)
207
208
  file_str = rfile.str
208
209
 
209
- # String.
210
+ ## String.
210
211
  else:
211
212
  file_str = file
212
213
 
213
- # IO.
214
+ ## IO.
214
215
  case TextIOBase():
215
216
  file_str = file.read()
216
217
 
217
- # Throw exception.
218
+ ## Throw exception.
218
219
  case _:
219
220
  throw(TypeError, file)
220
221
 
@@ -237,24 +238,25 @@ def get_file_bytes(file: FileBytes) -> bytes:
237
238
  File bytes data.
238
239
  """
239
240
 
241
+ # Get.
240
242
  match file:
241
243
 
242
- # Bytes.
244
+ ## Bytes.
243
245
  case bytes():
244
246
  file_bytes = file
245
247
  case bytearray():
246
248
  file_bytes = bytes(file)
247
249
 
248
- # Path.
250
+ ## Path.
249
251
  case str():
250
252
  rfile = RFile(file)
251
253
  file_bytes = rfile.bytes
252
254
 
253
- # IO.
255
+ ## IO.
254
256
  case BufferedIOBase():
255
257
  file_bytes = file.read()
256
258
 
257
- # Throw exception.
259
+ ## Throw exception.
258
260
  case _:
259
261
  throw(TypeError, file)
260
262
 
@@ -366,12 +368,24 @@ class RFile(object):
366
368
 
367
369
 
368
370
  @overload
369
- def __getattr__(self, name: Literal['open_r', 'open_w', 'open_a']) -> TextIO: ...
371
+ def r(self) -> TextIO: ...
370
372
 
371
373
  @overload
372
- def __getattr__(self, name: Literal['open_rb', 'open_wb', 'open_ab']) -> BinaryIO: ...
374
+ def w(self) -> TextIO: ...
373
375
 
374
- def __getattr__(self, name: Literal['open_r', 'open_w', 'open_a', 'open_rb', 'open_wb', 'open_ab']) -> TextIO | BinaryIO:
376
+ @overload
377
+ def a(self) -> TextIO: ...
378
+
379
+ @overload
380
+ def rb(self) -> BinaryIO: ...
381
+
382
+ @overload
383
+ def wb(self) -> BinaryIO: ...
384
+
385
+ @overload
386
+ def ab(self) -> BinaryIO: ...
387
+
388
+ def __getattr__(self, name: Literal['r', 'w', 'a', 'rb', 'wb', 'ab']) -> TextIO | BinaryIO:
375
389
  """
376
390
  Get attribute.
377
391
 
@@ -384,16 +398,8 @@ class RFile(object):
384
398
  IO object.
385
399
  """
386
400
 
387
- if name in (
388
- 'open_r',
389
- 'open_w',
390
- 'open_a',
391
- 'open_rb',
392
- 'open_wb',
393
- 'open_ab'
394
- ):
395
- mode: Literal['r', 'w', 'a', 'rb', 'wb', 'ab'] = name[5:]
396
- io = self.open(mode)
401
+ if name in ('r', 'w', 'a', 'rb', 'wb', 'ab'):
402
+ io = self.open(name)
397
403
  return io
398
404
 
399
405
 
reykit/rrandom.py CHANGED
@@ -71,7 +71,7 @@ class RRandomSeed(object):
71
71
  ----------
72
72
  seed : Random seed.
73
73
  - `None`: Clear seed.
74
- - `int | float | str | bytes | bytearray` : Set seed.
74
+ - `int | float | str | bytes | bytearray`: Set seed.
75
75
  """
76
76
 
77
77
  # Delete.
reykit/rschedule.py CHANGED
@@ -27,6 +27,7 @@ class RSchedule(object):
27
27
  Rey's `schedule` type.
28
28
  """
29
29
 
30
+
30
31
  def __init__(
31
32
  self,
32
33
  max_workers: int = 10,
reykit/rstdout.py CHANGED
@@ -37,6 +37,12 @@ __all__ = (
37
37
  class RConfigStdout(object, metaclass=RConfigMeta):
38
38
  """
39
39
  Rey's `config standard output` type.
40
+
41
+ Attributes
42
+ ----------
43
+ is_frame_plain : Whehter global use plain text frame type.
44
+ - `Literal[True]`: 'full' to 'half_plain', 'half' to 'half_plain', 'top' to 'top_plain', Other unchanged.
45
+ default_width : Global default text width.
40
46
  """
41
47
 
42
48
  # Module path.
@@ -78,15 +84,15 @@ def beautify_text(
78
84
  - `None`: Use attribute `RConfigStdout.default_width`.
79
85
  - `int`: Use this value.
80
86
  frame : Text frame type.
81
- - `Literal[`full`]`: Add beautiful four side frame and limit length.
87
+ - `Literal['full']`: Add beautiful four side frame and limit length.
82
88
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
83
89
  When throw `exception`, then frame is `half` type.
84
- - `Literal[`half`]`: Add beautiful top and bottom side frame.
90
+ - `Literal['half']`: Add beautiful top and bottom side frame.
85
91
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
86
- - `Literal[`top`]`: Add beautiful top side frame.
92
+ - `Literal['top']`: Add beautiful top side frame.
87
93
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `top_plain` type.
88
- - `Literal[`half_plain`]`: Add plain top and bottom side frame.
89
- - `Literal[`top_plain`]`: Add plain top side frame.
94
+ - `Literal['half_plain']`: Add plain top and bottom side frame.
95
+ - `Literal['top_plain']`: Add plain top side frame.
90
96
 
91
97
  Returns
92
98
  -------
@@ -150,15 +156,15 @@ def echo(
150
156
  - `None`: Use attribute `RConfigStdout.default_width`.
151
157
  - `int`: Use this value.
152
158
  frame : Text frame type.
153
- - `Literal[`full`]`: Add beautiful four side frame and limit length.
159
+ - `Literal['full']`: Add beautiful four side frame and limit length.
154
160
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
155
161
  When throw `exception`, then frame is `half` type.
156
- - `Literal[`half`]`: Add beautiful top and bottom side frame.
162
+ - `Literal['half']`: Add beautiful top and bottom side frame.
157
163
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
158
- - `Literal[`top`]`: Add beautiful top side frame.
164
+ - `Literal['top']`: Add beautiful top side frame.
159
165
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `top_plain` type.
160
- - `Literal[`half_plain`]`: Add plain top and bottom side frame.
161
- - `Literal[`top_plain`]`: Add plain top side frame.
166
+ - `Literal['half_plain']`: Add plain top and bottom side frame.
167
+ - `Literal['top_plain']`: Add plain top side frame.
162
168
 
163
169
  Returns
164
170
  -------
@@ -195,15 +201,15 @@ def rinput(
195
201
  - `None`: Use attribute `RConfigStdout.default_width`.
196
202
  - `int`: Use this value.
197
203
  frame : Text frame type.
198
- - `Literal[`full`]`: Add beautiful four side frame and limit length.
204
+ - `Literal['full']`: Add beautiful four side frame and limit length.
199
205
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
200
206
  When throw `exception`, then frame is `half` type.
201
- - `Literal[`half`]`: Add beautiful top and bottom side frame.
207
+ - `Literal['half']`: Add beautiful top and bottom side frame.
202
208
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `half_plain` type.
203
- - `Literal[`top`]`: Add beautiful top side frame.
209
+ - `Literal['top']`: Add beautiful top side frame.
204
210
  When attribute `RConfigStdout.is_frame_plain` is True, then frame is `top_plain` type.
205
- - `Literal[`half_plain`]`: Add plain top and bottom side frame.
206
- - `Literal[`top_plain`]`: Add plain top side frame.
211
+ - `Literal['half_plain']`: Add plain top and bottom side frame.
212
+ - `Literal['top_plain']`: Add plain top side frame.
207
213
  extra : Extra print text at the end.
208
214
 
209
215
  Returns
reykit/rsystem.py CHANGED
@@ -545,33 +545,34 @@ def get_stack_text(format_: Literal['plain', 'full'] = 'plain', limit: int = 2)
545
545
  Code stack text.
546
546
  """
547
547
 
548
+ # Get.
548
549
  match format_:
549
550
 
550
- # Plain.
551
+ ## Plain.
551
552
  case 'plain':
552
553
  limit += 1
553
554
  stacks = format_stack(limit=limit)
554
555
 
555
- ## Check.
556
+ ### Check.
556
557
  if len(stacks) != limit:
557
558
  throw(value=limit)
558
559
 
559
- ## Convert.
560
+ ### Convert.
560
561
  text = stacks[0]
561
562
  index_end = text.find(', in ')
562
563
  text = text[2:index_end]
563
564
 
564
- # Full.
565
+ ## Full.
565
566
  case 'full':
566
567
  stacks = format_stack()
567
568
  index_limit = len(stacks) - limit
568
569
  stacks = stacks[:index_limit]
569
570
 
570
- ## Check.
571
+ ### Check.
571
572
  if len(stacks) == 0:
572
573
  throw(value=limit)
573
574
 
574
- ## Convert.
575
+ ### Convert.
575
576
  stacks = [
576
577
  stack[2:].replace('\n ', '\n', 1)
577
578
  for stack in stacks
@@ -579,7 +580,7 @@ def get_stack_text(format_: Literal['plain', 'full'] = 'plain', limit: int = 2)
579
580
  text = ''.join(stacks)
580
581
  text = text[:-1]
581
582
 
582
- # Throw exception.
583
+ ## Throw exception.
583
584
  case _:
584
585
  throw(ValueError, format_)
585
586
 
reykit/rtime.py CHANGED
@@ -153,9 +153,10 @@ def time_to(
153
153
  Converted text.
154
154
  """
155
155
 
156
+ # Convert.
156
157
  match obj:
157
158
 
158
- # Type 'datetime'.
159
+ ## Type 'datetime'.
159
160
  case Datetime() | PTimestamp():
160
161
  if decimal:
161
162
  format_ = '%Y-%m-%d %H:%M:%S.%f'
@@ -163,11 +164,11 @@ def time_to(
163
164
  format_ = '%Y-%m-%d %H:%M:%S'
164
165
  text = obj.strftime(format_)
165
166
 
166
- # Type 'date'.
167
+ ## Type 'date'.
167
168
  case Date():
168
169
  text = obj.strftime('%Y-%m-%d')
169
170
 
170
- # Type 'time'.
171
+ ## Type 'time'.
171
172
  case Time():
172
173
  if decimal:
173
174
  format_ = '%H:%M:%S.%f'
@@ -175,7 +176,7 @@ def time_to(
175
176
  format_ = '%H:%M:%S'
176
177
  text = obj.strftime(format_)
177
178
 
178
- # Type 'timedelta'.
179
+ ## Type 'timedelta'.
179
180
  case Timedelta() | PTimedelta():
180
181
  timestamp = obj.seconds + obj.microseconds / 1000_000
181
182
  if timestamp >= 0:
@@ -189,15 +190,15 @@ def time_to(
189
190
  if obj.days != 0:
190
191
  text = f'{obj.days}day ' + text
191
192
 
192
- ## Throw exception.
193
+ ### Throw exception.
193
194
  elif raising:
194
195
  throw(ValueError, obj)
195
196
 
196
- ## Not raise.
197
+ ### Not raise.
197
198
  else:
198
199
  return obj
199
200
 
200
- # Type 'struct_time'.
201
+ ## Type 'struct_time'.
201
202
  case StructTime():
202
203
  if decimal:
203
204
  format_ = '%Y-%m-%d %H:%M:%S.%f'
@@ -205,11 +206,11 @@ def time_to(
205
206
  format_ = '%Y-%m-%d %H:%M:%S'
206
207
  text = time_strftime(format_, obj)
207
208
 
208
- # Throw exception.
209
+ ## Throw exception.
209
210
  case _ if raising:
210
211
  throw(TypeError, obj)
211
212
 
212
- # Not raise.
213
+ ## Not raise.
213
214
  case _:
214
215
  return obj
215
216
 
@@ -334,13 +335,14 @@ def to_time(
334
335
  Time object.
335
336
  """
336
337
 
338
+ # Convert.
337
339
  match obj:
338
340
 
339
- # Type 'str'.
341
+ ## Type 'str'.
340
342
  case str():
341
343
  time_obj = text_to_time(obj)
342
344
 
343
- # Type 'struct_time'.
345
+ ## Type 'struct_time'.
344
346
  case StructTime():
345
347
  time_obj = Datetime(
346
348
  obj.tm_year,
@@ -351,7 +353,7 @@ def to_time(
351
353
  obj.tm_sec
352
354
  )
353
355
 
354
- # Type 'float'.
356
+ ## Type 'float'.
355
357
  case int() | float():
356
358
  int_len, _ = digits(obj)
357
359
  match int_len:
@@ -362,14 +364,14 @@ def to_time(
362
364
  case _:
363
365
  time_obj = None
364
366
 
365
- # No time object.
367
+ ## No time object.
366
368
  if time_obj is None:
367
369
 
368
- ## Throw exception.
370
+ ### Throw exception.
369
371
  if raising:
370
372
  throw(ValueError, obj)
371
373
 
372
- ## Not raise.
374
+ ### Not raise.
373
375
  else:
374
376
  return obj
375
377
 
reykit/rtype.py CHANGED
@@ -88,6 +88,10 @@ class RSingleton(object):
88
88
  """
89
89
  Rey's `singleton` type.
90
90
  When instantiated, method `__singleton__` will be called only once, and will accept arguments.
91
+
92
+ Attributes
93
+ ----------
94
+ _instance : Global singleton instance.
91
95
  """
92
96
 
93
97
  _instance: Self | None = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reykit
3
- Version: 1.1.13
3
+ Version: 1.1.15
4
4
  Summary: Rey's kit method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reykit/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -3,28 +3,28 @@ reykit/rall.py,sha256=mOFwHXZ4-BOkJ5Ptbm6lQc2zwNf_VqcqM6AYYnYPfoo,672
3
3
  reykit/rcomm.py,sha256=LgSLrpUokOgdRMYwuZj6JNvxDyvENwsiOd6ZHo67HBg,11444
4
4
  reykit/rdata.py,sha256=nCBZxD2fsDuFCDyfLLZZPYJPod4Xuv0aKplQDDUMvI8,8285
5
5
  reykit/remail.py,sha256=rK_hbqGeZh04DnVPtjODLsm_YfdrZ5L-Z6SbjplrfUc,6736
6
- reykit/rexception.py,sha256=ftXVdEVkU0B0HXbKjQTiJRJVVGbvhorwWtMiplpN9Zk,8118
6
+ reykit/rexception.py,sha256=lxs3DWNsGn33YTpYHi6pm4rjjYFpqvYSKhkailxM638,8344
7
7
  reykit/rimage.py,sha256=fQpIHX6Go3Jk_MDgsSDnZx27EZHumyGdgI9xyjP5lYQ,6275
8
- reykit/rlog.py,sha256=qhmATMv3_bJRaiuN9mo8hSf_95HH5Lw838aJFio98sg,25760
8
+ reykit/rlog.py,sha256=EETnQNVADBvTyseVpL5uOKWL647ee6ZeAevBnTOOWF8,25764
9
9
  reykit/rmonkey.py,sha256=RqhmKXabl11s2RJaGizpm00Q1yEkul1Je5uxw8_thUk,7584
10
- reykit/rmultitask.py,sha256=sHmE2JXzPkDxeJGUjU7sg9PTDYjPQqSfAGlwO943K7Q,22929
10
+ reykit/rmultitask.py,sha256=vey2UiPcwP7XI8LiobcpRqA0FGUg_jAzBR9FmcuSHEk,23133
11
11
  reykit/rnumber.py,sha256=6x4FuRB-MTJheo6wbTUEaBarnew15jomlrneo3_Q2wg,3646
12
- reykit/ros.py,sha256=6fHKCpxoWmCpxlRpGag5E-GzGsh0xt8YEmx9iqDvN_o,40780
13
- reykit/rrandom.py,sha256=TfQKYXRw379MMRIZYfjBtCkmsartA9thhDIG1fc3tM4,9233
12
+ reykit/ros.py,sha256=vrQw4WC2YebK1fucgyLk1PmoPBtgD_ONRzsSgIEJx8c,40682
13
+ reykit/rrandom.py,sha256=Av-neLmX3DXYPq-qzYY95CfXvOTvXcvtXr9Lrqd1wSU,9232
14
14
  reykit/rregex.py,sha256=XTlnDLior8yyncFdrTr9FsVlBcqMXvsWRfpmvQS-BR8,6089
15
- reykit/rschedule.py,sha256=7EH_6TdEhwV-T6YyBEGYEcy85I1vTSNutDci-e_veTY,5796
16
- reykit/rstdout.py,sha256=vSvD4QjYybNiGnowWLXRU6q1u9ERPjr8YTXgq82eYDU,9648
17
- reykit/rsystem.py,sha256=2upm4hWnYfeeIjqSgJAC3GJOcAiZt1JS3UXDs_pnMM0,34772
15
+ reykit/rschedule.py,sha256=pYZq8gFOY46_ayRpW2gXsfybMZ7ULTNikLSwMuT_11M,5798
16
+ reykit/rstdout.py,sha256=O-78in-_mQ-FJP869UikdHICefiF3Yb2M0fOBJ07wwk,9921
17
+ reykit/rsystem.py,sha256=h_G3MoJ7yuIdR4_O_GjNumDPDUAb5BAhfqO3o4GWFAQ,34791
18
18
  reykit/rtable.py,sha256=gXszf_9DE_5SMdNcxMX-xd4IpHGQVjGsN3NQIm7wVGY,12055
19
19
  reykit/rtext.py,sha256=whaKpVkd36yYVtCmZ1ptp_TVRL1v3f7Jab0vPXC8wXY,11089
20
- reykit/rtime.py,sha256=L0WH6huXiNgrp1770f088ruoyovAgiB7I01pmBim9DY,17054
21
- reykit/rtype.py,sha256=AmelC4UQwO5n-dnRKo5fR4n5qEWz3d2yImTtdmvlONc,2003
20
+ reykit/rtime.py,sha256=WYPmpz4ZyrqWVU0YrXAiZWLYbMZeZTX3XqTGwt-EE3g,17101
21
+ reykit/rtype.py,sha256=hgZhDVqS86Di2DRzVdqyoT6BYob-P45IIFu-T35YYWE,2081
22
22
  reykit/rwrap.py,sha256=AJBYTDLHLGlMSiGIKoVkCsQk-Y4nDHWWFVCdnz5Bwdk,15222
23
23
  reykit/rzip.py,sha256=i6KkmeSWCnq025d-O1mbuCYezNRUhyY9OGVK0CRlNAM,3522
24
24
  reykit/rdll/__init__.py,sha256=vM9V7wSNno-WH9RrxgHTIgCkQm8LmBFoLFO8z7qovNo,306
25
25
  reykit/rdll/rdll_inject.py,sha256=bETl8tywtN1OiQudbA21u6GwBM_bqVX7jbiisNj_JBg,645
26
26
  reykit/rdll/rdll_inject_core.py,sha256=Trgh_pdJs_Lw-Y-0Kkn8kHr4BnilM9dBKnHnX25T_pM,5092
27
- reykit-1.1.13.dist-info/METADATA,sha256=Axe5egv2NzofmYvHClZPjYAs7Q9qgZ-Vlbcf5C-F6S0,1889
28
- reykit-1.1.13.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
- reykit-1.1.13.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
30
- reykit-1.1.13.dist-info/RECORD,,
27
+ reykit-1.1.15.dist-info/METADATA,sha256=SvehW8tJ8L3WIlKIrLyA-lFi_pOwTlRKBxIDoIJghXA,1889
28
+ reykit-1.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
+ reykit-1.1.15.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
30
+ reykit-1.1.15.dist-info/RECORD,,