Merge branch 'master' of git://git.assembla.com/fpdb-eric
This commit is contained in:
commit
503262d398
|
@ -48,7 +48,7 @@ class Layout:
|
||||||
self.height = int( node.getAttribute('height') )
|
self.height = int( node.getAttribute('height') )
|
||||||
|
|
||||||
self.location = []
|
self.location = []
|
||||||
self.location = map(lambda x: None, range(self.max+1)) # there must be a better way to do this?
|
self.location = map(lambda x: None, range(self.max+1)) # fill array with max seats+1 empty entries
|
||||||
|
|
||||||
for location_node in node.getElementsByTagName('location'):
|
for location_node in node.getElementsByTagName('location'):
|
||||||
if location_node.getAttribute('seat') != "":
|
if location_node.getAttribute('seat') != "":
|
||||||
|
|
|
@ -68,13 +68,13 @@ class GuiGraphViewer (threading.Thread):
|
||||||
if len(result) == 1:
|
if len(result) == 1:
|
||||||
playerids.append(result[0][0])
|
playerids.append(result[0][0])
|
||||||
|
|
||||||
if sitenos == []:
|
if not sitenos:
|
||||||
#Should probably pop up here.
|
#Should probably pop up here.
|
||||||
print "No sites selected - defaulting to PokerStars"
|
print "No sites selected - defaulting to PokerStars"
|
||||||
sitenos = [2]
|
sitenos = [2]
|
||||||
|
|
||||||
|
|
||||||
if playerids == []:
|
if not playerids:
|
||||||
print "No player ids found"
|
print "No player ids found"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ class HUD_main(object):
|
||||||
|
|
||||||
gtk.gdk.threads_enter()
|
gtk.gdk.threads_enter()
|
||||||
try:
|
try:
|
||||||
newlabel = gtk.Label(table.site + " - " + table_name)
|
newlabel = gtk.Label("%s - %s" % (table.site, table_name))
|
||||||
self.vb.add(newlabel)
|
self.vb.add(newlabel)
|
||||||
newlabel.show()
|
newlabel.show()
|
||||||
self.main_window.resize_children()
|
self.main_window.resize_children()
|
||||||
|
@ -110,8 +110,8 @@ class HUD_main(object):
|
||||||
self.hud_dict[table_name] = Hud.Hud(self, table, max, poker_game, self.config, self.db_connection)
|
self.hud_dict[table_name] = Hud.Hud(self, table, max, poker_game, self.config, self.db_connection)
|
||||||
self.hud_dict[table_name].stat_dict = stat_dict
|
self.hud_dict[table_name].stat_dict = stat_dict
|
||||||
self.hud_dict[table_name].cards = cards
|
self.hud_dict[table_name].cards = cards
|
||||||
for aw in self.hud_dict[table_name].aux_windows:
|
|
||||||
aw.update_data(new_hand_id, self.db_connection)
|
[aw.update_data(new_hand_id, self.db_connection) for aw in self.hud_dict[table_name].aux_windows]
|
||||||
gobject.idle_add(idle_func)
|
gobject.idle_add(idle_func)
|
||||||
|
|
||||||
def update_HUD(self, new_hand_id, table_name, config):
|
def update_HUD(self, new_hand_id, table_name, config):
|
||||||
|
|
|
@ -67,12 +67,10 @@ class Importer:
|
||||||
self.pos_in_file = {} # dict to remember how far we have read in the file
|
self.pos_in_file = {} # dict to remember how far we have read in the file
|
||||||
#Set defaults
|
#Set defaults
|
||||||
self.callHud = self.config.get_import_parameters().get("callFpdbHud")
|
self.callHud = self.config.get_import_parameters().get("callFpdbHud")
|
||||||
if 'minPrint' not in self.settings:
|
|
||||||
#TODO: Is this value in the xml file?
|
self.settings.setdefault("minPrint", 30)
|
||||||
self.settings['minPrint'] = 30
|
self.settings.setdefault("handCount", 0)
|
||||||
if 'handCount' not in self.settings:
|
|
||||||
#TODO: Is this value in the xml file?
|
|
||||||
self.settings['handCount'] = 0
|
|
||||||
self.fdb = fpdb_db.fpdb_db() # sets self.fdb.db self.fdb.cursor and self.fdb.sql
|
self.fdb = fpdb_db.fpdb_db() # sets self.fdb.db self.fdb.cursor and self.fdb.sql
|
||||||
self.fdb.do_connect(self.config)
|
self.fdb.do_connect(self.config)
|
||||||
|
|
||||||
|
@ -268,7 +266,7 @@ class Importer:
|
||||||
starttime = time()
|
starttime = time()
|
||||||
last_read_hand = 0
|
last_read_hand = 0
|
||||||
loc = 0
|
loc = 0
|
||||||
if (file=="stdin"):
|
if file == "stdin":
|
||||||
inputFile = sys.stdin
|
inputFile = sys.stdin
|
||||||
else:
|
else:
|
||||||
if os.path.exists(file):
|
if os.path.exists(file):
|
||||||
|
@ -308,18 +306,18 @@ class Importer:
|
||||||
errors = 0 #counter
|
errors = 0 #counter
|
||||||
|
|
||||||
for i in xrange (len(self.lines)): #main loop, iterates through the lines of a file and calls the appropriate parser method
|
for i in xrange (len(self.lines)): #main loop, iterates through the lines of a file and calls the appropriate parser method
|
||||||
if (len(self.lines[i])<2):
|
if len(self.lines[i]) < 2:
|
||||||
endpos = i
|
endpos = i
|
||||||
hand = self.lines[startpos:endpos]
|
hand = self.lines[startpos:endpos]
|
||||||
|
|
||||||
if (len(hand[0])<2):
|
if len(hand[0]) < 2:
|
||||||
hand = hand[1:]
|
hand = hand[1:]
|
||||||
|
|
||||||
cancelled=False
|
cancelled=False
|
||||||
damaged=False
|
damaged=False
|
||||||
if (site=="ftp"):
|
if (site=="ftp"):
|
||||||
for i in range (len(hand)):
|
for i in range (len(hand)):
|
||||||
if (hand[i].endswith(" has been canceled")): #this is their typo. this is a typo, right?
|
if hand[i].endswith(" has been canceled"): #this is their typo. this is a typo, right?
|
||||||
cancelled = True
|
cancelled = True
|
||||||
|
|
||||||
#FTP generates lines looking like:
|
#FTP generates lines looking like:
|
||||||
|
@ -334,14 +332,14 @@ class Importer:
|
||||||
hand.insert(i+1, hand[i][mo.start()+1:])
|
hand.insert(i+1, hand[i][mo.start()+1:])
|
||||||
hand[i] = hand[i][0:mo.start()]
|
hand[i] = hand[i][0:mo.start()]
|
||||||
|
|
||||||
if (len(hand)<3):
|
if len(hand) < 3:
|
||||||
pass
|
pass
|
||||||
#todo: the above 2 lines are kind of a dirty hack, the mentioned circumstances should be handled elsewhere but that doesnt work with DOS/Win EOL. actually this doesnt work.
|
#todo: the above 2 lines are kind of a dirty hack, the mentioned circumstances should be handled elsewhere but that doesnt work with DOS/Win EOL. actually this doesnt work.
|
||||||
elif (hand[0].endswith(" (partial)")): #partial hand - do nothing
|
elif hand[0].endswith(" (partial)"): #partial hand - do nothing
|
||||||
partial += 1
|
partial += 1
|
||||||
elif (hand[1].find("Seat")==-1 and hand[2].find("Seat")==-1 and hand[3].find("Seat")==-1):#todo: should this be or instead of and?
|
elif "Seat" not in hand[1] and "Seat" not in hand[2] and "Seat" not in hand[3]:
|
||||||
partial += 1
|
partial += 1
|
||||||
elif (cancelled or damaged):
|
elif cancelled or damaged:
|
||||||
partial += 1
|
partial += 1
|
||||||
if damaged:
|
if damaged:
|
||||||
print """
|
print """
|
||||||
|
@ -383,16 +381,17 @@ class Importer:
|
||||||
#fe.printStackTrace() #todo: get stacktrace
|
#fe.printStackTrace() #todo: get stacktrace
|
||||||
self.fdb.db.rollback()
|
self.fdb.db.rollback()
|
||||||
|
|
||||||
if (self.settings['failOnError']):
|
if self.settings['failOnError']:
|
||||||
self.fdb.db.commit() #dont remove this, in case hand processing was cancelled.
|
self.fdb.db.commit() #dont remove this, in case hand processing was cancelled.
|
||||||
raise
|
raise
|
||||||
if (self.settings['minPrint']!=0):
|
|
||||||
if ((stored+duplicates+partial+errors)%self.settings['minPrint']==0):
|
if self.settings['minPrint']:
|
||||||
|
if not ((stored+duplicates+partial+errors) % self.settings['minPrint']):
|
||||||
print "stored:", stored, "duplicates:", duplicates, "partial:", partial, "errors:", errors
|
print "stored:", stored, "duplicates:", duplicates, "partial:", partial, "errors:", errors
|
||||||
|
|
||||||
if (self.settings['handCount']!=0):
|
if self.settings['handCount']:
|
||||||
if ((stored+duplicates+partial+errors) >= self.settings['handCount']):
|
if ((stored+duplicates+partial+errors) >= self.settings['handCount']):
|
||||||
if (not self.settings['quiet']):
|
if not self.settings['quiet']:
|
||||||
print "quitting due to reaching the amount of hands to be imported"
|
print "quitting due to reaching the amount of hands to be imported"
|
||||||
print "Total stored:", stored, "duplicates:", duplicates, "partial/damaged:", partial, "errors:", errors, " time:", (time() - starttime)
|
print "Total stored:", stored, "duplicates:", duplicates, "partial/damaged:", partial, "errors:", errors, " time:", (time() - starttime)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -400,9 +399,9 @@ class Importer:
|
||||||
ttime = time() - starttime
|
ttime = time() - starttime
|
||||||
print "\rTotal stored:", stored, "duplicates:", duplicates, "partial:", partial, "errors:", errors, " time:", ttime
|
print "\rTotal stored:", stored, "duplicates:", duplicates, "partial:", partial, "errors:", errors, " time:", ttime
|
||||||
|
|
||||||
if stored==0:
|
if not stored:
|
||||||
if duplicates>0:
|
if duplicates:
|
||||||
for line_no in range(len(self.lines)):
|
for line_no in xrange(len(self.lines)):
|
||||||
if self.lines[line_no].find("Game #")!=-1:
|
if self.lines[line_no].find("Game #")!=-1:
|
||||||
final_game_line=self.lines[line_no]
|
final_game_line=self.lines[line_no]
|
||||||
handsId=fpdb_simple.parseSiteHandNo(final_game_line)
|
handsId=fpdb_simple.parseSiteHandNo(final_game_line)
|
||||||
|
|
|
@ -496,12 +496,13 @@ def convertBlindBet(actionTypes, actionAmounts):
|
||||||
blinds=[]
|
blinds=[]
|
||||||
bets=[]
|
bets=[]
|
||||||
for k in xrange(len(actionTypes[i][j])):
|
for k in xrange(len(actionTypes[i][j])):
|
||||||
if (actionTypes[i][j][k]=="blind"):
|
if actionTypes[i][j][k] == "blind":
|
||||||
blinds.append((i,j,k))
|
blinds.append((i,j,k))
|
||||||
|
|
||||||
if (len(blinds)>0 and actionTypes[i][j][k]=="bet"):
|
if blinds and actionTypes[i][j][k] == "bet":
|
||||||
|
# if (len(blinds)>0 and actionTypes[i][j][k]=="bet"):
|
||||||
bets.append((i,j,k))
|
bets.append((i,j,k))
|
||||||
if (len(bets)==1):
|
if len(bets) == 1:
|
||||||
blind_amount=actionAmounts[blinds[0][0]][blinds[0][1]][blinds[0][2]]
|
blind_amount=actionAmounts[blinds[0][0]][blinds[0][1]][blinds[0][2]]
|
||||||
bet_amount=actionAmounts[bets[0][0]][bets[0][1]][bets[0][2]]
|
bet_amount=actionAmounts[bets[0][0]][bets[0][1]][bets[0][2]]
|
||||||
actionAmounts[bets[0][0]][bets[0][1]][bets[0][2]]=bet_amount-blind_amount
|
actionAmounts[bets[0][0]][bets[0][1]][bets[0][2]]=bet_amount-blind_amount
|
||||||
|
@ -616,84 +617,78 @@ def filterAnteBlindFold(site,hand):
|
||||||
#end def filterAnteFold
|
#end def filterAnteFold
|
||||||
|
|
||||||
def stripEOLspaces(str):
|
def stripEOLspaces(str):
|
||||||
if str[-1] == ' ':
|
return str.rstrip()
|
||||||
str = str[:-1]
|
|
||||||
if str[-1] == ' ':
|
|
||||||
str = str[:-1]
|
|
||||||
return str
|
|
||||||
|
|
||||||
#removes useless lines as well as trailing spaces
|
#removes useless lines as well as trailing spaces
|
||||||
def filterCrap(site, hand, isTourney):
|
def filterCrap(site, hand, isTourney):
|
||||||
#remove two trailing spaces at end of line
|
#remove two trailing spaces at end of line
|
||||||
hand = [stripEOLspaces(line) for line in hand]
|
hand = [line.rstrip() for line in hand]
|
||||||
|
|
||||||
#print "hand after trailing space removal in filterCrap:",hand
|
#print "hand after trailing space removal in filterCrap:",hand
|
||||||
#general variable position word filter/string filter
|
#general variable position word filter/string filter
|
||||||
for i in xrange (len(hand)):
|
for i in xrange (len(hand)):
|
||||||
if (hand[i].startswith("Board [")):
|
if hand[i].startswith("Board ["):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find(" out of hand ")!=-1):
|
elif hand[i].find(" out of hand ")!=-1:
|
||||||
hand[i]=hand[i][:-56]
|
hand[i]=hand[i][:-56]
|
||||||
elif (hand[i].find("($0 in chips)") != -1):
|
elif "($0 in chips)" in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i]=="*** HOLE CARDS ***"):
|
elif hand[i]=="*** HOLE CARDS ***":
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has been disconnected")):
|
elif hand[i].endswith("has been disconnected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has requested TIME")):
|
elif hand[i].endswith("has requested TIME"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has returned")):
|
elif hand[i].endswith("has returned"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("will be allowed to play after the button")):
|
elif hand[i].endswith("will be allowed to play after the button"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has timed out")):
|
elif hand[i].endswith("has timed out"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has timed out while disconnected")):
|
elif hand[i].endswith("has timed out while disconnected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has timed out while being disconnected")):
|
elif hand[i].endswith("has timed out while being disconnected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("is connected")):
|
elif hand[i].endswith("is connected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("is disconnected")):
|
elif hand[i].endswith("is disconnected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" is feeling angry")):
|
elif hand[i].endswith(" is feeling angry"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" is feeling confused")):
|
elif hand[i].endswith(" is feeling confused"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" is feeling happy")):
|
elif hand[i].endswith(" is feeling happy"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" is feeling normal")):
|
elif hand[i].endswith(" is feeling normal"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find(" is low with [")!=-1):
|
elif " is low with [" in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
#elif (hand[i].find("-max Seat #")!=-1 and hand[i].find(" is the button")!=-1):
|
#elif (hand[i].find("-max Seat #")!=-1 and hand[i].find(" is the button")!=-1):
|
||||||
# toRemove.append(hand[i])
|
# toRemove.append(hand[i])
|
||||||
elif (hand[i].endswith(" mucks")):
|
elif hand[i].endswith(" mucks"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(": mucks hand")):
|
elif hand[i].endswith(": mucks hand"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i]=="No low hand qualified"):
|
elif hand[i] == "No low hand qualified":
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i]=="Pair on board - a double bet is allowed"):
|
elif hand[i] == "Pair on board - a double bet is allowed":
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find(" shows ")!=-1 and hand[i].find("[")==-1):
|
elif " shows " in hand[i] and "[" not in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
#elif (hand[i].startswith("Table '") and hand[i].endswith("-max")):
|
elif hand[i].startswith("The button is in seat #"):
|
||||||
# toRemove.append(hand[i])
|
|
||||||
elif (hand[i].startswith("The button is in seat #")):
|
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
#above is alphabetic, reorder below if bored
|
#above is alphabetic, reorder below if bored
|
||||||
elif (hand[i].startswith("Time has expired")):
|
elif hand[i].startswith("Time has expired"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("has reconnected")):
|
elif hand[i].endswith("has reconnected"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("seconds left to act")):
|
elif hand[i].endswith("seconds left to act"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("seconds to reconnect")):
|
elif hand[i].endswith("seconds to reconnect"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("was removed from the table for failing to post")):
|
elif hand[i].endswith("was removed from the table for failing to post"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find("joins the table at seat ")!=-1):
|
elif "joins the table at seat " in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" sits down")):
|
elif (hand[i].endswith(" sits down")):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
|
@ -701,20 +696,20 @@ def filterCrap(site, hand, isTourney):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith(" stands up")):
|
elif (hand[i].endswith(" stands up")):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find("is high with ")!=-1):
|
elif "is high with" in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("doesn't show hand")):
|
elif hand[i].endswith("doesn't show hand"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].endswith("is being treated as all-in")):
|
elif hand[i].endswith("is being treated as all-in"):
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find(" adds $")!=-1):
|
elif " adds $" in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i]=="Betting is capped"):
|
elif hand[i] == "Betting is capped":
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
#site specific variable position filter
|
#site specific variable position filter
|
||||||
elif (hand[i].find(" said, \"")!=-1):
|
elif 'said, "' in hand[i]:
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
elif (hand[i].find(": ")!=-1 and site=="ftp" and hand[i].find("Seat ")==-1 and hand[i].find(": Table")==-1): #filter ftp chat
|
elif site == "ftp" and ":" in hand[i] and "Seat " not in hand[i] and ": Table" not in hand[i]: # FTP chat
|
||||||
hand[i] = False
|
hand[i] = False
|
||||||
if isTourney and not hand[i] == False:
|
if isTourney and not hand[i] == False:
|
||||||
if (hand[i].endswith(" is sitting out") and (not hand[i].startswith("Seat "))):
|
if (hand[i].endswith(" is sitting out") and (not hand[i].startswith("Seat "))):
|
||||||
|
@ -734,11 +729,11 @@ def filterCrap(site, hand, isTourney):
|
||||||
#takes a poker float (including , for thousand seperator and converts it to an int
|
#takes a poker float (including , for thousand seperator and converts it to an int
|
||||||
def float2int(string):
|
def float2int(string):
|
||||||
pos = string.find(",")
|
pos = string.find(",")
|
||||||
if (pos!=-1): #remove , the thousand seperator
|
if pos != -1: #remove , the thousand seperator
|
||||||
string = "%s%s" % (string[0:pos], string[pos+1:])
|
string = "%s%s" % (string[0:pos], string[pos+1:])
|
||||||
|
|
||||||
pos = string.find(".")
|
pos = string.find(".")
|
||||||
if (pos!=-1): #remove decimal point
|
if pos != -1: #remove decimal point
|
||||||
string = "%s%s" % (string[0:pos], string[pos+1:])
|
string = "%s%s" % (string[0:pos], string[pos+1:])
|
||||||
|
|
||||||
result = int(string)
|
result = int(string)
|
||||||
|
@ -761,7 +756,8 @@ def isActionLine(line):
|
||||||
elif (line.startswith("Uncalled bet")):
|
elif (line.startswith("Uncalled bet")):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return len( [ x for x in ActionLines if x in line]) > 0
|
return any(x for x in ActionLines if x in line)
|
||||||
|
# return bool([ x for x in ActionLines if x in line])
|
||||||
# ret = any(True for searchstr in ActionLines if searchstr in line)
|
# ret = any(True for searchstr in ActionLines if searchstr in line)
|
||||||
# ret = len( [ x for x in ActionLines if line.find(x) > -1] ) > 0
|
# ret = len( [ x for x in ActionLines if line.find(x) > -1] ) > 0
|
||||||
# ret = any(searchstr in line for searchstr in ActionLines)
|
# ret = any(searchstr in line for searchstr in ActionLines)
|
||||||
|
@ -791,7 +787,7 @@ WinLines = ( "wins the pot", "ties for the ", "wins side pot", "wins the low mai
|
||||||
"wins the high pot", "wins the high side pot", "wins the main pot", "wins the side pot", "collected" )
|
"wins the high pot", "wins the high side pot", "wins the main pot", "wins the side pot", "collected" )
|
||||||
#returns boolean whether the passed line is a win line
|
#returns boolean whether the passed line is a win line
|
||||||
def isWinLine(line):
|
def isWinLine(line):
|
||||||
return len( [ x for x in WinLines if x in line ] ) > 0
|
return any(x for x in WinLines if x in line)
|
||||||
#end def isWinLine
|
#end def isWinLine
|
||||||
|
|
||||||
#returns the amount of cash/chips put into the put in the given action line
|
#returns the amount of cash/chips put into the put in the given action line
|
||||||
|
@ -884,6 +880,12 @@ def goesAllInOnThisLine(line):
|
||||||
#end def goesAllInOnThisLine
|
#end def goesAllInOnThisLine
|
||||||
|
|
||||||
#returns the action type code (see table design) of the given action line
|
#returns the action type code (see table design) of the given action line
|
||||||
|
ActionTypes = { 'calls':"call", 'brings in for':"blind", 'completes it to':"bet", ' posts $':"blind",
|
||||||
|
' posts a dead ' : "blind", ' posts the small blind of $':"blind", ': posts big blind ':"blind",
|
||||||
|
' posts the big blind of $':"blind", ': posts small & big blinds $':"blind",
|
||||||
|
': posts small blind $':"blind",
|
||||||
|
' bets' : "bet", ' raises' : "bet"
|
||||||
|
}
|
||||||
def parseActionType(line):
|
def parseActionType(line):
|
||||||
if (line.startswith("Uncalled bet")):
|
if (line.startswith("Uncalled bet")):
|
||||||
return "unbet"
|
return "unbet"
|
||||||
|
@ -891,33 +893,10 @@ def parseActionType(line):
|
||||||
return "fold"
|
return "fold"
|
||||||
elif (line.endswith(" checks")):
|
elif (line.endswith(" checks")):
|
||||||
return "check"
|
return "check"
|
||||||
elif (line.find("calls")!=-1):
|
|
||||||
return "call"
|
|
||||||
elif (line.find("brings in for")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find("completes it to")!=-1):
|
|
||||||
return "bet"
|
|
||||||
#todo: what if someone completes instead of bringing in?
|
|
||||||
elif (line.find(" posts $")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(" posts a dead ")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(": posts small blind ")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(" posts the small blind of $")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(": posts big blind ")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(" posts the big blind of $")!=-1):
|
|
||||||
return "blind"
|
|
||||||
elif (line.find(": posts small & big blinds $")!=-1):
|
|
||||||
return "blind"
|
|
||||||
#todo: seperately record voluntary blind payments made to join table out of turn
|
|
||||||
elif (line.find("bets")!=-1):
|
|
||||||
return "bet"
|
|
||||||
elif (line.find("raises")!=-1):
|
|
||||||
return "bet"
|
|
||||||
else:
|
else:
|
||||||
|
for x in ActionTypes:
|
||||||
|
if x in line:
|
||||||
|
return ActionTypes[x]
|
||||||
raise FpdbError ("failed to recognise actiontype in parseActionLine in: "+line)
|
raise FpdbError ("failed to recognise actiontype in parseActionLine in: "+line)
|
||||||
#end def parseActionType
|
#end def parseActionType
|
||||||
|
|
||||||
|
@ -1053,12 +1032,12 @@ def parseFee(topline):
|
||||||
def parseHandStartTime(topline, site):
|
def parseHandStartTime(topline, site):
|
||||||
#convert x:13:35 to 0x:13:35
|
#convert x:13:35 to 0x:13:35
|
||||||
counter=0
|
counter=0
|
||||||
while (True):
|
while counter < 10:
|
||||||
pos=topline.find(" "+str(counter)+":")
|
pos = topline.find(" %d:" % counter)
|
||||||
if (pos!=-1):
|
if pos != -1:
|
||||||
topline=topline[0:pos+1]+"0"+topline[pos+1:]
|
topline = "%s0%s" % (topline[0:pos+1], topline[pos+1:])
|
||||||
|
break
|
||||||
counter += 1
|
counter += 1
|
||||||
if counter==10: break
|
|
||||||
|
|
||||||
isUTC=False
|
isUTC=False
|
||||||
if site=="ftp":
|
if site=="ftp":
|
||||||
|
@ -1102,60 +1081,54 @@ def parseHandStartTime(topline, site):
|
||||||
#end def parseHandStartTime
|
#end def parseHandStartTime
|
||||||
|
|
||||||
#parses the names out of the given lines and returns them as an array
|
#parses the names out of the given lines and returns them as an array
|
||||||
|
def findName(line):
|
||||||
|
pos1 = line.find(":") + 2
|
||||||
|
pos2 = line.rfind("(") - 1
|
||||||
|
return unicode(line[pos1:pos2], "latin-1")
|
||||||
|
|
||||||
def parseNames(lines):
|
def parseNames(lines):
|
||||||
result = []
|
return [findName(line) for line in lines]
|
||||||
for i in xrange (len(lines)):
|
|
||||||
pos1=lines[i].find(":")+2
|
|
||||||
pos2=lines[i].rfind("(")-1
|
|
||||||
tmp=lines[i][pos1:pos2]
|
|
||||||
#print "parseNames, tmp original:",tmp
|
|
||||||
tmp=unicode(tmp,"latin-1")
|
|
||||||
#print "parseNames, tmp after unicode latin-1 conversion:",tmp
|
|
||||||
result.append(tmp)
|
|
||||||
return result
|
|
||||||
#end def parseNames
|
#end def parseNames
|
||||||
|
|
||||||
def parsePositions(hand, names):
|
def parsePositions(hand, names):
|
||||||
positions = map(lambda x: -1, names)
|
positions = [-1 for i in names]
|
||||||
|
sb, bb = -1, -1
|
||||||
|
|
||||||
#find blinds
|
#find blinds
|
||||||
sb,bb=-1,-1
|
for line in hand:
|
||||||
for i in xrange (len(hand)):
|
if sb == -1 and "small blind" in line and "dead small blind" not in line:
|
||||||
if (sb==-1 and hand[i].find("small blind")!=-1 and hand[i].find("dead small blind")==-1):
|
sb = line
|
||||||
sb=hand[i]
|
if bb == -1 and "big blind" in line and "dead big blind" not in line:
|
||||||
#print "sb:",sb
|
bb = line
|
||||||
if (bb==-1 and hand[i].find("big blind")!=-1 and hand[i].find("dead big blind")==-1):
|
|
||||||
bb=hand[i]
|
|
||||||
#print "bb:",bb
|
|
||||||
|
|
||||||
#identify blinds
|
#identify blinds
|
||||||
#print "parsePositions before recognising sb/bb. names:",names
|
#print "parsePositions before recognising sb/bb. names:",names
|
||||||
sbExists = True
|
sbExists = True
|
||||||
if (sb!=-1):
|
if sb != -1:
|
||||||
sb = recognisePlayerNo(sb, names, "bet")
|
sb = recognisePlayerNo(sb, names, "bet")
|
||||||
else:
|
else:
|
||||||
sbExists = False
|
sbExists = False
|
||||||
if (bb!=-1):
|
if bb != -1:
|
||||||
bb = recognisePlayerNo(bb, names, "bet")
|
bb = recognisePlayerNo(bb, names, "bet")
|
||||||
|
|
||||||
# print "sb = ", sb, "bb = ", bb
|
# print "sb = ", sb, "bb = ", bb
|
||||||
if bb == sb:
|
if bb == sb: # if big and small are same, then don't duplicate the small
|
||||||
sbExists = False
|
sbExists = False
|
||||||
sb = -1
|
sb = -1
|
||||||
|
|
||||||
#write blinds into array
|
#write blinds into array
|
||||||
if (sbExists):
|
if sbExists:
|
||||||
positions[sb]="S"
|
positions[sb]="S"
|
||||||
positions[bb]="B"
|
positions[bb]="B"
|
||||||
|
|
||||||
|
|
||||||
#fill up rest of array
|
#fill up rest of array
|
||||||
if (sbExists):
|
if sbExists:
|
||||||
arraypos = sb-1
|
arraypos = sb-1
|
||||||
else:
|
else:
|
||||||
arraypos = bb-1
|
arraypos = bb-1
|
||||||
|
|
||||||
distFromBtn=0
|
distFromBtn=0
|
||||||
while (arraypos>=0 and arraypos != bb):
|
while arraypos >= 0 and arraypos != bb:
|
||||||
#print "parsePositions first while, arraypos:",arraypos,"positions:",positions
|
#print "parsePositions first while, arraypos:",arraypos,"positions:",positions
|
||||||
positions[arraypos] = distFromBtn
|
positions[arraypos] = distFromBtn
|
||||||
arraypos -= 1
|
arraypos -= 1
|
||||||
|
@ -1183,8 +1156,7 @@ def parsePositions(hand, names):
|
||||||
arraypos-=1
|
arraypos-=1
|
||||||
distFromBtn+=1
|
distFromBtn+=1
|
||||||
|
|
||||||
for i in xrange (len(names)):
|
if any(p == -1 for p in positions):
|
||||||
if positions[i]==-1:
|
|
||||||
print "parsePositions names:",names
|
print "parsePositions names:",names
|
||||||
print "result:",positions
|
print "result:",positions
|
||||||
raise FpdbError ("failed to read positions")
|
raise FpdbError ("failed to read positions")
|
||||||
|
@ -1255,20 +1227,21 @@ def parseTourneyNo(topline):
|
||||||
#parses a win/collect line. manipulates the passed array winnings, no explicit return
|
#parses a win/collect line. manipulates the passed array winnings, no explicit return
|
||||||
def parseWinLine(line, site, names, winnings, isTourney):
|
def parseWinLine(line, site, names, winnings, isTourney):
|
||||||
#print "parseWinLine: line:",line
|
#print "parseWinLine: line:",line
|
||||||
for i in xrange(len(names)):
|
for i,n in enumerate(names):
|
||||||
if (line.startswith(names[i].encode("latin-1"))): #found a winner
|
n = n.encode("latin-1")
|
||||||
|
if line.startswith(n):
|
||||||
if isTourney:
|
if isTourney:
|
||||||
pos1 = line.rfind("collected ") + 10
|
pos1 = line.rfind("collected ") + 10
|
||||||
if (site=="ftp"):
|
if site == "ftp":
|
||||||
pos2 = line.find(")", pos1)
|
pos2 = line.find(")", pos1)
|
||||||
elif (site=="ps"):
|
elif site == "ps":
|
||||||
pos2 = line.find(" ", pos1)
|
pos2 = line.find(" ", pos1)
|
||||||
winnings[i] += int(line[pos1:pos2])
|
winnings[i] += int(line[pos1:pos2])
|
||||||
else:
|
else:
|
||||||
pos1 = line.rfind("$") + 1
|
pos1 = line.rfind("$") + 1
|
||||||
if (site=="ftp"):
|
if site == "ftp":
|
||||||
pos2 = line.find(")", pos1)
|
pos2 = line.find(")", pos1)
|
||||||
elif (site=="ps"):
|
elif site == "ps":
|
||||||
pos2 = line.find(" ", pos1)
|
pos2 = line.find(" ", pos1)
|
||||||
winnings[i] += float2int(line[pos1:pos2])
|
winnings[i] += float2int(line[pos1:pos2])
|
||||||
#end def parseWinLine
|
#end def parseWinLine
|
||||||
|
@ -1415,21 +1388,49 @@ def recogniseTourneyTypeId(cursor, siteId, buyin, fee, knockout, rebuyOrAddon):
|
||||||
#end def recogniseTourneyTypeId
|
#end def recogniseTourneyTypeId
|
||||||
|
|
||||||
#returns the SQL ids of the names given in an array
|
#returns the SQL ids of the names given in an array
|
||||||
|
# TODO: if someone gets industrious, they should make the parts that use the output of this function deal with a dict
|
||||||
|
# { 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):
|
def recognisePlayerIDs(cursor, names, site_id):
|
||||||
result = []
|
cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names)) # get all playerids by the names passed in
|
||||||
for i in xrange(len(names)):
|
ids = dict(cursor.fetchall()) # convert to dict
|
||||||
cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],))
|
if len(ids) != len(names):
|
||||||
tmp=cursor.fetchall()
|
notfound = [n for n in names if n not in ids] # make list of names not in database
|
||||||
if (len(tmp)==0): #new player
|
if notfound: # insert them into database
|
||||||
cursor.execute ("INSERT INTO Players (name, siteId) VALUES (%s, %s)", (names[i], site_id))
|
cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
|
||||||
#print "Number of players rows inserted: %d" % cursor.rowcount
|
cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(notfound)) # get their new ids
|
||||||
cursor.execute ("SELECT id FROM Players WHERE name=%s", (names[i],))
|
tmp = dict(cursor.fetchall())
|
||||||
tmp=cursor.fetchall()
|
for n in tmp: # put them all into the same dict
|
||||||
#print "recognisePlayerIDs, names[i]:",names[i],"tmp:",tmp
|
ids[n] = tmp[n]
|
||||||
result.append(tmp[0][0])
|
|
||||||
return result
|
# 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
|
#end def recognisePlayerIDs
|
||||||
|
|
||||||
|
|
||||||
|
# Here's a version that would work if it wasn't for the fact that it needs to have the output in the same order as input
|
||||||
|
# this version could also be improved upon using list comprehensions, etc
|
||||||
|
|
||||||
|
#def recognisePlayerIDs(cursor, names, site_id):
|
||||||
|
# result = []
|
||||||
|
# notfound = []
|
||||||
|
# cursor.execute("SELECT name,id FROM Players WHERE name='%s'" % "' OR name='".join(names))
|
||||||
|
# tmp = dict(cursor.fetchall())
|
||||||
|
# for n in names:
|
||||||
|
# if n not in tmp:
|
||||||
|
# notfound.append(n)
|
||||||
|
# else:
|
||||||
|
# result.append(tmp[n])
|
||||||
|
# if notfound:
|
||||||
|
# cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
|
||||||
|
# cursor.execute("SELECT id FROM Players WHERE name='%s'" % "' OR name='".join(notfound))
|
||||||
|
# tmp = cursor.fetchall()
|
||||||
|
# for n in tmp:
|
||||||
|
# result.append(n[0])
|
||||||
|
#
|
||||||
|
# return result
|
||||||
|
|
||||||
#recognises the name in the given line and returns its array position in the given array
|
#recognises the name in the given line and returns its array position in the given array
|
||||||
def recognisePlayerNo(line, names, atype):
|
def recognisePlayerNo(line, names, atype):
|
||||||
#print "recogniseplayerno, names:",names
|
#print "recogniseplayerno, names:",names
|
||||||
|
@ -2263,7 +2264,7 @@ def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
except TypeError:
|
except TypeError:
|
||||||
row=[]
|
row=[]
|
||||||
|
|
||||||
if (len(row)==0):
|
if not row:
|
||||||
#print "new huddata row"
|
#print "new huddata row"
|
||||||
doInsert=True
|
doInsert=True
|
||||||
row=[]
|
row=[]
|
||||||
|
@ -2276,9 +2277,11 @@ def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
doInsert=False
|
doInsert=False
|
||||||
|
# This is making a copy of the original list, although i really don't see any reason it's being done?
|
||||||
newrow=[]
|
newrow=[]
|
||||||
for i in xrange(len(row)):
|
newrow.extend(row)
|
||||||
newrow.append(row[i])
|
# for i in xrange(len(row)):
|
||||||
|
# newrow.append(row[i])
|
||||||
row=newrow
|
row=newrow
|
||||||
|
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
|
|
Loading…
Reference in New Issue
Block a user