I tested my app with version 1.92.1 and it works. I then copied it to trunk
and I can no longer connect to the PostgreSQL database I use.
I looked at the code in dal.py for the PostgreSQL adapter and driver_args
defaults to empty dict {}, adding some debug print code shows it is set on
the class construction to be {'check_same_thread': False} and when this is
passed to the driver an invalid keyword argument error occurs
Here is a traceback from the ticket.
web2py™ Version 1.92.1 (2011-03-03 08:26:32) Python Python 2.6.5:
/usr/bin/python Traceback
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Traceback (most recent call last):
File "/home/camcentral/Dev/web2py-hg/gluon/restricted.py", line 188, in
restricted
exec ccode in environment
File "/home/camcentral/Dev/web2py-hg/applications/ccims/models/A_db.py"
<http://127.0.0.1:8000/admin/default/edit/ccims/models/A_db.py>, line 22, in
<module>
db = DAL('postgres://user:password@localhost/cc_ims', POOL_SIZE,
check_reserved=check_reserved_value)
File "/home/camcentral/Dev/web2py-hg/gluon/dal.py", line 3529, in __init__
raise RuntimeError, "Failure to connect, tried 5 times:\n%s" % error
RuntimeError: Failure to connect, tried 5 times:
'check_same_thread' is an invalid keyword argument for this function
Error snapshot [image: help] Detailed traceback description
<type 'exceptions.RuntimeError'>(Failure to connect, tried 5 times:
'check_same_thread' is an invalid keyword argument for this function)
Frames
-
*File /home/camcentral/Dev/web2py-hg/gluon/restricted.py in restricted at
line 188* code arguments variables
Function argument list
(code='# -*- coding: utf-8 -*- \n# this file is
released...sion.table_name.requires = IS_IN_SET(db.tables)\n\n',
environment={'A': <class 'gluon.html.A'>, 'B': <class 'gluon.html.B'>,
'BEAUTIFY': <class 'gluon.html.BEAUTIFY'>, 'BODY': <class
'gluon.html.BODY'>, 'BR': <class 'gluon.html.BR'>, 'CENTER': <class
'gluon.html.CENTER'>, 'CLEANUP': <class 'gluon.validators.CLEANUP'>, 'CODE':
<class 'gluon.html.CODE'>, 'COUPLE_MENUS': True, 'CRYPT': <class
'gluon.validators.CRYPT'>, ...},
layer='/home/camcentral/Dev/web2py-hg/applications/ccims/models/A_db.py')
Code listing
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
if type(code) == types.CodeType:
ccode = code
else:
ccode = compile2(code,layer)
exec ccode in environment
except HTTP:
raise
except Exception:
# XXX Show exception in Wing IDE if running in debugger
Variables environment {'A': <class 'gluon.html.A'>, 'B': <class
'gluon.html.B'>, 'BEAUTIFY': <class 'gluon.html.BEAUTIFY'>, 'BODY': <class
'gluon.html.BODY'>, 'BR': <class 'gluon.html.BR'>, 'CENTER': <class
'gluon.html.CENTER'>, 'CLEANUP': <class 'gluon.validators.CLEANUP'>, 'CODE':
<class 'gluon.html.CODE'>, 'COUPLE_MENUS': True, 'CRYPT': <class
'gluon.validators.CRYPT'>, ...} ccode <code object <module> at
0x30bda08, file "/home/...py-hg/applications/ccims/models/A_db.py", line 8>
-
*File /home/camcentral/Dev/web2py-hg/applications/ccims/models/A_db.py in
<module> at line 22* code arguments variables
Function argument list
()
Code listing
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
# else use a normal relational database
#*** Add customization
# db = DAL('sqlite://storage.sqlite') # if not, use SQLite or other
DB
# CamCentral IMS configuration database
# db = DAL('mysql://root:pass@localhost/cc_ims', POOL_SIZE,
check_reserved=check_reserved_value)
db = DAL('postgres://user:password@localhost/cc_ims', POOL_SIZE,
check_reserved=check_reserved_value)
## if no need for session
# session.forget()
#########################################################################
Variables DAL <class 'gluon.dal.DAL'> check_reserved undefined
POOL_SIZE 0 db undefined check_reserved_value ['all']
-
*File /home/camcentral/Dev/web2py-hg/gluon/dal.py in __init__ at line
3529* code arguments variables
Function argument list
(self=<DAL {'_lastsql': '', '_db_codec': 'UTF-8', '_ur...cc_ims',
'_pool_size': 0, '_dbname': 'postgres'}>,
uri='postgres://user:password@localhost/cc_ims', pool_size=0, folder=None,
db_codec='UTF-8', check_reserved=['all'], migrate=True, fake_migrate=False,
decode_credentials=False, driver_args={'check_same_thread': False})