From eb514902eeee3d9b6d82942a5d43a84673b92e78 Mon Sep 17 00:00:00 2001 From: eblade Date: Fri, 27 Mar 2009 16:52:27 -0400 Subject: [PATCH] fix some weird things from the patch from runenes, re-replace recognisePlayerIDs(), new one converts all names to UTF-8 prior to processing, as apparently there are problems with dicts using unicode keys, and deals iwth database escaping issues. --- pyfpdb/GuiBulkImport.py | 9 +++--- pyfpdb/fpdb_simple.py | 67 +++++++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/pyfpdb/GuiBulkImport.py b/pyfpdb/GuiBulkImport.py index 1a62a37d..7ab50d41 100755 --- a/pyfpdb/GuiBulkImport.py +++ b/pyfpdb/GuiBulkImport.py @@ -208,9 +208,7 @@ class GuiBulkImport(): self.lab_drop.set_sensitive(False) def main(argv=None): - """main can also be called in the python interpreter, by supplying the command line as the argument. ->>>import GuiBulkImport ->>>GuiBulkImport.main(['-f'.'~/data/hands'])""" + """main can also be called in the python interpreter, by supplying the command line as the argument.""" if argv is None: argv = sys.argv[1:] @@ -238,13 +236,14 @@ def main(argv=None): if os.name == 'nt': settings['os'] = 'windows' else: settings['os'] = 'linuxmac' - settings.update(config.get_db_parameters('fpdb')) +# settings.update(config.get_db_parameters('fpdb')) + settings.update(config.get_db_parameters()) settings.update(config.get_tv_parameters()) settings.update(config.get_import_parameters()) settings.update(config.get_default_paths()) if not options.gui: - print """-q is deprecated. Just use "-f filename" instead""" + print '-q is deprecated. Just use "-f filename" instead' # This is because -q on its own causes an error, so -f is necessary and sufficient for cmd line use if not options.filename: i = GuiBulkImport(db, settings, config) diff --git a/pyfpdb/fpdb_simple.py b/pyfpdb/fpdb_simple.py index aa0b2e9f..e8ef9bb7 100644 --- a/pyfpdb/fpdb_simple.py +++ b/pyfpdb/fpdb_simple.py @@ -163,9 +163,9 @@ def prepareBulkImport(fdb): # DON'T FORGET TO RECREATE THEM!! #print "dropping pg fk", fk['fktab'], fk['fkcol'] try: - #print "alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol']) + #print "alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol']) fdb.cursor.execute("alter table %s drop constraint %s_%s_fkey" % (fk['fktab'], fk['fktab'], fk['fkcol'])) - print "dropped pg fk pg fk %s_%s_fkey" % (fk['fktab'], fk['fkcol']) + print "dropped pg fk pg fk %s_%s_fkey" % (fk['fktab'], fk['fkcol']) except: print "! failed drop pg fk %s_%s_fkey" % (fk['fktab'], fk['fkcol']) else: @@ -1392,34 +1392,43 @@ def recogniseTourneyTypeId(cursor, siteId, buyin, fee, knockout, rebuyOrAddon): # { playername: id } instead of depending on it's relation to the positions list # then this can be reduced in complexity a bit -def recognisePlayerIDs(cursor, names, site_id): - result = [] - for i in xrange(len(names)): - cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],)) - tmp=cursor.fetchall() - if (len(tmp)==0): #new player - cursor.execute ("INSERT INTO Players (name, siteId) VALUES (%s, %s)", (names[i], site_id)) - #print "Number of players rows inserted: %d" % cursor.rowcount - cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],)) - tmp=cursor.fetchall() - #print "recognisePlayerIDs, names[i]:",names[i],"tmp:",tmp - result.append(tmp[0][0]) - return result - #def recognisePlayerIDs(cursor, names, site_id): -# cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names)) # get all playerids by the names passed in -# ids = dict(cursor.fetchall()) # convert to dict -# if len(ids) != len(names): -# notfound = [n for n in names if n not in ids] # make list of names not in database -# if notfound: # insert them into database -# cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound)) -# cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(notfound)) # get their new ids -# tmp = dict(cursor.fetchall()) -# for n in tmp: # put them all into the same dict -# ids[n] = tmp[n] -# -# # return them in the SAME ORDER that they came in in the names argument, rather than the order they came out of the DB -# return [ids[n] for n in names] +# result = [] +# for i in xrange(len(names)): +# cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],)) +# tmp=cursor.fetchall() +# if (len(tmp)==0): #new player +# cursor.execute ("INSERT INTO Players (name, siteId) VALUES (%s, %s)", (names[i], site_id)) +# #print "Number of players rows inserted: %d" % cursor.rowcount +# cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],)) +# tmp=cursor.fetchall() +# #print "recognisePlayerIDs, names[i]:",names[i],"tmp:",tmp +# result.append(tmp[0][0]) +# return result + +def recognisePlayerIDs(cursor, names, site_id): + names = [n.encode("utf-8") for n in names] + namestring = "name=%s" + for x in xrange(len(names)-1): + namestring += " OR name=%s" +# print "names=", names, "\nnamestring=", namestring + cursor.execute("SELECT name,id FROM Players WHERE %s" % namestring , names) # get all playerids by the names passed in + ids = dict(cursor.fetchall()) # convert to dict + if len(ids) != len(names): + notfound = [n for n in names if n not in ids] # make list of names not in database + if notfound: # insert them into database + namestring = "name=%s" + for x in xrange(len(notfound)-1): + namestring += " OR name=%s" +# print "namestring=",namestring,"\nnotfound=", notfound + cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound)) + cursor.execute("SELECT name,id FROM Players WHERE %s" % namestring, notfound) # get their new ids + tmp = dict(cursor.fetchall()) + for n in tmp: # put them all into the same dict + ids[n] = tmp[n] +# print "ids=", ids + # return them in the SAME ORDER that they came in in the names argument, rather than the order they came out of the DB + return [ids[n] for n in names] #end def recognisePlayerIDs