reywechat 1.0.23__py3-none-any.whl → 1.0.24__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.
reywechat/rschedule.py CHANGED
@@ -24,73 +24,29 @@ class WeChatSchedule(BaseWeChat):
24
24
  WeChat schedule type.
25
25
  """
26
26
 
27
+ SendEnum = WeChatSendEnum
28
+
27
29
 
28
30
  def __init__(
29
31
  self,
30
- rwechat: WeChat
32
+ wechat: WeChat
31
33
  ) -> None:
32
34
  """
33
35
  Build instance attributes.
34
36
 
35
37
  Parameters
36
38
  ----------
37
- rwechat : `WeChatClient` instance.
39
+ wechat : `WeChatClient` instance.
38
40
  """
39
41
 
40
42
  # Set attribute.
41
- self.rwechat = rwechat
43
+ self.wechat = wechat
42
44
  self.rrschedule = Schedule()
43
45
 
44
46
  # Start.
45
47
  self.rrschedule.start()
46
48
 
47
49
 
48
- def send(
49
- self,
50
- trigger: Literal['date', 'interval', 'cron'],
51
- trigger_kwargs: dict,
52
- send_type: WeChatSendEnum,
53
- receive_id: str,
54
- **params: Callable[[], Any] | Any
55
- ) -> None:
56
- """
57
- Schedule send message.
58
-
59
- Parameters
60
- ----------
61
- trigger : Trigger type.
62
- trigger_kwargs : Trigger keyword arguments.
63
- send_type : Send type.
64
- - `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
65
- - `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
66
- - `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
67
- - `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
68
- - `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
69
- - `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
70
- - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
71
- - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
72
- receive_id : User ID or chat room ID of receive message.
73
- params : Send parameters.
74
- - `Callable`: Use execute return value.
75
- - `Any`: Use this value.
76
- """
77
-
78
- # Get parameter.
79
- kwargs = {
80
- 'send_type': send_type,
81
- 'receive_id': receive_id,
82
- **params
83
- }
84
-
85
- # Add.
86
- self.rrschedule.add_task(
87
- self.rwechat.sender.send,
88
- trigger,
89
- kwargs=kwargs,
90
- **trigger_kwargs
91
- )
92
-
93
-
94
50
  def add_task(
95
51
  self,
96
52
  trigger: Literal['date', 'interval', 'cron'],
reywechat/rsend.py CHANGED
@@ -14,13 +14,10 @@ from typing import Any, Literal, overload
14
14
  from collections.abc import Callable
15
15
  from enum import IntEnum
16
16
  from functools import wraps as functools_wraps
17
- from os.path import join as os_join
18
17
  from queue import Queue
19
18
  from re import escape as re_escape
20
19
  from reykit.rbase import throw, catch_exc
21
- from reykit.rnet import compute_stream_time
22
20
  from reykit.ros import File
23
- from reykit.rrand import randn
24
21
  from reykit.rre import sub
25
22
  from reykit.rtime import sleep
26
23
  from reykit.rwrap import wrap_thread, wrap_exc
@@ -70,13 +67,86 @@ class WeChatSendParameter(BaseWeChat):
70
67
  SendEnum = WeChatSendEnum
71
68
 
72
69
 
70
+ @overload
71
+ def __init__(
72
+ self,
73
+ sender: WeChatSender,
74
+ send_type: Literal[WeChatSendEnum.SEND_TEXT],
75
+ receive_id: str,
76
+ send_id: int | None = None,
77
+ *,
78
+ text: str
79
+ ) -> None: ...
80
+
81
+ @overload
82
+ def __init__(
83
+ self,
84
+ sender: WeChatSender,
85
+ send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
86
+ receive_id: str,
87
+ send_id: int | None = None,
88
+ *,
89
+ user_id: str | list[str] | Literal['notify@all'],
90
+ text: str
91
+ ) -> None: ...
92
+
93
+ @overload
94
+ def __init__(
95
+ self,
96
+ sender: WeChatSender,
97
+ send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
98
+ receive_id: str,
99
+ send_id: int | None = None,
100
+ *,
101
+ file_path: str,
102
+ file_name: str
103
+ ) -> None: ...
104
+
105
+ @overload
106
+ def __init__(
107
+ self,
108
+ sender: WeChatSender,
109
+ send_type: Literal[WeChatSendEnum.SEND_PAT],
110
+ receive_id: str,
111
+ send_id: int | None = None,
112
+ *,
113
+ user_id: str
114
+ ) -> None: ...
115
+
116
+ @overload
117
+ def __init__(
118
+ self,
119
+ sender: WeChatSender,
120
+ send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
121
+ receive_id: str,
122
+ send_id: int | None = None,
123
+ *,
124
+ page_url: str,
125
+ title: str,
126
+ text: str | None = None,
127
+ image_url: str | None = None,
128
+ public_name: str | None = None,
129
+ public_id: str | None = None
130
+ ) -> None: ...
131
+
132
+ @overload
133
+ def __init__(
134
+ self,
135
+ sender: WeChatSender,
136
+ send_type: Literal[WeChatSendEnum.SEND_FORWARD],
137
+ receive_id: str,
138
+ send_id: int | None = None,
139
+ *,
140
+ message_id: str
141
+ ) -> None: ...
142
+
73
143
  def __init__(
74
144
  self,
75
145
  sender: WeChatSender,
76
146
  send_type: WeChatSendEnum,
77
147
  receive_id: str,
78
- params: dict,
79
- send_id: int | None
148
+ send_id: int | None = None,
149
+ **params: Any
80
150
  ) -> None:
81
151
  """
