Skip to content

Commit bf5baa4

Browse files
committed
valkey tests
1 parent 950b6ce commit bf5baa4

16 files changed

+118
-69
lines changed

poetry.lock

Lines changed: 15 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ croniter = ">=2.0"
4747
click = "^8.1"
4848
rq = "^1.16"
4949
pyyaml = { version = "^6.0", optional = true }
50-
valkey-py = { version = "^0.0.1", optional = true }
50+
valkey = "6.0.1"
5151

5252
[tool.poetry.dev-dependencies]
5353
poetry = "^1.8.3"

scheduler/admin/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
from .task_models import TaskAdmin # noqa: F401
2-
from .redis_models import QueueAdmin, WorkerAdmin # noqa: F401
2+
from .ephemeral_models import QueueAdmin, WorkerAdmin # noqa: F401
File renamed without changes.

scheduler/admin/task_models.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import redis
2+
import valkey
23
from django.contrib import admin, messages
34
from django.contrib.contenttypes.admin import GenericStackedInline
45
from django.utils.translation import gettext_lazy as _
56

67
from scheduler import tools
8+
from scheduler.connection_types import ConnectionErrorType
79
from scheduler.models import CronTask, TaskArg, TaskKwarg, RepeatableTask, ScheduledTask
810
from scheduler.settings import SCHEDULER_CONFIG, logger
911
from scheduler.tools import get_job_executions
@@ -185,17 +187,17 @@ def change_view(self, request, object_id, form_url="", extra_context=None):
185187
obj = self.get_object(request, object_id)
186188
try:
187189
execution_list = get_job_executions(obj.queue, obj)
188-
except redis.ConnectionError as e:
190+
except (redis.ConnectionError, valkey.ConnectionError) as e:
189191
logger.warn(f"Could not get job executions: {e}")
190192
execution_list = list()
191-
paginator = self.get_paginator(request, execution_list, SCHEDULER_CONFIG["EXECUTIONS_IN_PAGE"])
193+
paginator = self.get_paginator(request, execution_list, SCHEDULER_CONFIG.EXECUTIONS_IN_PAGE)
192194
page_number = request.GET.get("p", 1)
193195
page_obj = paginator.get_page(page_number)
194196
page_range = paginator.get_elided_page_range(page_obj.number)
195197

