rupython 1.2.3__py3-none-any.whl → 1.2.5__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.
@@ -3,12 +3,21 @@ import re as РегВыр
3
3
 
4
4
  Ошибка = sqlite3.Error
5
5
 
6
+ Успешно = sqlite3.SQLITE_OK # Успешное выполнение
7
+ Отказ = sqlite3.SQLITE_DENY # Отказ в операции
8
+ Пропустить = sqlite3.SQLITE_IGNORE # Игнорирование операции
9
+ Занято = sqlite3.SQLITE_BUSY # База данных занята
10
+ Заблоковано = sqlite3.SQLITE_LOCKED # База или таблица заблокирована
11
+ Переполнено = sqlite3.SQLITE_FULL # Диск или база переполнены
12
+
13
+ # Уровни изоляции транзакций
14
+ Отложенно = "DEFERRED"
15
+ Немедленно = "IMMEDIATE"
16
+ Исключительно = "EXCLUSIVE"
17
+
6
18
  Разбор_объявленных_типов = sqlite3.PARSE_DECLTYPES
7
19
  Разбор_названий_столбцов = sqlite3.PARSE_COLNAMES
8
- Успешно = sqlite3.SQLITE_OK
9
- Отказ = sqlite3.SQLITE_DENY
10
- Игнорировать = sqlite3.SQLITE_IGNORE
11
- Уровень_интерфейса_взаимодействия = sqlite3.apilevel
20
+
12
21
  Стиль_параметров = sqlite3.paramstyle
13
22
  Потокобезопасность = sqlite3.threadsafety
14
23
 
@@ -20,8 +29,9 @@ import re as РегВыр
20
29
  'ОТЛОЖЕННО': 'DEFERRED',
21
30
  'НЕМЕДЛЕННО': 'IMMEDIATE',
22
31
  'ИСКЛЮЧИТЕЛЬНО': 'EXCLUSIVE',
23
- 'ОТКАТИТЬ': 'ROLLBACK',
32
+ 'ОТКАТИТЬ': 'ROLLBACK TRANSACTION',
24
33
  'ТОЧКА_СОХРАНЕНИЯ': 'SAVEPOINT',
34
+ 'ОСВОБОДИТЬ': 'RELEASE SAVEPOINT',
25
35
  'НАСТРОИТЬ': 'PRAGMA',
26
36
 
27
37
  'ВЫБРАТЬ': 'SELECT',
@@ -47,6 +57,7 @@ import re as РегВыр
47
57
  'ПО ПРАВОЙ': 'RIGHT',
48
58
  'ПОЛНОСТЬЮ': 'FULL',
49
59
  'ПО': 'ON',
60
+ 'К': 'TO',
50
61
  'ПЕРЕКРЁСТНО': 'CROSS',
51
62
  'ИСПОЛЬЗУЯ': 'USING',
52
63
 
@@ -80,6 +91,7 @@ import re as РегВыр
80
91
  'ПРЕДСТАВЛЕНИЕ': 'VIEW',
81
92
  'СТОЛБЕЦ': 'COLUMN',
82
93
  'СТРОГО': 'STRICT',
94
+ 'ПЕРЕИМЕНОВАТЬ В': 'RENAME TO',
83
95
 
84
96
  'ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NULL',
85
97
  'НЕ ЯВЛЯЕТСЯ ПУСТЫМ': 'IS NOT NULL',
@@ -31,6 +31,28 @@ from rupython import __Общие_функции__
31
31
  'минут': 'minutes', 'часов': 'hours', 'недель': 'weeks'
32
32
  }
33
33
 