82
152
  Build instance attributes.
@@ -94,17 +164,16 @@ class WeChatSendParameter(BaseWeChat):
94
164
  - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
95
165
  - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
96
166
  receive_id : User ID or chat room ID of receive message.
97
- params : Send parameters.
98
167
  send_id : Send ID of database.
168
+ params : Send parameters.
99
169
  """
100
170
 
101
171
  # Set attribute.
102
172
  self.sender = sender
103
173
  self.send_type = send_type
104
174
  self.receive_id = receive_id
105
- self.params = params
106
175
  self.send_id = send_id
107
- self.cache_path: str | None = None
176
+ self.params = params
108
177
  self.exc_reports: list[str] = []
109
178
 
110
179
 
@@ -120,29 +189,23 @@ class WeChatSender(BaseWeChat):
120
189
  SendEnum = WeChatSendEnum
121
190
 
122
191
 
123
- def __init__(
124
- self,
125
- rwechat: WeChat,
126
- bandwidth_upstream: float
127
- ) -> None:
192
+ def __init__(self, wechat: WeChat) -> None:
128
193
  """
129
194
  Build instance attributes.
130
195
 
131
196
  Parameters
132
197
  ----------
133
- rwechat : `WeChatClient` instance.
134
- bandwidth_upstream : Upload bandwidth, impact send interval, unit Mpbs.
198
+ wechat : `WeChatClient` instance.
135
199
  """
136
200
 
137
201
  # Set attribute.
138
- self.rwechat = rwechat
139
- self.bandwidth_upstream = bandwidth_upstream
202
+ self.wechat = wechat
203
+ self.send = self.__call__ = self.wechat.database.send
140
204
  self.queue: Queue[WeChatSendParameter] = Queue()
141
205
  self.handlers: list[Callable[[WeChatSendParameter], Any]] = []
142
206
  self.started: bool | None = False
143
207
 
144
208
  # Start.
145
- self.__delete_cache_file()
146
209
  self.__start_sender()
147
210
 
148
211
 
@@ -201,36 +264,7 @@ class WeChatSender(BaseWeChat):
201
264
  handler(sendparam)
202
265
 
203
266
  ## Log.
204
- self.rwechat.log.log_send(sendparam)
205
-
206
-
207
- def __delete_cache_file(self) -> None:
208
- """
209
- Add handler, Delete cache file.
210
- """
211
-
212
-
213
- # Define.
214
- def handler_delete_cache_file(sendparam: WeChatSendParameter) -> None:
215
- """
216
- Delete cache file.
217
-
218
- Parameters
219
- ----------
220
- sendparam : `WeChatSendParameter` instance.
221
- """
222
-
223
- # Break.
224
- if sendparam.cache_path is None:
225
- return
226
-
227
- # Delete.
228
- rfile = File(sendparam.cache_path)
229
- rfile.remove()
230
-
231
-
232
- # Add handler.
233
- self.add_handler(handler_delete_cache_file)
267
+ self.wechat.log.log_send(sendparam)
234
268
 
235
269
 
236
270
  def __send(
@@ -245,43 +279,28 @@ class WeChatSender(BaseWeChat):
245
279
  sendparam : `WeChatSendParameter` instance.
246
280
  """
