To clarify further, "/tmp" in conn_string = "host='/tmp' dbname='foobar' user='foo' password='bar'"
implies the use of Unix Sockets. This is a legitamte connection and supported by psycopg2 however it is disregarded by the DAL due to the Regular Expression enforced syntax of the connection string. On Monday, May 28, 2012 9:43:06 AM UTC-7, Babak wrote: > > Web2Py community, > > I am rewriting this note, please disregard/delete the prior post (I'm not > getting updated on it) > > Working with the DAL I noted that the Regular Expression does not allow > for host names that are directories such as "/tmp" > > The following line is from DAL.py > > [1] > re.compile('^(?P<user>[^:@]+)(\:(?P<password>[^@]*))?@(?P<host>[^\:@/]+)(\:(?P<port>[0-9]+))?/(?P<db>[^\?]+)(\?sslmode=(?P<sslmode>.+))?$') > > Note that the 70th character in [1] above, "/" excludes the option of > having a host named "/tmp" however the following is a legitimate postgres > connection: > > import psycopg2 > conn_string = "host='/tmp' dbname='foobar' user='foo' password='bar'" > conn = psycopg2.connect(conn_string) > cursor = conn.cursor() > cursor.execute("SELECT * FROM foobar_table") > records = cursor.fetchall() > > There are many instances where a UNIX user may prefer sockets over > localhost connections. The easiest work around I can think of is to change > [1] to the following: > > [2] > re.compile('^(?P<user>[^:@]+)(\:(?P<password>[^@]*))?@(?P<host>[^\:@]+)(\:(?P<port>[0-9]+))?/(?P<db>[^\?]+)(\?sslmode=(?P<sslmode>.+))?$') > > Where the "/" character exclusion is removed from the character class > definition for the group "host" > > Best regards, > > Babak > >