mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-25 18:33:44 +03:00
Raise TypeError instead of InterfaceError on bad params on connect()
TypeError is the standard Python error raised in this case: $ python -c "(lambda a: None)(b=10)" TypeError: <lambda>() got an unexpected keyword argument 'b' We only used to raise InterfaceError when connect was used without any parameter at all, so it's hard to think a program depending on that design. Furthermore the function has always raised (and still does) OperationalError too, if the bad argument is detected by the libpq, and that cannot be changed because we can't tell the difference from a normal connection error.
This commit is contained in:
parent
cf3c6f86ff
commit
20d3d0f66d
|
@ -164,13 +164,13 @@ def connect(dsn=None,
|
||||||
items.extend([(k, v) for (k, v) in kwargs.iteritems() if v is not None])
|
items.extend([(k, v) for (k, v) in kwargs.iteritems() if v is not None])
|
||||||
|
|
||||||
if dsn is not None and items:
|
if dsn is not None and items:
|
||||||
raise InterfaceError(
|
raise TypeError(
|
||||||
"'%s' is an invalid keyword argument when the dsn is specified"
|
"'%s' is an invalid keyword argument when the dsn is specified"
|
||||||
% items[0][0])
|
% items[0][0])
|
||||||
|
|
||||||
if dsn is None:
|
if dsn is None:
|
||||||
if not items:
|
if not items:
|
||||||
raise InterfaceError('missing dsn and no parameters')
|
raise TypeError('missing dsn and no parameters')
|
||||||
else:
|
else:
|
||||||
dsn = " ".join(["%s=%s" % (k, _param_escape(str(v)))
|
dsn = " ".join(["%s=%s" % (k, _param_escape(str(v)))
|
||||||
for (k, v) in items])
|
for (k, v) in items])
|
||||||
|
|
|
@ -40,10 +40,10 @@ class ConnectTestCase(unittest.TestCase):
|
||||||
psycopg2._connect = self._connect_orig
|
psycopg2._connect = self._connect_orig
|
||||||
|
|
||||||
def test_there_has_to_be_something(self):
|
def test_there_has_to_be_something(self):
|
||||||
self.assertRaises(psycopg2.InterfaceError, psycopg2.connect)
|
self.assertRaises(TypeError, psycopg2.connect)
|
||||||
self.assertRaises(psycopg2.InterfaceError, psycopg2.connect,
|
self.assertRaises(TypeError, psycopg2.connect,
|
||||||
connection_factory=lambda dsn, async=False: None)
|
connection_factory=lambda dsn, async=False: None)
|
||||||
self.assertRaises(psycopg2.InterfaceError, psycopg2.connect,
|
self.assertRaises(TypeError, psycopg2.connect,
|
||||||
async=True)
|
async=True)
|
||||||
|
|
||||||
def test_no_keywords(self):
|
def test_no_keywords(self):
|
||||||
|
@ -128,11 +128,11 @@ class ConnectTestCase(unittest.TestCase):
|
||||||
self.assertEqual(self.args[0], r"dbname='\\every thing\''")
|
self.assertEqual(self.args[0], r"dbname='\\every thing\''")
|
||||||
|
|
||||||
def test_no_kwargs_swallow(self):
|
def test_no_kwargs_swallow(self):
|
||||||
self.assertRaises(psycopg2.InterfaceError,
|
self.assertRaises(TypeError,
|
||||||
psycopg2.connect, 'dbname=foo', database='foo')
|
psycopg2.connect, 'dbname=foo', database='foo')
|
||||||
self.assertRaises(psycopg2.InterfaceError,
|
self.assertRaises(TypeError,
|
||||||
psycopg2.connect, 'dbname=foo', user='postgres')
|
psycopg2.connect, 'dbname=foo', user='postgres')
|
||||||
self.assertRaises(psycopg2.InterfaceError,
|
self.assertRaises(TypeError,
|
||||||
psycopg2.connect, 'dbname=foo', no_such_param='meh')
|
psycopg2.connect, 'dbname=foo', no_such_param='meh')
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user