Change the debug variable to allow better control by the caller over how

debug output is managed.  The user can continue to use the current method
of passing a formatting string to have a replacement done and output will
be sent to the standard output exactly as it did before.  In addition they
can set it to a file object, sys.stderr for example, and the query string
will be printed to it.  Thay can also set it to a method (function) and the
query string will be passed to that method giving them the maximum flexibility
to do whatever they want with the query string.

I will be working with the PyGreSQL documentation shortly and at that time
will properly document this feature.
This commit is contained in:
D'Arcy J.M. Cain 2002-11-25 01:28:32 +00:00
parent 04c8785c7b
commit f393ee0680

View File

@ -6,6 +6,7 @@
# "Classic" interface. For DB-API compliance use the pgdb module.
from _pg import *
from types import *
import string, re, sys
# utility function
@ -73,10 +74,15 @@ class DB:
pg_attribute.attisdropped = 'f'""").getresult():
self.__pkeys__[rel] = att
def _do_debug(self, s):
if not self.debug: return
if type(self.debug) == StringType: print self.debug % s
if type(self.debug) == FunctionType: self.debug(s)
if type(self.debug) == FileType: print >> self.debug, s
# wrap query for debugging
def query(self, qstr):
if self.debug != None:
print self.debug % qstr
self._do_debug(qstr)
return self.db.query(qstr)
# If third arg supplied set primary key to it
@ -158,7 +164,7 @@ class DB:
fnames = self.get_attnames(xcl)
if type(arg) == type({}):
if type(arg) == DictType:
# To allow users to work with multiple tables we munge the
# name when the key is "oid"
if keyname == 'oid': k = arg['oid_%s' % xcl]
@ -178,7 +184,7 @@ class DB:
(xcl, string.join(fnames.keys(), ','),\
cl, keyname, _quote(k, fnames[keyname]))
if self.debug != None: print self.debug % q
self._do_debug(q)
res = self.db.query(q).dictresult()
if res == []:
raise error, \
@ -205,7 +211,7 @@ class DB:
try:
q = "INSERT INTO %s (%s) VALUES (%s)" % \
(cl, string.join(n, ','), string.join(l, ','))
if self.debug != None: print self.debug % q
self._do_debug(q)
a['oid_%s' % cl] = self.db.query(q)
except:
raise error, "Error inserting into %s: %s" % (cl, sys.exc_value)
@ -241,7 +247,7 @@ class DB:
try:
q = "UPDATE %s SET %s WHERE %s" % \
(cl, string.join(v, ','), where)
if self.debug != None: print self.debug % q
self._do_debug(q)
self.db.query(q)
except:
raise error, "Can't update %s: %s" % (cl, sys.exc_value)
@ -270,7 +276,7 @@ class DB:
def delete(self, cl, a):
try:
q = "DELETE FROM %s WHERE oid = %s" % (cl, a['oid_%s' % cl])
if self.debug != None: print self.debug % q
self._do_debug(q)
self.db.query(q)
except:
raise error, "Can't delete %s: %s" % (cl, sys.exc_value)