From ae4704b8dc003a035ab38c44e6bbec6a480c9b58 Mon Sep 17 00:00:00 2001 From: Worros Date: Sat, 21 Mar 2009 21:23:51 +0900 Subject: [PATCH] First working(?) version of siteneutral import --- pyfpdb/FpdbSQLQueries.py | 4 ++-- pyfpdb/fpdb_import.py | 24 ++++++++++++++++++------ pyfpdb/fpdb_parse_logic.py | 4 +--- pyfpdb/fpdb_save_to_db.py | 11 +++++++---- pyfpdb/fpdb_simple.py | 8 ++------ 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/pyfpdb/FpdbSQLQueries.py b/pyfpdb/FpdbSQLQueries.py index c3260466..55bf8c2e 100644 --- a/pyfpdb/FpdbSQLQueries.py +++ b/pyfpdb/FpdbSQLQueries.py @@ -41,8 +41,8 @@ class FpdbSQLQueries: self.query['list_tables'] = """ """ ################################################################## - # Drop Tables - MySQL, PostgreSQL and SQLite all share same syntax - ################################################################## + # Drop Tables - MySQL, PostgreSQL and SQLite all share same syntax + ################################################################## if(self.dbname == 'MySQL InnoDB') or (self.dbname == 'PostgreSQL') or (self.dbname == 'SQLite'): self.query['drop_table'] = """DROP TABLE IF EXISTS """ diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index e6baea29..fc878746 100644 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -58,13 +58,14 @@ class Importer: self.cursor = None self.filelist = {} self.dirlist = {} + self.siteIds = {} self.addToDirList = {} self.removeFromFileList = {} # to remove deleted files self.monitor = False - self.updated = {} #Time last import was run {file:mtime} + self.updated = {} #Time last import was run {file:mtime} self.lines = None - self.faobs = None #File as one big string - self.pos_in_file = {} # dict to remember how far we have read in the file + self.faobs = None # File as one big string + self.pos_in_file = {} # dict to remember how far we have read in the file #Set defaults self.callHud = self.config.get_import_parameters().get("callFpdbHud") if 'minPrint' not in self.settings: @@ -111,6 +112,18 @@ class Importer: def addImportFile(self, filename, site = "default", filter = "passthrough"): #TODO: test it is a valid file -> put that in config!! self.filelist[filename] = [site] + [filter] + if site not in self.siteIds: + # Get id from Sites table in DB + self.fdb.cursor.execute(self.fdb.sql.query['getSiteId'], (site,)) + result = self.fdb.cursor.fetchall() + if len(result) == 1: + self.siteIds[site] = result[0][0] + else: + if len(result) == 0: + print "[ERROR] Database ID for %s not found" % site + else: + print "[ERROR] More than 1 Database ID found for %s - Multiple currencies not implemented yet" % site + # Called from GuiBulkImport to add a file or directory. def addBulkImportImportFileOrDir(self, inputPath,filter = "passthrough"): @@ -289,9 +302,8 @@ class Importer: print "TODO: implement importing tournament summaries" #self.faobs = readfile(inputFile) #self.parseTourneyHistory() - return 0 + return (0,0,0,1,0) - site=fpdb_simple.recogniseSite(firstline) category=fpdb_simple.recogniseCategory(firstline) startpos=0 @@ -322,7 +334,7 @@ class Importer: try: handsId=fpdb_parse_logic.mainParser(self.settings['db-backend'], self.fdb.db - ,self.fdb.cursor, site, category, hand, self.config) + ,self.fdb.cursor, self.siteIds[site], category, hand, self.config) self.fdb.db.commit() stored+=1 diff --git a/pyfpdb/fpdb_parse_logic.py b/pyfpdb/fpdb_parse_logic.py index dd5d84ea..58cc94df 100644 --- a/pyfpdb/fpdb_parse_logic.py +++ b/pyfpdb/fpdb_parse_logic.py @@ -21,7 +21,7 @@ import fpdb_simple import fpdb_save_to_db #parses a holdem hand -def mainParser(backend, db, cursor, category, hand, config): +def mainParser(backend, db, cursor, siteID, category, hand, config): category = fpdb_simple.recogniseCategory(hand[0]) base = "hold" if category == "holdem" or category == "omahahi" or category == "omahahilo" else "stud" @@ -35,8 +35,6 @@ def mainParser(backend, db, cursor, category, hand, config): #part 1: read hand no and check for duplicate siteHandNo = fpdb_simple.parseSiteHandNo(hand[0]) handStartTime = fpdb_simple.parseHandStartTime(hand[0]) - siteID = fpdb_simple.recogniseSiteID() - #print "parse logic, siteID:",siteID,"site:",site isTourney = fpdb_simple.isTourney(hand[0]) smallBlindLine = 0 diff --git a/pyfpdb/fpdb_save_to_db.py b/pyfpdb/fpdb_save_to_db.py index f13c8032..85468c2b 100644 --- a/pyfpdb/fpdb_save_to_db.py +++ b/pyfpdb/fpdb_save_to_db.py @@ -28,11 +28,12 @@ SQLITE = 4 fastStoreHudCache = True # set this to True to test the new storeHudCache routine -saveActions = False # set this to False to avoid storing action data +saveActions = True # set this to False to avoid storing action data # Pros: speeds up imports # Cons: no action data is saved, so you need to keep the hand histories # variance not available on stats page - + # : No graphs + #stores a stud/razz hand into the database def ring_stud(config, backend, db, cursor, base, category, site_hand_no, gametype_id, hand_start_time ,names, player_ids, start_cashes, antes, card_values, card_suits, winnings, rakes @@ -41,7 +42,7 @@ def ring_stud(config, backend, db, cursor, base, category, site_hand_no, gametyp import_options = config.get_import_parameters() - saveActions = True if import_options['saveActions'] == 'True' else False + saveActions = False if import_options['saveActions'] == 'False' else True fastStoreHudCache = True if import_options['fastStoreHudCache'] == 'True' else False fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits) @@ -69,9 +70,11 @@ def ring_holdem_omaha(config, backend, db, cursor, base, category, site_hand_no, """stores a holdem/omaha hand into the database""" import_options = config.get_import_parameters() - saveActions = True if import_options['saveActions'] == 'True' else False + saveActions = False if import_options['saveActions'] == 'False' else True fastStoreHudCache = True if import_options['fastStoreHudCache'] == 'True' else False + #print "DEBUG: saveActions: %s fastStoreHudCache: %s" %(saveActions, fastStoreHudCache) + t0 = time() fpdb_simple.fillCardArrays(len(names), base, category, card_values, card_suits) t1 = time() diff --git a/pyfpdb/fpdb_simple.py b/pyfpdb/fpdb_simple.py index b6e7e237..5a75af45 100644 --- a/pyfpdb/fpdb_simple.py +++ b/pyfpdb/fpdb_simple.py @@ -691,14 +691,13 @@ def filterCrap(hand, isTourney): hand[i] = False elif (hand[i]=="Betting is capped"): hand[i] = False - #site specific variable position filter elif (hand[i].find(" said, \"")!=-1): hand[i] = False + if isTourney: if (hand[i].endswith(" is sitting out") and (not hand[i].startswith("Seat "))): hand[i] = False - elif: - if (hand[i].endswith(": sits out")): + elif (hand[i].endswith(": sits out")): hand[i] = False elif (hand[i].endswith(" is sitting out")): hand[i] = False @@ -1375,9 +1374,6 @@ def recognisePlayerNo(line, names, atype): raise FpdbError ("failed to recognise player in: "+line+" atype:"+atype) #end def recognisePlayerNo -def recogniseSiteID(): - return 2 -#end def recogniseSiteID #removes trailing \n from the given array def removeTrailingEOL(arr):