From: Daniele Varrazzo Date: Wed, 11 Nov 2020 16:39:35 +0000 (+0000) Subject: Allow omitting the conninfo param instead of requiring an empty string X-Git-Tag: 3.0.dev0~384 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad231c50b82ad11f0b461bbe894db9e04812120e;p=thirdparty%2Fpsycopg.git Allow omitting the conninfo param instead of requiring an empty string --- diff --git a/psycopg3/psycopg3/connection.py b/psycopg3/psycopg3/connection.py index 66249767b..9bbbae04c 100644 --- a/psycopg3/psycopg3/connection.py +++ b/psycopg3/psycopg3/connection.py @@ -220,15 +220,15 @@ class Connection(BaseConnection): @classmethod def connect( - cls, - conninfo: Optional[str] = None, - *, - autocommit: bool = False, - **kwargs: Any, + cls, conninfo: str = "", *, autocommit: bool = False, **kwargs: Any ) -> "Connection": - if conninfo is None and not kwargs: - raise TypeError("missing conninfo and not parameters specified") - conninfo = make_conninfo(conninfo or "", **kwargs) + """ + Connect to a database server and return a new `Connection` instance. + + TODO: connection_timeout to be implemented. + """ + + conninfo = make_conninfo(conninfo, **kwargs) gen = connect(conninfo) pgconn = cls.wait(gen) conn = cls(pgconn) @@ -351,15 +351,10 @@ class AsyncConnection(BaseConnection): @classmethod async def connect( - cls, - conninfo: Optional[str] = None, - *, - autocommit: bool = False, - **kwargs: Any, + cls, conninfo: str = "", *, autocommit: bool = False, **kwargs: Any ) -> "AsyncConnection": - if conninfo is None and not kwargs: - raise TypeError("missing conninfo and not parameters specified") - conninfo = make_conninfo(conninfo or "", **kwargs) + """`asyncio` version of `~Connection.connect()`.""" + conninfo = make_conninfo(conninfo, **kwargs) gen = connect(conninfo) pgconn = await cls.wait(gen) conn = cls(pgconn) diff --git a/tests/test_connection.py b/tests/test_connection.py index 2d28f20e9..66bbda62c 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -256,20 +256,21 @@ def test_set_encoding_bad(conn): @pytest.mark.parametrize( - "testdsn, kwargs, want", + "args, kwargs, want", [ - ("", {}, ""), - ("host=foo user=bar", {}, "host=foo user=bar"), - ("host=foo", {"user": "baz"}, "host=foo user=baz"), + ((), {}, ""), + (("",), {}, ""), + (("host=foo user=bar",), {}, "host=foo user=bar"), + (("host=foo",), {"user": "baz"}, "host=foo user=baz"), ( - "host=foo port=5432", + ("host=foo port=5432",), {"host": "qux", "user": "joe"}, "host=qux user=joe port=5432", ), - ("host=foo", {"user": None}, "host=foo"), + (("host=foo",), {"user": None}, "host=foo"), ], ) -def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): +def test_connect_args(monkeypatch, pgconn, args, kwargs, want): the_conninfo = None def fake_connect(conninfo): @@ -279,12 +280,17 @@ def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): yield monkeypatch.setattr(psycopg3.connection, "connect", fake_connect) - psycopg3.Connection.connect(testdsn, **kwargs) + psycopg3.Connection.connect(*args, **kwargs) assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want) @pytest.mark.parametrize( - "args, kwargs", [((), {}), (("", ""), {}), ((), {"nosuchparam": 42})] + "args, kwargs", + [ + (("host=foo", "host=bar"), {}), + (("", ""), {}), + ((), {"nosuchparam": 42}), + ], ) def test_connect_badargs(monkeypatch, pgconn, args, kwargs): def fake_connect(conninfo): diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index 60f6a0c68..30b50eef3 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -272,20 +272,21 @@ async def test_set_encoding_bad(aconn): @pytest.mark.parametrize( - "testdsn, kwargs, want", + "args, kwargs, want", [ - ("", {}, ""), - ("host=foo user=bar", {}, "host=foo user=bar"), - ("host=foo", {"user": "baz"}, "host=foo user=baz"), + ((), {}, ""), + (("",), {}, ""), + (("host=foo user=bar",), {}, "host=foo user=bar"), + (("host=foo",), {"user": "baz"}, "host=foo user=baz"), ( - "host=foo port=5432", + ("host=foo port=5432",), {"host": "qux", "user": "joe"}, "host=qux user=joe port=5432", ), - ("host=foo", {"user": None}, "host=foo"), + (("host=foo",), {"user": None}, "host=foo"), ], ) -async def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): +async def test_connect_args(monkeypatch, pgconn, args, kwargs, want): the_conninfo = None def fake_connect(conninfo): @@ -295,12 +296,17 @@ async def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): yield monkeypatch.setattr(psycopg3.connection, "connect", fake_connect) - await psycopg3.AsyncConnection.connect(testdsn, **kwargs) + await psycopg3.AsyncConnection.connect(*args, **kwargs) assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want) @pytest.mark.parametrize( - "args, kwargs", [((), {}), (("", ""), {}), ((), {"nosuchparam": 42})] + "args, kwargs", + [ + (("host=foo", "host=bar"), {}), + (("", ""), {}), + ((), {"nosuchparam": 42}), + ], ) async def test_connect_badargs(monkeypatch, pgconn, args, kwargs): def fake_connect(conninfo): diff --git a/tests/test_psycopg3_dbapi20.py b/tests/test_psycopg3_dbapi20.py index f12fac88e..c36bd653d 100644 --- a/tests/test_psycopg3_dbapi20.py +++ b/tests/test_psycopg3_dbapi20.py @@ -105,20 +105,21 @@ def test_time_from_ticks(ticks, want): @pytest.mark.parametrize( - "testdsn, kwargs, want", + "args, kwargs, want", [ - ("", {}, ""), - ("host=foo user=bar", {}, "host=foo user=bar"), - ("host=foo", {"user": "baz"}, "host=foo user=baz"), + ((), {}, ""), + (("",), {}, ""), + (("host=foo user=bar",), {}, "host=foo user=bar"), + (("host=foo",), {"user": "baz"}, "host=foo user=baz"), ( - "host=foo port=5432", + ("host=foo port=5432",), {"host": "qux", "user": "joe"}, "host=qux user=joe port=5432", ), - ("host=foo", {"user": None}, "host=foo"), + (("host=foo",), {"user": None}, "host=foo"), ], ) -def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): +def test_connect_args(monkeypatch, pgconn, args, kwargs, want): the_conninfo = None def fake_connect(conninfo): @@ -128,12 +129,17 @@ def test_connect_args(monkeypatch, pgconn, testdsn, kwargs, want): yield monkeypatch.setattr(psycopg3.connection, "connect", fake_connect) - psycopg3.connect(testdsn, **kwargs) + psycopg3.connect(*args, **kwargs) assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want) @pytest.mark.parametrize( - "args, kwargs", [((), {}), (("", ""), {}), ((), {"nosuchparam": 42})] + "args, kwargs", + [ + (("host=foo", "host=bar"), {}), + (("", ""), {}), + ((), {"nosuchparam": 42}), + ], ) def test_connect_badargs(monkeypatch, pgconn, args, kwargs): def fake_connect(conninfo):