rupython 1.2.6__py3-none-any.whl → 1.2.8__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.
- rupython/__/342/225/250/320/256/342/225/250/342/226/222/342/225/244/320/231/342/225/250/342/225/225/342/225/250/342/225/241_/342/225/244/320/224/342/225/244/320/223/342/225/250/342/225/234/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225__.py +1 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +97 -58
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +426 -0
- rupython//342/225/250/320/257/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/233/342/225/250/342/226/222/342/225/244/320/220/342/225/250/342/226/221/342/225/250/342/225/226/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/225/241/342/225/250/342/225/227/342/225/244/320/234.py +9 -3
- {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/METADATA +1 -1
- rupython-1.2.8.dist-info/RECORD +15 -0
- rupython-1.2.6.dist-info/RECORD +0 -14
- {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/LICENSE +0 -0
- {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/WHEEL +0 -0
- {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/top_level.txt +0 -0
@@ -8,7 +8,6 @@ import re as РегВыр
|
|
8
8
|
Успешно = sqlite3.SQLITE_OK
|
9
9
|
Отказ = sqlite3.SQLITE_DENY
|
10
10
|
Игнорировать = sqlite3.SQLITE_IGNORE
|
11
|
-
Уровень_интерфейса_взаимодействия = sqlite3.apilevel
|
12
11
|
Стиль_параметров = sqlite3.paramstyle
|
13
12
|
Потокобезопасность = sqlite3.threadsafety
|
14
13
|
|
@@ -23,7 +22,6 @@ import re as РегВыр
|
|
23
22
|
'ОТКАТИТЬ': 'ROLLBACK',
|
24
23
|
'ТОЧКА_СОХРАНЕНИЯ': 'SAVEPOINT',
|
25
24
|
'НАСТРОИТЬ': 'PRAGMA',
|
26
|
-
|
27
25
|
'ВЫБРАТЬ': 'SELECT',
|
28
26
|
'ИЗ': 'FROM',
|
29
27
|
'ГДЕ': 'WHERE',
|
@@ -49,13 +47,12 @@ import re as РегВыр
|
|
49
47
|
'ПО': 'ON',
|
50
48
|
'ПЕРЕКРЁСТНО': 'CROSS',
|
51
49
|
'ИСПОЛЬЗУЯ': 'USING',
|
52
|
-
|
53
50
|
'ВСТАВИТЬ ИЛИ ___ В': 'INSERT OR ___ INTO',
|
54
51
|
'ДОБАВИТЬ В': 'INSERT INTO',
|
55
52
|
'ЗНАЧЕНИЯ': 'VALUES',
|
56
53
|
'ИЗМЕНИТЬ': 'UPDATE',
|
57
54
|
'УСТАНОВИВ': 'SET',
|
58
|
-
'УДАЛИТЬ': 'DELETE',
|
55
|
+
'УДАЛИТЬ ИЗ': 'DELETE FROM',
|
59
56
|
'ПРИ КОНФЛИКТЕ': 'ON CONFLICT',
|
60
57
|
'ВЫПОЛНЯТЬ': 'DO',
|
61
58
|
'НИЧЕГО': 'NOTHING',
|
@@ -64,10 +61,10 @@ import re as РегВыр
|
|
64
61
|
'ЗАМЕНИТЬ': 'REPLACE',
|
65
62
|
'ОТКАТИТЬ': 'ROLLBACK',
|
66
63
|
'СБОЙ': 'FAIL',
|
67
|
-
|
68
64
|
'ИЗМЕНИТЬ ТАБЛИЦУ': 'ALTER TABLE',
|
69
65
|
'ИЗМЕНИТЬ СТОЛБЕЦ': 'ALTER COLUMN',
|
70
66
|
'СОЗДАТЬ': 'CREATE',
|
67
|
+
'УДАЛИТЬ': 'DROP',
|
71
68
|
'БАЗУ ДАННЫХ': 'DATABASE',
|
72
69
|
'ТАБЛИЦУ': 'TABLE',
|
73
70
|
'ВРЕМЕННУЮ': 'TEMPORARY',
|
@@ -80,9 +77,9 @@ import re as РегВыр
|
|
80
77
|
'СТОЛБЕЦ': 'COLUMN',
|
81
78
|
'ТРИГГЕР': 'TRIGGER',
|
82
79
|
'СТРОГО': 'STRICT',
|
83
|
-
|
84
80
|
'ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NULL',
|
85
81
|
'НЕ ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NOT NULL',
|
82
|
+
'НЕ ПУСТОЕ': 'NOT NULL',
|
86
83
|
'ПУСТО': 'NULL',
|
87
84
|
'И': 'AND',
|
88
85
|
'ИЛИ': 'OR',
|
@@ -93,14 +90,12 @@ import re as РегВыр
|
|
93
90
|
'ЕСЛИ': 'IF',
|
94
91
|
'СУЩЕСТВУЕТ': 'EXISTS',
|
95
92
|
'БЕЗ': 'WITHOUT',
|
96
|
-
|
97
93
|
'ОПРЕДЕЛИВ': 'WITH',
|
98
94
|
'ВЫБОР': 'CASE',
|
99
95
|
'ПРИ': 'WHEN',
|
100
96
|
'ЭТО': 'THEN',
|
101
97
|
'КОНЕЦ': 'END',
|
102
98
|
'РЕКУРСИВНО': 'RECURSIVE',
|
103
|
-
|
104
99
|
'ЦЕЛОЕ': 'INTEGER',
|
105
100
|
'ВЕЩЕСТВЕННОЕ': 'REAL',
|
106
101
|
'ТЕКСТ': 'TEXT',
|
@@ -109,7 +104,6 @@ import re as РегВыр
|
|
109
104
|
'ВРЕМЯ': 'TIME',
|
110
105
|
'ВРЕМЕННАЯ_МЕТКА': 'TIMESTAMP',
|
111
106
|
'ЛОГИЧЕСКОЕ': 'BOOLEAN',
|
112
|
-
|
113
107
|
'КЛЮЧ': 'KEY',
|
114
108
|
'ПЕРВИЧНЫЙ': 'PRIMARY',
|
115
109
|
'ВНЕШНИЙ': 'FOREIGN',
|
@@ -120,7 +114,6 @@ import re as РегВыр
|
|
120
114
|
'ПО_УМОЛЧАНИЮ': 'DEFAULT',
|
121
115
|
'САМОУВЕЛИЧИВАЮЩЕЕСЯ': 'AUTOINCREMENT',
|
122
116
|
'ССЫЛАЕТСЯ НА': 'REFERENCES',
|
123
|
-
|
124
117
|
'ОТОБРАВ': 'FILTER',
|
125
118
|
'КОЛИЧЕСТВО': 'COUNT',
|
126
119
|
'СУММА': 'SUM',
|
@@ -144,7 +137,6 @@ import re as РегВыр
|
|
144
137
|
'ГОД': 'YEAR',
|
145
138
|
'МЕСЯЦ': 'MONTH',
|
146
139
|
'ДЕНЬ': 'DAY',
|
147
|
-
|
148
140
|
'СЛУЧАЙНОЕ': 'RANDOM',
|
149
141
|
'ТИП_ДАННЫХ': 'TYPEOF',
|
150
142
|
'ПОСЛЕДНИЙ_ИДЕНТИФИКАТОР': 'LAST_INSERT_ROWID',
|
@@ -167,7 +159,6 @@ import re as РегВыр
|
|
167
159
|
'ВЫЧИСЛИТЬ_ХЭШ': 'HEX',
|
168
160
|
'ЗАКОДОВАТЬ_64': 'BASE64',
|
169
161
|
'РАСКОДОВАТЬ_64': 'UNBASE64',
|
170
|
-
|
171
162
|
'ВКЛЮЧЕНО': 'ON',
|
172
163
|
'ОТКЛЮЧЕНО': 'OFF',
|
173
164
|
'Синхронизация': 'synchronous',
|
@@ -206,6 +197,11 @@ def Получить_токены(запрос):
|
|
206
197
|
while i < len(запрос):
|
207
198
|
символ = запрос[i]
|
208
199
|
|
200
|
+
if символ == '\\' and в_строке and i + 1 < len(запрос):
|
201
|
+
текущий_токен += символ + запрос[i + 1]
|
202
|
+
i += 2
|
203
|
+
continue
|
204
|
+
|
209
205
|
if символ in ('"', "'") and not в_комментарии:
|
210
206
|
if в_строке and символ == строка_символ:
|
211
207
|
в_строке = False
|
@@ -273,10 +269,10 @@ def Получить_токены(запрос):
|
|
273
269
|
|
274
270
|
текущий_токен += символ
|
275
271
|
i += 1
|
276
|
-
|
272
|
+
|
277
273
|
if текущий_токен:
|
278
274
|
токены.append(текущий_токен)
|
279
|
-
|
275
|
+
|
280
276
|
return токены
|
281
277
|
|
282
278
|
def Перевести_токены(токены):
|
@@ -311,7 +307,7 @@ def Перевести_токены(токены):
|
|
311
307
|
i += длина
|
312
308
|
найдено_ключевое_слово = True
|
313
309
|
break
|
314
|
-
|
310
|
+
|
315
311
|
if найдено_ключевое_слово:
|
316
312
|
break
|
317
313
|
|
@@ -320,17 +316,7 @@ def Перевести_токены(токены):
|
|
320
316
|
i += длина
|
321
317
|
найдено_ключевое_слово = True
|
322
318
|
break
|
323
|
-
|
324
|
-
if not найдено_ключевое_слово:
|
325
|
-
# Специальная обработка для значений PRAGMA
|
326
|
-
if токен.upper() == 'ДА':
|
327
|
-
переведённые_токены.append('ON')
|
328
|
-
elif токен.upper() == 'НЕТ':
|
329
|
-
переведённые_токены.append('OFF')
|
330
|
-
else:
|
331
|
-
переведённые_токены.append(токен)
|
332
|
-
i += 1
|
333
|
-
|
319
|
+
|
334
320
|
return переведённые_токены
|
335
321
|
|
336
322
|
def Собрать_запрос(токены):
|
@@ -352,7 +338,7 @@ def Перевести_код_запроса(текст):
|
|
352
338
|
|
353
339
|
Переводы_ошибок = {
|
354
340
|
r"no such table: (.+)": r'Таблица "\1" не существует.',
|
355
|
-
r"database is locked": r'База данных
|
341
|
+
r"database is locked": r'База данных заблокирована.',
|
356
342
|
r"near \"(.+)\": syntax error": r'Синтаксическая ошибка около "\1".',
|
357
343
|
r"table (.+) already exists": r'Таблица "\1" уже существует.',
|
358
344
|
r"no such column: (.+)": r'Столбец "\1" не существует.',
|
@@ -363,7 +349,7 @@ def Перевести_код_запроса(текст):
|
|
363
349
|
r"no such index: (.+)": r'Индекс "\1" не существует.',
|
364
350
|
r"too many SQL variables": r'Слишком много переменных в запросе.',
|
365
351
|
r"maximum recursion depth exceeded": r'Превышена максимальная глубина рекурсии в запросе.',
|
366
|
-
r"no such database: (.+)": r'База данных "\1" не существует.',
|
352
|
+
r"no such database: (.+)": r'База данных "\1" не существует.',
|
367
353
|
r"incomplete input": r'Неполный запрос.',
|
368
354
|
r"malformed database schema \((.+)\)": r'Некорректная схема базы данных: \1.',
|
369
355
|
r"file is not a database": r'Файл не является базой данных.',
|
@@ -413,39 +399,58 @@ class Указатель():
|
|
413
399
|
try:
|
414
400
|
запрос = Перевести_код_запроса(запрос)
|
415
401
|
здесь._курсор.execute(запрос, параметры)
|
416
|
-
except Ошибка as ош:
|
402
|
+
except Ошибка as ош:
|
403
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
417
404
|
|
418
405
|
def Выполнить_запросы(здесь, запрос, последовательность_параметров):
|
419
406
|
try:
|
420
407
|
запрос = Перевести_код_запроса(запрос)
|
421
408
|
здесь._курсор.executemany(запрос, последовательность_параметров)
|
422
|
-
except Ошибка as ош:
|
409
|
+
except Ошибка as ош:
|
410
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
423
411
|
|
424
412
|
def Выполнить_сценарий(здесь, сценарий):
|
425
413
|
try:
|
426
414
|
скрипт = Перевести_код_запроса(сценарий)
|
427
415
|
здесь._курсор.executescript(скрипт)
|
428
|
-
except Ошибка as ош:
|
416
|
+
except Ошибка as ош:
|
417
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
429
418
|
|
430
419
|
def Извлечь_запись(здесь):
|
431
|
-
|
420
|
+
try:
|
421
|
+
return здесь._курсор.fetchone()
|
422
|
+
except Ошибка as ош:
|
423
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
432
424
|
|
433
425
|
def Извлечь_записи(здесь, количество):
|
434
|
-
|
426
|
+
try:
|
427
|
+
return здесь._курсор.fetchmany(количество)
|
428
|
+
except Ошибка as ош:
|
429
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
435
430
|
|
436
431
|
def Извлечь_все_записи(здесь):
|
437
|
-
|
432
|
+
try:
|
433
|
+
return здесь._курсор.fetchall()
|
434
|
+
except Ошибка as ош:
|
435
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
438
436
|
|
439
|
-
def Закрыть(здесь):
|
437
|
+
def Закрыть(здесь):
|
438
|
+
try:
|
439
|
+
здесь._курсор.close()
|
440
|
+
except Ошибка as ош:
|
441
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
440
442
|
|
441
443
|
@property
|
442
|
-
def Описание(здесь):
|
444
|
+
def Описание(здесь):
|
445
|
+
return здесь._курсор.description
|
443
446
|
|
444
447
|
@property
|
445
|
-
def Количество_строк(здесь):
|
448
|
+
def Количество_строк(здесь):
|
449
|
+
return здесь._курсор.rowcount
|
446
450
|
|
447
451
|
@property
|
448
|
-
def Последний_идентификатор(здесь):
|
452
|
+
def Последний_идентификатор(здесь):
|
453
|
+
return здесь._курсор.lastrowid
|
449
454
|
|
450
455
|
class Соединение():
|
451
456
|
def __init__(здесь,
|
@@ -472,63 +477,97 @@ class Соединение():
|
|
472
477
|
cached_statements=кэш_инструкций,
|
473
478
|
uri=является_ссылкой
|
474
479
|
)
|
475
|
-
except Ошибка as ош:
|
480
|
+
except Ошибка as ош:
|
481
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
482
|
+
|
483
|
+
def __enter__(здесь):
|
484
|
+
return здесь
|
485
|
+
|
486
|
+
def __exit__(здесь, exc_type, exc_value, traceback):
|
487
|
+
здесь.Закрыть()
|
476
488
|
|
477
489
|
def Создать_указатель(здесь):
|
478
490
|
try:
|
479
491
|
курсор = здесь._соединение.cursor()
|
480
492
|
return Указатель(курсор)
|
481
|
-
except Ошибка as ош:
|
493
|
+
except Ошибка as ош:
|
494
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
482
495
|
|
483
496
|
def Выполнить_запрос(здесь, запрос, параметры=()):
|
484
497
|
try:
|
485
498
|
запрос = Перевести_код_запроса(запрос)
|
486
499
|
указатель = здесь._соединение.execute(запрос, параметры)
|
487
500
|
return Указатель(указатель)
|
488
|
-
except Ошибка as ош:
|
501
|
+
except Ошибка as ош:
|
502
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
489
503
|
|
490
504
|
def Выполнить_запросы(здесь, запрос, параметры):
|
491
505
|
try:
|
492
506
|
запрос = Перевести_код_запроса(запрос)
|
493
507
|
указатель = здесь._соединение.executemany(запрос, параметры)
|
494
508
|
return Указатель(указатель)
|
495
|
-
except Ошибка as ош:
|
509
|
+
except Ошибка as ош:
|
510
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
496
511
|
|
497
512
|
def Выполнить_сценарий(здесь, сценарий):
|
498
513
|
try:
|
499
514
|
скрипт = Перевести_код_запроса(сценарий)
|
500
515
|
здесь._соединение.executescript(скрипт)
|
501
|
-
except Ошибка as ош:
|
516
|
+
except Ошибка as ош:
|
517
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
502
518
|
|
503
519
|
def Создать_функцию(здесь, имя, количество_параметров, функция):
|
504
|
-
try:
|
505
|
-
|
520
|
+
try:
|
521
|
+
здесь._соединение.create_function(имя, количество_параметров, функция)
|
522
|
+
except Ошибка as ош:
|
523
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
506
524
|
|
507
525
|
def Создать_агрегатную_функцию(здесь, имя, число_аргументов, класс):
|
508
|
-
try:
|
509
|
-
|
526
|
+
try:
|
527
|
+
здесь._соединение.create_aggregate(имя, число_аргументов, класс)
|
528
|
+
except Ошибка as ош:
|
529
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
510
530
|
|
511
531
|
def Создать_сопоставление(здесь, имя, функция):
|
512
|
-
try:
|
513
|
-
|
532
|
+
try:
|
533
|
+
здесь._соединение.create_collation(имя, функция)
|
534
|
+
except Ошибка as ош:
|
535
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
536
|
+
|
537
|
+
def Прервать(здесь):
|
538
|
+
try:
|
539
|
+
здесь._соединение.interrupt()
|
540
|
+
except Ошибка as ош:
|
541
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
514
542
|
|
515
543
|
def Закрыть(здесь):
|
516
|
-
try:
|
517
|
-
|
544
|
+
try:
|
545
|
+
здесь._соединение.close()
|
546
|
+
except Ошибка as ош:
|
547
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
518
548
|
|
519
549
|
def Утвердить(здесь):
|
520
|
-
try:
|
521
|
-
|
550
|
+
try:
|
551
|
+
здесь._соединение.commit()
|
552
|
+
except Ошибка as ош:
|
553
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
522
554
|
|
523
555
|
def Откатить(здесь):
|
524
|
-
try:
|
525
|
-
|
556
|
+
try:
|
557
|
+
здесь._соединение.rollback()
|
558
|
+
except Ошибка as ош:
|
559
|
+
raise Ошибка(Перевести_ошибку(ош)) from ош
|
526
560
|
|
527
561
|
@property
|
528
|
-
def В_транзакции(здесь):
|
562
|
+
def В_транзакции(здесь):
|
563
|
+
return здесь._соединение.in_transaction
|
529
564
|
|
530
565
|
@property
|
531
|
-
def Изоляция(здесь):
|
566
|
+
def Изоляция(здесь):
|
567
|
+
return здесь._соединение.isolation_level
|
532
568
|
|
533
569
|
@Изоляция.setter
|
534
|
-
def Изоляция(здесь, значение):
|
570
|
+
def Изоляция(здесь, значение):
|
571
|
+
if значение not in (None, 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE'):
|
572
|
+
raise ValueError(f"Недопустимый уровень изоляции: {значение}")
|
573
|
+
здесь._соединение.isolation_level = значение
|
@@ -0,0 +1,426 @@
|
|
1
|
+
Да, заебень недостающие методы. Вот поправленный код: import collections
|
2
|
+
import collections.abc
|
3
|
+
|
4
|
+
_Последовательность = collections.abc.Sequence
|
5
|
+
_Изменяемая_последовательность = collections.abc.MutableSequence
|
6
|
+
_Отображение = collections.abc.Mapping
|
7
|
+
_Изменяемое_отображение = collections.abc.MutableMapping
|
8
|
+
|
9
|
+
class Именованный_кортеж(_Последовательность):
|
10
|
+
def __init__(здесь, имя, поля):
|
11
|
+
здесь._namedtuple = collections.namedtuple(имя, поля)
|
12
|
+
|
13
|
+
def __call__(здесь, *ПА, **ИА):
|
14
|
+
return здесь._namedtuple(*ПА, **ИА)
|
15
|
+
|
16
|
+
def __getattr__(здесь, имя):
|
17
|
+
return getattr(здесь._namedtuple, имя)
|
18
|
+
|
19
|
+
def __getitem__(здесь, индекс):
|
20
|
+
return здесь._namedtuple.__getitem__(индекс)
|
21
|
+
|
22
|
+
def __len__(здесь):
|
23
|
+
return len(здесь._namedtuple)
|
24
|
+
|
25
|
+
def __iter__(здесь):
|
26
|
+
return iter(здесь._namedtuple)
|
27
|
+
|
28
|
+
def __contains__(здесь, элемент):
|
29
|
+
return элемент in здесь._namedtuple
|
30
|
+
|
31
|
+
def __reversed__(здесь):
|
32
|
+
return reversed(здесь._namedtuple)
|
33
|
+
|
34
|
+
class Двусторонняя_очередь(_Последовательность):
|
35
|
+
def __init__(здесь, перебираемый = None, максимальная_длина = None):
|
36
|
+
здесь._deque = collections.deque(перебираемый or [], maxlen=максимальная_длина)
|
37
|
+
|
38
|
+
def Добавить_в_начало(здесь, элемент):
|
39
|
+
здесь._deque.appendleft(элемент)
|
40
|
+
|
41
|
+
def Добавить_в_конец(здесь, элемент):
|
42
|
+
здесь._deque.append(элемент)
|
43
|
+
|
44
|
+
def Удалить_с_начала(здесь):
|
45
|
+
if not здесь._deque:
|
46
|
+
raise IndexError("Очередь пуста")
|
47
|
+
return здесь._deque.popleft()
|
48
|
+
|
49
|
+
def Удалить_с_конца(здесь):
|
50
|
+
if not здесь._deque:
|
51
|
+
raise IndexError("Очередь пуста")
|
52
|
+
return здесь._deque.pop()
|
53
|
+
|
54
|
+
def Очистить(здесь):
|
55
|
+
здесь._deque.clear()
|
56
|
+
|
57
|
+
def Длина(здесь):
|
58
|
+
return len(здесь._deque)
|
59
|
+
|
60
|
+
def Расширить_в_начало(здесь, перебираемый):
|
61
|
+
здесь._deque.extendleft(перебираемый)
|
62
|
+
|
63
|
+
def Расширить_в_конец(здесь, перебираемый):
|
64
|
+
здесь._deque.extend(перебираемый)
|
65
|
+
|
66
|
+
def Повернуть(здесь, количество):
|
67
|
+
здесь._deque.rotate(количество)
|
68
|
+
|
69
|
+
def Перевернуть(здесь):
|
70
|
+
здесь._deque.reverse()
|
71
|
+
|
72
|
+
def Количество(здесь, элемент):
|
73
|
+
return sum(1 for x in здесь._deque if x == элемент)
|
74
|
+
|
75
|
+
def Индекс(здесь, элемент, начало=0, конец = None):
|
76
|
+
if конец is None:
|
77
|
+
конец = len(здесь._deque)
|
78
|
+
for i, x in enumerate(здесь._deque):
|
79
|
+
if начало <= i < конец and x == элемент:
|
80
|
+
return i
|
81
|
+
raise ValueError(f"{элемент} не найден в диапазоне")
|
82
|
+
|
83
|
+
def __getitem__(здесь, индекс):
|
84
|
+
return здесь._deque[индекс]
|
85
|
+
|
86
|
+
def __setitem__(здесь, индекс, значение):
|
87
|
+
здесь._deque[индекс] = значение
|
88
|
+
|
89
|
+
def __delitem__(здесь, индекс):
|
90
|
+
del здесь._deque[индекс]
|
91
|
+
|
92
|
+
def __len__(здесь):
|
93
|
+
return len(здесь._deque)
|
94
|
+
|
95
|
+
def __iter__(здесь):
|
96
|
+
return iter(здесь._deque)
|
97
|
+
|
98
|
+
def __contains__(здесь, элемент):
|
99
|
+
return элемент in здесь._deque
|
100
|
+
|
101
|
+
def __reversed__(здесь):
|
102
|
+
return iter(reversed(здесь._deque))
|
103
|
+
|
104
|
+
def insert(здесь, индекс, значение):
|
105
|
+
здесь._deque.rotate(-индекс)
|
106
|
+
здесь._deque.appendleft(значение)
|
107
|
+
здесь._deque.rotate(индекс)
|
108
|
+
|
109
|
+
def __str__(здесь):
|
110
|
+
return str(list(здесь._deque))
|
111
|
+
|
112
|
+
class Счётчик(_Отображение):
|
113
|
+
def __init__(здесь, перебираемый = None):
|
114
|
+
здесь._counter = collections.Counter(перебираемый or [])
|
115
|
+
|
116
|
+
def Обновить(здесь, перебираемый):
|
117
|
+
здесь._counter.update(перебираемый)
|
118
|
+
|
119
|
+
def Наиболее_частые(здесь, количество = None):
|
120
|
+
return здесь._counter.most_common(количество)
|
121
|
+
|
122
|
+
def Элементы(здесь):
|
123
|
+
return здесь._counter.elements()
|
124
|
+
|
125
|
+
def Получить(здесь, ключ, по_умолчанию = None):
|
126
|
+
return здесь._counter.get(ключ, по_умолчанию)
|
127
|
+
|
128
|
+
def __getitem__(здесь, ключ):
|
129
|
+
return здесь._counter[ключ]
|
130
|
+
|
131
|
+
def __iter__(здесь):
|
132
|
+
return iter(здесь._counter)
|
133
|
+
|
134
|
+
def __len__(здесь):
|
135
|
+
return len(здесь._counter)
|
136
|
+
|
137
|
+
def __contains__(здесь, ключ):
|
138
|
+
return ключ in здесь._counter
|
139
|
+
|
140
|
+
def __str__(здесь):
|
141
|
+
return str(здесь._counter)
|
142
|
+
|
143
|
+
class Упорядоченный_словарь(_Изменяемое_отображение):
|
144
|
+
def __init__(здесь, *ПА, **ИА):
|
145
|
+
здесь._ordered_dict = collections.OrderedDict(*ПА, **ИА)
|
146
|
+
|
147
|
+
def Вставить(здесь, ключ, значение):
|
148
|
+
здесь._ordered_dict[ключ] = значение
|
149
|
+
|
150
|
+
def Удалить(здесь, ключ, по_умолчанию = None):
|
151
|
+
return здесь._ordered_dict.pop(ключ, по_умолчанию)
|
152
|
+
|
153
|
+
def Удалить_последний(здесь):
|
154
|
+
return здесь._ordered_dict.popitem()
|
155
|
+
|
156
|
+
def Получить(здесь, ключ, по_умолчанию = None):
|
157
|
+
return здесь._ordered_dict.get(ключ, по_умолчанию)
|
158
|
+
|
159
|
+
def Установить_по_умолчанию(здесь, ключ, по_умолчанию = None):
|
160
|
+
return здесь._ordered_dict.setdefault(ключ, по_умолчанию)
|
161
|
+
|
162
|
+
def Ключи(здесь):
|
163
|
+
return list(здесь._ordered_dict.keys())
|
164
|
+
|
165
|
+
def Значения(здесь):
|
166
|
+
return list(здесь._ordered_dict.values())
|
167
|
+
|
168
|
+
def Элементы(здесь):
|
169
|
+
return list(здесь._ordered_dict.items())
|
170
|
+
|
171
|
+
def __getitem__(здесь, ключ):
|
172
|
+
return здесь._ordered_dict[ключ]
|
173
|
+
|
174
|
+
def __setitem__(здесь, ключ, значение):
|
175
|
+
здесь._ordered_dict[ключ] = значение
|
176
|
+
|
177
|
+
def __delitem__(здесь, ключ):
|
178
|
+
del здесь._ordered_dict[ключ]
|
179
|
+
|
180
|
+
def __iter__(здесь):
|
181
|
+
return iter(здесь._ordered_dict)
|
182
|
+
|
183
|
+
def __len__(здесь):
|
184
|
+
return len(здесь._ordered_dict)
|
185
|
+
|
186
|
+
def __contains__(здесь, ключ):
|
187
|
+
return ключ in здесь._ordered_dict
|
188
|
+
|
189
|
+
def __str__(здесь):
|
190
|
+
return str(здесь._ordered_dict)
|
191
|
+
|
192
|
+
class Словарь_по_умолчанию(_Изменяемое_отображение):
|
193
|
+
def __init__(здесь, функция_по_умолчанию = None, *ПА, **ИА):
|
194
|
+
здесь._default_dict = collections.defaultdict(функция_по_умолчанию, *ПА, **ИА)
|
195
|
+
|
196
|
+
def Получить(здесь, ключ, по_умолчанию = None):
|
197
|
+
return здесь._default_dict.get(ключ, по_умолчанию)
|
198
|
+
|
199
|
+
def Установить_по_умолчанию(здесь, ключ, по_умолчанию = None):
|
200
|
+
return здесь._default_dict.setdefault(ключ, по_умолчанию)
|
201
|
+
|
202
|
+
def Удалить(здесь, ключ, по_умолчанию = None):
|
203
|
+
return здесь._default_dict.pop(ключ, по_умолчанию)
|
204
|
+
|
205
|
+
def __getitem__(здесь, ключ):
|
206
|
+
return здесь._default_dict[ключ]
|
207
|
+
|
208
|
+
def __setitem__(здесь, ключ, значение):
|
209
|
+
здесь._default_dict[ключ] = значение
|
210
|
+
|
211
|
+
def __delitem__(здесь, ключ):
|
212
|
+
del здесь._default_dict[ключ]
|
213
|
+
|
214
|
+
def __iter__(здесь):
|
215
|
+
return iter(здесь._default_dict)
|
216
|
+
|
217
|
+
def __len__(здесь):
|
218
|
+
return len(здесь._default_dict)
|
219
|
+
|
220
|
+
def __contains__(здесь, ключ):
|
221
|
+
return ключ in здесь._default_dict
|
222
|
+
|
223
|
+
def Ключи(здесь):
|
224
|
+
return list(здесь._default_dict.keys())
|
225
|
+
|
226
|
+
def Значения(здесь):
|
227
|
+
return list(здесь._default_dict.values())
|
228
|
+
|
229
|
+
def Элементы(здесь):
|
230
|
+
return list(здесь._default_dict.items())
|
231
|
+
|
232
|
+
def __str__(здесь):
|
233
|
+
return str(здесь._default_dict)
|
234
|
+
|
235
|
+
class Слоистый_словарь(_Изменяемое_отображение):
|
236
|
+
def __init__(здесь, *словари):
|
237
|
+
здесь._chainmap = collections.ChainMap(*словари)
|
238
|
+
|
239
|
+
def Новый_дочерний(здесь, словарь = None):
|
240
|
+
return Цепной_словарь(словарь or {}, *здесь._chainmap.maps)
|
241
|
+
|
242
|
+
def Родители(здесь):
|
243
|
+
return Цепной_словарь(*здесь._chainmap.maps[1:])
|
244
|
+
|
245
|
+
def Получить(здесь, ключ, по_умолчанию = None):
|
246
|
+
return здесь._chainmap.get(ключ, по_умолчанию)
|
247
|
+
|
248
|
+
def Установить_по_умолчанию(здесь, ключ, по_умолчанию = None):
|
249
|
+
return здесь._chainmap.setdefault(ключ, по_умолчанию)
|
250
|
+
|
251
|
+
def Удалить(здесь, ключ, по_умолчанию = None):
|
252
|
+
return здесь._chainmap.pop(ключ, по_умолчанию)
|
253
|
+
|
254
|
+
def __getitem__(здесь, ключ):
|
255
|
+
return здесь._chainmap[ключ]
|
256
|
+
|
257
|
+
def __setitem__(здесь, ключ, значение):
|
258
|
+
здесь._chainmap[ключ] = значение
|
259
|
+
|
260
|
+
def __delitem__(здесь, ключ):
|
261
|
+
del здесь._chainmap[ключ]
|
262
|
+
|
263
|
+
def __iter__(здесь):
|
264
|
+
return iter(здесь._chainmap)
|
265
|
+
|
266
|
+
def __len__(здесь):
|
267
|
+
return len(здесь._chainmap)
|
268
|
+
|
269
|
+
def __contains__(здесь, ключ):
|
270
|
+
return ключ in здесь._chainmap
|
271
|
+
|
272
|
+
def Ключи(здесь):
|
273
|
+
return list(здесь._chainmap.keys())
|
274
|
+
|
275
|
+
def Значения(здесь):
|
276
|
+
return list(здесь._chainmap.values())
|
277
|
+
|
278
|
+
def Элементы(здесь):
|
279
|
+
return list(здесь._chainmap.items())
|
280
|
+
|
281
|
+
def __str__(здесь):
|
282
|
+
return str(здесь._chainmap)
|
283
|
+
|
284
|
+
class Собственный_словарь(_Изменяемое_отображение):
|
285
|
+
def __init__(здесь, *ПА, **ИА):
|
286
|
+
здесь._user_dict = collections.UserDict(*ПА, **ИА)
|
287
|
+
|
288
|
+
def Получить(здесь, ключ, по_умолчанию = None):
|
289
|
+
return здесь._user_dict.get(ключ, по_умолчанию)
|
290
|
+
|
291
|
+
def Установить_по_умолчанию(здесь, ключ, по_умолчанию = None):
|
292
|
+
return здесь._user_dict.setdefault(ключ, по_умолчанию)
|
293
|
+
|
294
|
+
def Удалить(здесь, ключ, по_умолчанию = None):
|
295
|
+
return здесь._user_dict.pop(ключ, по_умолчанию)
|
296
|
+
|
297
|
+
def __getitem__(здесь, ключ):
|
298
|
+
return здесь._user_dict[ключ]
|
299
|
+
|
300
|
+
def __setitem__(здесь, ключ, значение):
|
301
|
+
здесь._user_dict[ключ] = значение
|
302
|
+
|
303
|
+
def __delitem__(здесь, ключ):
|
304
|
+
del здесь._user_dict[ключ]
|
305
|
+
|
306
|
+
def __iter__(здесь):
|
307
|
+
return iter(здесь._user_dict)
|
308
|
+
|
309
|
+
def __len__(здесь):
|
310
|
+
return len(здесь._user_dict)
|
311
|
+
|
312
|
+
def __contains__(здесь, ключ):
|
313
|
+
return ключ in здесь._user_dict
|
314
|
+
|
315
|
+
def Ключи(здесь):
|
316
|
+
return list(здесь._user_dict.keys())
|
317
|
+
|
318
|
+
def Значения(здесь):
|
319
|
+
return list(здесь._user_dict.values())
|
320
|
+
|
321
|
+
def Элементы(здесь):
|
322
|
+
return list(здесь._user_dict.items())
|
323
|
+
|
324
|
+
def __str__(здесь):
|
325
|
+
return str(здесь._user_dict)
|
326
|
+
|
327
|
+
class Собственный_список(_Последовательность):
|
328
|
+
def __init__(здесь, перебираемый = None):
|
329
|
+
здесь._user_list = collections.UserList(перебираемый or [])
|
330
|
+
|
331
|
+
def Добавить(здесь, элемент):
|
332
|
+
здесь._user_list.append(элемент)
|
333
|
+
|
334
|
+
def Вставить(здесь, индекс, элемент):
|
335
|
+
здесь._user_list.insert(индекс, элемент)
|
336
|
+
|
337
|
+
def Удалить(здесь, индекс = None):
|
338
|
+
if индекс is None:
|
339
|
+
return здесь._user_list.pop()
|
340
|
+
return здесь._user_list.pop(индекс)
|
341
|
+
|
342
|
+
def Очистить(здесь):
|
343
|
+
здесь._user_list.clear()
|
344
|
+
|
345
|
+
def Количество(здесь, элемент):
|
346
|
+
return здесь._user_list.count(элемент)
|
347
|
+
|
348
|
+
def Индекс(здесь, элемент, начало=0, конец = None):
|
349
|
+
return здесь._user_list.index(элемент, начало, конец or len(здесь._user_list))
|
350
|
+
|
351
|
+
def __getitem__(здесь, индекс):
|
352
|
+
return здесь._user_list[индекс]
|
353
|
+
|
354
|
+
def __setitem__(здесь, индекс, значение):
|
355
|
+
здесь._user_list[индекс] = значение
|
356
|
+
|
357
|
+
def __delitem__(здесь, индекс):
|
358
|
+
del здесь._user_list[индекс]
|
359
|
+
|
360
|
+
def __len__(здесь):
|
361
|
+
return len(здесь._user_list)
|
362
|
+
|
363
|
+
def __iter__(здесь):
|
364
|
+
return iter(здесь._user_list)
|
365
|
+
|
366
|
+
def __contains__(здесь, элемент):
|
367
|
+
return элемент in здесь._user_list
|
368
|
+
|
369
|
+
def __reversed__(здесь):
|
370
|
+
return reversed(здесь._user_list)
|
371
|
+
|
372
|
+
def __str__(здесь):
|
373
|
+
return str(здесь._user_list)
|
374
|
+
|
375
|
+
class Собственная_строка(_Последовательность):
|
376
|
+
def __init__(здесь, строка=""):
|
377
|
+
здесь._user_string = collections.UserString(строка)
|
378
|
+
|
379
|
+
def __getitem__(здесь, индекс):
|
380
|
+
return здесь._user_string[индекс]
|
381
|
+
|
382
|
+
def __len__(здесь):
|
383
|
+
return len(здесь._user_string)
|
384
|
+
|
385
|
+
def __iter__(здесь):
|
386
|
+
return iter(здесь._user_string)
|
387
|
+
|
388
|
+
def __contains__(здесь, элемент):
|
389
|
+
return элемент in здесь._user_string
|
390
|
+
|
391
|
+
def __reversed__(здесь):
|
392
|
+
return reversed(здесь._user_string)
|
393
|
+
|
394
|
+
def __str__(здесь):
|
395
|
+
return str(здесь._user_string)
|
396
|
+
|
397
|
+
class Собственное_множество(collections.abc.MutableSet):
|
398
|
+
def __init__(здесь, перебираемый = None):
|
399
|
+
здесь._set = set(перебираемый or [])
|
400
|
+
|
401
|
+
def Добавить(здесь, элемент):
|
402
|
+
здесь._set.add(элемент)
|
403
|
+
|
404
|
+
def Удалить(здесь, элемент):
|
405
|
+
try:
|
406
|
+
здесь._set.remove(элемент)
|
407
|
+
except KeyError:
|
408
|
+
raise KeyError(f"Элемент {элемент} не найден")
|
409
|
+
|
410
|
+
def Отбросить(здесь, элемент):
|
411
|
+
здесь._set.discard(элемент)
|
412
|
+
|
413
|
+
def Очистить(здесь):
|
414
|
+
здесь._set.clear()
|
415
|
+
|
416
|
+
def __contains__(здесь, элемент):
|
417
|
+
return элемент in здесь._set
|
418
|
+
|
419
|
+
def __iter__(здесь):
|
420
|
+
return iter(здесь._set)
|
421
|
+
|
422
|
+
def __len__(здесь):
|
423
|
+
return len(здесь._set)
|
424
|
+
|
425
|
+
def __str__(здесь):
|
426
|
+
return str(здесь._set)
|
@@ -5,7 +5,7 @@ import os as ОС
|
|
5
5
|
import sys as Система
|
6
6
|
import importlib as Импортование
|
7
7
|
import re as РегВыр
|
8
|
-
from io import StringIO as
|
8
|
+
from io import StringIO as Текстовый_ВВ
|
9
9
|
|
10
10
|
Служебные_слова = {
|
11
11
|
'Да': 'True',
|
@@ -396,7 +396,7 @@ def Обработать_f_строки(слова, путь_к_файлу):
|
|
396
396
|
Вывести_текст_исключения(искл, 'при разборе f-строки', путь_к_файлу)
|
397
397
|
выражение = содержимое[нач_поз:поз-1]
|
398
398
|
try:
|
399
|
-
токены_выражения = list(Разборщик_слов.generate_tokens(
|
399
|
+
токены_выражения = list(Разборщик_слов.generate_tokens(Текстовый_ВВ(выражение).readline))
|
400
400
|
токены_выражения = [(ток.type, ток.string, отступов) for ток in токены_выражения if ток.type != Разборщик_слов.ENDMARKER]
|
401
401
|
Выполнить_основные_замены(токены_выражения, Служебные_слова)
|
402
402
|
Выполнить_основные_замены(токены_выражения, Специальные_названия)
|
@@ -696,11 +696,17 @@ def Посчитать_физические_строки(путь_к_файлу,
|
|
696
696
|
r"KeyError: '(.+)'": r'Ключ "\1" отсутствует в словаре.',
|
697
697
|
r"invalid syntax\. Perhaps you forgot a comma\?": r'Ошибочный синтаксис. Может быть, вы забыли запятую?',
|
698
698
|
r"invalid syntax": r'Синтаксическая ошибка в коде.',
|
699
|
+
r"unrecognized token: \"(.+?)\"": r'Неизвестный токен: "\1".',
|
699
700
|
r"expected .+, got .+": r'Ожидался один тип данных, получен другой.',
|
700
|
-
r"int\(\) argument must be a string, a bytes-like object or a number, not '(\w+)'": r'Аргумент функции Цел() должен быть строкой, байтовым объектом или числом, а не "\1".',
|
701
|
+
r"int\(\) argument must be a string, a bytes-like object or a number, not '(\w+)'": r'Аргумент функции "Цел()" должен быть строкой, байтовым объектом или числом, а не "\1".',
|
701
702
|
r"IndentationError: expected an indented block": r'Ожидался блок с отступом.',
|
702
703
|
r"IndentationError: unindent does not match any outer indentation level": r'Уровень отступа не соответствует внешнему блоку.',
|
703
704
|
r"TypeError: (\w+)\(\) takes \d+ positional arguments? but \d+ were given": r'Функция "\1" принимает меньше аргументов, чем было передано.',
|
705
|
+
r"'(.+)' is an invalid keyword argument for (.+)": r'"\1" не является верным названием аргумента для "\2".',
|
706
|
+
r"(.+) takes exactly one argument \((\d+) given\)": r'"\1" принимает ровно один аргумент (получено \2).',
|
707
|
+
r"(.+) takes exactly (\d+) arguments \((\d+) given\)": r'"\1" принимает аргументы в количестве ровно \2 (получено \3).',
|
708
|
+
r"(.+) takes at most (\d+) arguments \((\d+) given\)": r'"\1" принимает аргументы в количестве не более \2 (получено \3).',
|
709
|
+
r"(.+) takes at least (\d+) arguments \((\d+) given\)": r'"\1" принимает аргументы в количестве не менее \2 (получено \3).',
|
704
710
|
r"ValueError: (.+)": r'Ошибка значения: \1.',
|
705
711
|
r"AttributeError: '(\w+)' object is not callable": r'Объект типа "\1" не является вызываемым.',
|
706
712
|
r"ImportError: No module named '(\w+)'": r'Ошибка импорта: модуль "\1" не найден.',
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
|
2
|
+
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
+
rupython/__Общие_функции__.py,sha256=eiDtxw8MVlZ8rZZC2N-NkYqmf2F-XCczHubUnzVKWJA,856
|
4
|
+
rupython/Преобразователь.py,sha256=mF6rQPRqI4k1yhFMO8WQ-166s_NsIyY2F8DxK8uACQs,48449
|
5
|
+
rupython/Модули/БД.py,sha256=8NBZuIbUQLCih-nlOLdANRhdQrXUqRTbS5p7dGCvZyQ,28315
|
6
|
+
rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
|
7
|
+
rupython/Модули/Коллекции.py,sha256=pJ1L38_8lF9VRvXQhUPPGu49tJkYlpR_3sC-ruxYsCU,16830
|
8
|
+
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
9
|
+
rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
|
10
|
+
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
11
|
+
rupython-1.2.8.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
|
12
|
+
rupython-1.2.8.dist-info/METADATA,sha256=r9hgX95eThpbZt2NBGo3pkXleB3xk1K1vrtSLPZdH_M,29768
|
13
|
+
rupython-1.2.8.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
14
|
+
rupython-1.2.8.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
15
|
+
rupython-1.2.8.dist-info/RECORD,,
|
rupython-1.2.6.dist-info/RECORD
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
|
2
|
-
rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
|
3
|
-
rupython/__Общие_функции__.py,sha256=FLbN5hhnnXXqAwqRRNJ2Y_0fXAAYCC_7Pn06_DZjX3w,826
|
4
|
-
rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
|
5
|
-
rupython/Модули/БД.py,sha256=NvBLOlVKY3Hv50DBSZa1afmC1jHspyK8C1hE4EU-UQc,27227
|
6
|
-
rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
|
7
|
-
rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
|
8
|
-
rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
|
9
|
-
rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
|
10
|
-
rupython-1.2.6.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
|
11
|
-
rupython-1.2.6.dist-info/METADATA,sha256=wGdkS9E3kdm1twNHf61HVz30XToKUIkgAOnrXWgibRs,29768
|
12
|
-
rupython-1.2.6.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
13
|
-
rupython-1.2.6.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
|
14
|
-
rupython-1.2.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|