Merge branch 'master' of git://git.assembla.com/fpdb-sql
This commit is contained in:
commit
0592b1c2c0
|
@ -188,6 +188,7 @@ class Database:
|
|||
def __init__(self, c, sql = None):
|
||||
log.info("Creating Database instance, sql = %s" % sql)
|
||||
self.config = c
|
||||
self.__connected = False
|
||||
self.fdb = fpdb_db.fpdb_db() # sets self.fdb.db self.fdb.cursor and self.fdb.sql
|
||||
self.do_connect(c)
|
||||
print "connection =", self.connection
|
||||
|
@ -237,7 +238,12 @@ class Database:
|
|||
self.hud_style = style
|
||||
|
||||
def do_connect(self, c):
|
||||
try:
|
||||
self.fdb.do_connect(c)
|
||||
except:
|
||||
# error during connect
|
||||
self.__connected = False
|
||||
raise
|
||||
self.connection = self.fdb.db
|
||||
self.wrongDbVersion = self.fdb.wrongDbVersion
|
||||
|
||||
|
@ -247,6 +253,7 @@ class Database:
|
|||
self.db_server = db_params['db-server']
|
||||
self.database = db_params['db-databaseName']
|
||||
self.host = db_params['db-host']
|
||||
self.__connected = True
|
||||
|
||||
def commit(self):
|
||||
self.fdb.db.commit()
|
||||
|
@ -254,6 +261,9 @@ class Database:
|
|||
def rollback(self):
|
||||
self.fdb.db.rollback()
|
||||
|
||||
def connected(self):
|
||||
return self.__connected
|
||||
|
||||
def get_cursor(self):
|
||||
return self.connection.cursor()
|
||||
|
||||
|
|
|
@ -34,5 +34,19 @@ class FpdbMySQLNoDatabase(FpdbDatabaseError):
|
|||
def __str__(self):
|
||||
return repr(self.value +" " + self.errmsg)
|
||||
|
||||
class FpdbPostgresqlAccessDenied(FpdbDatabaseError):
|
||||
def __init__(self, value='', errmsg=''):
|
||||
self.value = value
|
||||
self.errmsg = errmsg
|
||||
def __str__(self):
|
||||
return repr(self.value +" " + self.errmsg)
|
||||
|
||||
class FpdbPostgresqlNoDatabase(FpdbDatabaseError):
|
||||
def __init__(self, value='', errmsg=''):
|
||||
self.value = value
|
||||
self.errmsg = errmsg
|
||||
def __str__(self):
|
||||
return repr(self.value +" " + self.errmsg)
|
||||
|
||||
class DuplicateError(FpdbError):
|
||||
pass
|
||||
|
|
|
@ -91,10 +91,15 @@ class GuiPrefs:
|
|||
#iter = self.configStore.append( parent, [node.nodeValue, None] )
|
||||
iter = None
|
||||
if node.nodeType != node.TEXT_NODE and node.nodeType != node.COMMENT_NODE:
|
||||
name = ""
|
||||
iter = self.configStore.append( parent, [node, setting, value] )
|
||||
if node.hasAttributes():
|
||||
for i in xrange(node.attributes.length):
|
||||
self.configStore.append( iter, [node, node.attributes.item(i).localName, node.attributes.item(i).value] )
|
||||
if node.attributes.item(i).localName in ('site_name', 'game_name', 'stat_name', 'name', 'db_server', 'site'):
|
||||
name = " " + node.attributes.item(i).value
|
||||
if name != "":
|
||||
self.configStore.set_value(iter, 1, setting+name)
|
||||
if node.hasChildNodes():
|
||||
for elem in node.childNodes:
|
||||
self.addTreeRows(iter, elem)
|
||||
|
@ -156,7 +161,7 @@ if __name__=="__main__":
|
|||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(500, 500)
|
||||
dia.set_default_size(700, 500)
|
||||
prefs = GuiPrefs(config, win, dia.vbox)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
|
|
|
@ -279,12 +279,20 @@ class fpdb:
|
|||
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT))
|
||||
dia.set_default_size(500, 500)
|
||||
dia.set_default_size(700, 500)
|
||||
|
||||
prefs = GuiPrefs.GuiPrefs(self.config, self.window, dia.vbox)
|
||||
response = dia.run()
|
||||
if response == gtk.RESPONSE_ACCEPT:
|
||||
# save updated config
|
||||
self.config.save()
|
||||
if len(self.nb_tab_names) == 1:
|
||||
# only main tab open, reload profile
|
||||
self.load_profile()
|
||||
else:
|
||||
self.warning_box("Updated preferences have not been loaded because "
|
||||
+ "windows are open. Re-start fpdb to load them.")
|
||||
|
||||
dia.destroy()
|
||||
|
||||
def dia_create_del_database(self, widget, data=None):
|
||||
|
@ -646,7 +654,7 @@ class fpdb:
|
|||
('LoadProf', None, '_Load Profile (broken)', '<control>L', 'Load your profile', self.dia_load_profile),
|
||||
('EditProf', None, '_Edit Profile (todo)', '<control>E', 'Edit your profile', self.dia_edit_profile),
|
||||
('SaveProf', None, '_Save Profile (todo)', '<control>S', 'Save your profile', self.dia_save_profile),
|
||||
('Preferences', None, '_Preferences', None, 'Edit your preferences', self.dia_preferences),
|
||||
('Preferences', None, 'Pre_ferences', '<control>F', 'Edit your preferences', self.dia_preferences),
|
||||
('import', None, '_Import'),
|
||||
('sethharchive', None, '_Set HandHistory Archive Directory', None, 'Set HandHistory Archive Directory', self.select_hhArchiveBase),
|
||||
('bulkimp', None, '_Bulk Import', '<control>B', 'Bulk Import', self.tab_bulk_import),
|
||||
|
@ -700,21 +708,26 @@ class fpdb:
|
|||
self.settings.update(self.config.get_import_parameters())
|
||||
self.settings.update(self.config.get_default_paths())
|
||||
|
||||
if self.db is not None and self.db.fdb is not None:
|
||||
if self.db is not None and self.db.connected:
|
||||
self.db.disconnect()
|
||||
|
||||
self.sql = SQL.Sql(db_server = self.settings['db-server'])
|
||||
err_msg = None
|
||||
try:
|
||||
self.db = Database.Database(self.config, sql = self.sql)
|
||||
except Exceptions.FpdbMySQLAccessDenied:
|
||||
#self.db = None
|
||||
self.warning_box("MySQL Server reports: Access denied. Are your permissions set correctly?")
|
||||
exit()
|
||||
err_msg = "MySQL Server reports: Access denied. Are your permissions set correctly?"
|
||||
except Exceptions.FpdbMySQLNoDatabase:
|
||||
#self.db = None
|
||||
msg = "MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started"
|
||||
self.warning_box(msg)
|
||||
exit
|
||||
err_msg = "MySQL client reports: 2002 or 2003 error. Unable to connect - " \
|
||||
+ "Please check that the MySQL service has been started"
|
||||
except Exceptions.FpdbPostgresqlAccessDenied:
|
||||
err_msg = "Postgres Server reports: Access denied. Are your permissions set correctly?"
|
||||
except Exceptions.FpdbPostgresqlNoDatabase:
|
||||
err_msg = "Postgres client reports: Unable to connect - " \
|
||||
+ "Please check that the Postgres service has been started"
|
||||
if err_msg is not None:
|
||||
self.db = None
|
||||
self.warning_box(err_msg)
|
||||
|
||||
# except FpdbMySQLFailedError:
|
||||
# self.warning_box("Unable to connect to MySQL! Is the MySQL server running?!", "FPDB ERROR")
|
||||
|
@ -732,7 +745,7 @@ class fpdb:
|
|||
# print "*** Error: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
||||
# sys.stderr.write("Failed to connect to %s database with username %s." % (self.settings['db-server'], self.settings['db-user']))
|
||||
|
||||
if self.db.wrongDbVersion:
|
||||
if self.db is not None and self.db.wrongDbVersion:
|
||||
diaDbVersionWarning = gtk.Dialog(title="Strong Warning - Invalid database version", parent=None, flags=0, buttons=(gtk.STOCK_OK,gtk.RESPONSE_OK))
|
||||
|
||||
label = gtk.Label("An invalid DB version or missing tables have been detected.")
|
||||
|
@ -751,13 +764,14 @@ class fpdb:
|
|||
diaDbVersionWarning.destroy()
|
||||
|
||||
if self.status_bar is None:
|
||||
self.status_bar = gtk.Label("Status: Connected to %s database named %s on host %s"%(self.db.get_backend_name(),self.db.database, self.db.host))
|
||||
self.status_bar = gtk.Label("")
|
||||
self.main_vbox.pack_end(self.status_bar, False, True, 0)
|
||||
self.status_bar.show()
|
||||
else:
|
||||
self.status_bar.set_text("Status: Connected to %s database named %s on host %s" % (self.db.get_backend_name(),self.db.database, self.db.host))
|
||||
|
||||
# Database connected to successfully, load queries to pass on to other classes
|
||||
if self.db is not None and self.db.connected:
|
||||
self.status_bar.set_text("Status: Connected to %s database named %s on host %s"
|
||||
% (self.db.get_backend_name(),self.db.database, self.db.host))
|
||||
# rollback to make sure any locks are cleared:
|
||||
self.db.rollback()
|
||||
|
||||
self.validate_config()
|
||||
|
@ -779,6 +793,7 @@ class fpdb:
|
|||
# TODO: can we get some / all of the stuff done in this function to execute on any kind of abort?
|
||||
print "Quitting normally"
|
||||
# TODO: check if current settings differ from profile, if so offer to save or abort
|
||||
if self.db is not None and self.db.connected:
|
||||
self.db.disconnect()
|
||||
self.statusIcon.set_visible(False)
|
||||
gtk.main_quit()
|
||||
|
|
|
@ -129,18 +129,22 @@ class fpdb_db:
|
|||
self.db = psycopg2.connect(database = database)
|
||||
connected = True
|
||||
except:
|
||||
# direct connection failed so try user/pass/... version
|
||||
pass
|
||||
#msg = "PostgreSQL direct connection to database (%s) failed, trying with user ..." % (database,)
|
||||
#print msg
|
||||
#raise FpdbError(msg)
|
||||
if not connected:
|
||||
try:
|
||||
self.db = psycopg2.connect(host = host,
|
||||
user = user,
|
||||
password = password,
|
||||
database = database)
|
||||
except:
|
||||
msg = "PostgreSQL connection to database (%s) user (%s) failed. Are you sure the DB is running?" % (database, user)
|
||||
except Exception, ex:
|
||||
if 'Connection refused' in ex.args[0]:
|
||||
# meaning eg. db not running
|
||||
raise FpdbPostgresqlNoDatabase(errmsg = ex.args[0])
|
||||
elif 'password authentication' in ex.args[0]:
|
||||
raise FpdbPostgresqlAccessDenied(errmsg = ex.args[0])
|
||||
else:
|
||||
msg = ex.args[0]
|
||||
print msg
|
||||
raise FpdbError(msg)
|
||||
elif backend == fpdb_db.SQLITE:
|
||||
|
@ -167,6 +171,7 @@ class fpdb_db:
|
|||
logging.warning("Some database functions will not work without NumPy support")
|
||||
else:
|
||||
raise FpdbError("unrecognised database backend:"+backend)
|
||||
|
||||
self.cursor = self.db.cursor()
|
||||
# Set up query dictionary as early in the connection process as we can.
|
||||
self.sql = FpdbSQLQueries.FpdbSQLQueries(self.get_backend_name())
|
||||
|
|
|
@ -1247,13 +1247,13 @@ sure to also change the following storage method and table_viewer.prepare_data i
|
|||
|
||||
if not isAllIn:
|
||||
isAllIn = any(i for i in allIns[1][player])
|
||||
elif len(action_types[2][player]) > 0:
|
||||
if isAllIn or len(action_types[2][player]) > 0:
|
||||
if all(actiontype != "fold" for actiontype in action_types[1][player]):
|
||||
myStreet2Seen = True
|
||||
|
||||
if not isAllIn:
|
||||
isAllAin = any(i for i in allIns[2][player])
|
||||
elif len(action_types[3][player]) > 0:
|
||||
if isAllIn or len(action_types[3][player]) > 0:
|
||||
if all(actiontype != "fold" for actiontype in action_types[2][player]):
|
||||
myStreet3Seen = True
|
||||
|
||||
|
@ -1264,7 +1264,7 @@ sure to also change the following storage method and table_viewer.prepare_data i
|
|||
#print "in else"
|
||||
if not isAllIn:
|
||||
isAllIn = any(i for i in allIns[3][player])
|
||||
elif len(action_types[4][player]) > 0:
|
||||
if isAllIn or len(action_types[4][player]) > 0:
|
||||
#print "in if"
|
||||
myStreet4Seen = True
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user