From 36731e10daaae4d78d764ebfe9a3497d8d279f87 Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Wed, 1 Jul 2026 13:14:21 +0530 Subject: [PATCH 1/9] Implement list_jobs method in scheduler Added a method to list names of all registered jobs. --- matrix/scheduler.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/matrix/scheduler.py b/matrix/scheduler.py index 398fbca..476eaa1 100644 --- a/matrix/scheduler.py +++ b/matrix/scheduler.py @@ -17,6 +17,11 @@ def __init__(self) -> None: @property def jobs(self) -> list[Job]: return cast(list[Job], self.scheduler.get_jobs()) + + def list_jobs(self) -> list[str]: + """Return a list of names of all registered jobs.""" + return [job.name for job in self.jobs] + def _parse_cron(self, cron: str) -> dict: """ From d89ef601f5d8c02252165b25bded4bcec6bca98f Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Wed, 1 Jul 2026 14:36:58 +0530 Subject: [PATCH 2/9] Add tests for Scheduler's list_jobs method Add tests for Scheduler's list_jobs method to verify it returns an empty list and proper format. --- tests/test_scheduler.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/test_scheduler.py diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py new file mode 100644 index 0000000..845f9b6 --- /dev/null +++ b/tests/test_scheduler.py @@ -0,0 +1,16 @@ +import pytest +# Assuming Scheduler is imported from your main module package structure +# Adjust the import line below if the project structure uses a different path +from matrixpy.scheduler import Scheduler + +def test_list_jobs_empty(): + """Verify list_jobs returns an empty list or initialized structure initially.""" + scheduler = Scheduler() + assert isinstance(scheduler.list_jobs(), list) + +def test_list_jobs_content(): + """Verify list_jobs returns a list format properly.""" + scheduler = Scheduler() + # If jobs are added during initialization or tests, verify it handles it gracefully + jobs = scheduler.list_jobs() + assert list(jobs) == jobs From ab02f15f9dae9841d6c0f7529dff0158b59fc27f Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Wed, 1 Jul 2026 15:06:28 +0530 Subject: [PATCH 3/9] Update test_scheduler.py --- tests/test_scheduler.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index 845f9b6..d6c950c 100644 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -1,16 +1,7 @@ import pytest -# Assuming Scheduler is imported from your main module package structure -# Adjust the import line below if the project structure uses a different path from matrixpy.scheduler import Scheduler -def test_list_jobs_empty(): +def test_list_jobs__expect_empty(): """Verify list_jobs returns an empty list or initialized structure initially.""" scheduler = Scheduler() - assert isinstance(scheduler.list_jobs(), list) - -def test_list_jobs_content(): - """Verify list_jobs returns a list format properly.""" - scheduler = Scheduler() - # If jobs are added during initialization or tests, verify it handles it gracefully - jobs = scheduler.list_jobs() - assert list(jobs) == jobs + assert scheduler.list_jobs() == [] From 808a4e07c74472bf4ef05026757a2662fe995049 Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Fri, 3 Jul 2026 01:18:04 +0530 Subject: [PATCH 4/9] Update test_scheduler.py --- tests/test_scheduler.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index d6c950c..063d19b 100644 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -1,7 +1,9 @@ import pytest -from matrixpy.scheduler import Scheduler +from matrixpy.scheduler import Scheduler -def test_list_jobs__expect_empty(): - """Verify list_jobs returns an empty list or initialized structure initially.""" +def test_list_jobs__expect_empty_list(): + """ + Verify list_jobs returns an empty list structure initially. + """ scheduler = Scheduler() - assert scheduler.list_jobs() == [] + assert scheduler.list_jobs() == [] \ No newline at end of file From b4f779adc7e0bb2cb72123060a5389c821529598 Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Fri, 3 Jul 2026 10:24:55 +0530 Subject: [PATCH 5/9] style: format with double spacing for black --- tests/test_scheduler.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index 063d19b..df4e5a7 100644 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -1,9 +1,8 @@ import pytest from matrixpy.scheduler import Scheduler -def test_list_jobs__expect_empty_list(): - """ - Verify list_jobs returns an empty list structure initially. - """ + +def test_list_jobs__expect_empty(): + """Verify list_jobs returns an empty list or initialized structure.""" scheduler = Scheduler() - assert scheduler.list_jobs() == [] \ No newline at end of file + assert scheduler.list_jobs() == [] From eac162c54b779676f27454f7c36ca607e31b6c34 Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Fri, 3 Jul 2026 20:32:29 +0530 Subject: [PATCH 6/9] Remove duplicate list_jobs method Removed duplicate list_jobs method. --- matrix/scheduler.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/matrix/scheduler.py b/matrix/scheduler.py index 476eaa1..c1cc97d 100644 --- a/matrix/scheduler.py +++ b/matrix/scheduler.py @@ -17,6 +17,10 @@ def __init__(self) -> None: @property def jobs(self) -> list[Job]: return cast(list[Job], self.scheduler.get_jobs()) + + def list_jobs(self) -> list[str]: + """Return a list of names of all registered jobs.""" + return [job.name for job in self.jobs] def list_jobs(self) -> list[str]: """Return a list of names of all registered jobs.""" From 26cd18821eed7021d59468ed6d8ecca139af9e8f Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Fri, 3 Jul 2026 20:35:48 +0530 Subject: [PATCH 7/9] Update test_scheduler.py From 8ccf22a285a35ece196b33658118fadd38b65315 Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Sun, 5 Jul 2026 00:53:48 +0530 Subject: [PATCH 8/9] Implement unschedule method for job removal Add method to unschedule jobs by name. --- matrix/scheduler.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/matrix/scheduler.py b/matrix/scheduler.py index c1cc97d..8e17ef3 100644 --- a/matrix/scheduler.py +++ b/matrix/scheduler.py @@ -57,6 +57,13 @@ async def morning_update() -> None: cron_trigger = CronTrigger(**self._parse_cron(cron)) self.scheduler.add_job(func, trigger=cron_trigger, name=func.__name__) + def unschedule(self, name: str) -> None: + """Remove a registered job by its name.""" + for job in self.jobs: + if job.name == name: + self.scheduler.remove_job(job.id) + break + def start(self) -> None: """Start the scheduler.""" self.scheduler.start() From d57f42d5b3a94e93d595ed661b12088c1707037f Mon Sep 17 00:00:00 2001 From: Shouryaverma19 Date: Sun, 5 Jul 2026 01:05:45 +0530 Subject: [PATCH 9/9] Enhance scheduler tests with job management cases Added a sample task function and expanded the test to include job management scenarios. --- tests/test_scheduler.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py index df4e5a7..a145a37 100644 --- a/tests/test_scheduler.py +++ b/tests/test_scheduler.py @@ -2,7 +2,20 @@ from matrixpy.scheduler import Scheduler -def test_list_jobs__expect_empty(): - """Verify list_jobs returns an empty list or initialized structure.""" +def sample_task() -> None: + pass + + +def test_scheduler_job_management() -> None: scheduler = Scheduler() + + # 1. Verify list_jobs returns an empty list on initialization + assert scheduler.list_jobs() == [] + + # 2. Verify list_jobs returns the correct name after scheduling + scheduler.schedule("*/5 * * * *", sample_task) + assert scheduler.list_jobs() == ["sample_task"] + + # 3. Verify unschedule cleanly removes the job from the system + scheduler.unschedule("sample_task") assert scheduler.list_jobs() == []