196198
extra.update(
197199
{
198-
"pagination_required": paginator.count > SCHEDULER_CONFIG["EXECUTIONS_IN_PAGE"],
200+
"pagination_required": paginator.count > SCHEDULER_CONFIG.EXECUTIONS_IN_PAGE,
199201
"executions": page_obj,
200202
"page_range": page_range,
201203
"page_var": "p",

scheduler/connection_types.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import Union, Dict, Tuple, Type
2+
3+
import redis
4+
import valkey
5+
6+
from scheduler.settings import Broker
7+
8+
ConnectionErrorType = Union[redis.ConnectionError, valkey.ConnectionError]
9+
ConnectionType = Union[redis.Redis, valkey.Valkey]
10+
PipelineType = Union[redis.client.Pipeline, valkey.client.Pipeline]
11+
RedisSentinel = redis.sentinel.Sentinel
12+
13+
BrokerConnectionClass: Dict[Tuple[Broker,bool], Type] = {
14+
# Map of (Broker, Strict flag) => Connection Class
15+
(Broker.REDIS, False): redis.Redis,
16+
(Broker.VALKEY, False): valkey.Valkey,
17+
(Broker.REDIS, True): redis.StrictRedis,
18+
(Broker.VALKEY, True): valkey.StrictValkey,
19+
}

scheduler/decorators.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ def job(*args, **kwargs):
3131
except KeyError:
3232
raise QueueNotFoundError(f"Queue {queue} does not exist")
3333

34-
config = settings.SCHEDULER_CONFIG
35-
36-
kwargs.setdefault("result_ttl", config.get("DEFAULT_RESULT_TTL"))
37-
kwargs.setdefault("timeout", config.get("DEFAULT_TIMEOUT"))
34+
kwargs.setdefault("result_ttl", settings.SCHEDULER_CONFIG.DEFAULT_RESULT_TTL)
35+
kwargs.setdefault("timeout", settings.SCHEDULER_CONFIG.DEFAULT_TIMEOUT)
3836

3937
decorator = rq_job_decorator(queue, *args, **kwargs)
4038
if func:

scheduler/management/commands/rqworker.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
import sys
44

55
import click
6+
import redis
7+
import valkey
68
from django.core.management.base import BaseCommand
79
from django.db import connections
8-
from redis.exceptions import ConnectionError
910
from rq.logutils import setup_loghandlers
1011

1112
from scheduler.tools import create_worker
@@ -109,6 +110,6 @@ def handle(self, **options):
109110
logging_level=log_level,
110111
max_jobs=options["max_jobs"],
111112
)
112-
except ConnectionError as e:
113+
except (redis.ConnectionError, valkey.ConnectionError) as e:
113114
click.echo(str(e), err=True)
114115
sys.exit(1)

scheduler/models/scheduled_task.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from scheduler.settings import QUEUES
2626
from scheduler.settings import logger
2727

28-
SCHEDULER_INTERVAL = settings.SCHEDULER_CONFIG["SCHEDULER_INTERVAL"]
28+
SCHEDULER_INTERVAL = settings.SCHEDULER_CONFIG.SCHEDULER_INTERVAL
2929

3030

3131
def failure_callback(job, connection, result, *args, **kwargs):
@@ -197,7 +197,7 @@ def _enqueue_args(self) -> Dict:
197197

198198
@property
199199
def rqueue(self) -> DjangoQueue:
200-
"""Returns redis-queue for job"""
200+
"""Returns django-queue for job"""
201201
return get_queue(self.queue)
202202

203203
def ready_for_schedule(self) -> bool:

scheduler/queues.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
from typing import List, Dict
22

33
import redis
4-
from redis.sentinel import Sentinel
4+
import valkey
55

6+
from .connection_types import RedisSentinel, BrokerConnectionClass
67
from .rq_classes import JobExecution, DjangoQueue, DjangoWorker
7-
from .settings import get_config
8-
from .settings import logger
8+
from .settings import SCHEDULER_CONFIG
9+
from .settings import logger, Broker
910

1011
_CONNECTION_PARAMS = {
1112
"URL",
@@ -31,12 +32,12 @@ def _get_redis_connection(config, use_strict_redis=False):
3132
"""
3233
Returns a redis connection from a connection config
3334
"""
34-
if get_config("FAKEREDIS"):
35+
if SCHEDULER_CONFIG.BROKER == Broker.FAKEREDIS:
3536
import fakeredis
3637

3738
redis_cls = fakeredis.FakeRedis if use_strict_redis else fakeredis.FakeStrictRedis
3839
else:
39-
redis_cls = redis.StrictRedis if use_strict_redis else redis.Redis
40+
redis_cls = BrokerConnectionClass[(SCHEDULER_CONFIG.BROKER, use_strict_redis)]
4041
logger.debug(f"Getting connection for {config}")
4142
if "URL" in config:
4243
if config.get("SSL") or config.get("URL").startswith("rediss://"):
@@ -62,7 +63,7 @@ def _get_redis_connection(config, use_strict_redis=False):
6263
}
6364
connection_kwargs.update(config.get("CONNECTION_KWARGS", {}))
6465
sentinel_kwargs = config.get("SENTINEL_KWARGS", {})
65-
sentinel = Sentinel(config["SENTINELS"], sentinel_kwargs=sentinel_kwargs, **connection_kwargs)
66+
sentinel = RedisSentinel(config["SENTINELS"], sentinel_kwargs=sentinel_kwargs, **connection_kwargs)
6667
return sentinel.master_for(
6768
service_name=config["MASTER_NAME"],
6869
redis_class=redis_cls,
@@ -86,7 +87,7 @@ def get_connection(queue_settings, use_strict_redis=False):
8687

8788

8889
def get_queue(
89-
name="default", default_timeout=None, is_async=None, autocommit=None, connection=None, **kwargs
90+
name="default", default_timeout=None, is_async=None, autocommit=None, connection=None, **kwargs
9091
) -> DjangoQueue:
9192
"""Returns an DjangoQueue using parameters defined in `SCHEDULER_QUEUES`"""
9293
from .settings import QUEUES
@@ -115,7 +116,7 @@ def get_all_workers():
115116
try:
116117
curr_workers = set(DjangoWorker.all(connection=connection))
117118
workers.update(curr_workers)
118-
except redis.ConnectionError as e:
119+
except (redis.ConnectionError, valkey.ConnectionError) as e:
119120
logger.error(f"Could not connect for queue {queue_name}: {e}")
120121
return workers
121122

0 commit comments

Comments
 (0)