Система подавления времени / даты

Мы кодируем систему, которая анализирует события, основанные на времени, и мы хотели бы реализовать систему подавления для этих событий, где мы можем дать cron-подобный синтаксис для сопоставления с.

например, подавить, если...

  1. .. событие происходит в последнюю пятницу месяца
  2. .. событие происходит между 16:00 и 17:00 по будням
  3. .. событие происходит в воскресенье

и так далее.

Мы используем 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)
Другие вопросы по тегам