Учтите, что мне нужно часто отправлять автоматические отчеты по электронной почте своим клиентам. Поскольку у меня может быть несколько клиентов, и один клиент может запрашивать ежедневные и / или еженедельные отчеты, я хочу сохранить их в файле json как report_config.json
и автоматизировать его с помощью модуля python schedule
.
То, что я пробовал до сих пор:
report_config.json
выглядит следующим образом:
{
"cusomer1": [
{
"report_type": "twitter",
"report_frequency": "daily",
"receivers": [
"example@example.com"
]
},
{
"report_type": "twitter",
"report_frequency": "weekly",
"receivers": [
"example@example.com"
]
}
],
"customer2": {
"report_type": "twitter",
"report_frequency": "daily",
"receivers": [
"example@example.com"
]
}
}
Как будто я хочу сохранить требования клиента по электронной почте в списке в качестве его значения в файле конфигурации. Тогда я oop до конца и наметить их. то есть:
if __name__ == "__main__":
for customer, reports in report_config.items():
for report in reports:
# below is an example of scheduling and not working as I want to achieve right now
schedule.every().days.at('03:00').do(preprare_report,
report['report_type'], report['report_frequency'])
schedule.every().monday.at('03:00').do(preprare_report,
report['report_type'], report['report_frequency'])
while True:
schedule.run_pending()
time.sleep(1)
Но, как вы видите, клиент может требовать электронные письма только ежедневно. Еще один может захотеть каждый понедельник и каждый день. Но я не могу автоматизировать часть кода schedule.every().monday/days
, поскольку они являются методами, а не аргументами.
Я знаю, что могу делать то, что хочу, с помощью нескольких операторов if-else. Но по мере того, как клиенты и их требования растут, с жестким кодированием это станет неприемлемым. Знаешь, это будет больно:
if report['day'] == 'monday':
schedule.every().monday.at('03:00')...
elif report['day'] == 'tue':
...
И даже день здесь не единственный параметр. Итак, какие-либо советы о том, как добиться полностью автоматизированной системы? Я могу дать любую дополнительную информацию, которая вам нужна. Спасибо.