Skip to content

Commit 66213ba

Browse files
authored
Allow fractional interval argument for database worker (#83)
1 parent 63fcda1 commit 66213ba

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

django_tasks/backends/database/management/commands/db_worker.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import math
23
import random
34
import signal
45
import sys
@@ -158,10 +159,9 @@ def valid_backend_name(val: str) -> str:
158159

159160

160161
def valid_interval(val: str) -> float:
161-
# Cast to an int first to catch invalid values like 'inf'
162-
int(val)
163-
164162
num = float(val)
163+
if not math.isfinite(num):
164+
raise ArgumentTypeError("Must be a finite floating point value")
165165
if num < 0:
166166
raise ArgumentTypeError("Must be greater than zero")
167167
return num

tests/tests/test_database_backend.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from functools import partial
66
from io import StringIO
77
from typing import Sequence, Union, cast
8-
from unittest import skipIf
8+
from unittest import mock, skipIf
99

1010
from django.core.exceptions import SuspiciousOperation
1111
from django.core.management import call_command, execute_from_command_line
@@ -426,7 +426,17 @@ def test_infinite_interval(self) -> None:
426426
execute_from_command_line(
427427
["django-admin", "db_worker", "--interval", "inf"]
428428
)
429-
self.assertIn("invalid valid_interval value: 'inf'", output.getvalue())
429+
self.assertIn("Must be a finite floating point value", output.getvalue())
430+
431+
def test_fractional_interval(self) -> None:
432+
with mock.patch(
433+
"django_tasks.backends.database.management.commands.db_worker.Worker"
434+
) as worker_class:
435+
execute_from_command_line(
436+
["django-admin", "db_worker", "--interval", "0.1"]
437+
)
438+
439+
self.assertEqual(worker_class.mock_calls[0].kwargs["interval"], 0.1)
430440

431441
def test_run_after(self) -> None:
432442
result = test_tasks.noop_task.using(

0 commit comments

Comments
 (0)