34
+ Месяцы_родительный = {
35
+ 1: 'января', 2: 'февраля', 3: 'марта', 4: 'апреля',
36
+ 5: 'мая', 6: 'июня', 7: 'июля', 8: 'августа',
37
+ 9: 'сентября', 10: 'октября', 11: 'ноября', 12: 'декабря'
38
+ }
39
+
40
+ Дни_недели_полные = {
41
+ 1: 'понедельник', 2: 'вторник', 3: 'среда', 4: 'четверг',
42
+ 5: 'пятница', 6: 'суббота', 7: 'воскресенье'
43
+ }
44
+
45
+ Дни_недели_краткие = {
46
+ 1: 'Пн', 2: 'Вт', 3: 'Ср', 4: 'Чт',
47
+ 5: 'Пт', 6: 'Сб', 7: 'Вс'
48
+ }
49
+
50
+ def Склонение_после_числительного(число, слова):
51
+ return str(число) + ' ' + \
52
+ (слова[2] if число % 100 >= 5 and число % 100 <= 20 else \
53
+ (слова[0] if число % 10 == 1 else \
54
+ (слова[1] if число % 10 >= 2 and число % 10 <= 4 else слова[2])))
55
+
34
56
  def Перевести_формат(формат):
35
57
  for русский, питоновский in Словарь_спецификаторов.items():
36
58
  формат = формат.replace(русский, питоновский)
@@ -49,29 +71,41 @@ class Дата_и_время:
49
71
  def Сейчас(часовой_пояс=None):
50
72
  return Дата_и_время(datetime.datetime.now(часовой_пояс))
51
73
 
52
- @staticmethod
53
- def До_сейчас():
54
- return Дата_и_время(datetime.datetime.utcnow())
55
-
56
74
  @staticmethod
57
75
  def Из_метки_времени(метка_времени, часовой_пояс=None):
58
76
  return Дата_и_время(datetime.datetime.fromtimestamp(метка_времени, часовой_пояс))
59
77
 
60
78
  @staticmethod
61
- def Из_формата_ISO(строка):
62
- return Дата_и_время(datetime.datetime.fromisoformat(строка))
79
+ def Из_строки(строка):
80
+ return Дата_и_время.Разобрать(строка, Формат_даты_и_времени)
63
81
 
64
82
  @staticmethod
65
83
  def Разобрать(строка, формат):
66
84
  формат = Перевести_формат(формат)
67
85
  return Дата_и_время(datetime.datetime.strptime(строка, формат))
68
86
 
69
- def Формат(здесь, формат):
87
+ def В_формат(здесь, формат):
70
88
  формат = Перевести_формат(формат)
71
89
  return здесь._дата_время.strftime(формат)
72
90
 
73
- def В_строку(здесь):
74
- return здесь._дата_время.isoformat()
91
+ def __str__(строка):
92
+ формат = Перевести_формат(Формат_даты_и_времени)
93
+ return здесь._дата_время.strftime(формат)
94
+
95
+ def Словами(здесь, формат='полный'):
96
+ день_недели = здесь.Номер_дня_недели()
97
+ if формат == 'полный':
98
+ return f"{Дни_недели_полные[день_недели]}, {здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} года, {здесь.Часов:02d}:{здесь.Минут:02d}"
99
+ elif формат == 'краткий':
100
+ return f"{Дни_недели_краткие[день_недели]}, {здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} г."
101
+ elif формат == 'дата':
102
+ return f"{здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} года"
103
+ elif формат == 'время':
104
+ return f"{здесь.Часов:02d}:{здесь.Минут:02d}"
105
+ elif формат == 'день_недели':
106
+ return Дни_недели_полные[день_недели]
107
+ else:
108
+ raise ValueError("Неподдерживаемый формат")
75
109
 
76
110
  def В_метку_времени(здесь):
77
111
  return здесь._дата_время.timestamp()
@@ -177,12 +211,16 @@ class Дата:
177
211
  def От_даты(порядковый_номер):
178
212
  return Дата(datetime.date.fromordinal(порядковый_номер))
179
213
 
180
- def Формат(здесь, формат):
214
+ def В_формат(здесь, формат):
181
215
  формат = Перевести_формат(формат)
182
216
  return здесь._дата.strftime(формат)
183
217
 
