def test_gets_correct_collection(self, mock_get_collection): """ make sure this operation uses the correct collection """ utils.get_enabled() mock_get_collection.assert_called_once_with()
def setup_schedule(self): """ This loads enabled schedules from the database and adds them to the "_schedule" dictionary as instances of celery.beat.ScheduleEntry """ if not Scheduler._mongo_initialized: _logger.debug('Initializing Mongo client connection to read celerybeat schedule') db_connection.initialize() Scheduler._mongo_initialized = True _logger.debug(_('loading schedules from app')) self._schedule = {} for key, value in self.app.conf.CELERYBEAT_SCHEDULE.iteritems(): self._schedule[key] = beat.ScheduleEntry(**dict(value, name=key)) # include a "0" as the default in case there are no schedules to load update_timestamps = [0] _logger.debug(_('loading schedules from DB')) ignored_db_count = 0 self._loaded_from_db_count = 0 for call in itertools.imap(ScheduledCall.from_db, utils.get_enabled()): if call.remaining_runs == 0: _logger.debug( _('ignoring schedule with 0 remaining runs: %(id)s') % {'id': call.id}) ignored_db_count += 1 else: self._schedule[call.id] = call.as_schedule_entry() update_timestamps.append(call.last_updated) self._loaded_from_db_count += 1 _logger.debug('loaded %(count)d schedules' % {'count': self._loaded_from_db_count}) self._most_recent_timestamp = max(update_timestamps)
def test_empty_result(self, mock_query): mock_query.return_value = [] ret = list(utils.get_enabled()) self.assertEqual(mock_query.call_count, 1) self.assertEqual(len(ret), 0)
def test_query(self, mock_query): mock_query.return_value = SCHEDULES ret = list(utils.get_enabled()) self.assertEqual(mock_query.call_count, 1) # there should only be 1 argument, a criteria self.assertEqual(len(mock_query.call_args[0]), 1) criteria = mock_query.call_args[0][0] self.assertTrue(isinstance(criteria, Criteria)) self.assertEqual(criteria.filters, {'enabled': True}) # three instances of dict should be returned self.assertEqual(len(ret), 3) for schedule in ret: self.assertTrue(isinstance(schedule, dict))
def setup_schedule(self): """ This loads enabled schedules from the database and adds them to the "_schedule" dictionary as instances of celery.beat.ScheduleEntry """ if not Scheduler._mongo_initialized: _logger.debug( _('Initializing Mongo client connection to read celerybeat schedule' )) db_connection.initialize() Scheduler._mongo_initialized = True _logger.debug(_('loading schedules from app')) self._schedule = {} if celery_version.startswith('4'): items = self.app.conf.beat_schedule.iteritems() else: items = self.app.conf.CELERYBEAT_SCHEDULE.iteritems() for key, value in items: self._schedule[key] = beat.ScheduleEntry(**dict(value, name=key)) # include a "0" as the default in case there are no schedules to load update_timestamps = [0] _logger.debug(_('loading schedules from DB')) ignored_db_count = 0 self._loaded_from_db_count = 0 for call in itertools.imap(ScheduledCall.from_db, utils.get_enabled()): if call.remaining_runs == 0: _logger.debug( _('ignoring schedule with 0 remaining runs: %(id)s') % {'id': call.id}) ignored_db_count += 1 else: self._schedule[call.id] = call.as_schedule_entry() update_timestamps.append(call.last_updated) self._loaded_from_db_count += 1 _logger.debug( _('loaded %(count)d schedules') % {'count': self._loaded_from_db_count}) self._most_recent_timestamp = max(update_timestamps)
def schedule_changed(self): """ Looks at the update timestamps in the database to determine if there are new or modified schedules. Indexing should make this very fast. :return: True iff the set of enabled scheduled calls has changed in the database. :rtype: bool """ if utils.get_enabled().count() != self._loaded_from_db_count: logging.debug(_('number of enabled schedules has changed')) return True if utils.get_updated_since(self._most_recent_timestamp).count() > 0: logging.debug(_('one or more enabled schedules has been updated')) return True return False