From 7f61fba31412df47dd89b0816316485448e1ace4 Mon Sep 17 00:00:00 2001 From: Worros Date: Fri, 10 Sep 2010 13:22:52 +0800 Subject: [PATCH] PSS: Switch over to regex based parsing --- pyfpdb/PokerStarsSummary.py | 119 ++---------------------------------- pyfpdb/TourneySummary.py | 10 +-- 2 files changed, 9 insertions(+), 120 deletions(-) diff --git a/pyfpdb/PokerStarsSummary.py b/pyfpdb/PokerStarsSummary.py index c88641ba..3f5d2fc7 100644 --- a/pyfpdb/PokerStarsSummary.py +++ b/pyfpdb/PokerStarsSummary.py @@ -81,123 +81,12 @@ class PokerStarsSummary(TourneySummary): re_DateTime = re.compile("\[(?P[0-9]{4})\/(?P[0-9]{2})\/(?P[0-9]{2})[\- ]+(?P[0-9]+):(?P[0-9]+):(?P[0-9]+)") - re_Entries = re.compile("[0-9]+") - re_Prizepool = re.compile("\$[0-9]+\.[0-9]+") - re_BuyInFee = re.compile("(?P[0-9]+\.[0-9]+).*(?P[0-9]+\.[0-9]+)") - re_FPP = re.compile("(?P[0-9]+)\sFPP") - #note: the dollar and cent in the below line are currency-agnostic - re_Added = re.compile("(?P[0-9]+)\.(?P[0-9]+)\s(?P[A-Z]+)(\sadded\sto\sthe\sprize\spool\sby\sPokerStars)") - re_DateTimeET = re.compile("(?P[0-9]{4})\/(?P[0-9]{2})\/(?P[0-9]{2})[\- ]+(?P[0-9]+):(?P[0-9]+):(?P[0-9]+)") - re_GameInfo = re.compile(u""".+(?PNo\sLimit|Limit|LIMIT|Pot\sLimit)\s(?PHold\'em|Razz|RAZZ|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball|5\sCard\sDraw)""") - def parseSummary(self): - lines=self.summaryText.splitlines() - - self.tourNo = self.re_TourNo.findall(lines[0])[0] #ignore game and limit type as thats not recorded - - result=self.re_GameInfo.search(lines[0]) - result=result.groupdict() - self.gametype['limitType']=self.limits[result['LIMIT']] - self.gametype['category']=self.games[result['GAME']][1] - - if lines[1].find("$")!=-1: #TODO: move this into a method and call that from PokerStarsToFpdb.py:269 if hand.buyinCurrency=="USD" etc. - self.currency="USD" - elif lines[1].find(u"€")!=-1: - self.currency="EUR" - elif lines[1].find("FPP")!=-1: - self.currency="PSFP" - else: - raise FpdbParseError(_("didn't recognise buyin currency in:")+lines[1]) - - if self.currency=="USD" or self.currency=="EUR": - result=self.re_BuyInFee.search(lines[1]) - result=result.groupdict() - self.buyin=int(100*Decimal(result['BUYIN'])) - self.fee=int(100*Decimal(result['FEE'])) - elif self.currency=="PSFP": - result=self.re_FPP.search(lines[1]) - result=result.groupdict() - self.buyin=int(Decimal(result['FPP'])) - self.fee=0 - - currentLine=2 - self.entries = self.re_Entries.findall(lines[currentLine])[0] - currentLine+=1 #note that I chose to make the code keep state (the current line number) - #as that means it'll fail rather than silently skip potentially valuable information - #print "after entries lines[currentLine]", lines[currentLine] - - result=self.re_Added.search(lines[currentLine]) - if result: - result=result.groupdict() - self.added=100*int(Decimal(result['DOLLAR']))+int(Decimal(result['CENT'])) - self.addedCurrency=result['CURRENCY'] - currentLine+=1 - else: - self.added=0 - self.addedCurrency="NA" - #print "after added/entries lines[currentLine]", lines[currentLine] - - result=self.re_Prizepool.findall(lines[currentLine]) - if result: - self.prizepool = result[0] - self.prizepool = self.prizepool[1:-3]+self.prizepool[-2:] - currentLine+=1 - #print "after prizepool lines[currentLine]", lines[currentLine] - - useET=False - result=self.re_DateTime.search(lines[currentLine]) - if not result: - print _("in not result starttime") - useET=True - result=self.re_DateTimeET.search(lines[currentLine]) - result=result.groupdict() - datetimestr = "%s/%s/%s %s:%s:%s" % (result['Y'], result['M'],result['D'],result['H'],result['MIN'],result['S']) - self.startTime= datetime.datetime.strptime(datetimestr, "%Y/%m/%d %H:%M:%S") # also timezone at end, e.g. " ET" - self.startTime = HandHistoryConverter.changeTimezone(self.startTime, "ET", "UTC") - currentLine+=1 - - if useET: - result=self.re_DateTimeET.search(lines[currentLine]) - else: - result=self.re_DateTime.search(lines[currentLine]) - if result: - result=result.groupdict() - datetimestr = "%s/%s/%s %s:%s:%s" % (result['Y'], result['M'],result['D'],result['H'],result['MIN'],result['S']) - self.endTime= datetime.datetime.strptime(datetimestr, "%Y/%m/%d %H:%M:%S") # also timezone at end, e.g. " ET" - self.endTime = HandHistoryConverter.changeTimezone(self.endTime, "ET", "UTC") - currentLine+=1 - - if lines[currentLine].find("Tournament is still in progress")!=-1: - currentLine+=1 - - for i in range(currentLine,len(lines)-2): #lines with rank and winnings info - if lines[i].find(":")==-1: - break - result=self.re_Player.search(lines[i]) - result=result.groupdict() - rank=result['RANK'] - name=result['NAME'] - winnings=result['WINNINGS'] - - if winnings: - winnings=int(100*Decimal(winnings)) - else: - winnings=0 - - if result['STILLPLAYING']: - #print "stillplaying" - rank=None - winnings=None - - self.addPlayer(rank, name, winnings, self.currency, None, None, None)#TODO: currency, ko/addon/rebuy count -> need examples! - #end def parseSummary - - def parseSummaryFile(self): m = self.re_TourneyInfo.search(self.summaryText) if m == None: tmp = self.summaryText[0:200] - log.error(_("parseSummaryFile: Unable to recognise Tourney Info: '%s'") % tmp) - log.error(_("parseSummaryFile: Raising FpdbParseError")) + log.error(_("parseSummary: Unable to recognise Tourney Info: '%s'") % tmp) + log.error(_("parseSummary: Raising FpdbParseError")) raise FpdbParseError(_("Unable to recognise Tourney Info: '%s'") % tmp) #print "DEBUG: m.groupdict(): %s" % m.groupdict() @@ -222,8 +111,8 @@ class PokerStarsSummary(TourneySummary): m = self.re_Currency.search(self.summaryText) if m == None: - log.error(_("parseSummaryFile: Unable to locate currency")) - log.error(_("parseSummaryFile: Raising FpdbParseError")) + log.error(_("parseSummary: Unable to locate currency")) + log.error(_("parseSummary: Raising FpdbParseError")) raise FpdbParseError(_("Unable to locate currency")) #print "DEBUG: m.groupdict(): %s" % m.groupdict() diff --git a/pyfpdb/TourneySummary.py b/pyfpdb/TourneySummary.py index f78d96de..7490802b 100644 --- a/pyfpdb/TourneySummary.py +++ b/pyfpdb/TourneySummary.py @@ -125,11 +125,11 @@ class TourneySummary(object): self.sym = None if builtFrom=="IMAP": - self.parseSummary() - self.insertOrUpdate() - elif builtFrom == "file": - self.parseSummaryFile() - self.insertOrUpdate() + # Fix line endings? + pass + + self.parseSummary() + self.insertOrUpdate() #end def __init__ def __str__(self):