Skip to content

Custom connection class overriden by redis uri  #1739

@m-novikov

Description

@m-novikov

It not possible to pass custom connection class via kwargs if redis uri starts with rediss:// (secure connection) or unix://

Version: 3.5.3
Platform: pyton3.9, fedora

Description:

Here are tests to reproduce. Discussion in aio-libs-abandoned/aioredis-py#1209 implies that it's intentional, but I am not sure if this is expected behavior.

import pytest
from redis import connection, from_url


@pytest.mark.parametrize("proto,ConnBase", [
    ("rediss", connection.SSLConnection), 
    ("unix", connection.UnixDomainSocketConnection),
])
def test_custom_connection_class_connection_pool(proto, ConnBase):
    class MyConn(ConnBase):
        pass

    pool = connection.ConnectionPool.from_url(
        url=f"{proto}:///tmp/redis.sock", connection_class=MyConn,
    )
    conn = pool.make_connection()
    assert isinstance(conn, MyConn)


@pytest.mark.parametrize("proto,ConnBase", [
    ("rediss", connection.SSLConnection), 
    ("unix", connection.UnixDomainSocketConnection),
])
def test_from_url_custom_connection_class(proto, ConnBase):
    class MyConn(ConnBase):
        pass

    redis = from_url(
        url=f"{proto}://127.0.0.1", connection_class=MyConn,
    )
    conn = redis.connection_pool.make_connection()
    assert isinstance(conn, MyConn)

Related issue in aioredis-py aio-libs-abandoned/aioredis-py#1209

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions