diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index 697eb632..b9be85dc 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -42,7 +42,7 @@ class FullTilt(HandHistoryConverter): self.re_PostBB = re.compile('.*\n(?P.*) posts (the big blind of )?\$?(?P[.0-9]+)') self.re_BringIn = re.compile('.*\n(?P.*) brings in for \$?(?P[.0-9]+)') self.re_PostBoth = re.compile('.*\n(?P.*) posts small \& big blinds \[\$? (?P[.0-9]+)') - self.re_HeroCards = re.compile('.*\nDealt\sto\s(?P.*)\s\[(?P.*)\]( [(?P.*])?') + self.re_HeroCards = re.compile('.*\nDealt\sto\s(?P.*)\s\[(?P.*)\]( \[(?P.*)\])?') self.re_Action = re.compile('.*\n(?P.*)(?P bets| checks| raises to| calls| folds)(\s\$(?P[.\d]+))?') self.re_ShowdownAction = re.compile('.*\n(?P.*) shows \[(?P.*)\]') self.re_CollectPot = re.compile(r"Seat (?P[0-9]+): (?P.*?) (\(button\) |\(small blind\) |\(big blind\) )?(collected|showed \[.*\] and won) \(\$(?P[.\d]+)\)(, mucked| with.*)") @@ -71,7 +71,7 @@ class FullTilt(HandHistoryConverter): structure = "nl" elif m.group('LTYPE') == "Pot ": structure = "pl" - elif m.group('LTYPE') == "None": + elif m.group('LTYPE') == None: structure = "fl" if m.group('GAME') == "Hold\'em": @@ -80,7 +80,9 @@ class FullTilt(HandHistoryConverter): game = "omahahi" elif m.group('GAME') == "Razz": game = "razz" - + + print m.groups() + gametype = ["ring", game, structure, m.group('SB'), m.group('BB')] return gametype diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index 1047a69a..883e67b3 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -365,11 +365,19 @@ Map the tuple self.gametype onto the pokerstars string describing it "cp" : "Cap Pot Limit" } + print "DEBUG: self.gametype: %s" %(self.gametype) string = "%s %s" %(gs[self.gametype[1]], ls[self.gametype[2]]) return string def writeHand(self, fh=sys.__stdout__): + if self.gametype[1] == "hold" or self.gametype[1] == "omaha": + self.writeHoldemHand(fh) + else: + self.writeStudHand(fh) + + + def writeHoldemHand(self, fh=sys.__stdout__): # PokerStars format. #print "\n### Pseudo stars format ###" #print >>fh, _("%s Game #%s: %s ($%s/$%s) - %s" %(self.sitename, self.handid, self.getGameTypeAsString(), self.sb, self.bb, self.starttime)) @@ -474,6 +482,105 @@ Map the tuple self.gametype onto the pokerstars string describing it #print "Seat %d: %s showed %s" % (player[0], player[1], hole) #else: #print "Seat %d: %s mucked or folded" % (player[0], player[1]) + + + def writeStudHand(self, fh=sys.__stdout__): + # PokerStars format. + #print "\n### Pseudo stars format ###" + #print >>fh, _("%s Game #%s: %s ($%s/$%s) - %s" %(self.sitename, self.handid, self.getGameTypeAsString(), self.sb, self.bb, self.starttime)) + print >>fh, _("%s Game #%s: %s ($%s/$%s) - %s" %("PokerStars", self.handid, self.getGameTypeAsString(), self.sb, self.bb, time.strftime('%Y/%m/%d - %H:%M:%S (ET)', self.starttime))) + print >>fh, _("Table '%s' %d-max Seat #%s is the button" %(self.tablename, self.maxseats, self.buttonpos)) + + players_who_post_antes = set([x[0] for x in self.actions['ANTES']]) + + for player in [x for x in self.players if x[1] in players_who_post_antes]: + #Only print stacks of players who do something preflop + print >>fh, _("Seat %s: %s ($%s)" %(player[0], player[1], player[2])) + + + if 'THIRD' in self.actions: + print >>fh, _("*** 3RD STREET ***") + for act in self.actions['THIRD']: + self.printActionLine(act, fh) + + if 'FOURTH' in self.actions: + print >>fh, _("*** 4TH STREET ***") + for act in self.actions['FOURTH']: + self.printActionLine(act, fh) + + if 'FIFTH' in self.actions: + print >>fh, _("*** 5TH STREET ***") + for act in self.actions['FIFTH']: + self.printActionLine(act, fh) + + if 'SIXTH' in self.actions: + print >>fh, _("*** 6TH STREET ***") + for act in self.actions['SIXTH']: + self.printActionLine(act, fh) + + if 'SEVENTH' in self.actions: + print >>fh, _("*** 7TH STREET ***") + for act in self.actions['SEVENTH']: + self.printActionLine(act, fh) + + #Some sites don't have a showdown section so we have to figure out if there should be one + # The logic for a showdown is: at the end of river action there are at least two players in the hand + # we probably don't need a showdown section in pseudo stars format for our filtering purposes + if 'SHOWDOWN' in self.actions: + print >>fh, _("*** SHOW DOWN ***") +# print >>fh, "DEBUG: what do they show" + + # Current PS format has the lines: + # Uncalled bet ($111.25) returned to s0rrow + # s0rrow collected $5.15 from side pot + # stervels: shows [Ks Qs] (two pair, Kings and Queens) + # stervels collected $45.35 from main pot + # Immediately before the summary. + # The current importer uses those lines for importing winning rather than the summary + for name in self.pot.returned: + print >>fh, _("Uncalled bet ($%s) returned to %s" %(self.pot.returned[name],name)) + for entry in self.collected: + print >>fh, _("%s collected $%s from x pot" %(entry[0], entry[1])) + + print >>fh, _("*** SUMMARY ***") + print >>fh, "%s | Rake $%.2f" % (self.pot, self.rake) + #print >>fh, _("Total pot $%s | Rake $%.2f" % (self.totalpot, self.rake)) # TODO: side pots + + board = [] + for s in self.board.values(): + board += s + if board: # sometimes hand ends preflop without a board + print >>fh, _("Board [%s]" % (" ".join(board))) + + for player in [x for x in self.players if x[1] in players_who_post_antes]: + seatnum = player[0] + name = player[1] + if name in self.collectees and name in self.shown: + print >>fh, _("Seat %d: %s showed [%s] and won ($%s)" % (seatnum, name, " ".join(self.holecards[name]), self.collectees[name])) + elif name in self.collectees: + print >>fh, _("Seat %d: %s collected ($%s)" % (seatnum, name, self.collectees[name])) + elif name in self.shown: + print >>fh, _("Seat %d: %s showed [%s]" % (seatnum, name, " ".join(self.holecards[name]))) + elif name in self.folded: + print >>fh, _("Seat %d: %s folded" % (seatnum, name)) + else: + print >>fh, _("Seat %d: %s mucked" % (seatnum, name)) + + print >>fh, "\n\n" + # TODO: + # logic for side pots + # logic for which players get to showdown + # I'm just not sure we need to do this so heavily.. and if we do, it's probably better to use pokerlib + #if self.holecards[player[1]]: # empty list default is false + #hole = self.holecards[player[1]] + ##board = [] + ##for s in self.board.values(): + ##board += s + ##playerhand = self.bestHand('hi', board+hole) + ##print "Seat %d: %s showed %s and won/lost with %s" % (player[0], player[1], hole, playerhand) + #print "Seat %d: %s showed %s" % (player[0], player[1], hole) + #else: + #print "Seat %d: %s mucked or folded" % (player[0], player[1]) def printHand(self):