summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-07-30 17:19:01 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2022-07-30 17:19:01 +0300
commit886009e8310762eefc58fd54f5eba2a5172b7b11 (patch)
treeb7ad41274550c5a0f87e47402662cfcbbe8fcd96
parent214b8add6e12c9c54a6d3e34ced0f009250c3bc0 (diff)
downloadapscheduler-886009e8310762eefc58fd54f5eba2a5172b7b11.tar.gz
Changed get_schedule() to raise ScheduleLookupError when the target schedule isn't found
-rw-r--r--src/apscheduler/schedulers/async_.py12
-rw-r--r--src/apscheduler/schedulers/sync.py12
-rw-r--r--tests/test_schedulers.py24
3 files changed, 42 insertions, 6 deletions
diff --git a/src/apscheduler/schedulers/async_.py b/src/apscheduler/schedulers/async_.py
index bc90c05..4ad15ac 100644
--- a/src/apscheduler/schedulers/async_.py
+++ b/src/apscheduler/schedulers/async_.py
@@ -28,7 +28,12 @@ from ..events import (
SchedulerStopped,
ScheduleUpdated,
)
-from ..exceptions import JobCancelled, JobDeadlineMissed, JobLookupError
+from ..exceptions import (
+ JobCancelled,
+ JobDeadlineMissed,
+ JobLookupError,
+ ScheduleLookupError,
+)
from ..marshalling import callable_to_ref
from ..structures import JobResult, Task
from ..workers.async_ import AsyncWorker
@@ -168,7 +173,10 @@ class AsyncScheduler:
"""
schedules = await self.data_store.get_schedules({id})
- return schedules[0]
+ if schedules:
+ return schedules[0]
+ else:
+ raise ScheduleLookupError(id)
async def remove_schedule(self, id: str) -> None:
"""
diff --git a/src/apscheduler/schedulers/sync.py b/src/apscheduler/schedulers/sync.py
index 3f59b3f..356608e 100644
--- a/src/apscheduler/schedulers/sync.py
+++ b/src/apscheduler/schedulers/sync.py
@@ -28,7 +28,12 @@ from ..events import (
SchedulerStopped,
ScheduleUpdated,
)
-from ..exceptions import JobCancelled, JobDeadlineMissed, JobLookupError
+from ..exceptions import (
+ JobCancelled,
+ JobDeadlineMissed,
+ JobLookupError,
+ ScheduleLookupError,
+)
from ..marshalling import callable_to_ref
from ..structures import Job, JobResult, Schedule, Task
from ..workers.sync import Worker
@@ -198,7 +203,10 @@ class Scheduler:
"""
self._ensure_services_ready()
schedules = self.data_store.get_schedules({id})
- return schedules[0]
+ if schedules:
+ return schedules[0]
+ else:
+ raise ScheduleLookupError(id)
def remove_schedule(self, id: str) -> None:
"""
diff --git a/tests/test_schedulers.py b/tests/test_schedulers.py
index ab49abe..1961486 100644
--- a/tests/test_schedulers.py
+++ b/tests/test_schedulers.py
@@ -21,10 +21,10 @@ from apscheduler.events import (
SchedulerStopped,
TaskAdded,
)
-from apscheduler.exceptions import JobLookupError
+from apscheduler.exceptions import JobLookupError, ScheduleLookupError
from apscheduler.schedulers.async_ import AsyncScheduler
from apscheduler.schedulers.sync import Scheduler
-from apscheduler.structures import Job, Task
+from apscheduler.structures import Job, Schedule, Task
from apscheduler.triggers.date import DateTrigger
from apscheduler.triggers.interval import IntervalTrigger
from apscheduler.workers.async_ import AsyncWorker
@@ -98,6 +98,16 @@ class TestAsyncScheduler:
# There should be no more events on the list
assert not received_events
+ async def test_add_get_schedule(self) -> None:
+ async with AsyncScheduler(start_worker=False) as scheduler:
+ with pytest.raises(ScheduleLookupError):
+ await scheduler.get_schedule("dummyid")
+
+ trigger = DateTrigger(datetime.now(timezone.utc))
+ await scheduler.add_schedule(dummy_async_job, trigger, id="dummyid")
+ schedule = await scheduler.get_schedule("dummyid")
+ assert isinstance(schedule, Schedule)
+
@pytest.mark.parametrize(
"max_jitter, expected_upper_bound",
[pytest.param(2, 2, id="within"), pytest.param(4, 2.999999, id="exceed")],
@@ -266,6 +276,16 @@ class TestSyncScheduler:
received_event = received_events.pop(0)
assert isinstance(received_event, SchedulerStopped)
+ def test_add_get_schedule(self) -> None:
+ with Scheduler(start_worker=False) as scheduler:
+ with pytest.raises(ScheduleLookupError):
+ scheduler.get_schedule("dummyid")
+
+ trigger = DateTrigger(datetime.now(timezone.utc))
+ scheduler.add_schedule(dummy_async_job, trigger, id="dummyid")
+ schedule = scheduler.get_schedule("dummyid")
+ assert isinstance(schedule, Schedule)
+
@pytest.mark.parametrize(
"max_jitter, expected_upper_bound",
[pytest.param(2, 2, id="within"), pytest.param(4, 2.999999, id="exceed")],