def __scan_download_status_in_thread(self):
logger.info('start scan download status')
session = SessionManager.Session()
try:
current_time = datetime.utcnow()
result = session.query(Episode).\
options(joinedload(Episode.bangumi).joinedload(Bangumi.maintained_by)).\
filter(Episode.airdate != None).\
filter(Episode.status != Episode.STATUS_DOWNLOADED).\
filter(Episode.airdate < current_time.date()).\
filter(Bangumi.status != Bangumi.STATUS_FINISHED).\
all()
admin_map = {}
for episode in result:
if current_time.date() - episode.airdate < timedelta(days=episode.bangumi.alert_timeout):
continue
bangumi_id = str(episode.bangumi_id)
if episode.bangumi.maintained_by is None:
if 'sys' not in admin_map:
admin_map['sys'] = {}
if bangumi_id not in admin_map['sys']:
admin_map['sys'][bangumi_id] = {
'bangumi': episode.bangumi,
'episodes': []
}
admin_map['sys'][bangumi_id]['episodes'].append(episode)
else:
maintainer_uid = str(episode.bangumi.maintained_by.id)
if maintainer_uid not in admin_map:
admin_map[maintainer_uid] = {
'user': episode.bangumi.maintained_by,
'bangumi_map': {}
}
if bangumi_id not in admin_map[maintainer_uid]:
admin_map[maintainer_uid]['bangumi_map'][bangumi_id] = {
'bangumi': episode.bangumi,
'episodes': []
}
admin_map[maintainer_uid]['bangumi_map'][bangumi_id]['episodes'].append(episode)
msg_list = []
for uid in admin_map:
if uid == 'sys':
all_admin_list = session.query(User).filter(User.level >= User.LEVEL_ADMIN).all()
msg_list = msg_list + self.__send_email_to_all(all_admin_list, admin_map['sys'])
elif admin_map[uid]['user'].email is None or not admin_map[uid]['user'].email_confirmed:
continue
else:
msg_list.append(self.__send_email_to(admin_map[uid]['user'], admin_map[uid]['bangumi_map']))
self.mail.send(msg_list)
except exc.DBAPIError as db_error:
logger.error(db_error, exc_info=True)
# if connection is invalid rollback the session
if db_error.connection_invalidated:
session.rollback()
finally:
SessionManager.Session.remove()
评论列表
文章目录