Rubka 5.2.0__py3-none-any.whl → 6.4.4__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.
rubka/update.py ADDED
@@ -0,0 +1,489 @@
1
+ from typing import Any, Dict, List,Optional
2
+
3
+ class File:
4
+ def __init__(self, data: dict):
5
+ self.file_id: str = data.get("file_id")
6
+ self.file_name: str = data.get("file_name")
7
+ self.size: str = data.get("size")
8
+
9
+
10
+ class Sticker:
11
+ def __init__(self, data: dict):
12
+ self.sticker_id: str = data.get("sticker_id")
13
+ self.emoji_character: str = data.get("emoji_character")
14
+ self.file = File(data.get("file", {}))
15
+
16
+
17
+
18
+
19
+
20
+ class PollStatus:
21
+ def __init__(self, data: dict):
22
+ self.state: str = data.get("state")
23
+ self.selection_index: int = data.get("selection_index")
24
+ self.percent_vote_options: List[int] = data.get("percent_vote_options", [])
25
+ self.total_vote: int = data.get("total_vote")
26
+ self.show_total_votes: bool = data.get("show_total_votes")
27
+
28
+
29
+ class Poll:
30
+ def __init__(self, data: dict):
31
+ self.question: str = data.get("question")
32
+ self.options: List[str] = data.get("options", [])
33
+ self.poll_status = PollStatus(data.get("poll_status", {}))
34
+
35
+
36
+
37
+
38
+
39
+ class Location:
40
+ def __init__(self, data: dict):
41
+ self.latitude: str = data.get("latitude")
42
+ self.longitude: str = data.get("longitude")
43
+
44
+
45
+ class LiveLocation:
46
+ def __init__(self, data: dict):
47
+ self.start_time: str = data.get("start_time")
48
+ self.live_period: int = data.get("live_period")
49
+ self.current_location = Location(data.get("current_location", {}))
50
+ self.user_id: str = data.get("user_id")
51
+ self.status: str = data.get("status")
52
+ self.last_update_time: str = data.get("last_update_time")
53
+
54
+
55
+ class ContactMessage:
56
+ def __init__(self, data: dict):
57
+ self.phone_number: str = data.get("phone_number")
58
+ self.first_name: str = data.get("first_name")
59
+ self.last_name: str = data.get("last_name")
60
+
61
+
62
+ class ForwardedFrom:
63
+ def __init__(self, data: dict):
64
+ self.type_from: str = data.get("type_from")
65
+ self.message_id: str = data.get("message_id")
66
+ self.from_chat_id: str = data.get("from_chat_id")
67
+ self.from_sender_id: str = data.get("from_sender_id")
68
+
69
+
70
+
71
+
72
+
73
+ class AuxData:
74
+ def __init__(self, data: dict):
75
+ self.start_id: str = data.get("start_id")
76
+ self.button_id: str = data.get("button_id")
77
+
78
+
79
+
80
+
81
+
82
+ class ButtonTextbox:
83
+ def __init__(self, data: dict):
84
+ self.type_line: str = data.get("type_line")
85
+ self.type_keypad: str = data.get("type_keypad")
86
+ self.place_holder: Optional[str] = data.get("place_holder")
87
+ self.title: Optional[str] = data.get("title")
88
+ self.default_value: Optional[str] = data.get("default_value")
89
+
90
+
91
+ class ButtonNumberPicker:
92
+ def __init__(self, data: dict):
93
+ self.min_value: str = data.get("min_value")
94
+ self.max_value: str = data.get("max_value")
95
+ self.default_value: Optional[str] = data.get("default_value")
96
+ self.title: str = data.get("title")
97
+
98
+
99
+ class ButtonStringPicker:
100
+ def __init__(self, data: dict):
101
+ self.items: List[str] = data.get("items", [])
102
+ self.default_value: Optional[str] = data.get("default_value")
103
+ self.title: Optional[str] = data.get("title")
104
+
105
+
106
+ class ButtonCalendar:
107
+ def __init__(self, data: dict):
108
+ self.default_value: Optional[str] = data.get("default_value")
109
+ self.type: str = data.get("type")
110
+ self.min_year: str = data.get("min_year")
111
+ self.max_year: str = data.get("max_year")
112
+ self.title: str = data.get("title")
113
+
114
+
115
+ class ButtonLocation:
116
+ def __init__(self, data: dict):
117
+ self.default_pointer_location = Location(data.get("default_pointer_location", {}))
118
+ self.default_map_location = Location(data.get("default_map_location", {}))
119
+ self.type: str = data.get("type")
120
+ self.title: Optional[str] = data.get("title")
121
+ self.location_image_url: str = data.get("location_image_url")
122
+
123
+
124
+ class ButtonSelectionItem:
125
+ def __init__(self, data: dict):
126
+ self.text: str = data.get("text")
127
+ self.image_url: str = data.get("image_url")
128
+ self.type: str = data.get("type")
129
+
130
+
131
+ class ButtonSelection:
132
+ def __init__(self, data: dict):
133
+ self.selection_id: str = data.get("selection_id")
134
+ self.search_type: str = data.get("search_type")
135
+ self.get_type: str = data.get("get_type")
136
+ self.items: List[ButtonSelectionItem] = [ButtonSelectionItem(i) for i in data.get("items", [])]
137
+ self.is_multi_selection: bool = data.get("is_multi_selection")
138
+ self.columns_count: str = data.get("columns_count")
139
+ self.title: str = data.get("title")
140
+
141
+
142
+ class Button:
143
+ def __init__(self, data: dict):
144
+ self.id: str = data.get("id")
145
+ self.type: str = data.get("type")
146
+ self.button_text: str = data.get("button_text")
147
+ self.button_selection = ButtonSelection(data.get("button_selection", {})) if "button_selection" in data else None
148
+ self.button_calendar = ButtonCalendar(data.get("button_calendar", {})) if "button_calendar" in data else None
149
+ self.button_number_picker = ButtonNumberPicker(data.get("button_number_picker", {})) if "button_number_picker" in data else None
150
+ self.button_string_picker = ButtonStringPicker(data.get("button_string_picker", {})) if "button_string_picker" in data else None
151
+ self.button_location = ButtonLocation(data.get("button_location", {})) if "button_location" in data else None
152
+ self.button_textbox = ButtonTextbox(data.get("button_textbox", {})) if "button_textbox" in data else None
153
+
154
+
155
+ class KeypadRow:
156
+ def __init__(self, data: dict):
157
+ self.buttons: List[Button] = [Button(btn) for btn in data.get("buttons", [])]
158
+
159
+
160
+ class Keypad:
161
+ def __init__(self, data: dict):
162
+ self.rows: List[KeypadRow] = [KeypadRow(r) for r in data.get("rows", [])]
163
+ self.resize_keyboard: bool = data.get("resize_keyboard", False)
164
+ self.on_time_keyboard: bool = data.get("on_time_keyboard", False)
165
+
166
+
167
+ class Chat:
168
+ def __init__(self, data: dict):
169
+ self.chat_id: str = data.get("chat_id")
170
+ self.chat_type: str = data.get("chat_type")
171
+ self.user_id: str = data.get("user_id")
172
+ self.first_name: str = data.get("first_name")
173
+ self.last_name: str = data.get("last_name")
174
+ self.title: str = data.get("title")
175
+ self.username: str = data.get("username")
176
+
177
+
178
+ class Bot:
179
+ def __init__(self, data: dict):
180
+ self.bot_id: str = data.get("bot_id")
181
+ self.bot_title: str = data.get("bot_title")
182
+ self.avatar = File(data.get("avatar", {}))
183
+ self.description: str = data.get("description")
184
+ self.username: str = data.get("username")
185
+ self.start_message: str = data.get("start_message")
186
+ self.share_url: str = data.get("share_url")
187
+ from typing import Union
188
+ from pathlib import Path
189
+
190
+ class Message:
191
+ def __init__(self, bot, chat_id, message_id, sender_id, text=None, raw_data=None):
192
+ self.bot = bot
193
+ self.chat_id = chat_id
194
+ self.raw_data = raw_data or {}
195
+ self.message_id: str = self.raw_data.get("message_id", message_id)
196
+ self.text: str = self.raw_data.get("text", text)
197
+ self.sender_id: str = self.raw_data.get("sender_id", sender_id)
198
+ self.time: str = self.raw_data.get("time")
199
+ self.is_edited: bool = self.raw_data.get("is_edited", False)
200
+ self.sender_type: str = self.raw_data.get("sender_type")
201
+ self.args = []
202
+ self.is_user = self.chat_id.startswith("b")
203
+ self.is_private = self.chat_id.startswith("b")
204
+ self.is_group = self.chat_id.startswith("g")
205
+ self.is_channel = self.chat_id.startswith("c")
206
+ self.reply_to_message_id: Optional[str] = self.raw_data.get("reply_to_message_id")
207
+ self.forwarded_from = ForwardedFrom(self.raw_data["forwarded_from"]) if "forwarded_from" in self.raw_data else None
208
+ self.file = File(self.raw_data["file"]) if "file" in self.raw_data else None
209
+ self.sticker = Sticker(self.raw_data["sticker"]) if "sticker" in self.raw_data else None
210
+ self.contact_message = ContactMessage(self.raw_data["contact_message"]) if "contact_message" in self.raw_data else None
211
+ self.poll = Poll(self.raw_data["poll"]) if "poll" in self.raw_data else None
212
+ self.location = Location(self.raw_data["location"]) if "location" in self.raw_data else None
213
+ self.live_location = LiveLocation(self.raw_data["live_location"]) if "live_location" in self.raw_data else None
214
+ self.aux_data = AuxData(self.raw_data["aux_data"]) if "aux_data" in self.raw_data else None
215
+
216
+ @property
217
+ def session(self):
218
+ if self.chat_id not in self.bot.sessions:
219
+ self.bot.sessions[self.chat_id] = {}
220
+ return self.bot.sessions[self.chat_id]
221
+ def reply(self, text: str, **kwargs):
222
+ return self.bot.send_message(
223
+ self.chat_id,
224
+ text,
225
+ reply_to_message_id=self.message_id,
226
+ **kwargs
227
+ )
228
+ def answer(self, text: str, **kwargs):
229
+ return self.bot.send_message(
230
+ self.chat_id,
231
+ text,
232
+ reply_to_message_id=self.message_id,
233
+ **kwargs
234
+ )
235
+
236
+ def reply_poll(self, question: str, options: List[str], **kwargs) -> Dict[str, Any]:
237
+ return self.bot._post("sendPoll", {
238
+ "chat_id": self.chat_id,
239
+ "question": question,
240
+ "options": options,
241
+ "reply_to_message_id": self.message_id,
242
+ **kwargs
243
+ })
244
+
245
+
246
+ def reply_document(
247
+ self,
248
+ path: Optional[Union[str, Path]] = None,
249
+ file_id: Optional[str] = None,
250
+ text: Optional[str] = None,
251
+ chat_keypad: Optional[Dict[str, Any]] = None,
252
+ inline_keypad: Optional[Dict[str, Any]] = None,
253
+ chat_keypad_type: Optional[str] = "None",
254
+ disable_notification: bool = False
255
+ ):
256
+ if chat_keypad and chat_keypad_type == "none":chat_keypad_type == "New"
257
+ return self.bot.send_document(
258
+ chat_id=self.chat_id,
259
+ path=path,
260
+ file_id=file_id,
261
+ text=text,
262
+ chat_keypad=chat_keypad,
263
+ inline_keypad=inline_keypad,
264
+ chat_keypad_type=chat_keypad_type,
265
+ disable_notification=disable_notification,
266
+ reply_to_message_id=self.message_id
267
+ )
268
+ def reply_file(
269
+ self,
270
+ path: Optional[Union[str, Path]] = None,
271
+ file_id: Optional[str] = None,
272
+ text: Optional[str] = None,
273
+ chat_keypad: Optional[Dict[str, Any]] = None,
274
+ inline_keypad: Optional[Dict[str, Any]] = None,
275
+ chat_keypad_type: Optional[str] = "None",
276
+ disable_notification: bool = False
277
+ ):
278
+ if chat_keypad and chat_keypad_type == "none":
279
+ chat_keypad_type == "New"
280
+
281
+ return self.bot.send_document(
282
+ chat_id=self.chat_id,
283
+ path=path,
284
+ file_id=file_id,
285
+ text=text,
286
+ chat_keypad=chat_keypad,
287
+ inline_keypad=inline_keypad,
288
+ chat_keypad_type=chat_keypad_type,
289
+ disable_notification=disable_notification,
290
+ reply_to_message_id=self.message_id
291
+ )
292
+
293
+ def reply_image(
294
+ self,
295
+ path: Optional[Union[str, Path]] = None,
296
+ file_id: Optional[str] = None,
297
+ text: Optional[str] = None,
298
+ chat_keypad: Optional[Dict[str, Any]] = None,
299
+ inline_keypad: Optional[Dict[str, Any]] = None,
300
+ chat_keypad_type: Optional[str] = "None",
301
+ disable_notification: bool = False
302
+ ):
303
+ if chat_keypad and chat_keypad_type == "none":
304
+ chat_keypad_type == "New"
305
+ return self.bot.send_image(
306
+ chat_id=self.chat_id,
307
+ path=path,
308
+ file_id=file_id,
309
+ text=text,
310
+ chat_keypad=chat_keypad,
311
+ inline_keypad=inline_keypad,
312
+ chat_keypad_type=chat_keypad_type,
313
+ disable_notification=disable_notification,
314
+ reply_to_message_id=self.message_id
315
+ )
316
+
317
+ def reply_music(
318
+ self,
319
+ path: Optional[Union[str, Path]] = None,
320
+ file_id: Optional[str] = None,
321
+ text: Optional[str] = None,
322
+ chat_keypad: Optional[Dict[str, Any]] = None,
323
+ inline_keypad: Optional[Dict[str, Any]] = None,
324
+ chat_keypad_type: Optional[str] = "None",
325
+ disable_notification: bool = False
326
+ ):
327
+ if chat_keypad and chat_keypad_type == "none":
328
+ chat_keypad_type == "New"
329
+ return self.bot.send_music(
330
+ chat_id=self.chat_id,
331
+ path=path,
332
+ file_id=file_id,
333
+ text=text,
334
+ chat_keypad=chat_keypad,
335
+ inline_keypad=inline_keypad,
336
+ chat_keypad_type=chat_keypad_type,
337
+ disable_notification=disable_notification,
338
+ reply_to_message_id=self.message_id
339
+ )
340
+
341
+ def reply_voice(
342
+ self,
343
+ path: Optional[Union[str, Path]] = None,
344
+ file_id: Optional[str] = None,
345
+ text: Optional[str] = None,
346
+ chat_keypad: Optional[Dict[str, Any]] = None,
347
+ inline_keypad: Optional[Dict[str, Any]] = None,
348
+ chat_keypad_type: Optional[str] = "None",
349
+ disable_notification: bool = False
350
+ ):
351
+ if chat_keypad and chat_keypad_type == "none":
352
+ chat_keypad_type == "New"
353
+ return self.bot.send_voice(
354
+ chat_id=self.chat_id,
355
+ path=path,
356
+ file_id=file_id,
357
+ text=text,
358
+ chat_keypad=chat_keypad,
359
+ inline_keypad=inline_keypad,
360
+ chat_keypad_type=chat_keypad_type,
361
+ disable_notification=disable_notification,
362
+ reply_to_message_id=self.message_id
363
+ )
364
+
365
+ def reply_gif(
366
+ self,
367
+ path: Optional[Union[str, Path]] = None,
368
+ file_id: Optional[str] = None,
369
+ text: Optional[str] = None,
370
+ chat_keypad: Optional[Dict[str, Any]] = None,
371
+ inline_keypad: Optional[Dict[str, Any]] = None,
372
+ chat_keypad_type: Optional[str] = "None",
373
+ disable_notification: bool = False
374
+ ):
375
+ if chat_keypad and chat_keypad_type == "none":chat_keypad_type == "New"
376
+ return self.bot.send_gif(
377
+ chat_id=self.chat_id,
378
+ path=path,
379
+ file_id=file_id,
380
+ text=text,
381
+ chat_keypad=chat_keypad,
382
+ inline_keypad=inline_keypad,
383
+ chat_keypad_type=chat_keypad_type,
384
+ disable_notification=disable_notification,
385
+ reply_to_message_id=self.message_id
386
+ )
387
+
388
+ def reply_location(self, latitude: str, longitude: str, **kwargs) -> Dict[str, Any]:
389
+ return self.bot.send_location(
390
+ chat_id=self.chat_id,
391
+ latitude=latitude,
392
+ longitude=longitude,
393
+ reply_to_message_id=self.message_id,
394
+ **kwargs
395
+ )
396
+
397
+ def reply_contact(self, first_name: str, last_name: str, phone_number: str, **kwargs) -> Dict[str, Any]:
398
+ return self.bot.send_contact(
399
+ chat_id=self.chat_id,
400
+ first_name=first_name,
401
+ last_name=last_name,
402
+ phone_number=phone_number,
403
+ reply_to_message_id=self.message_id,
404
+ **kwargs
405
+ )
406
+
407
+ def reply_keypad(self, text: str, keypad: Dict[str, Any], **kwargs) -> Dict[str, Any]:
408
+ return self.bot.send_message(
409
+ chat_id=self.chat_id,
410
+ text=text,
411
+ chat_keypad_type="New",
412
+ chat_keypad=keypad,
413
+ reply_to_message_id=self.message_id,
414
+ **kwargs
415
+ )
416
+
417
+ def reply_inline(self, text: str, inline_keypad: Dict[str, Any], **kwargs) -> Dict[str, Any]:
418
+ return self.bot.send_message(
419
+ chat_id=self.chat_id,
420
+ text=text,
421
+ inline_keypad=inline_keypad,
422
+ reply_to_message_id=self.message_id,
423
+ **kwargs
424
+ )
425
+
426
+ def reply_sticker(self, sticker_id: str, **kwargs) -> Dict[str, Any]:
427
+ return self.bot._post("sendSticker", {
428
+ "chat_id": self.chat_id,
429
+ "sticker_id": sticker_id,
430
+ "reply_to_message_id": self.message_id,
431
+ **kwargs
432
+ })
433
+
434
+ def edit(self, new_text: str) -> Dict[str, Any]:
435
+ return self.bot.edit_message_text(
436
+ chat_id=self.chat_id,
437
+ message_id=self.message_id,
438
+ text=new_text
439
+ )
440
+
441
+ def delete(self) -> Dict[str, Any]:
442
+ return self.bot.delete_message(
443
+ chat_id=self.chat_id,
444
+ message_id=self.message_id
445
+ )
446
+ class AuxData:
447
+ def __init__(self, data: dict):
448
+ self.start_id = data.get("start_id")
449
+ self.button_id = data.get("button_id")
450
+
451
+
452
+ class InlineMessage:
453
+ def __init__(self, bot, raw_data: dict):
454
+ self.bot = bot
455
+ self.raw_data = raw_data
456
+
457
+ self.chat_id: str = raw_data.get("chat_id")
458
+ self.message_id: str = raw_data.get("message_id")
459
+ self.sender_id: str = raw_data.get("sender_id")
460
+ self.text: str = raw_data.get("text")
461
+ self.aux_data = AuxData(raw_data.get("aux_data", {})) if "aux_data" in raw_data else None
462
+
463
+ def reply(self, text: str, **kwargs):
464
+ return self.bot.send_message(
465
+ chat_id=self.chat_id,
466
+ text=text,
467
+ reply_to_message_id=self.message_id,
468
+ **kwargs
469
+ )
470
+ def answer(self, text: str, **kwargs):
471
+ return self.bot.send_message(
472
+ self.chat_id,
473
+ text,
474
+ reply_to_message_id=self.message_id,
475
+ **kwargs
476
+ )
477
+
478
+ def edit(self, new_text: str):
479
+ return self.bot.edit_message_text(
480
+ chat_id=self.chat_id,
481
+ message_id=self.message_id,
482
+ text=new_text
483
+ )
484
+
485
+ def delete(self):
486
+ return self.bot.delete_message(
487
+ chat_id=self.chat_id,
488
+ message_id=self.message_id
489
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Rubka
3
- Version: 5.2.0
3
+ Version: 6.4.4
4
4
  Summary: A Python library for interacting with Rubika Bot API.
5
5
  Home-page: https://github.com/Mahdy-Ahmadi/Rubka
6
6
  Download-URL: https://github.com/Mahdy-Ahmadi/rubka/blob/main/project_library.zip
@@ -1,9 +1,9 @@
1
1
  rubka/__init__.py,sha256=TR1DABU5Maz2eO62ZEFiwOqNU0dH6l6HZfqRUxeo4eY,194
2
- rubka/api.py,sha256=PGTQoKqKz8DdOtHjrEi0nDkI-jsXitf5Dw0GZkpIpQ8,47144
3
- rubka/asynco.py,sha256=slWprOtMDcWo95hZrWN7hO5oQAN2dAOvgSNQqcTStl0,60562
4
- rubka/button.py,sha256=VLYEBczH4gevqw2cBO06X9QXZivdQ19vvDdVp99s_TY,12229
2
+ rubka/api.py,sha256=wqlZZq25PPwoHRF9jrM0znRA66j4k3yWOoJHc7qVouA,61234
3
+ rubka/asynco.py,sha256=K7mqUDWrSmZDAFs0hKIpCPOFqoA_miocyiMB7Qk_RTM,75787
4
+ rubka/button.py,sha256=vU9OvWXCD4MRrTJ8Xmivd4L471-06zrD2qpZBTw5vjY,13305
5
5
  rubka/config.py,sha256=Bck59xkOiqioLv0GkQ1qPGnBXVctz1hKk6LT4h2EPx0,78
6
- rubka/context.py,sha256=-98bKHFF3u8ZRqULpYZJVtNhaycsKUY2ZvXJHlWTX-s,18122
6
+ rubka/context.py,sha256=2HWMy5yaPWE0lJFjRkVzG-8wUgPyugRHz25t4hpF0Ko,18341
7
7
  rubka/decorators.py,sha256=hGwUoE4q2ImrunJIGJ_kzGYYxQf1ueE0isadqraKEts,1157
8
8
  rubka/exceptions.py,sha256=tujZt1XrhWaw-lmdeVadVceUptpw4XzNgE44sAAY0gs,90
9
9
  rubka/jobs.py,sha256=GvLMLsVhcSEzRTgkvnPISPEBN71suW2xXI0hUaUZPTo,378
@@ -11,6 +11,7 @@ rubka/keyboards.py,sha256=7nr-dT2bQJVQnQ6RMWPTSjML6EEk6dsBx-4d8pab8xk,488
11
11
  rubka/keypad.py,sha256=yGsNt8W5HtUFBzVF1m_p7GySlu1hwIcSvXZ4BTdrlvg,9558
12
12
  rubka/logger.py,sha256=J2I6NiK1z32lrAzC4H1Et6WPMBXxXGCVUsW4jgcAofs,289
13
13
  rubka/rubino.py,sha256=uOhvljK_tms_767pX1TSxryyq71rKDyCgiv36ssNXEg,56674
14
+ rubka/update.py,sha256=2HWMy5yaPWE0lJFjRkVzG-8wUgPyugRHz25t4hpF0Ko,18341
14
15
  rubka/utils.py,sha256=XUQUZxQt9J2f0X5hmAH_MH1kibTAfdT1T4AaBkBhBBs,148
15
16
  rubka/adaptorrubka/__init__.py,sha256=6o2tCXnVeES7nx-LjnzsuMqjKcWIm9qwKficLE54s-U,83
16
17
  rubka/adaptorrubka/enums.py,sha256=cyiakExmZi-QQpYuf_A93HQvfZVmyG_0uVuvTTNT5To,1053
@@ -33,7 +34,7 @@ rubka/adaptorrubka/types/socket/message.py,sha256=0WgLMZh4eow8Zn7AiSX4C3GZjQTkIg
33
34
  rubka/adaptorrubka/utils/__init__.py,sha256=OgCFkXdNFh379quNwIVOAWY2NP5cIOxU5gDRRALTk4o,54
34
35
  rubka/adaptorrubka/utils/configs.py,sha256=nMUEOJh1NqDJsf9W9PurkN_DLYjO6kKPMm923i4Jj_A,492
35
36
  rubka/adaptorrubka/utils/utils.py,sha256=5-LioLNYX_TIbQGDeT50j7Sg9nAWH2LJUUs-iEXpsUY,8816
36
- rubka-5.2.0.dist-info/METADATA,sha256=LSyZAZRQr0ogt2NA9WTNs6F_dJMfjecZT5PwN9osnKo,33335
37
- rubka-5.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
- rubka-5.2.0.dist-info/top_level.txt,sha256=vy2A4lot11cRMdQS-F4HDCIXL3JK8RKfu7HMDkezJW4,6
39
- rubka-5.2.0.dist-info/RECORD,,
37
+ rubka-6.4.4.dist-info/METADATA,sha256=wvYsJ2z1X-unQ3PXd9OWk3QUlbYtUaG_I5UCbNfncXc,33335
38
+ rubka-6.4.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
39
+ rubka-6.4.4.dist-info/top_level.txt,sha256=vy2A4lot11cRMdQS-F4HDCIXL3JK8RKfu7HMDkezJW4,6
40
+ rubka-6.4.4.dist-info/RECORD,,
File without changes