def scrape_begin_city(bot: Bot, update: Update, job_queue: JobQueue, chat_data, city=None): if not city: city = update.message.text[19:].lower( ) # 19 characters is len('/scrape_begin_city ') if city in URLS.keys(): jobs_for_same_city = [ job for job in job_queue.jobs() if job.context == city ] if jobs_for_same_city: update.message.reply_text( 'wg_ges scraper job was already set! /scrape_stop_city {} to kill it' .format(city)) else: job = job_queue.run_repeating(callback=job_scrape_city, interval=75, first=10, context=city) chat_data[city] = job logging.info('start scraping {}'.format(city)) update.message.reply_text( 'wg_ges scraper job successfully set! /subscribe {} to test, /unsubscribe to stop, /scrape_stop_city ' '{} to stop it.'.format(city, city)) else: update.message.reply_text('valid cities: {}'.format(all_cities_string))
def process_updating_entry_callback(job_queue: JobQueue, database: Database, finish_time: dt.datetime): """ This callback function will be called, when an Update operation will be occurred in the database. """ jobs = job_queue.jobs() entries = database.get_entries(dt.datetime.now(), finish_time) for job in jobs: if isinstance(job.context, Entry): exist = False for entry in entries: if job.context.note_id == entry.note_id: if job.context.chat_id == entry.chat_id and job.context.name == entry.name: if job.context.entry_date == entry.entry_date: exist = True break else: job.schedule_removal() if entry.entry_date <= finish_time: job_queue.run_once(callback=recall_send_callback, when=entry.entry_date, context=entry) break else: job.schedule_removal() if entry.entry_date <= finish_time: job_queue.run_once(callback=recall_send_callback, when=entry.entry_date, context=entry) break if not exist: job.schedule_removal()
def add_job(job_queue: JobQueue, chat: Chat): for job in job_queue.jobs(): if job.context.id == chat.id: job.enabled = False job.schedule_removal() job_queue.run_repeating(send_issue, int(JIRA_REQUESTS_SECONDS_PERIOD), context=chat)
def change_standup_job_schedule( jobs_queue: JobQueue, time_str: str, hour: int, minute: int, ): jobs_queue.stop() jobs = jobs_queue.jobs() for job in jobs: job.schedule_removal() DB().set_standup_time(time_str) jobs_queue.run_daily( callback=standup_job_handler_callback, time=datetime.time(hour=hour, minute=minute), days=(0, 1, 2, 3, 4), ) jobs_queue.start() Logger().clear()
def process_inserting_entry_callback(job_queue: JobQueue, database: Database, finish_time: dt.datetime): """ This callback function will be called, when an Insert operation will be occurred in the database. """ jobs = job_queue.jobs() entries = database.get_entries(dt.datetime.now(), finish_time) for entry in entries: ran = False # Check that entry wasn't ran and put into the job_queue for job in jobs: if isinstance(job.context, Entry): if job.context.chat_id == entry.chat_id and job.context.name == entry.name: ran = True break if not ran: job_queue.run_once(callback=recall_send_callback, when=entry.entry_date, context=entry)
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue(MockBot('jobqueue_test')) self.jq.start() self.result = 0 def tearDown(self): if self.jq is not None: self.jq.stop() def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.start() try: u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result) finally: u.stop()
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue(MockBot('jobqueue_test')) self.jq.start() self.result = 0 self.job_time = 0 def tearDown(self): if self.jq is not None: self.jq.stop() def getSeconds(self): return int(ceil(time.time())) def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def job5(self, bot, job): self.job_time = self.getSeconds() def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.start() try: u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result) finally: u.stop() def test_time_unit_int(self): # Testing seconds in int seconds_interval = 5 expected_time = self.getSeconds() + seconds_interval self.jq.put(Job(self.job5, seconds_interval, repeat=False)) sleep(6) self.assertEqual(self.job_time, expected_time) def test_time_unit_dt_time(self): # Testing seconds, minutes and hours as datetime.timedelta object # This is sufficient to test that it actually works. interval = datetime.timedelta(seconds=5) expected_time = self.getSeconds() + interval.total_seconds() self.jq.put(Job(self.job5, interval, repeat=False)) sleep(6) self.assertEqual(self.job_time, expected_time)
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue(MockBot('jobqueue_test')) self.jq.start() self.result = 0 self.job_time = 0 def tearDown(self): if self.jq is not None: self.jq.stop() def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def job5(self, bot, job): self.job_time = time.time() def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.start() try: u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result) finally: u.stop() def test_time_unit_int(self): # Testing seconds in int delta = 2 expected_time = time.time() + delta self.jq.put(Job(self.job5, delta, repeat=False)) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_timedelta(self): # Testing seconds, minutes and hours as datetime.timedelta object # This is sufficient to test that it actually works. interval = datetime.timedelta(seconds=2) expected_time = time.time() + interval.total_seconds() self.jq.put(Job(self.job5, interval, repeat=False)) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_datetime(self): # Testing running at a specific datetime delta = datetime.timedelta(seconds=2) next_t = datetime.datetime.now() + delta expected_time = time.time() + delta.total_seconds() self.jq.put(Job(self.job5, repeat=False), next_t=next_t) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_time_today(self): # Testing running at a specific time today delta = 2 next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + delta self.jq.put(Job(self.job5, repeat=False), next_t=next_t) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_time_tomorrow(self): # Testing running at a specific time that has passed today. Since we can't wait a day, we # test if the jobs next_t has been calculated correctly delta = -2 next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + delta + 60 * 60 * 24 self.jq.put(Job(self.job5, repeat=False), next_t=next_t) self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1) def test_run_once(self): delta = 2 expected_time = time.time() + delta self.jq.run_once(self.job5, delta) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_run_repeating(self): interval = 0.1 first = 1.5 self.jq.run_repeating(self.job1, interval, first=first) sleep(2.505) self.assertAlmostEqual(self.result, 10, delta=1) def test_run_daily(self): delta = 1 time_of_day = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + 60 * 60 * 24 + delta self.jq.run_daily(self.job1, time_of_day) sleep(2 * delta) self.assertEqual(self.result, 1) self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1)
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue("Bot") self.result = 0 def tearDown(self): if self.jq is not None: self.jq.stop() stop_con_pool() def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) self.jq.start() sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result)
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue(MockBot('jobqueue_test')) self.jq.start() self.result = 0 self.job_time = 0 def tearDown(self): if self.jq is not None: self.jq.stop() def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def job5(self, bot, job): self.job_time = time.time() def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.start() try: u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result) finally: u.stop() def test_time_unit_int(self): # Testing seconds in int delta = 2 expected_time = time.time() + delta self.jq.put(Job(self.job5, delta, repeat=False)) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_timedelta(self): # Testing seconds, minutes and hours as datetime.timedelta object # This is sufficient to test that it actually works. interval = datetime.timedelta(seconds=2) expected_time = time.time() + interval.total_seconds() self.jq.put(Job(self.job5, interval, repeat=False)) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_datetime(self): # Testing running at a specific datetime delta = datetime.timedelta(seconds=2) next_t = datetime.datetime.now() + delta expected_time = time.time() + delta.total_seconds() self.jq.put(Job(self.job5, repeat=False), next_t=next_t) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_time_today(self): # Testing running at a specific time today delta = 2 next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + delta self.jq.put(Job(self.job5, repeat=False), next_t=next_t) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_time_unit_dt_time_tomorrow(self): # Testing running at a specific time that has passed today. Since we can't wait a day, we # test if the jobs next_t has been calculated correctly delta = -2 next_t = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + delta + 60 * 60 * 24 self.jq.put(Job(self.job5, repeat=False), next_t=next_t) self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1) def test_run_once(self): delta = 2 expected_time = time.time() + delta self.jq.run_once(self.job5, delta) sleep(2.5) self.assertAlmostEqual(self.job_time, expected_time, delta=0.1) def test_run_repeating(self): interval = 0.1 first = 1.5 self.jq.run_repeating(self.job1, interval, first=first) sleep(2.505) self.assertAlmostEqual(self.result, 10, delta=1) def test_run_daily(self): delta = 1 time_of_day = (datetime.datetime.now() + datetime.timedelta(seconds=delta)).time() expected_time = time.time() + 60 * 60 * 24 + delta self.jq.run_daily(self.job1, time_of_day) sleep(2 * delta) self.assertEqual(self.result, 1) self.assertAlmostEqual(self.jq.queue.get(False)[0], expected_time, delta=0.1)
class JobQueueTest(BaseTest, unittest.TestCase): """ This object represents Tests for Updater, Dispatcher, WebhookServer and WebhookHandler """ def setUp(self): self.jq = JobQueue(MockBot('jobqueue_test')) self.jq.start() self.result = 0 self.job_time = 0 def tearDown(self): if self.jq is not None: self.jq.stop() def getSeconds(self): return int(ceil(time.time())) def job1(self, bot, job): self.result += 1 def job2(self, bot, job): raise Exception("Test Error") def job3(self, bot, job): self.result += 1 job.schedule_removal() def job4(self, bot, job): self.result += job.context def job5(self, bot, job): self.job_time = self.getSeconds() def test_basic(self): self.jq.put(Job(self.job1, 0.1)) sleep(1.5) self.assertGreaterEqual(self.result, 10) def test_job_with_context(self): self.jq.put(Job(self.job4, 0.1, context=5)) sleep(1.5) self.assertGreaterEqual(self.result, 50) def test_noRepeat(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.5) self.assertEqual(1, self.result) def test_nextT(self): self.jq.put(Job(self.job1, 0.1), next_t=0.5) sleep(0.45) self.assertEqual(0, self.result) sleep(0.1) self.assertEqual(1, self.result) def test_multiple(self): self.jq.put(Job(self.job1, 0.1, repeat=False)) self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.4)) sleep(1) self.assertEqual(4, self.result) def test_disabled(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.enabled = False j1.enabled = False sleep(1) self.assertEqual(2, self.result) def test_schedule_removal(self): j0 = Job(self.job1, 0.1) j1 = Job(self.job1, 0.2) self.jq.put(j0) self.jq.put(Job(self.job1, 0.4)) self.jq.put(j1) j0.schedule_removal() j1.schedule_removal() sleep(1) self.assertEqual(2, self.result) def test_schedule_removal_from_within(self): self.jq.put(Job(self.job1, 0.4)) self.jq.put(Job(self.job3, 0.2)) sleep(1) self.assertEqual(3, self.result) def test_longer_first(self): self.jq.put(Job(self.job1, 0.2, repeat=False)) self.jq.put(Job(self.job1, 0.1, repeat=False)) sleep(0.15) self.assertEqual(1, self.result) def test_error(self): self.jq.put(Job(self.job2, 0.1)) self.jq.put(Job(self.job1, 0.2)) sleep(0.5) self.assertEqual(2, self.result) def test_jobs_tuple(self): self.jq.stop() jobs = tuple(Job(self.job1, t) for t in range(5, 25)) for job in jobs: self.jq.put(job) self.assertTupleEqual(jobs, self.jq.jobs()) def test_inUpdater(self): u = Updater(bot="MockBot") u.job_queue.start() try: u.job_queue.put(Job(self.job1, 0.5)) sleep(0.75) self.assertEqual(1, self.result) u.stop() sleep(2) self.assertEqual(1, self.result) finally: u.stop() def test_time_unit_int(self): # Testing seconds in int seconds_interval = 5 expected_time = self.getSeconds() + seconds_interval self.jq.put(Job(self.job5, seconds_interval, repeat=False)) sleep(6) self.assertEqual(self.job_time, expected_time) def test_time_unit_dt_time(self): # Testing seconds, minutes and hours as datetime.timedelta object # This is sufficient to test that it actually works. interval = datetime.timedelta(seconds=5) expected_time = self.getSeconds() + interval.total_seconds() self.jq.put(Job(self.job5, interval, repeat=False)) sleep(6) self.assertEqual(self.job_time, expected_time)