]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Acept string subtypes as connection string
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 23 May 2020 01:29:15 +0000 (13:29 +1200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 23 May 2020 01:29:15 +0000 (13:29 +1200)
psycopg3/conninfo.py
tests/test_async_connection.py
tests/test_connection.py

index 0fdce34c4c26234c63311bde0d308bc1e261b99b..f5f07f3616e453f370dd5e5faad34eafa91814c3 100644 (file)
@@ -14,10 +14,11 @@ def make_conninfo(conninfo: str = "", **kwargs: Any) -> str:
     if not conninfo and not kwargs:
         return ""
 
-    # If no kwarg is specified don't mung the conninfo but check if it's correct
+    # If no kwarg specified don't mung the conninfo but check if it's correct.
+    # Make sure to return a string, not a subtypep, to avoid making Liskov sad.
     if not kwargs:
         _parse_conninfo(conninfo)
-        return conninfo
+        return str(conninfo)
 
     # Override the conninfo with the parameters
     # Drop the None arguments
index fa84c2bdd301b9f738c77617ea54f33e1fbff20f..4ea0ee0688158bc78436618ffda3230c245ba205 100644 (file)
@@ -24,6 +24,14 @@ async def test_connect_bad():
         await AsyncConnection.connect("dbname=nosuchdb")
 
 
+async def test_connect_str_subclass(dsn):
+    class MyString(str):
+        pass
+
+    conn = await AsyncConnection.connect(MyString(dsn))
+    assert conn.status == conn.ConnStatus.OK
+
+
 async def test_close(aconn):
     assert not aconn.closed
     await aconn.close()
index 794295b55dd85892b87983f9ecb511284c3a371c..0a83d2f9affda8bab66e050c83780107544ded99 100644 (file)
@@ -16,6 +16,14 @@ def test_connect(dsn):
     assert conn.status == conn.ConnStatus.OK
 
 
+def test_connect_str_subclass(dsn):
+    class MyString(str):
+        pass
+
+    conn = Connection.connect(MyString(dsn))
+    assert conn.status == conn.ConnStatus.OK
+
+
 def test_connect_bad():
     with pytest.raises(psycopg3.OperationalError):
         Connection.connect("dbname=nosuchdb")