184
- def В_строку(здесь):
185
- return здесь._дата.isoformat()
218
+ def __str__(здесь):
219
+ формат = Перевести_формат(Формат_даты)
220
+ return здесь._дата.strftime(формат)
221
+
222
+ def Из_строки(строка):
223
+ return Время(Дата_и_время.Разобрать(строка, Формат_времени)._дата_время.time())
186
224
 
187
225
  def День_недели(здесь):
188
226
  return здесь._дата.isoweekday()
@@ -249,12 +287,13 @@ class Время:
249
287
  )
250
288
  здесь._время = datetime.time(*ПА, **ИА)
251
289
 
252
- def Формат(здесь, формат):
290
+ def В_формат(здесь, формат):
253
291
  формат = Перевести_формат(формат)
254
292
  return здесь._время.strftime(формат)
255
293
 
256
- def В_строку(здесь):
257
- return здесь._время.isoformat()
294
+ def __str__(здесь):
295
+ формат = Перевести_формат(Формат_времени)
296
+ return здесь._время.strftime(формат)
258
297
 
259
298
  def Заменить(здесь, **ИА):
260
299
  ИА = __Общие_функции__.Заменить_ключи_в_словаре(
@@ -347,6 +386,42 @@ class Интервал:
347
386
  def Вычесть(здесь, другой):
348
387
  return Интервал(дней=(здесь._интервал - другой._интервал).days, секунд=(здесь._интервал - другой._интервал).seconds, микросекунд=(здесь._интервал - другой._интервал).microseconds)
349
388
 
389
+ def __str__(здесь):
390
+ части = []
391
+ if здесь.Дней:
392
+ части.append(Склонение_после_числительного(здесь.Дней, ['день', 'дня', 'дней']))
393
+ секунд = здесь.Секунд
394
+ if секунд >= 3600:
395
+ часов = секунд // 3600
396
+ части.append(Склонение_после_числительного(часов, ['час', 'часа', 'часов']))
397
+ секунд %= 3600
398
+ if секунд >= 60:
399
+ минут = секунд // 60
400
+ части.append(Склонение_после_числительного(минут, ['минута', 'минуты', 'минут']))
401
+ секунд %= 60
402
+ if секунд:
403
+ части.append(Склонение_после_числительного(секунд, ['секунда', 'секунды', 'секунд']))
404
+ return ' '.join(части) or '0 секунд'
405
+
406
+ @staticmethod
407
+ def Из_строки(строка):
408
+ части = строка.split()
409
+ ИА = {}
410
+ i = 0
411
+ while i < len(части):
412
+ число = int(части[i])
413
+ единица = части[i + 1]
414
+ if 'день' in единица or 'дня' in единица or 'дней' in единица:
415
+ ИА['дней'] = число
416
+ elif 'час' in единица:
417
+ ИА['часов'] = число
418
+ elif 'минут' in единица:
419
+ ИА['минут'] = число
420
+ elif 'секунд' in единица:
421
+ ИА['секунд'] = число
422
+ i += 2
423
+ return Интервал(**ИА)
424
+
350
425
  def __add__(здесь, другой):
351
426
  if isinstance(другой, Интервал):
352
427
  return здесь.Добавить(другой)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rupython
3
- Version: 1.2.3
3
+ Version: 1.2.5
4
4
  Summary: Исполнитель кода Русского Питона
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -12,6 +12,10 @@ License-File: LICENSE
12
12
  * Повышение производительности труда работников, выполняющих задачи автоматизации процессов и формализации алгоритмов, за счёт применения лексики на родном им языке, что априори повышает усвоение и читаемость кода.
13
13
  * Упрощение освоения навыков алгоритмизации и составления компьютерных программ учащимися путём устранения искусственного препятствия в виде необходимости оперировать лексикой иностранного языка.
14
14
 
15
+ Когда-то, в эпоху, когда железо и разум сливались в первых советских вычислительных машинах, русские ЯП были не просто инструментом — они были голосом нации, стремящейся к технологическому величию. В цехах заводов, на полигонах оборонных предприятий и в тиши академических кабинетов инструкции программного кода звучали на русском языке, воплощая мощь отечественной промышленности и науки. Сегодня, когда цифровой мир задаёт ритм жизни, возрождение русских ЯП становится не просто возможностью, но и необходимостью — способом вернуть себе право творить технологии на родном языке.
16
+
17
+ Алгоритмические языки на русской лексической базе повышают производительность труда разработчиков, поскольку работа на знакомом языке не требует от них приложения ненужных умственных усилий для переключения на иностранный язык, чем снижается когнитивная нагрузка, улучшается читаемость и качество создаваемого кода и повышается эффективность коммуникации в команде. Русский код априори является более понятным и воспринимаемым интуитивно в контексте культурных и языковых особенностей русских людей, снижая порог вхождения и устраняя искусственный барьер в виде необходимости овладения иностранным языком на уровне, достаточном для беглого чтения кода.
18
+
15
19
  Приложения на Русском Питоне могут использовать все возможности оригинального Python, включая всё богатство подключаемых пакетов и библиотек. Код может быть написан на обоих вариантах языка.
16
20
 
17
21
  ### Установка
@@ -2,13 +2,13 @@ rupython/__main__.py,sha256=wfmjyJhg6iQN1_9Hl6tIu6mKHO95xP2ibVcDdIIEXjE,1256
2
2
  rupython/__Заголовочный_код__.py,sha256=VWghfQc6dv9lwIeQvJotpdOlBtHZeN00NBeL4RdWloA,10998
3
3
  rupython/__Общие_функции__.py,sha256=FLbN5hhnnXXqAwqRRNJ2Y_0fXAAYCC_7Pn06_DZjX3w,826
4
4
  rupython/Преобразователь.py,sha256=-0oxZb63T3s50sT-0jiH3cA4KqRs3qVpaGsfSyAb8TY,47550
5
- rupython/Модули/БД.py,sha256=ypjYa-9s0wO1Y_nXRiyiS80F_TStRlsSHRpisBWMT4g,23957
6
- rupython/Модули/ДатаВремя.py,sha256=LP3yb9QhlygCl2EzonIZ68QTOSOsKW2JSzcIAXvTeVw,20698
5
+ rupython/Модули/БД.py,sha256=LXMY-CIZxERUUcbWY0Mruab_w4RzKPDNwWGtf1tEXjs,24571
6
+ rupython/Модули/ДатаВремя.py,sha256=YdpACxtHXt57zV7uYpZJZeH3T4bMd6orud-Y34DqWTI,25087
7
7
  rupython/Модули/Матем.py,sha256=d8ekm7GJreu7LJ9KmAKcTOciIUQ-VBI567BfK_QeLSc,3587
8
8
  rupython/Модули/РегВыр.py,sha256=T3yxVP-B5AwAzbUTjWpog3HCzRTGLZ58CEQpfA-0dsY,6341
9
9
  rupython/Модули/Случ.py,sha256=foIuQo2QZ5z0iyxp9fn4NaunSx96vYzC2pRjwaT2FD8,2723
10
- rupython-1.2.3.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
11
- rupython-1.2.3.dist-info/METADATA,sha256=lbLqgBZjgn1VDWwPR-7G2r745tjoddi-K-LtFYdNcmw,27473
12
- rupython-1.2.3.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
13
- rupython-1.2.3.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
14
- rupython-1.2.3.dist-info/RECORD,,
10
+ rupython-1.2.5.dist-info/LICENSE,sha256=iWzdt1wyTlK8qNSu7TzK8pjjIcCvLvWHycp7ACRcWEc,59
11
+ rupython-1.2.5.dist-info/METADATA,sha256=Qci9TgF0CPYyDpfZ7qH1QvV1p4DyhjqygRS1p4SblVU,29768
12
+ rupython-1.2.5.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
13
+ rupython-1.2.5.dist-info/top_level.txt,sha256=GtXaS8JTsBm5hpQxxtQlrxK6rExvSAK_Cp44FrY4210,9
14
+ rupython-1.2.5.dist-info/RECORD,,