rupython 1.2.2__tar.gz → 1.2.4__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.2 → rupython-1.2.4}/PKG-INFO +1 -1
- {rupython-1.2.2 → rupython-1.2.4}/rupython/__main__.py +4 -15
- rupython-1.2.4/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 +21 -0
- rupython-1.2.4/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 +553 -0
- {rupython-1.2.2 → rupython-1.2.4}/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 +11 -10
- {rupython-1.2.2 → rupython-1.2.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/241/320/273/321/203/321/207.py +4 -3
- {rupython-1.2.2 → rupython-1.2.4}/rupython.egg-info/PKG-INFO +1 -1
- {rupython-1.2.2 → rupython-1.2.4}/rupython.egg-info/SOURCES.txt +2 -0
- {rupython-1.2.2 → rupython-1.2.4}/setup.py +1 -1
- {rupython-1.2.2 → rupython-1.2.4}/LICENSE +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/README.md +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/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.2 → rupython-1.2.4}/rupython//320/234/320/276/320/264/321/203/320/273/320/270//320/221/320/224.py" +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/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.2 → rupython-1.2.4}/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" +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/rupython.egg-info/dependency_links.txt +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/rupython.egg-info/top_level.txt +0 -0
- {rupython-1.2.2 → rupython-1.2.4}/setup.cfg +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
from . import Преобразователь
|
2
|
+
from . import __Общие_функции__
|
2
3
|
import os as ОС
|
3
4
|
import sys as Система
|
4
5
|
|
@@ -13,18 +14,6 @@ def Перехватчик_прерывания_клавиатурой(тип_и
|
|
13
14
|
Исходник = Преобразователь.Преобразовать_код(Путь_к_файлу)
|
14
15
|
if Исходник: Преобразователь.Запустить_код(Название_файла, Исходник, Путь_к_файлу)
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
print('\n' + сообщение)
|
20
|
-
msvcrt.getch()
|
21
|
-
else:
|
22
|
-
import tty
|
23
|
-
import termios
|
24
|
-
print('\n' + сообщение)
|
25
|
-
fd = Система.stdin.fileno()
|
26
|
-
старые_настройки = termios.tcgetattr(fd)
|
27
|
-
try: tty.setraw(fd); Система.stdin.read(1)
|
28
|
-
finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
|
29
|
-
|
30
|
-
Ожидать_нажатие_клавиши('=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ===')
|
17
|
+
__Общие_функции__.Ожидать_нажатие_клавиши(
|
18
|
+
'=== Исполнение кода завершено. Нажмите любую клавишу для выхода. ==='
|
19
|
+
)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import os as ОС
|
2
|
+
|
3
|
+
def Заменить_ключи_в_словаре(словарь, замены):
|
4
|
+
новый = {}
|
5
|
+
for н, з in словарь.items():
|
6
|
+
новый.setdefault(замены[н] if н in замены.keys() else н, з)
|
7
|
+
return новый
|
8
|
+
|
9
|
+
def Ожидать_нажатие_клавиши(сообщение):
|
10
|
+
if ОС.name == 'nt':
|
11
|
+
import msvcrt
|
12
|
+
print('\n' + сообщение)
|
13
|
+
msvcrt.getch()
|
14
|
+
else:
|
15
|
+
import tty
|
16
|
+
import termios
|
17
|
+
print('\n' + сообщение)
|
18
|
+
fd = Система.stdin.fileno()
|
19
|
+
старые_настройки = termios.tcgetattr(fd)
|
20
|
+
try: tty.setraw(fd); Система.stdin.read(1)
|
21
|
+
finally: termios.tcsetattr(fd, termios.TCSADRAIN, старые_настройки)
|
@@ -0,0 +1,553 @@
|
|
1
|
+
import datetime
|
2
|
+
from rupython import __Общие_функции__
|
3
|
+
|
4
|
+
Часовой_пояс = datetime.timezone
|
5
|
+
Временная_метка = datetime.datetime
|
6
|
+
|
7
|
+
Формат_даты = '%Д.%М.%Г'
|
8
|
+
Формат_времени = '%ч:%м:%с'
|
9
|
+
Формат_даты_и_времени = '%Д.%М.%Г %ч:%м:%с'
|
10
|
+
|
11
|
+
Словарь_спецификаторов = {
|
12
|
+
'%Г': '%Y', # год (4 цифры, например 1945)
|
13
|
+
'%М': '%m', # месяц (2 цифры, 01–12)
|
14
|
+
'%Д': '%d', # день (2 цифры, 01–31)
|
15
|
+
'%ч': '%H', # часы (2 цифры, 00–23)
|
16
|
+
'%м': '%M', # минуты (2 цифры, 00–59)
|
17
|
+
'%с': '%S', # секунды (2 цифры, 00–59)
|
18
|
+
'%д': '%f' # дробная часть секунды (в микросекундах) (6 цифр, 000000–999999)
|
19
|
+
}
|
20
|
+
|
21
|
+
Словарь_параметров = {
|
22
|
+
'год': 'year', 'месяц': 'month', 'день': 'day',
|
23
|
+
'часов': 'hour', 'минут': 'minute', 'секунд': 'second',
|
24
|
+
'микросекунд': 'microsecond', 'часовой_пояс': 'tzinfo',
|
25
|
+
'добавка_летнего_времени': 'fold'
|
26
|
+
}
|
27
|
+
|
28
|
+
Словарь_параметров_интервала = {
|
29
|
+
'дней': 'days', 'секунд': 'seconds',
|
30
|
+
'микросекунд': 'microseconds', 'миллисекунд': 'milliseconds',
|
31
|
+
'минут': 'minutes', 'часов': 'hours', 'недель': 'weeks'
|
32
|
+
}
|
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
|
+
|
56
|
+
def Перевести_формат(формат):
|
57
|
+
for русский, питоновский in Словарь_спецификаторов.items():
|
58
|
+
формат = формат.replace(русский, питоновский)
|
59
|
+
return формат
|
60
|
+
|
61
|
+
class Дата_и_время:
|
62
|
+
def __init__(здесь, *ПА, **ИА):
|
63
|
+
if len(ПА) > 0 and type(ПА[0]) == datetime.datetime: здесь._дата_время = ПА[0]
|
64
|
+
else:
|
65
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(
|
66
|
+
ИА, Словарь_параметров
|
67
|
+
)
|
68
|
+
здесь._дата_время = datetime.datetime(*ПА, **ИА)
|
69
|
+
|
70
|
+
@staticmethod
|
71
|
+
def Сейчас(часовой_пояс=None):
|
72
|
+
return Дата_и_время(datetime.datetime.now(часовой_пояс))
|
73
|
+
|
74
|
+
@staticmethod
|
75
|
+
def Из_метки_времени(метка_времени, часовой_пояс=None):
|
76
|
+
return Дата_и_время(datetime.datetime.fromtimestamp(метка_времени, часовой_пояс))
|
77
|
+
|
78
|
+
@staticmethod
|
79
|
+
def Из_строки(строка):
|
80
|
+
return Дата_и_время.Разобрать(строка, Формат_даты_и_времени)
|
81
|
+
|
82
|
+
@staticmethod
|
83
|
+
def Разобрать(строка, формат):
|
84
|
+
формат = Перевести_формат(формат)
|
85
|
+
return Дата_и_время(datetime.datetime.strptime(строка, формат))
|
86
|
+
|
87
|
+
def В_формат(здесь, формат):
|
88
|
+
формат = Перевести_формат(формат)
|
89
|
+
return здесь._дата_время.strftime(формат)
|
90
|
+
|
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("Неподдерживаемый формат")
|
109
|
+
|
110
|
+
def В_метку_времени(здесь):
|
111
|
+
return здесь._дата_время.timestamp()
|
112
|
+
|
113
|
+
def День_недели(здесь):
|
114
|
+
return здесь._дата_время.weekday()
|
115
|
+
|
116
|
+
def Номер_дня_недели(здесь):
|
117
|
+
return здесь._дата_время.isoweekday()
|
118
|
+
|
119
|
+
def Добавить(здесь, интервал):
|
120
|
+
return Дата_и_время(здесь._дата_время + интервал._интервал)
|
121
|
+
|
122
|
+
def Вычесть(здесь, интервал):
|
123
|
+
return Дата_и_время(здесь._дата_время - интервал._интервал)
|
124
|
+
|
125
|
+
def __add__(здесь, другой):
|
126
|
+
if isinstance(другой, Интервал):
|
127
|
+
return здесь.Добавить(другой)
|
128
|
+
return NotImplemented
|
129
|
+
|
130
|
+
def __radd__(здесь, другой):
|
131
|
+
if isinstance(другой, Интервал):
|
132
|
+
return здесь.Добавить(другой)
|
133
|
+
return NotImplemented
|
134
|
+
|
135
|
+
def __sub__(здесь, другой):
|
136
|
+
if isinstance(другой, Интервал):
|
137
|
+
return здесь.Вычесть(другой)
|
138
|
+
return NotImplemented
|
139
|
+
|
140
|
+
def __eq__(здесь, другой):
|
141
|
+
if isinstance(другой, Дата_и_время):
|
142
|
+
return здесь._дата_время == другой._дата_время
|
143
|
+
return NotImplemented
|
144
|
+
|
145
|
+
def __lt__(здесь, другой):
|
146
|
+
if isinstance(другой, Дата_и_время):
|
147
|
+
return здесь._дата_время < другой._дата_время
|
148
|
+
return NotImplemented
|
149
|
+
|
150
|
+
def __le__(здесь, другой):
|
151
|
+
if isinstance(другой, Дата_и_время):
|
152
|
+
return здесь._дата_время <= другой._дата_время
|
153
|
+
return NotImplemented
|
154
|
+
|
155
|
+
def __gt__(здесь, другой):
|
156
|
+
if isinstance(другой, Дата_и_время):
|
157
|
+
return здесь._дата_время > другой._дата_время
|
158
|
+
return NotImplemented
|
159
|
+
|
160
|
+
def __ge__(здесь, другой):
|
161
|
+
if isinstance(другой, Дата_и_время):
|
162
|
+
return здесь._дата_время >= другой._дата_время
|
163
|
+
return NotImplemented
|
164
|
+
|
165
|
+
@property
|
166
|
+
def Год(здесь):
|
167
|
+
return здесь._дата_время.year
|
168
|
+
|
169
|
+
@property
|
170
|
+
def Месяц(здесь):
|
171
|
+
return здесь._дата_время.month
|
172
|
+
|
173
|
+
@property
|
174
|
+
def День(здесь):
|
175
|
+
return здесь._дата_время.day
|
176
|
+
|
177
|
+
@property
|
178
|
+
def Часов(здесь):
|
179
|
+
return здесь._дата_время.hour
|
180
|
+
|
181
|
+
@property
|
182
|
+
def Минут(здесь):
|
183
|
+
return здесь._дата_время.minute
|
184
|
+
|
185
|
+
@property
|
186
|
+
def Секунд(здесь):
|
187
|
+
return здесь._дата_время.second
|
188
|
+
|
189
|
+
@property
|
190
|
+
def Микросекунд(здесь):
|
191
|
+
return здесь._дата_время.microsecond
|
192
|
+
|
193
|
+
@property
|
194
|
+
def Часовой_пояс(здесь):
|
195
|
+
return здесь._дата_время.tzinfo
|
196
|
+
|
197
|
+
class Дата:
|
198
|
+
def __init__(здесь, *ПА, **ИА):
|
199
|
+
if len(ПА) > 0 and type(ПА[0]) == datetime.date: здесь._дата = ПА[0]
|
200
|
+
else:
|
201
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(
|
202
|
+
ИА, Словарь_параметров
|
203
|
+
)
|
204
|
+
здесь._дата = datetime.date(*ПА, **ИА)
|
205
|
+
|
206
|
+
@staticmethod
|
207
|
+
def Сегодня():
|
208
|
+
return Дата(datetime.date.today())
|
209
|
+
|
210
|
+
@staticmethod
|
211
|
+
def От_даты(порядковый_номер):
|
212
|
+
return Дата(datetime.date.fromordinal(порядковый_номер))
|
213
|
+
|
214
|
+
def В_формат(здесь, формат):
|
215
|
+
формат = Перевести_формат(формат)
|
216
|
+
return здесь._дата.strftime(формат)
|
217
|
+
|
218
|
+
def __str__(здесь):
|
219
|
+
формат = Перевести_формат(Формат_даты)
|
220
|
+
return здесь._дата.strftime(формат)
|
221
|
+
|
222
|
+
def Из_строки(строка):
|
223
|
+
return Время(Дата_и_время.Разобрать(строка, Формат_времени)._дата_время.time())
|
224
|
+
|
225
|
+
def День_недели(здесь):
|
226
|
+
return здесь._дата.isoweekday()
|
227
|
+
|
228
|
+
def Добавить(здесь, интервал):
|
229
|
+
return Дата(здесь._дата + интервал._интервал)
|
230
|
+
|
231
|
+
def Вычесть(здесь, интервал):
|
232
|
+
return Дата(здесь._дата - интервал._интервал)
|
233
|
+
|
234
|
+
def __add__(здесь, другой):
|
235
|
+
if isinstance(другой, Интервал):
|
236
|
+
return здесь.Добавить(другой)
|
237
|
+
return NotImplemented
|
238
|
+
|
239
|
+
def __radd__(здесь, другой):
|
240
|
+
if isinstance(другой, Интервал):
|
241
|
+
return здесь.Добавить(другой)
|
242
|
+
return NotImplemented
|
243
|
+
|
244
|
+
def __sub__(здесь, другой):
|
245
|
+
if isinstance(другой, Интервал):
|
246
|
+
return здесь.Вычесть(другой)
|
247
|
+
return NotImplemented
|
248
|
+
|
249
|
+
def __eq__(здесь, другой):
|
250
|
+
if isinstance(другой, Дата):
|
251
|
+
return здесь._дата == другой._дата
|
252
|
+
return NotImplemented
|
253
|
+
|
254
|
+
def __lt__(здесь, другой):
|
255
|
+
if isinstance(другой, Дата):
|
256
|
+
return здесь._дата < другой._дата
|
257
|
+
return NotImplemented
|
258
|
+
|
259
|
+
def __le__(здесь, другой):
|
260
|
+
if isinstance(другой, Дата):
|
261
|
+
return здесь._дата <= другой._дата
|
262
|
+
return NotImplemented
|
263
|
+
|
264
|
+
def __gt__(здесь, другой):
|
265
|
+
if isinstance(другой, Дата):
|
266
|
+
return здесь._дата > другой._дата
|
267
|
+
return NotImplemented
|
268
|
+
|
269
|
+
def __ge__(здесь, другой):
|
270
|
+
if isinstance(другой, Дата):
|
271
|
+
return здесь._дата >= другой._дата
|
272
|
+
return NotImplemented
|
273
|
+
|
274
|
+
@property
|
275
|
+
def год(здесь): return здесь._дата.year
|
276
|
+
|
277
|
+
@property
|
278
|
+
def месяц(здесь): return здесь._дата.month
|
279
|
+
|
280
|
+
@property
|
281
|
+
def день(здесь): return здесь._дата.day
|
282
|
+
|
283
|
+
class Время:
|
284
|
+
def __init__(здесь, *ПА, **ИА):
|
285
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(
|
286
|
+
ИА, Словарь_параметров
|
287
|
+
)
|
288
|
+
здесь._время = datetime.time(*ПА, **ИА)
|
289
|
+
|
290
|
+
def В_формат(здесь, формат):
|
291
|
+
формат = Перевести_формат(формат)
|
292
|
+
return здесь._время.strftime(формат)
|
293
|
+
|
294
|
+
def __str__(здесь):
|
295
|
+
формат = Перевести_формат(Формат_времени)
|
296
|
+
return здесь._время.strftime(формат)
|
297
|
+
|
298
|
+
def Заменить(здесь, **ИА):
|
299
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(
|
300
|
+
ИА, Словарь_параметров
|
301
|
+
)
|
302
|
+
return Время(здесь._время.replace(**ИА))
|
303
|
+
|
304
|
+
def Добавить(здесь, интервал):
|
305
|
+
базовая_дата = datetime.datetime(1970, 1, 1, здесь._время.hour, здесь._время.minute, здесь._время.second, здесь._время.microsecond, здесь._время.tzinfo)
|
306
|
+
результат = базовая_дата + интервал._интервал
|
307
|
+
return Время(результат.hour, результат.minute, результат.second, результат.microsecond, здесь._время.tzinfo)
|
308
|
+
|
309
|
+
def Вычесть(здесь, интервал):
|
310
|
+
базовая_дата = datetime.datetime(1970, 1, 1, здесь._время.hour, здесь._время.minute, здесь._время.second, здесь._время.microsecond, здесь._время.tzinfo)
|
311
|
+
результат = базовая_дата - интервал._интервал
|
312
|
+
return Время(результат.hour, результат.minute, результат.second, результат.microsecond, здесь._время.tzinfo)
|
313
|
+
|
314
|
+
def __add__(здесь, другой):
|
315
|
+
if isinstance(другой, Интервал):
|
316
|
+
return здесь.Добавить(другой)
|
317
|
+
return NotImplemented
|
318
|
+
|
319
|
+
def __radd__(здесь, другой):
|
320
|
+
if isinstance(другой, Интервал):
|
321
|
+
return здесь.Добавить(другой)
|
322
|
+
return NotImplemented
|
323
|
+
|
324
|
+
def __sub__(здесь, другой):
|
325
|
+
if isinstance(другой, Интервал):
|
326
|
+
return здесь.Вычесть(другой)
|
327
|
+
return NotImplemented
|
328
|
+
|
329
|
+
def __eq__(здесь, другой):
|
330
|
+
if isinstance(другой, Время):
|
331
|
+
return здесь._время == другой._время
|
332
|
+
return NotImplemented
|
333
|
+
|
334
|
+
def __lt__(здесь, другой):
|
335
|
+
if isinstance(другой, Время):
|
336
|
+
return здесь._время < другой._время
|
337
|
+
return NotImplemented
|
338
|
+
|
339
|
+
def __le__(здесь, другой):
|
340
|
+
if isinstance(другой, Время):
|
341
|
+
return здесь._время <= другой._время
|
342
|
+
return NotImplemented
|
343
|
+
|
344
|
+
def __gt__(здесь, другой):
|
345
|
+
if isinstance(другой, Время):
|
346
|
+
return здесь._время > другой._время
|
347
|
+
return NotImplemented
|
348
|
+
|
349
|
+
def __ge__(здесь, другой):
|
350
|
+
if isinstance(другой, Время):
|
351
|
+
return здесь._время >= другой._время
|
352
|
+
return NotImplemented
|
353
|
+
|
354
|
+
@property
|
355
|
+
def Часов(здесь):
|
356
|
+
return здесь._время.hour
|
357
|
+
|
358
|
+
@property
|
359
|
+
def Минут(здесь):
|
360
|
+
return здесь._время.minute
|
361
|
+
|
362
|
+
@property
|
363
|
+
def Секунд(здесь):
|
364
|
+
return здесь._время.second
|
365
|
+
|
366
|
+
@property
|
367
|
+
def Микросекунд(здесь):
|
368
|
+
return здесь._время.microsecond
|
369
|
+
|
370
|
+
@property
|
371
|
+
def Часовой_пояс(здесь):
|
372
|
+
return здесь._время.tzinfo
|
373
|
+
|
374
|
+
class Интервал:
|
375
|
+
def __init__(здесь, *ПА, **ИА):
|
376
|
+
if len(ПА) > 0 and type(ПА[0]) == datetime.timedelta: здесь._интервал = ПА[0]
|
377
|
+
else:
|
378
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(
|
379
|
+
ИА, Словарь_параметров_интервала
|
380
|
+
)
|
381
|
+
здесь._интервал = datetime.timedelta(*ПА, **ИА)
|
382
|
+
|
383
|
+
def Добавить(здесь, другой):
|
384
|
+
return Интервал(дней=(здесь._интервал + другой._интервал).days, секунд=(здесь._интервал + другой._интервал).seconds, микросекунд=(здесь._интервал + другой._интервал).microseconds)
|
385
|
+
|
386
|
+
def Вычесть(здесь, другой):
|
387
|
+
return Интервал(дней=(здесь._интервал - другой._интервал).days, секунд=(здесь._интервал - другой._интервал).seconds, микросекунд=(здесь._интервал - другой._интервал).microseconds)
|
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
|
+
|
425
|
+
def __add__(здесь, другой):
|
426
|
+
if isinstance(другой, Интервал):
|
427
|
+
return здесь.Добавить(другой)
|
428
|
+
return NotImplemented
|
429
|
+
|
430
|
+
def __sub__(здесь, другой):
|
431
|
+
if isinstance(другой, Интервал):
|
432
|
+
return здесь.Вычесть(другой)
|
433
|
+
return NotImplemented
|
434
|
+
|
435
|
+
def __eq__(здесь, другой):
|
436
|
+
if isinstance(другой, Интервал):
|
437
|
+
return здесь._интервал == другой._интервал
|
438
|
+
return NotImplemented
|
439
|
+
|
440
|
+
def __lt__(здесь, другой):
|
441
|
+
if isinstance(другой, Интервал):
|
442
|
+
return здесь._интервал < другой._интервал
|
443
|
+
return NotImplemented
|
444
|
+
|
445
|
+
def __le__(здесь, другой):
|
446
|
+
if isinstance(другой, Интервал):
|
447
|
+
return здесь._интервал <= другой._интервал
|
448
|
+
return NotImplemented
|
449
|
+
|
450
|
+
def __gt__(здесь, другой):
|
451
|
+
if isinstance(другой, Интервал):
|
452
|
+
return здесь._интервал > другой._интервал
|
453
|
+
return NotImplemented
|
454
|
+
|
455
|
+
def __ge__(здесь, другой):
|
456
|
+
if isinstance(другой, Интервал):
|
457
|
+
return здесь._интервал >= другой._интервал
|
458
|
+
return NotImplemented
|
459
|
+
|
460
|
+
@property
|
461
|
+
def Дней(здесь):
|
462
|
+
return здесь._интервал.days
|
463
|
+
|
464
|
+
@property
|
465
|
+
def Секунд(здесь):
|
466
|
+
return здесь._интервал.seconds
|
467
|
+
|
468
|
+
@property
|
469
|
+
def Микросекунд(здесь):
|
470
|
+
return здесь._интервал.microseconds
|
471
|
+
|
472
|
+
@property
|
473
|
+
def Всего_секунд(здесь):
|
474
|
+
return здесь._интервал.total_seconds()
|
475
|
+
|
476
|
+
def Совместить(дата, время):
|
477
|
+
return Дата_время(datetime.datetime.combine(дата._дата, время._время))
|
478
|
+
|
479
|
+
class ДатаСтСт:
|
480
|
+
def __init__(здесь, *ПА):
|
481
|
+
if len(ПА) == 3:
|
482
|
+
здесь.год, здесь.месяц, здесь.день = ПА
|
483
|
+
здесь._Посчитать_дни()
|
484
|
+
else:
|
485
|
+
if isinstance(ПА[0], ДатаСтСт):
|
486
|
+
здесь.в_днях = ПА[0].в_днях
|
487
|
+
else:
|
488
|
+
здесь.в_днях = ПА[0]
|
489
|
+
здесь._Посчитать_дату()
|
490
|
+
|
491
|
+
def _Посчитать_день_недели_и_года(здесь):
|
492
|
+
здесь.день_недели = (здесь.в_днях - 1) % 7
|
493
|
+
if здесь.день_недели == 0: здесь.день_недели = 7
|
494
|
+
здесь.день_года = (
|
495
|
+
(275 * здесь.месяц // 9)
|
496
|
+
- (((здесь.месяц + 9) // 12) * (1 + ((здесь.год - 4 * (здесь.год // 4) + 2) // 3)))
|
497
|
+
+ здесь.день
|
498
|
+
- 31
|
499
|
+
)
|
500
|
+
|
501
|
+
def _Посчитать_дни(здесь):
|
502
|
+
здесь.в_днях = (
|
503
|
+
367 * здесь.год
|
504
|
+
- int((7 * (здесь.год + 5001 + int((здесь.месяц - 9) / 7))) / 4)
|
505
|
+
+ int((275 * здесь.месяц) / 9)
|
506
|
+
+ здесь.день
|
507
|
+
+ 8353
|
508
|
+
)
|
509
|
+
здесь._Посчитать_день_недели_и_года()
|
510
|
+
|
511
|
+
def _Посчитать_дату(здесь):
|
512
|
+
a = здесь.в_днях + 1890
|
513
|
+
b = int((a - 122.1) / 365.25)
|
514
|
+
c = int(365.25 * b)
|
515
|
+
d = int((a - c) / 30.6001)
|
516
|
+
здесь.день = a - c - int(30.6001 * d)
|
517
|
+
здесь.месяц = d - (13 if d > 13 else 1)
|
518
|
+
здесь.год = b - (3 if здесь.месяц < 3 else 4)
|
519
|
+
здесь._Посчитать_день_недели_и_года()
|
520
|
+
|
521
|
+
def Добавить_дни(здесь, количество):
|
522
|
+
здесь.в_днях += количество
|
523
|
+
здесь._Посчитать_дату()
|
524
|
+
return здесь
|
525
|
+
|
526
|
+
def Разница_в_днях(здесь, другая_дата):
|
527
|
+
return здесь.в_днях - другая_дата.в_днях
|
528
|
+
|
529
|
+
def Сравнить(здесь, другая_дата):
|
530
|
+
if здесь.в_днях < другая_дата.в_днях: return -1
|
531
|
+
elif здесь.в_днях > другая_дата.в_днях: return 1
|
532
|
+
else: return 0
|
533
|
+
|
534
|
+
def В_новый_стиль(здесь):
|
535
|
+
разница = здесь.год // 100 - здесь.год // 400 - 2
|
536
|
+
год_увеличения_разницы = здесь.год % 100 == 0 and здесь.год % 400 != 0
|
537
|
+
if год_увеличения_разницы:
|
538
|
+
if здесь.день_года < 60: разница -= 1
|
539
|
+
if здесь.день_года == 59 and год_увеличения_разницы:
|
540
|
+
дата = Дата(здесь.год, 3, 1) + Интервал(дней = разница)
|
541
|
+
else:
|
542
|
+
дата = Дата(здесь.год, здесь.месяц, здесь.день)
|
543
|
+
дата += Интервал(дней = разница)
|
544
|
+
return дата
|
545
|
+
|
546
|
+
def Пасха(год, нов_ст = None):
|
547
|
+
смещение = (год % 19 * 19 + 15) % 30
|
548
|
+
смещение += (год % 4 * 2 + год % 7 * 4 + 6 * смещение + 6) % 7
|
549
|
+
нов_ст = True if нов_ст is None and год >= 1918 else нов_ст
|
550
|
+
дата = ДатаСтСт(год, 3, 22)
|
551
|
+
дата.Добавить_дни(смещение)
|
552
|
+
if нов_ст: return дата.В_новый_стиль()
|
553
|
+
else: return дата
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import re
|
2
|
+
from rupython import __Общие_функции__
|
2
3
|
|
3
4
|
БезФлагов = 0
|
4
5
|
Знаки7бит = A = re.ASCII
|
@@ -19,42 +20,42 @@ class Шаблон:
|
|
19
20
|
здесь.шаблон = объект.pattern
|
20
21
|
|
21
22
|
def Поиск(здесь, *ПА, **ИА):
|
22
|
-
ИА = __
|
23
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
23
24
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
24
25
|
return здесь.объект.search(*ПА, **ИА)
|
25
26
|
|
26
27
|
def СовпадНач(здесь, *ПА, **ИА):
|
27
|
-
ИА = __
|
28
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
28
29
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
29
30
|
return здесь.объект.match(*ПА, **ИА)
|
30
31
|
|
31
32
|
def ПолнСоотв(здесь, *ПА, **ИА):
|
32
|
-
ИА = __
|
33
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
33
34
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
34
35
|
return здесь.объект.fullmatch(*ПА, **ИА)
|
35
36
|
|
36
37
|
def Разбить(здесь, *ПА, **ИА):
|
37
|
-
ИА = __
|
38
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
38
39
|
{ 'строка': 'string', 'макс_делений': 'maxsplit' })
|
39
40
|
return здесь.объект.split(*ПА, **ИА)
|
40
41
|
|
41
42
|
def НайтиВсё(здесь, *ПА, **ИА):
|
42
|
-
ИА = __
|
43
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
43
44
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
44
45
|
return здесь.объект.findall(*ПА, **ИА)
|
45
46
|
|
46
47
|
def ИскатьПеречисл(здесь, *ПА, **ИА):
|
47
|
-
ИА = __
|
48
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
48
49
|
{ 'строка': 'string', 'нач_поз': 'pos', 'кон_поз': 'endpos' })
|
49
50
|
return здесь.объект.finditer(*ПА, **ИА)
|
50
51
|
|
51
52
|
def Заменить(здесь, *ПА, **ИА):
|
52
|
-
ИА = __
|
53
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
53
54
|
{ 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
|
54
55
|
return здесь.объект.sub(*ПА, **ИА)
|
55
56
|
|
56
57
|
def ЗаменитьСч(здесь, *ПА, **ИА):
|
57
|
-
ИА = __
|
58
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
58
59
|
{ 'замена': 'repl', 'строка': 'string', 'количество': 'count' })
|
59
60
|
return здесь.объект.subn(*ПА, **ИА)
|
60
61
|
|
@@ -74,11 +75,11 @@ class Соответствие:
|
|
74
75
|
def __getitem__(здесь, индекс): return объект[индекс]
|
75
76
|
|
76
77
|
def Группы(здесь, *ПА, **ИА):
|
77
|
-
ИА = __
|
78
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
|
78
79
|
return здесь.объект.groups(*ПА, **ИА)
|
79
80
|
|
80
81
|
def ИменовГруппы(здесь, *ПА, **ИА):
|
81
|
-
ИА = __
|
82
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, { 'по_умолчанию': 'default' })
|
82
83
|
return здесь.объект.groupdict(*ПА, **ИА)
|
83
84
|
|
84
85
|
def Начало(здесь, *группа): return здесь.объект.start(*группа)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import random
|
2
|
+
from rupython import __Общие_функции__
|
2
3
|
|
3
4
|
# Управление
|
4
5
|
def НачЗнач(a = None): return random.seed(a, version = 2)
|
@@ -10,7 +11,7 @@ def СлучБайты(n): return random.randbytes(n)
|
|
10
11
|
|
11
12
|
# Целые числа
|
12
13
|
def ИзДиапазона(*ПА, **ИА):
|
13
|
-
ИА = __
|
14
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
14
15
|
{ 'нач': 'start', 'кон': 'stop', 'шаг': 'step' })
|
15
16
|
return random.randrange(*ПА, **ИА)
|
16
17
|
def СлучЦелое(a, b): return random.randint(a, b)
|
@@ -19,12 +20,12 @@ def СлучБиты(k): return random.getrandbits(k)
|
|
19
20
|
# Последовательности
|
20
21
|
def ВыбратьИзПосл(посл): return random.choice(посл)
|
21
22
|
def ВыбратьПосл(*ПА, **ИА):
|
22
|
-
ИА = __
|
23
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
23
24
|
{ 'посл': 'population', 'веса': 'weights', 'накоплВеса': 'cum_weights' })
|
24
25
|
return random.choices(*ПА, **ИА)
|
25
26
|
def Перемешать(x): return random.shuffle(x)
|
26
27
|
def СлучПосл(*ПА, **ИА):
|
27
|
-
ИА = __
|
28
|
+
ИА = __Общие_функции__.Заменить_ключи_в_словаре(ИА, \
|
28
29
|
{ 'посл': 'population', 'колич': 'counts' })
|
29
30
|
return random.sample(*ПА, **ИА)
|
30
31
|
|
@@ -4,12 +4,14 @@ setup.cfg
|
|
4
4
|
setup.py
|
5
5
|
rupython/__main__.py
|
6
6
|
rupython/__Заголовочный_код__.py
|
7
|
+
rupython/__Общие_функции__.py
|
7
8
|
rupython/Преобразователь.py
|
8
9
|
rupython.egg-info/PKG-INFO
|
9
10
|
rupython.egg-info/SOURCES.txt
|
10
11
|
rupython.egg-info/dependency_links.txt
|
11
12
|
rupython.egg-info/top_level.txt
|
12
13
|
rupython/Модули/БД.py
|
14
|
+
rupython/Модули/ДатаВремя.py
|
13
15
|
rupython/Модули/Матем.py
|
14
16
|
rupython/Модули/РегВыр.py
|
15
17
|
rupython/Модули/Случ.py
|
@@ -3,7 +3,7 @@ from pathlib import Path as Путь
|
|
3
3
|
|
4
4
|
Установить(
|
5
5
|
name = 'rupython',
|
6
|
-
version = '1.2.
|
6
|
+
version = '1.2.4',
|
7
7
|
description = "Исполнитель кода Русского Питона",
|
8
8
|
packages = [ 'rupython', 'rupython.Модули' ],
|
9
9
|
long_description = (Путь(__file__).parent / 'README.md').read_text('UTF-8'),
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|