#
#
+import re
+import traceback
+import commands
+from pprint import pformat
+from types import StringTypes, NoneType
+
import psycopg2
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
# UNICODEARRAY not exported yet
psycopg2.extensions.register_type(psycopg2._psycopg.UNICODEARRAY)
-import pgdb
-from types import StringTypes, NoneType
-import traceback
-import commands
-import re
-from pprint import pformat
+# allow to run sfa2wsdl if this is missing (for mac)
+import sys
+try: import pgdb
+except: print >> sys.stderr, "WARNING, could not import pgdb"
from sfa.util.faults import *
-from sfa.util.debug import *
+from sfa.util.sfalogging import logger
if not psycopg2:
is8bit = re.compile("[\x80-\xff]").search
pgdb.pgdbTypeCache.typecast = unicast(pgdb.pgdbTypeCache.typecast)
+def handle_exception(f):
+ def wrapper(*args, **kwds):
+ try: return f(*args, **kwds)
+ except Exception, fault:
+ raise SfaDBError(str(fault))
+ return wrapper
+
class PostgreSQL:
def __init__(self, config):
self.config = config
# self.debug = True
self.connection = None
+ @handle_exception
def cursor(self):
if self.connection is None:
# (Re)initialize database connection
return self.rowcount
def next_id(self, table_name, primary_key):
- sequence = "%(table_name)s_%(primary_key)s_seq" % locals()
- sql = "SELECT nextval('%(sequence)s')" % locals()
- rows = self.selectall(sql, hashref = False)
- if rows:
- return rows[0][0]
-
- return None
+ sequence = "%(table_name)s_%(primary_key)s_seq" % locals()
+ sql = "SELECT nextval('%(sequence)s')" % locals()
+ rows = self.selectall(sql, hashref = False)
+ if rows:
+ return rows[0][0]
+ return None
def last_insert_id(self, table_name, primary_key):
if isinstance(self.lastrowid, int):
if not params:
if self.debug:
- print >> log,'execute0',query
+ logger.debug('execute0 %r'%query)
cursor.execute(query)
elif isinstance(params,dict):
if self.debug:
- print >> log,'execute-dict: params',params,'query',query%params
+ logger.debug('execute-dict: params=[%r] query=[%r]'%(params,query%params))
cursor.execute(query,params)
elif isinstance(params,tuple) and len(params)==1:
if self.debug:
- print >> log,'execute-tuple',query%params[0]
+ logger.debug('execute-tuple %r'%(query%params[0]))
cursor.execute(query,params[0])
else:
param_seq=(params,)
if self.debug:
for params in param_seq:
- print >> log,'executemany',query%params
+ logger.debug('executemany %r'%(query%params))
cursor.executemany(query, param_seq)
(self.rowcount, self.description, self.lastrowid) = \
(cursor.rowcount, cursor.description, cursor.lastrowid)
except:
pass
uuid = commands.getoutput("uuidgen")
- print >> log, "Database error %s:" % uuid
- print >> log, e
- print >> log, "Query:"
- print >> log, query
- print >> log, "Params:"
- print >> log, pformat(params)
- raise GeniDBError("Please contact support")
+ logger.error("Database error %s:" % uuid)
+ logger.error("Exception=%r"%e)
+ logger.error("Query=%r"%query)
+ logger.error("Params=%r"%pformat(params))
+ logger.log_exc("PostgreSQL.execute caught exception")
+ raise SfaDBError("Please contact support: %s" % str(e))
return cursor