Доступ к значениям поля триггера cron APScheduler в python - PullRequest
0 голосов
/ 24 октября 2018

Аналогично этот вопрос Я хочу извлечь информацию о триггере задания cron из APScheduler.Однако мне нужно поле "day_of_week", а не все.Используя

for job in scheduler.get_jobs():
  for f in job.trigger.fields:
    print(f.name + " " + str(f))

, я могу видеть все поля, например, week,hour,day_of_week, но

job.trigger.day_of_week, похоже, не является атрибутом объекта "CronTrigger".Я не понимаю, что это за объект job.trigger и как упакованы его поля.Я попытался прочитать код на github, но он еще более озадачивает.

Как извлечь только одно поле day_of_week и как структурирован этот класс триггера?

Дайвинг глубжеЯ обнаружил, что

apscheduler.triggers.cron.fields.DayOfWeekField

я могу найти, проиндексировав job.trigger.fields[4], который кажется действительно плохим стилем, поскольку он зависит от «положения» поля.То, что я получаю, это DayOfWeekField, из которого я комично не могу получить его значение:

a.get_value
<bound method DayOfWeekField.get_value of DayOfWeekField('day_of_week', '1,2,3,4')>

Структура полей закодирована здесь , но я не знаючто делать с dateval, аргументом get_value().

В конце концов, после надежды на понимание концепции, я хочу сделать

if job-day_of_week contains mon

if job-day_of_week == '*'

print ( job-day_of_week )

Я благодарен за любые предложения / подсказки!

1 Ответ

0 голосов
/ 24 октября 2018

Глядя на код, вы сможете получить поле day_of_week без жесткого кодирования индекса, используя свойство FIELD_NAMES класса CronTrigger, например,

dow_index = CronTrigger.FIELD_NAMES.index('day_of_week')
dow = job.trigger.fields[dow_index]

Получение значенияПоле немного сложнее, но кажется, что BaseField реализует функцию str , которая должна давать вам значение выражения, которое создало поле в виде строки, которую вы можете проанализировать, чтобы найти то, что вы хотите:

dow_value_as_string = str(dow)
if 'mon' in dow_value_as_string:
   # do something
if dow_value_as_string = "*":
   # do something else
...