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.
Files changed (10) hide show
  1. 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
  2. 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
  3. 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
  4. 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
  5. {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/METADATA +1 -1
  6. rupython-1.2.8.dist-info/RECORD +15 -0
  7. rupython-1.2.6.dist-info/RECORD +0 -14
  8. {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/LICENSE +0 -0
  9. {rupython-1.2.6.dist-info → rupython-1.2.8.dist-info}/WHEEL +0 -0
  10. {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 ош: raise Ошибка(Перевести_ошибку(ош)) from ош
402
+ except Ошибка as ош:
403
+ raise Ошибка(Перевести_ошибку(ош)) from ош
417
404
 
418
405
  def Выполнить_запросы(здесь, запрос, последовательность_параметров):
419
406
  try:
420
407
  запрос = Перевести_код_запроса(запрос)
421
408
  здесь._курсор.executemany(запрос, последовательность_параметров)
422
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
409
+ except Ошибка as ош:
410
+ raise Ошибка(Перевести_ошибку(ош)) from ош
423
411
 
424
412
  def Выполнить_сценарий(здесь, сценарий):
425
413
  try:
426
414
  скрипт = Перевести_код_запроса(сценарий)
427
415
  здесь._курсор.executescript(скрипт)
428
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
416
+ except Ошибка as ош:
417
+ raise Ошибка(Перевести_ошибку(ош)) from ош
429
418
 
430
419
  def Извлечь_запись(здесь):
431
- return здесь._курсор.fetchone()
420
+ try:
421
+ return здесь._курсор.fetchone()
422
+ except Ошибка as ош:
423
+ raise Ошибка(Перевести_ошибку(ош)) from ош
432
424
 
433
425
  def Извлечь_записи(здесь, количество):
434
- return здесь._курсор.fetchmany(количество)
426
+ try:
427
+ return здесь._курсор.fetchmany(количество)
428
+ except Ошибка as ош:
429
+ raise Ошибка(Перевести_ошибку(ош)) from ош
435
430
 
436
431
  def Извлечь_все_записи(здесь):
437
- return здесь._курсор.fetchall()
432
+ try:
433
+ return здесь._курсор.fetchall()
434
+ except Ошибка as ош:
435
+ raise Ошибка(Перевести_ошибку(ош)) from ош
438
436
 
439
- def Закрыть(здесь): здесь._курсор.close()
437
+ def Закрыть(здесь):
438
+ try:
439
+ здесь._курсор.close()
440
+ except Ошибка as ош:
441
+ raise Ошибка(Перевести_ошибку(ош)) from ош
440
442
 
441
443
  @property
442
- def Описание(здесь): return здесь._курсор.description
444
+ def Описание(здесь):
445
+ return здесь._курсор.description
443
446
 
444
447
  @property
445
- def Количество_строк(здесь): return здесь._курсор.rowcount
448
+ def Количество_строк(здесь):
449
+ return здесь._курсор.rowcount
446
450
 
447
451
  @property
448
- def Последний_идентификатор(здесь): return здесь._курсор.lastrowid
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 ош: raise Ошибка(Перевести_ошибку(ош)) from ош
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 ош: raise Ошибка(Перевести_ошибку(ош)) from ош
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 ош: raise Ошибка(Перевести_ошибку(ош)) from ош
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 ош: raise Ошибка(Перевести_ошибку(ош)) from ош
509
+ except Ошибка as ош:
510
+ raise Ошибка(Перевести_ошибку(ош)) from ош
496
511
 
497
512
  def Выполнить_сценарий(здесь, сценарий):
498
513
  try:
499
514
  скрипт = Перевести_код_запроса(сценарий)
500
515
  здесь._соединение.executescript(скрипт)
501
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
516
+ except Ошибка as ош:
517
+ raise Ошибка(Перевести_ошибку(ош)) from ош
502
518
 
503
519
  def Создать_функцию(здесь, имя, количество_параметров, функция):
504
- try: здесь._соединение.create_function(имя, количество_параметров, функция)
505
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
520
+ try:
521
+ здесь._соединение.create_function(имя, количество_параметров, функция)
522
+ except Ошибка as ош:
523
+ raise Ошибка(Перевести_ошибку(ош)) from ош
506
524
 
507
525
  def Создать_агрегатную_функцию(здесь, имя, число_аргументов, класс):
508
- try: здесь._соединение.create_aggregate(имя, число_аргументов, класс)
509
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
526
+ try:
527
+ здесь._соединение.create_aggregate(имя, число_аргументов, класс)
528
+ except Ошибка as ош:
529
+ raise Ошибка(Перевести_ошибку(ош)) from ош
510
530
 
511
531
  def Создать_сопоставление(здесь, имя, функция):
512
- try: здесь._соединение.create_collation(имя, функция)
513
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
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: здесь._соединение.close()
517
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
544
+ try:
545
+ здесь._соединение.close()
546
+ except Ошибка as ош:
547
+ raise Ошибка(Перевести_ошибку(ош)) from ош
518
548
 
519
549
  def Утвердить(здесь):
520
- try: здесь._соединение.commit()
521
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
550
+ try:
551
+ здесь._соединение.commit()
552
+ except Ошибка as ош:
553
+ raise Ошибка(Перевести_ошибку(ош)) from ош
522
554
 
523
555
  def Откатить(здесь):
524
- try: здесь._соединение.rollback()
525
- except Ошибка as ош: raise Ошибка(Перевести_ошибку(ош)) from ош
556
+ try:
557
+ здесь._соединение.rollback()
558
+ except Ошибка as ош:
559
+ raise Ошибка(Перевести_ошибку(ош)) from ош
526
560
 
527
561
  @property
528
- def В_транзакции(здесь): return здесь._соединение.in_transaction
562
+ def В_транзакции(здесь):
563
+ return здесь._соединение.in_transaction
529
564
 
530
565
  @property
531
- def Изоляция(здесь): return здесь._соединение.isolation_level
566
+ def Изоляция(здесь):
567
+ return здесь._соединение.isolation_level
532
568
 
533
569
  @Изоляция.setter
534
- def Изоляция(здесь, значение): здесь._соединение.isolation_level = значение
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(СтроковыйВВ(выражение).readline))
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" не найден.',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.6
3
+ Version: 1.2.8
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -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,,
@@ -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,,