247
281
 
248
- # Handle parameter.
249
- for key, value in sendparam.params.items():
250
-
251
- ## Callable.
252
- if callable(value):
253
- sendparam.params[key] = value()
254
-
255
- # File.
256
-
257
- ## From file ID.
258
- if (file_id := sendparam.params.get('file_id')) is not None:
259
- sendparam.params['path'], sendparam.params['file_name'] = self.rwechat.database.__download_file(file_id)
260
-
261
- ## Set file name.
282
+ # File rename to new.
262
283
  if (
263
- (path := sendparam.params.get('path')) is not None
284
+ (file_path := sendparam.params.get('file_path')) is not None
264
285
  and (file_name := sendparam.params.get('file_name')) is not None
265
286
  ):
266
- rfile = File(path)
267
- copy_path = os_join(self.rwechat.dir_file, file_name)
268
- rfile.copy(copy_path)
269
- sendparam.cache_path = copy_path
270
- path = copy_path
287
+ file = File(file_path)
288
+ file_old_name = file.name
289
+ file_path_rename = file.rename(file_name)
271
290
 
272
291
  # Send.
273
292
  match sendparam.send_type:
274
293
 
275
294
  ## Text.
276
295
  case WeChatSendEnum.SEND_TEXT:
277
- self.rwechat.client.send_text(
296
+ self.wechat.client.send_text(
278
297
  sendparam.receive_id,
279
298
  sendparam.params['text']
280
299
  )
281
300
 
282
301
  ## Text with '@'.
283
302
  case WeChatSendEnum.SEND_TEXT_AT:
284
- self.rwechat.client.send_text_at(
303
+ self.wechat.client.send_text_at(
285
304
  sendparam.receive_id,
286
305
  sendparam.params['user_id'],
287
306
  sendparam.params['text']
@@ -289,35 +308,35 @@ class WeChatSender(BaseWeChat):
289
308
 
290
309
  ## File.
291
310
  case WeChatSendEnum.SEND_FILE:
292
- self.rwechat.client.send_file(
311
+ self.wechat.client.send_file(
293
312
  sendparam.receive_id,
294
- path
313
+ file_path_rename
295
314
  )
296
315
 
297
316
  ## Image.
298
317
  case WeChatSendEnum.SEND_IMAGE:
299
- self.rwechat.client.send_image(
318
+ self.wechat.client.send_image(
300
319
  sendparam.receive_id,
301
- path
320
+ file_path_rename
302
321
  )
303
322
 
304
323
  ## Emotion.
305
324
  case WeChatSendEnum.SEND_EMOTION:
306
- self.rwechat.client.send_emotion(
325
+ self.wechat.client.send_emotion(
307
326
  sendparam.receive_id,
308
- path
327
+ file_path_rename
309
328
  )
310
329
 
311
330
  ## Pat.
312
331
  case WeChatSendEnum.SEND_PAT:
313
- self.rwechat.client.send_pat(
332
+ self.wechat.client.send_pat(
314
333
  sendparam.receive_id,
315
334
  sendparam.params['user_id']
316
335
  )
317
336
 
318
337
  ## Public account.
319
338
  case WeChatSendEnum.SEND_PUBLIC:
320
- self.rwechat.client.send_public(
339
+ self.wechat.client.send_public(
321
340
  sendparam.receive_id,
322
341
  sendparam.params['page_url'],
323
342
  sendparam.params['title'],
@@ -329,158 +348,22 @@ class WeChatSender(BaseWeChat):
329
348
 
330
349
  ## Forward.
331
350
  case WeChatSendEnum.SEND_FORWARD:
332
- self.rwechat.client.send_forward(
351
+ self.wechat.client.send_forward(
333
352
  sendparam.receive_id,
334
353
  sendparam.params['message_id']
335
354
  )
336
355
 
337
356
  ## Throw exception.
338
- case _:
339
- throw(ValueError, sendparam.send_type)
340
-
341
- # Wait.
342
- self.__wait(sendparam)
343
-
357
+ case send_type:
358
+ throw(ValueError, send_type)
344
359
 
345
- def __wait(
346
- self,
347
- sendparam: WeChatSendParameter
348
- ) -> None:
349
- """
350
- Waiting after sending.
351
-
352
- Parameters
353
- ----------
354
- sendparam : `WeChatSendParameter` instance.
355
- """
356
-
357
- # Get parameter.
358
- seconds = randn(0.8, 1.2, precision=2)
359
-
360
- ## File.
361
- if sendparam.send_type in (
362
- WeChatSendEnum.SEND_FILE,
363
- WeChatSendEnum.SEND_IMAGE,
364
- WeChatSendEnum.SEND_EMOTION
360
+ # File rename to old.
361
+ if (
362
+ file_path is not None
363
+ and file_name is not None
365
364
  ):
366
- stream_time = compute_stream_time(sendparam.params['path'], self.bandwidth_upstream)
367
- if stream_time > seconds:
368
- seconds = stream_time
369
-
370
- # Wait.
371
- sleep(seconds)
372
-
373
-
374
- @overload
375
- def send(
376
- self,
377
- send_type: Literal[WeChatSendEnum.SEND_TEXT],
378
- receive_id: str,
379
- send_id: int | None = None,
380
- *,
381
- text: str
382
- ) -> None: ...
383
-
384
- @overload
385
- def send(
386
- self,
387
- send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
388
- receive_id: str,
389
- send_id: int | None = None,
390
- *,
391
- user_id: str | list[str] | Literal['notify@all'],
392
- text: str
393
- ) -> None: ...
394
-
395
- @overload
396
- def send(
397
- self,
398
- send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
399
- receive_id: str,
400
- send_id: int | None = None,
401
- *,
402
- path: str,
403
- file_name: str | None = None
404
- ) -> None: ...
405
-
406
- @overload
407
- def send(
408
- self,
409
- send_type: Literal[WeChatSendEnum.SEND_PAT],
410
- receive_id: str,
411
- send_id: int | None = None,
412
- *,
413
- user_id: str
414
- ) -> None: ...
415
-
416
- @overload
417
- def send(
418
- self,
419
- send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
420
- receive_id: str,
421
- send_id: int | None = None,
422
- *,
423
- page_url: str,
424
- title: str,
425
- text: str | None = None,
426
- image_url: str | None = None,
427
- public_name: str | None = None,
428
- public_id: str | None = None
429
- ) -> None: ...
430
-
431
- @overload
432
- def send(
433
- self,
434
- send_type: Literal[WeChatSendEnum.SEND_FORWARD],
435
- receive_id: str,
436
- send_id: int | None = None,
437
- *,
438
- message_id: str
439
- ) -> None: ...
440
-
441
- def send(
442
- self,
443
- send_type: WeChatSendEnum,
444
- receive_id: str | None = None,
445
- send_id: int | None = None,
446
- **params: Any
447
- ) -> None:
448
- """
449
- Put parameters into the send queue.
450
-
451
- Parameters
452
- ----------
453
- send_type : Send type.
454
- - `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
455
- - `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
456
- - `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
457
- - `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
458
- - `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
459
- - `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
460
- - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
461
- - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
462
- receive_id : User ID or chat room ID of receive message.
463
- send_id : Send ID of database.
464
- params : Send parameters.
465
- - `Callable`: Use execute return value.
466
- - `Any`: Use this value.
467
- `Key 'file_name'`: Given file name.
468
- """
469
-
470
- # Check.
471
- if send_type not in WeChatSendEnum:
472
- throw(ValueError, send_type)
473
-
474
- sendparam = WeChatSendParameter(
475
- self,
476
- send_type,
477
- receive_id,
478
- params,
479
- send_id
480
- )
481
-
482
- # Put.
483
- self.queue.put(sendparam)
365
+ file = File(file_path_rename)
366
+ file.rename(file_old_name)
484
367
 
485
368
 
486
369
  def add_handler(
@@ -518,8 +401,8 @@ class WeChatSender(BaseWeChat):
518
401
  """
519
402
 
520
403
  # Get parameter.
521
- member_dict = self.rwechat.client.get_room_member_dict(room_id)
522
- login_id = self.rwechat.client.login_info['id']
404
+ member_dict = self.wechat.client.get_room_member_dict(room_id)
405
+ login_id = self.wechat.client.login_info['id']
523
406
  if login_id in member_dict:
524
407
  del member_dict[login_id]
525
408
 
@@ -653,7 +536,4 @@ class WeChatSender(BaseWeChat):
653
536
  print('End sender.')
654
537
 
655
538
 
656
- __call__ = send
657
-
658
-
659
539
  __del__ = end
reywechat/rtrigger.py CHANGED
@@ -48,13 +48,13 @@ class WeChatTrigger(BaseWeChat):
48
48
  self.rules: list[TriggerRule] = []
49
49
 
50
50
  # Add handler.
51
- self.handler = self.__trigger_by_rule()
51
+ self.handler = self.__add_handler_trigger_by_rule()
52
52
 
53
53
  # Add trigger.
54
54
  self.__add_trigger_valid()
55
55
 
56
56
 
57
- def __trigger_by_rule(self) -> Callable[[WeChatMessage], None]:
57
+ def __add_handler_trigger_by_rule(self) -> Callable[[WeChatMessage], None]:
58
58
  """
59
59
  Add handler, trigger message by rules.
60
60
 
@@ -119,7 +119,8 @@ class WeChatTrigger(BaseWeChat):
119
119
  def add_rule(
120
120
  self,
121
121
  execute: Callable[[WeChatMessage], Any],
122
- level: float = 0
122
+ level: float,
123
+ is_reply: bool,
123
124
  ) -> None:
124
125
  """
125
126
  Add trigger rule.
@@ -131,13 +132,14 @@ class WeChatTrigger(BaseWeChat):
131
132
  When throw `WeChatTriggerContinueExit` type exception, then continue next execution.
132
133
  When throw `WeChatTriggerBreakExit` type exception, then stop executes.
133
134
  level : Priority level, sort from large to small.
135
+ is_reply : Whehter is reply function, allow call `WeChatMessage.reply`, can only reply once function.
134
136
  """
135
137
 
136
138
  # Get parameter.
137
139
  rule: TriggerRule = {
138
140
  'level': level,
139
141
  'execute': execute,
140
- 'is_reply': execute.__name__.startswith('reply_')
142
+ 'is_reply': is_reply
141
143
  }
142
144
 
143
145
  # Add.
reywechat/rwechat.py CHANGED
@@ -14,7 +14,7 @@ from os import getcwd as os_getcwd
14
14
  from os.path import join as os_join
15
15
  from reydb.rdb import Database
16
16
  from reykit.rbase import block
17
- from reykit.ros import create_folder as reytool_create_folder
17
+ from reykit.ros import make_dir as reykit_make_dir
18
18
 
19
19
  from .rbase import BaseWeChat
20
20
 
@@ -44,8 +44,6 @@ class WeChat(BaseWeChat):
44
44
  self,
45
45
  rrdatabase: Database | dict[Literal['wechat', 'file'], Database] | None,
46
46
  max_receiver: int = 2,
47
- bandwidth_downstream: float = 5,
48
- bandwidth_upstream: float = 5,
49
47
  project_dir: str | None = None
50
48
  ) -> None:
51
49
  """
@@ -59,8 +57,6 @@ class WeChat(BaseWeChat):
59
57
  `Key 'wechat'`: `WeChatDatabase` instance used in WeChat methods.
60
58
  `Key 'file'`: `WeChatDatabase` instance used in file methods.
61
59
  max_receiver : Maximum number of receivers.
62
- bandwidth_downstream : Download bandwidth, impact receive timeout, unit Mpbs.
63
- bandwidth_upstream : Upload bandwidth, impact send interval, unit Mpbs.
64
60
  project_dir: Project directory, will create sub folders.
65
61
  - `None`: Use working directory.
66
62
  - `str`: Use this directory.
@@ -74,18 +70,18 @@ class WeChat(BaseWeChat):
74
70
  from .rschedule import WeChatSchedule
75
71
  from .rsend import WeChatSender
76
72
 
77
- # Create folder.
73
+ # Make directory.
78
74
  project_dir = project_dir or os_getcwd()
79
- self.__create_folder(project_dir)
75
+ self.dir_cache, self.dir_log = self.__make_subdir(project_dir)
80
76
 
81
77
  # Set attribute.
82
78
 
83
79
  ## Instance.
84
80
  self.client = WeChatClient(self)
85
81
  self.log = WeChatLog(self)
86
- self.receiver = WechatReceiver(self, max_receiver, bandwidth_downstream)
82
+ self.receiver = WechatReceiver(self, max_receiver)
87
83
  self.trigger = self.receiver.trigger
88
- self.sender = WeChatSender(self, bandwidth_upstream)
84
+ self.sender = WeChatSender(self)
89
85
  self.database = WeChatDatabase(self, rrdatabase)
90
86
  self.schedule = WeChatSchedule(self)
91
87
 
@@ -118,35 +114,37 @@ class WeChat(BaseWeChat):
118
114
  self.schedule_resume = self.schedule.resume
119
115
 
120
116
 
121
- def __create_folder(
117
+ def __make_subdir(
122
118
  self,
123
119
  project_dir: str
124
- ) -> None:
120
+ ) -> tuple[str, str]:
125
121
  """
126
- Create project standard folders.
122
+ Make project subdirectory, 'project_dir/cache' and 'project_dir/cache'.
127
123
 
128
124
  Parameters
129
125
  ----------
130
- project_dir: Project directory, will create sub folders.
126
+ project_dir: Project directory.
127
+
128
+ Returns
129
+ -------
130
+ Subdirectorys path.
131
131
  """
132
132
 
133
133
  # Set parameter.
134
- folders = (
135
- 'Log',
136
- 'File'
134
+ dir_names = (
135
+ 'cache',
136
+ 'log'
137
137
  )
138
- folder_dict = {
139
- folder: os_join(project_dir, folder)
140
- for folder in folders
138
+ dir_dict = {
139
+ dir_name: os_join(project_dir, dir_name)
140
+ for dir_name in dir_names
141
141
  }
142
142
 
143
143
  # Create.
144
- paths = folder_dict.values()
145
- reytool_create_folder(*paths)
144
+ paths = dir_dict.values()
145
+ reykit_make_dir(*paths)
146
146
 
147
- # Set attribute.
148
- self.dir_log = folder_dict['Log']
149
- self.dir_file = folder_dict['File']
147
+ return dir_dict['cache'], dir_dict['log']
150
148
 
151
149
 
152
150
  def start(self) -> None: