Skip to content

Url cannot be Optional #39

@igoose1

Description

@igoose1

BaseRedisBroker always expects url for redis. However, for some reasons now it's set to None by default. Later BaseRedisBroker uses this Optional[str] in Redis ConnectionPool. ConnectionPool expects a str (not Optional[str]). This can be unclear from documentation but I checked: it fails.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "hidden/virtualenvs/parla-JNkILVkS-py3.10/lib/python3.10/site-packages/taskiq_redis/redis_broker.py", line 41, in __init__
    self.connection_pool: ConnectionPool = ConnectionPool.from_url(
  File "hidden/virtualenvs/parla-JNkILVkS-py3.10/lib/python3.10/site-packages/redis/asyncio/connection.py", line 1259, in from_url
    url_options = parse_url(url)
  File "hidden/virtualenvs/parla-JNkILVkS-py3.10/lib/python3.10/site-packages/redis/asyncio/connection.py", line 1195, in parse_url
    raise ValueError(
ValueError: Redis URL must specify one of the following schemes (redis://, rediss://, unix://)

How did I find out this? I messed up with a parameter name and tried to create a broker by ListQueueBroker(redis_url="redis://localhost/0") instead of ListQueueBroker(url="redis://localhost/0"). It was fun to debug.

TL;DR: What to do?

Make this:

class BaseRedisBroker(AsyncBroker):
    """Base broker that works with Redis."""

    def __init__(
        self,
        url: str,  # <--
    # ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions