diff options
-rw-r--r-- | src/apscheduler/schedulers/async_.py | 9 | ||||
-rw-r--r-- | src/apscheduler/schedulers/sync.py | 10 | ||||
-rw-r--r-- | tests/test_schedulers.py | 34 |
3 files changed, 53 insertions, 0 deletions
diff --git a/src/apscheduler/schedulers/async_.py b/src/apscheduler/schedulers/async_.py index bc99567..6c60bdd 100644 --- a/src/apscheduler/schedulers/async_.py +++ b/src/apscheduler/schedulers/async_.py @@ -177,6 +177,15 @@ class AsyncScheduler: else: raise ScheduleLookupError(id) + async def get_schedules(self) -> list[Schedule]: + """ + Retrieve all schedules from the data store. + + :return: a list of schedules, in an unspecified order + + """ + return await self.data_store.get_schedules() + async def remove_schedule(self, id: str) -> None: """ Remove the given schedule from the data store. diff --git a/src/apscheduler/schedulers/sync.py b/src/apscheduler/schedulers/sync.py index e64d43c..aea7047 100644 --- a/src/apscheduler/schedulers/sync.py +++ b/src/apscheduler/schedulers/sync.py @@ -207,6 +207,16 @@ class Scheduler: else: raise ScheduleLookupError(id) + def get_schedules(self) -> list[Schedule]: + """ + Retrieve all schedules from the data store. + + :return: a list of schedules, in an unspecified order + + """ + self._ensure_services_ready() + return self.data_store.get_schedules() + def remove_schedule(self, id: str) -> None: """ Remove the given schedule from the data store. diff --git a/tests/test_schedulers.py b/tests/test_schedulers.py index 7bf0ef0..32f28dc 100644 --- a/tests/test_schedulers.py +++ b/tests/test_schedulers.py @@ -113,6 +113,24 @@ class TestAsyncScheduler: schedule = await scheduler.get_schedule("dummyid") assert isinstance(schedule, Schedule) + async def test_add_get_schedules(self) -> None: + async with AsyncScheduler(start_worker=False) as scheduler: + assert await scheduler.get_schedules() == [] + + schedule1_id = await scheduler.add_schedule( + dummy_async_job, DateTrigger(datetime.now() + timedelta(1)) + ) + await scheduler.add_schedule( + dummy_async_job, + DateTrigger(datetime.now() + timedelta(1)), + id="dummyid", + ) + + schedules = await scheduler.get_schedules() + assert all(isinstance(schedule, Schedule) for schedule in schedules) + assert any(schedule.id == schedule1_id for schedule in schedules) + assert any(schedule.id == "dummyid" for schedule in schedules) + @pytest.mark.parametrize( "max_jitter, expected_upper_bound", [pytest.param(2, 2, id="within"), pytest.param(4, 2.999999, id="exceed")], @@ -291,6 +309,22 @@ class TestSyncScheduler: schedule = scheduler.get_schedule("dummyid") assert isinstance(schedule, Schedule) + def test_add_get_schedules(self) -> None: + with Scheduler(start_worker=False) as scheduler: + assert scheduler.get_schedules() == [] + + schedule1_id = scheduler.add_schedule( + dummy_sync_job, DateTrigger(datetime.now() + timedelta(1)) + ) + scheduler.add_schedule( + dummy_sync_job, DateTrigger(datetime.now() + timedelta(1)), id="dummyid" + ) + + schedules = scheduler.get_schedules() + assert all(isinstance(schedule, Schedule) for schedule in schedules) + assert any(schedule.id == schedule1_id for schedule in schedules) + assert any(schedule.id == "dummyid" for schedule in schedules) + @pytest.mark.parametrize( "max_jitter, expected_upper_bound", [pytest.param(2, 2, id="within"), pytest.param(4, 2.999999, id="exceed")], |