rupython 1.2.10__tar.gz → 1.2.12__tar.gz
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-1.2.12/LICENSE +27 -0
- {rupython-1.2.10 → rupython-1.2.12}/PKG-INFO +2 -2
- {rupython-1.2.10 → rupython-1.2.12}/README.md +1 -1
- {rupython-1.2.10 → rupython-1.2.12}/rupython/__/320/236/320/261/321/211/320/270/320/265_/321/204/321/203/320/275/320/272/321/206/320/270/320/270__.py +9 -0
- rupython-1.2.12/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/220/321/201/320/270/320/275/321/205/321/200.py +206 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/221/320/224.py +45 -23
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/224/320/260/321/202/320/260/320/222/321/200/320/265/320/274/321/217.py +18 -5
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/232/320/276/320/273/320/273/320/265/320/272/321/206/320/270/320/270.py +279 -146
- rupython-1.2.12/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/232/321/203/321/207/320/260.py +87 -0
- rupython-1.2.12/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/236/321/207/320/265/321/200/320/265/320/264/321/214.py +177 -0
- rupython-1.2.12/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/237/320/276/321/202/320/276/320/272/320/270.py +273 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/240/320/265/320/263/320/222/321/213/321/200.py +9 -9
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/237/321/200/320/265/320/276/320/261/321/200/320/260/320/267/320/276/320/262/320/260/321/202/320/265/320/273/321/214.py +3 -3
- {rupython-1.2.10 → rupython-1.2.12}/rupython.egg-info/PKG-INFO +2 -2
- {rupython-1.2.10 → rupython-1.2.12}/rupython.egg-info/SOURCES.txt +4 -0
- {rupython-1.2.10 → rupython-1.2.12}/setup.py +1 -1
- rupython-1.2.10/LICENSE +0 -1
- {rupython-1.2.10 → rupython-1.2.12}/rupython/__main__.py +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython/__/320/227/320/260/320/263/320/276/320/273/320/276/320/262/320/276/321/207/320/275/321/213/320/271_/320/272/320/276/320/264__.py" +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/234/320/260/321/202/320/265/320/274.py" +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/241/320/273/321/203/321/207.py" +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython.egg-info/dependency_links.txt +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/rupython.egg-info/top_level.txt +0 -0
- {rupython-1.2.10 → rupython-1.2.12}/setup.cfg +0 -0
rupython-1.2.12/LICENSE
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
Настоящая лицензия основана на ценностях и правовых принципах русской культурной традиции и предназначена для обеспечения распространения данного продукта — программного обеспечения, произведения или иного объекта интеллектуальной деятельности (далее — «Продукт») — на условиях свободного использования в рамках этой традиции.
|
2
|
+
|
3
|
+
Настоящей лицензией заявляется, что Продукт создан представителями Русской нации в рамках расширения её культурного и духовного наследия и предназначен для использования теми, кто разделяет идентичность и ценности Русской нации — исторического и духовного единства великорусской, малорусской и белорусской народностей. Авторы Продукта добровольно передают Продукт в общественное достояние Русской нации, в рамках которого он остаётся свободным для использования всеми представителями Русской нации и людьми, разделяющими ценности и идеалы Русской нации, без ограничений.
|
4
|
+
|
5
|
+
Настоящий Продукт распространяется на условиях свободного использования: любой пользователь (далее — «Пользователь»), принадлежа к Русской нации или разделяя её ценности и идеалы, вправе использовать Продукт любым способом, включая, но не ограничиваясь: копированием; распространением; модификацией; созданием производных работ; использованием в личных, коммерческих или иных целях. Для использования Продукта не требуется никаких разрешений или уведомлений; пользователь вправе создавать производные работы на основе Продукта без ограничений.
|
6
|
+
|
7
|
+
Настоящая лицензия не накладывает юридических ограничений на использование Продукта, за исключением соблюдения применимого законодательства в юрисдикции Пользователя. Продукт предоставляется «как есть», без каких-либо гарантий, явных или подразумеваемых, включая, но не ограничиваясь, гарантиями пригодности для конкретной цели, коммерческой ценности или отсутствия дефектов. Ни при каких обстоятельствах авторы не несут ответственность за любой ущерб, прямой или косвенный, возникший в результате использования или невозможности использования Продукта. Пользователь несёт полную ответственность за использование Продукта, включая соблюдение применимых законов, уважение прав третьих лиц, а также прав и интересов Русской нации.
|
8
|
+
|
9
|
+
=======
|
10
|
+
|
11
|
+
Ця ліцензія заснована на цінностях і правових засадах руської культурної традиції й призначена для забезпечення поширення цього продукту — програмного забезпечення, твору чи іншого об’єкта інтелектуальної діяльності (далі — «Продукт») — на умовах вільного користування в межах зазначеної традиції.
|
12
|
+
|
13
|
+
Цією ліцензією стверджується, що Продукт створений представниками Руської нації в межах розбудови її духовної та культурної спадщини, і призначений для користування тими, хто поділяє ідентичність та цінності Руської нації — історичну й духовну єдність великоруської, малоруської та білоруської народностей. Автори Продукту добровільно передають його у громадське надбання Руської нації, в межах якого він залишається вільним для користування усіма представниками Руської нації та особами, що поділяють її цінності та ідеали, без будь-яких обмежень.
|
14
|
+
|
15
|
+
Цей Продукт поширюється на засадах вільного користування: кожен користувач (далі — «Користувач»), який належить до Руської нації або поділяє її цінності та ідеали, має право використовувати Продукт у будь-який спосіб, включно з, але не обмежуючись: копіюванням, поширенням, модифікацією, створенням похідних творів, використанням у приватних, комерційних або інших цілях. Для користування Продуктом не вимагається жодних дозволів чи повідомлень; Користувач має право створювати похідні твори на основі Продукту без обмежень.
|
16
|
+
|
17
|
+
Ця ліцензія не накладає правових обмежень на використання Продукту, окрім дотримання чинного законодавства у відповідній юрисдикції. Продукт надається «як є», без жодних гарантій, явних або неявних, включаючи, але не обмежуючись, гарантіями придатності для певної мети, товарної цінності чи відсутності вад. За жодних обставин автори не несуть відповідальності за будь-які збитки, прямі чи опосередковані, що виникли внаслідок використання або неможливості використання Продукту. Користувач несе повну відповідальність за використання Продукту, включаючи дотримання чинного законодавства, повагу до прав третіх осіб, а також прав і інтересів Руської нації.
|
18
|
+
|
19
|
+
=======
|
20
|
+
|
21
|
+
Сапраўдная ліцэнзія грунтуецца на каштоўнасцях і прававых прынцыпах рускай культурнай традыцыі і прызначана для забеспячэння распаўсюджвання гэтага прадукта — праграмнага забеспячэння, твора ці іншага аб'екта інтэлектуальнай дзейнасці (далей — «Прадукт») — на ўмовах свабоднага выкарыстання ў рамках гэтай традыцыі.
|
22
|
+
|
23
|
+
Гэтай ліцэнзіяй заяўляецца, што Прадукт створаны прадстаўнікамі Рускай нацыі ў рамках пашырэння яе культурнай і духоўнай спадчыны і прызначаны для выкарыстання тымі, хто падзяляе ідэнтычнасць і каштоўнасці Рускай нацыі — гістарычнага і духоўнага адзінства вялікарускай, маларускай і беларускай народнасцей. Аўтары Прадукта добраахвотна перадаюць Прадукт у грамадскае надбанне Рускай нацыі, у рамках якога ён застаецца свабодным для выкарыстання ўсімі прадстаўнікамі Рускай нацыі і людзьмі, якія падзяляюць каштоўнасці і ідэалы Рускай нацыі, без абмежаванняў.
|
24
|
+
|
25
|
+
Гэты Прадукт распаўсюджваецца на ўмовах свабоднага выкарыстання: любы карыстальнік (далей — «Карыстальнік»), які належыць да Рускай нацыі або падзяляе яе каштоўнасці і ідэалы, мае права выкарыстоўваць Прадукт любым спосабам, уключаючы, але не абмяжоўваючыся: капіраваннем; распаўсюджваннем; мадыфікацыяй; стварэннем вытворных прац; выкарыстаннем у асабістых, камерцыйных ці іншых мэтах. Для выкарыстання Прадукта не патрабуецца ніякіх дазволаў або паведамленняў; карыстальнік мае права ствараць вытворныя працы на аснове Прадукта без абмежаванняў.
|
26
|
+
|
27
|
+
Гэтая ліцэнзія не накладвае юрыдычных абмежаванняў на выкарыстанне Прадукта, за выключэннем выканання прыдатнага заканадаўства ў юрысдыкцыі Карыстальніка. Прадукт прадастаўляецца «як ёсць», без якіх-небудзь гарантый, яўных або невыяўленых, уключаючы, але не абмяжоўваючыся, гарантыямі яго прыдатнасці для пэўнай мэты, камерцыйнай каштоўнасці або адсутнасці дэфектаў. Ні пры якіх абставінах аўтары не нясуць адказнасці за любы ўрон, прамы ці ўскосны, які ўзнік у выніку выкарыстання або немагчымасці выкарыстання Прадукта. Карыстальнік нясе поўную адказнасць за выкарыстанне Прадукта, уключаючы выкананне прыдатных законаў, павагу правоў трэціх асоб, а таксама правоў і інтарэсаў Рускай нацыі.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rupython
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.12
|
4
4
|
Summary: Исполнитель кода Русского Питона
|
5
5
|
Description-Content-Type: text/markdown
|
6
6
|
License-File: LICENSE
|
@@ -240,7 +240,7 @@ x = 0
|
|
240
240
|
|
241
241
|
##### Контекстный менеджер
|
242
242
|
```
|
243
|
-
|
243
|
+
Используя Открыть('Файл.дан', 'r') как файл:
|
244
244
|
Пока стр := файл.Читать_строку():
|
245
245
|
Вывести(стр.Удалить_по_бокам())
|
246
246
|
```
|
@@ -20,3 +20,12 @@ def Ожидать_нажатие_клавиши(сообщение):
|
|
20
20
|
старые_настройки = termios.tcgetattr(fd)
|
21
21
|
try: tty.setraw(fd); Система.stdin.read(1)
|
22
22
|
finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
|
23
|
+
|
24
|
+
def Склонение_после_числительного(число, слова):
|
25
|
+
return str(число) + ' ' + (
|
26
|
+
слова[2] if число % 100 >= 5 and число % 100 <= 20 else (
|
27
|
+
слова[0] if число % 10 == 1 else (
|
28
|
+
слова[1] if число % 10 >= 2 and число % 10 <= 4 else слова[2]
|
29
|
+
)
|
30
|
+
)
|
31
|
+
)
|
@@ -0,0 +1,206 @@
|
|
1
|
+
import queue
|
2
|
+
from rupython import __Общие_функции__
|
3
|
+
|
4
|
+
Очередь_пуста = queue.Empty
|
5
|
+
Очередь_полна = queue.Full
|
6
|
+
|
7
|
+
Словарь_параметров = {
|
8
|
+
'максимальный_размер': 'maxsize',
|
9
|
+
'элемент': 'item',
|
10
|
+
'блоковать': 'block',
|
11
|
+
'таймаут': 'timeout',
|
12
|
+
'приоритет': 'priority'
|
13
|
+
}
|
14
|
+
|
15
|
+
Словарь_склонений = {
|
16
|
+
'элемент': ['элемент', 'элемента', 'элементов'],
|
17
|
+
'задача': ['задача', 'задачи', 'задач']
|
18
|
+
}
|
19
|
+
|
20
|
+
class Очередь:
|
21
|
+
def __init__(здесь, максимальный_размер = 0):
|
22
|
+
ИА = {'maxsize': максимальный_размер}
|
23
|
+
здесь._queue = queue.Queue(**ИА)
|
24
|
+
|
25
|
+
def Добавить(здесь, элемент, блоковать = True, таймаут = None):
|
26
|
+
ИА = {'item': элемент, 'block': блоковать}
|
27
|
+
if таймаут is not None:
|
28
|
+
ИА['timeout'] = таймаут
|
29
|
+
здесь._queue.put(**ИА)
|
30
|
+
|
31
|
+
def Добавить_без_блокования(здесь, элемент):
|
32
|
+
здесь._queue.put_nowait(элемент)
|
33
|
+
|
34
|
+
def Получить(здесь, блоковать = True, таймаут = None):
|
35
|
+
ИА = {'block': блоковать}
|
36
|
+
if таймаут is not None:
|
37
|
+
ИА['timeout'] = таймаут
|
38
|
+
return здесь._queue.get(**ИА)
|
39
|
+
|
40
|
+
def Получить_без_блокования(здесь):
|
41
|
+
return здесь._queue.get_nowait()
|
42
|
+
|
43
|
+
def Задача_выполнена(здесь):
|
44
|
+
здесь._queue.task_done()
|
45
|
+
|
46
|
+
def Ждать_завершения(здесь):
|
47
|
+
здесь._queue.join()
|
48
|
+
|
49
|
+
def Пустая(здесь):
|
50
|
+
return здесь._queue.empty()
|
51
|
+
|
52
|
+
def Полная(здесь):
|
53
|
+
return здесь._queue.full()
|
54
|
+
|
55
|
+
def Размер(здесь):
|
56
|
+
return здесь._queue.qsize()
|
57
|
+
|
58
|
+
def __len__(здесь):
|
59
|
+
return здесь._queue.qsize()
|
60
|
+
|
61
|
+
def __str__(здесь):
|
62
|
+
размер = здесь.Размер()
|
63
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
64
|
+
|
65
|
+
def В_строку_с_задачами(здесь):
|
66
|
+
размер = здесь.Размер()
|
67
|
+
return f"Очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
68
|
+
|
69
|
+
class Стековая_очередь:
|
70
|
+
def __init__(здесь, максимальный_размер = 0):
|
71
|
+
ИА = {'maxsize': максимальный_размер}
|
72
|
+
здесь._queue = queue.LifoQueue(**ИА)
|
73
|
+
|
74
|
+
def Добавить(здесь, элемент, блоковать = True, таймаут = None):
|
75
|
+
ИА = {'item': элемент, 'block': блоковать}
|
76
|
+
if таймаут is not None:
|
77
|
+
ИА['timeout'] = таймаут
|
78
|
+
здесь._queue.put(**ИА)
|
79
|
+
|
80
|
+
def Добавить_без_блокования(здесь, элемент):
|
81
|
+
здесь._queue.put_nowait(элемент)
|
82
|
+
|
83
|
+
def Получить(здесь, блоковать = True, таймаут = None):
|
84
|
+
ИА = {'block': блоковать}
|
85
|
+
if таймаут is not None:
|
86
|
+
ИА['timeout'] = таймаут
|
87
|
+
return здесь._queue.get(**ИА)
|
88
|
+
|
89
|
+
def Получить_без_блокования(здесь):
|
90
|
+
return здесь._queue.get_nowait()
|
91
|
+
|
92
|
+
def Задача_выполнена(здесь):
|
93
|
+
здесь._queue.task_done()
|
94
|
+
|
95
|
+
def Ждать_завершения(здесь):
|
96
|
+
здесь._queue.join()
|
97
|
+
|
98
|
+
def Пустая(здесь):
|
99
|
+
return здесь._queue.empty()
|
100
|
+
|
101
|
+
def Полная(здесь):
|
102
|
+
return здесь._queue.full()
|
103
|
+
|
104
|
+
def Размер(здесь):
|
105
|
+
return здесь._queue.qsize()
|
106
|
+
|
107
|
+
def __len__(здесь):
|
108
|
+
return здесь._queue.qsize()
|
109
|
+
|
110
|
+
def __str__(здесь):
|
111
|
+
размер = здесь.Размер()
|
112
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
113
|
+
|
114
|
+
def В_строку_с_задачами(здесь):
|
115
|
+
размер = здесь.Размер()
|
116
|
+
return f"Стековая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
117
|
+
|
118
|
+
class Приоритетная_очередь:
|
119
|
+
def __init__(здесь, максимальный_размер = 0):
|
120
|
+
ИА = {'maxsize': максимальный_размер}
|
121
|
+
здесь._queue = queue.PriorityQueue(**ИА)
|
122
|
+
|
123
|
+
def Добавить(здесь, элемент, приоритет, блоковать = True, таймаут = None):
|
124
|
+
ИА = {'item': (приоритет, элемент), 'block': блоковать}
|
125
|
+
if таймаут is not None:
|
126
|
+
ИА['timeout'] = таймаут
|
127
|
+
здесь._queue.put(**ИА)
|
128
|
+
|
129
|
+
def Добавить_без_блокования(здесь, элемент, приоритет):
|
130
|
+
здесь._queue.put_nowait((приоритет, элемент))
|
131
|
+
|
132
|
+
def Получить(здесь, блоковать = True, таймаут = None):
|
133
|
+
ИА = {'block': блоковать}
|
134
|
+
if таймаут is not None:
|
135
|
+
ИА['timeout'] = таймаут
|
136
|
+
приоритет, элемент = здесь._queue.get(**ИА)
|
137
|
+
return элемент
|
138
|
+
|
139
|
+
def Получить_с_приоритетом(здесь, блоковать = True, таймаут = None):
|
140
|
+
ИА = {'block': блоковать}
|
141
|
+
if таймаут is not None:
|
142
|
+
ИА['timeout'] = таймаут
|
143
|
+
return здесь._queue.get(**ИА)
|
144
|
+
|
145
|
+
def Получить_без_блокования(здесь):
|
146
|
+
приоритет, элемент = здесь._queue.get_nowait()
|
147
|
+
return элемент
|
148
|
+
|
149
|
+
def Получить_без_блокования_с_приоритетом(здесь):
|
150
|
+
return здесь._queue.get_nowait()
|
151
|
+
|
152
|
+
def Задача_выполнена(здесь):
|
153
|
+
здесь._queue.task_done()
|
154
|
+
|
155
|
+
def Ждать_завершения(здесь):
|
156
|
+
здесь._queue.join()
|
157
|
+
|
158
|
+
def Пустая(здесь):
|
159
|
+
return здесь._queue.empty()
|
160
|
+
|
161
|
+
def Полная(здесь):
|
162
|
+
return здесь._queue.full()
|
163
|
+
|
164
|
+
def Размер(здесь):
|
165
|
+
return здесь._queue.qsize()
|
166
|
+
|
167
|
+
def __len__(здесь):
|
168
|
+
return здесь._queue.qsize()
|
169
|
+
|
170
|
+
def __str__(здесь):
|
171
|
+
размер = здесь.Размер()
|
172
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
173
|
+
|
174
|
+
def В_строку_с_задачами(здесь):
|
175
|
+
размер = здесь.Размер()
|
176
|
+
return f"Приоритетная_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
177
|
+
|
178
|
+
class Простая_очередь:
|
179
|
+
def __init__(здесь):
|
180
|
+
здесь._queue = queue.SimpleQueue()
|
181
|
+
|
182
|
+
def Добавить(здесь, элемент):
|
183
|
+
здесь._queue.put(элемент)
|
184
|
+
|
185
|
+
def Получить(здесь):
|
186
|
+
return здесь._queue.get()
|
187
|
+
|
188
|
+
def Получить_без_блокования(здесь):
|
189
|
+
return здесь._queue.get_nowait()
|
190
|
+
|
191
|
+
def Пустая(здесь):
|
192
|
+
здесь._queue.empty()
|
193
|
+
|
194
|
+
def Размер(здесь):
|
195
|
+
return здесь._queue.qsize()
|
196
|
+
|
197
|
+
def __len__(здесь):
|
198
|
+
return здесь._queue.qsize()
|
199
|
+
|
200
|
+
def __str__(здесь):
|
201
|
+
размер = здесь.Размер()
|
202
|
+
return f"Простая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['элемент'])}"
|
203
|
+
|
204
|
+
def В_строку_с_задачами(здесь):
|
205
|
+
размер = здесь.Размер()
|
206
|
+
return f"Простая_очередь с {__Общие_функции__.Склонение_после_числительного(размер, Словарь_склонений['задача'])}"
|
@@ -47,7 +47,11 @@ import re as РегВыр
|
|
47
47
|
'ПО': 'ON',
|
48
48
|
'ПЕРЕКРЁСТНО': 'CROSS',
|
49
49
|
'ИСПОЛЬЗУЯ': 'USING',
|
50
|
-
'ВСТАВИТЬ ИЛИ
|
50
|
+
'ВСТАВИТЬ ИЛИ ПРЕРВАТЬ В': 'INSERT OR ABORT INTO',
|
51
|
+
'ВСТАВИТЬ ИЛИ СБОЙ В': 'INSERT OR FAIL INTO',
|
52
|
+
'ВСТАВИТЬ ИЛИ ПРОПУСТИТЬ В': 'INSERT OR IGNORE INTO',
|
53
|
+
'ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ В': 'INSERT OR REPLACE INTO',
|
54
|
+
'ВСТАВИТЬ ИЛИ ОТКАТИТЬ В': 'INSERT OR ROLLBACK INTO',
|
51
55
|
'ДОБАВИТЬ В': 'INSERT INTO',
|
52
56
|
'ЗНАЧЕНИЯ': 'VALUES',
|
53
57
|
'ИЗМЕНИТЬ': 'UPDATE',
|
@@ -121,7 +125,38 @@ import re as РегВыр
|
|
121
125
|
'ПО_УМОЛЧАНИЮ': 'DEFAULT',
|
122
126
|
'САМОУВЕЛИЧИВАЮЩЕЕСЯ': 'AUTOINCREMENT',
|
123
127
|
'ССЫЛАЕТСЯ НА': 'REFERENCES',
|
128
|
+
'БЕЗ ИСКЛЮЧЕНИЙ': 'EXCLUDE NO OTHERS',
|
129
|
+
'ИСКЛЮЧАЯ ТЕКУЩУЮ СТРОКУ': 'EXCLUDE CURRENT ROW',
|
130
|
+
'ИСКЛЮЧАЯ ГРУППУ': 'EXCLUDE GROUP',
|
131
|
+
'ИСКЛЮЧАЯ РАВНЫЕ': 'EXCLUDE TIES',
|
132
|
+
'РАЗДЕЛИВ ПО': 'PARTITION BY',
|
124
133
|
'ОТОБРАВ': 'FILTER',
|
134
|
+
'ПРИВЕСТИ': 'CAST',
|
135
|
+
'НАД': 'OVER',
|
136
|
+
'ГРУППЫ': 'GROUPS',
|
137
|
+
'ДИАПАЗОН': 'RANGE',
|
138
|
+
'СТРОКИ': 'ROWS',
|
139
|
+
'ПЕРВОЕ_НЕПУСТОЕ': 'COALESCE',
|
140
|
+
'ТЕКУЩЕЙ СТРОКОЙ': 'CURRENT ROW',
|
141
|
+
'НЕОГРАНИЧЕННО': 'UNBOUNDED',
|
142
|
+
'ВПЕРЁД': 'FOLLOWING',
|
143
|
+
'НАЗАД': 'PRECEDING',
|
144
|
+
'НОМЕР_СТРОКИ': 'ROW_NUMBER',
|
145
|
+
'РАНГ': 'RANK',
|
146
|
+
'СЖАТЫЙ_РАНГ': 'DENSE_RANK',
|
147
|
+
'РАЗДЕЛИТЬ_НА_ЧАСТИ': 'NTILE',
|
148
|
+
'ПРЕДЫДУЩЕЕ': 'LAG',
|
149
|
+
'СЛЕДУЮЩЕЕ': 'LEAD',
|
150
|
+
'SIN': 'SIN',
|
151
|
+
'COS': 'COS',
|
152
|
+
'TG': 'TAN',
|
153
|
+
'ARCSIN': 'ASIN',
|
154
|
+
'ARCCOS': 'ACOS',
|
155
|
+
'ARCTG': 'ATAN',
|
156
|
+
'LN': 'LOG',
|
157
|
+
'EXP': 'EXP',
|
158
|
+
'СТЕПЕНЬ': 'POWER',
|
159
|
+
'КВАДРАТНЫЙ_КОРЕНЬ': 'SQRT',
|
125
160
|
'КОЛИЧЕСТВО': 'COUNT',
|
126
161
|
'СУММА': 'SUM',
|
127
162
|
'СРЕДНЕЕ': 'AVG',
|
@@ -156,14 +191,16 @@ import re as РегВыр
|
|
156
191
|
'ОБРЕЗАТЬ_СЛЕВА': 'LTRIM',
|
157
192
|
'ОБРЕЗАТЬ_СПРАВА': 'RTRIM',
|
158
193
|
'ОБЩЕЕ': 'TOTAL',
|
194
|
+
'ГРУППОВОЕ_СЦЕПЛЕНИЕ': 'GROUP_CONCAT',
|
159
195
|
'СТАНДАРТНОЕ_ОТКЛОНЕНИЕ': 'STDDEV',
|
160
196
|
'ДИСПЕРСИЯ': 'VARIANCE',
|
161
|
-
'
|
197
|
+
'ПЕРВОЕ_ЗНАЧЕНИЕ': 'FIRST_VALUE',
|
198
|
+
'ПОСЛЕДНЕЕ_ЗНАЧЕНИЕ': 'LAST_VALUE',
|
162
199
|
'МАКСИМАЛЬНАЯ_ДЛИНА': 'MAXLEN',
|
163
200
|
'МИНИМАЛЬНАЯ_ДЛИНА': 'MINLEN',
|
164
201
|
'СЖАТЬ': 'COMPRESS',
|
165
202
|
'РАСЖАТЬ': 'UNCOMPRESS',
|
166
|
-
'
|
203
|
+
'В_ШЕСТН_ТЕКСТ': 'HEX',
|
167
204
|
'ЗАКОДОВАТЬ_64': 'BASE64',
|
168
205
|
'РАСКОДОВАТЬ_64': 'UNBASE64',
|
169
206
|
'ВКЛЮЧЕНО': 'ON',
|
@@ -287,7 +324,7 @@ def Получить_токены(запрос):
|
|
287
324
|
def Перевести_токены(токены):
|
288
325
|
переведённые_токены = []
|
289
326
|
i = 0
|
290
|
-
|
327
|
+
|
291
328
|
while i < len(токены):
|
292
329
|
токен = токены[i]
|
293
330
|
|
@@ -301,30 +338,15 @@ def Перевести_токены(токены):
|
|
301
338
|
найдено_ключевое_слово = False
|
302
339
|
for длина in range(5, 0, -1):
|
303
340
|
if i + длина <= len(токены):
|
304
|
-
фраза = ' '.join(токены[i:i + длина])
|
305
|
-
|
306
|
-
for ключ, значение in Словарь_перевода.items():
|
307
|
-
if '___' in ключ:
|
308
|
-
шаблон = '^' + ключ.replace('___', r'(\S+)') + '$'
|
309
|
-
совпадение = РегВыр.match(шаблон, фраза)
|
310
|
-
if совпадение:
|
311
|
-
переменная = совпадение.group(1).upper()
|
312
|
-
if переменная in Словарь_перевода:
|
313
|
-
переведённая_переменная = Словарь_перевода[переменная]
|
314
|
-
переведённая_фраза = значение.replace('___', переведённая_переменная)
|
315
|
-
переведённые_токены.append(переведённая_фраза)
|
316
|
-
i += длина
|
317
|
-
найдено_ключевое_слово = True
|
318
|
-
break
|
319
|
-
|
320
|
-
if найдено_ключевое_слово:
|
321
|
-
break
|
322
|
-
|
341
|
+
фраза = ' '.join(токены[i:i + длина])
|
323
342
|
if фраза in Словарь_перевода:
|
324
343
|
переведённые_токены.append(Словарь_перевода[фраза])
|
325
344
|
i += длина
|
326
345
|
найдено_ключевое_слово = True
|
327
346
|
break
|
347
|
+
if not найдено_ключевое_слово:
|
348
|
+
переведённые_токены.append(токен)
|
349
|
+
i += 1
|
328
350
|
|
329
351
|
return переведённые_токены
|
330
352
|
|
@@ -68,11 +68,11 @@ class Дата_и_время:
|
|
68
68
|
здесь._дата_время = datetime.datetime(*ПА, **ИА)
|
69
69
|
|
70
70
|
@staticmethod
|
71
|
-
def Сейчас(часовой_
|
71
|
+
def Сейчас(часовой_пояс = None):
|
72
72
|
return Дата_и_время(datetime.datetime.now(часовой_пояс))
|
73
73
|
|
74
74
|
@staticmethod
|
75
|
-
def Из_метки_времени(метка_времени, часовой_
|
75
|
+
def Из_метки_времени(метка_времени, часовой_пояс = None):
|
76
76
|
return Дата_и_время(datetime.datetime.fromtimestamp(метка_времени, часовой_пояс))
|
77
77
|
|
78
78
|
@staticmethod
|
@@ -88,11 +88,11 @@ class Дата_и_время:
|
|
88
88
|
формат = Перевести_формат(формат)
|
89
89
|
return здесь._дата_время.strftime(формат)
|
90
90
|
|
91
|
-
def __str__(
|
91
|
+
def __str__(здесь):
|
92
92
|
формат = Перевести_формат(Формат_даты_и_времени)
|
93
93
|
return здесь._дата_время.strftime(формат)
|
94
94
|
|
95
|
-
def Словами(здесь,
|
95
|
+
def Словами(здесь, формат = 'полный'):
|
96
96
|
день_недели = здесь.Номер_дня_недели()
|
97
97
|
if формат == 'полный':
|
98
98
|
return f"{Дни_недели_полные[день_недели]}, {здесь.День} {Месяцы_родительный[здесь.Месяц]} {здесь.Год} года, {здесь.Часов:02d}:{здесь.Минут:02d}"
|
@@ -162,6 +162,9 @@ class Дата_и_время:
|
|
162
162
|
return здесь._дата_время >= другой._дата_время
|
163
163
|
return NotImplemented
|
164
164
|
|
165
|
+
def __format__(здесь, формат):
|
166
|
+
return здесь.В_формат(формат)
|
167
|
+
|
165
168
|
@property
|
166
169
|
def Год(здесь):
|
167
170
|
return здесь._дата_время.year
|
@@ -220,7 +223,7 @@ class Дата:
|
|
220
223
|
return здесь._дата.strftime(формат)
|
221
224
|
|
222
225
|
def Из_строки(строка):
|
223
|
-
return
|
226
|
+
return Дата(Дата_и_время.Разобрать(строка, Формат_времени)._дата_время.time())
|
224
227
|
|
225
228
|
def День_недели(здесь):
|
226
229
|
return здесь._дата.isoweekday()
|
@@ -271,6 +274,9 @@ class Дата:
|
|
271
274
|
return здесь._дата >= другой._дата
|
272
275
|
return NotImplemented
|
273
276
|
|
277
|
+
def __format__(здесь, формат):
|
278
|
+
return здесь.В_формат(формат)
|
279
|
+
|
274
280
|
@property
|
275
281
|
def год(здесь): return здесь._дата.year
|
276
282
|
|
@@ -287,6 +293,10 @@ class Время:
|
|
287
293
|
)
|
288
294
|
здесь._время = datetime.time(*ПА, **ИА)
|
289
295
|
|
296
|
+
@staticmethod
|
297
|
+
def Сейчас(часовой_пояс=None):
|
298
|
+
return Время(datetime.datetime.now(часовой_пояс).time())
|
299
|
+
|
290
300
|
def В_формат(здесь, формат):
|
291
301
|
формат = Перевести_формат(формат)
|
292
302
|
return здесь._время.strftime(формат)
|
@@ -351,6 +361,9 @@ class Время:
|
|
351
361
|
return здесь._время >= другой._время
|
352
362
|
return NotImplemented
|
353
363
|
|
364
|
+
def __format__(здесь, формат):
|
365
|
+
return здесь.В_формат(формат)
|
366
|
+
|
354
367
|
@property
|
355
368
|
def Часов(здесь):
|
356
369
|
return здесь._время.hour
|