Система подавления времени / даты
Мы кодируем систему, которая анализирует события, основанные на времени, и мы хотели бы реализовать систему подавления для этих событий, где мы можем дать cron-подобный синтаксис для сопоставления с.
например, подавить, если...
- .. событие происходит в последнюю пятницу месяца
- .. событие происходит между 16:00 и 17:00 по будням
- .. событие происходит в воскресенье
и так далее.
Мы используем Python, поэтому я надеялся, что может быть модуль для такого рода вещей, но мои навыки поиска подводят меня (много результатов о планировании событий, в то время как я хочу обратного - соответствует ли текущее время определенному график).
В качестве альтернативы, я с удовольствием напишу один с нуля, если у кого-нибудь есть какие-либо предложения относительно лучшего способа хранения и сравнения времени с расписанием.
Редактировать:
Чтобы уточнить, графики подавления не установлены в камне, поэтому я не могу просто написать функцию для обработки конкретных случаев. Расписания должны храниться в базе данных и привязываться к событию, поэтому я могу сделать примерно:
sql_rows = ..... "SELECT * FROM suppressions WHERE event_id = ?"
for row in sql_rows:
if matchesSchedule(current_time,row):
print "This should be suppressed"
Поэтому мне нужно представить расписание в формате, который я могу сохранить в таблице, а затем сопоставить столбцы с компонентами текущего времени.
1 ответ
Я предлагаю просто внедрить ваши контролеры времени самостоятельно. Это довольно просто, используя что-то вроде datetime
объект (вы могли бы использовать time
а также, если вам это нравится больше). А в синтаксисе Python вы даже можете выражать такие вещи, как "сумма количества минут, часов и секунд должна составлять 42", то есть вещи, которые невозможно использовать с помощью шаблонов, похожих на cron.
import datetime
def matchesTimePattern1(d):
return (
d.weekday() == 4 and # Friday?
d.month != (d + datetime.timedelta(7)).month # next week is different month?
)
def matchesTimePattern2(d):
return (
d.weekday() in (0, 1, 2, 3, 4) and # weekday?
d.hour == 16 # at 4pm (up to 4:59:59pm)
)
def matchesTimePattern3(d):
return (
d.weekday() == 6 # Sunday?
)
d = datetime.datetime.now()
print matchesTimePattern1(d)
print matchesTimePattern2(d)
print matchesTimePattern3(d)