team-3/src/c3nav/mapdata/tasks.py

50 lines
1.6 KiB
Python
Raw Normal View History

2017-11-16 20:54:59 +01:00
import logging
2018-12-16 19:47:39 +01:00
import time
2017-11-16 20:54:59 +01:00
from celery.exceptions import MaxRetriesExceededError
2018-12-16 19:47:39 +01:00
from django.core.cache import cache
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from c3nav.celery import app
2017-11-16 20:54:59 +01:00
logger = logging.getLogger('c3nav')
@app.task(bind=True, max_retries=10)
def process_map_updates(self):
2017-11-16 20:54:59 +01:00
if self.request.called_directly:
logger.info('Processing map updates by direct command...')
else:
logger.info('Processing map updates...')
from c3nav.mapdata.models import MapUpdate
try:
try:
updates = MapUpdate.process_updates()
except MapUpdate.ProcessUpdatesAlreadyRunning:
if self.request.called_directly:
raise
logger.info('Processing is already running, retrying in 30 seconds.')
raise self.retry(countdown=30)
2018-12-16 19:47:39 +01:00
except Exception:
cache.set('mapdata:last_process_updates_run', (int(time.time()), False), None)
2018-12-16 19:47:39 +01:00
raise
else:
cache.set('mapdata:last_process_updates_run', (int(time.time()), True), None)
except MaxRetriesExceededError:
logger.info('Cannot retry, retries exceeded. Exiting.')
return
if updates:
print()
logger.info(ngettext_lazy('%d map update processed.', '%d map updates processed.', len(updates)) % len(updates))
if updates:
2017-11-16 20:54:59 +01:00
logger.info(_('Last processed update: %(date)s (#%(id)d)') % {
'date': date_format(updates[-1].datetime, 'DATETIME_FORMAT'),
'id': updates[-1].pk,
})