diff --git a/pyfpdb/PartyPokerToFpdb.py b/pyfpdb/PartyPokerToFpdb.py new file mode 100644 index 00000000..c0161bf0 --- /dev/null +++ b/pyfpdb/PartyPokerToFpdb.py @@ -0,0 +1,521 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2009, Grigorij Indigirkin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +######################################################################## + +import sys +from collections import defaultdict + +from HandHistoryConverter import * + +# PartyPoker HH Format + +class PartyPoker(HandHistoryConverter): + class ParsingException(Exception): + "Usage: raise ParsingException([, hh=])" + def __init__(self, *args, **kwargs): + if len(args)==0: args=[''] + list(args) + msg, args = args[0], args[1:] + if 'hh' in kwargs: + msg += self.wrapHh(kwargs['hh']) + del kwargs['hh'] + return Exception.__init__(self, msg, *args, **kwargs) + def wrapHh(self, hh): + return ("\n\nHand history attached below:\n" + "%(DELIMETER)s\n%(HH)s\n%(DELIMETER)s") % \ + {'DELIMETER': '#'*50, 'HH': hh} + +############################################################ +# Class Variables + + sym = {'USD': "\$", } + + # Static regexes + # $5 USD NL Texas Hold'em - Saturday, July 25, 07:53:52 EDT 2009 + # NL Texas Hold'em $1 USD Buy-in Trny:45685440 Level:8 Blinds-Antes(600/1 200 -50) - Sunday, May 17, 11:25:07 MSKS 2009 + re_GameInfoRing = re.compile(""" + (?P\$|)\s*(?P\d+)\s*(?:USD)?\s* + (?P(NL))\s+ + (?P(Texas\ Hold\'em)) + \s*\-\s* + (?P.+) + """, re.VERBOSE) + re_GameInfoTrny = re.compile(""" + (?P(NL))\s+ + (?P(Texas\ Hold\'em))\s+ + (?P\$?[.0-9]+)\s*(?PUSD)?\s*Buy-in\s+ + Trny:\s?(?P\d+)\s+ + Level:\s*(?P\d+)\s+ + Blinds(?:-Antes)?\( + (?P[.0-9 ]+)\s* + /(?P[.0-9 ]+) + (?:\s*-\s*(?P[.0-9 ]+)\$?)? + \) + \s*\-\s* + (?P.+) + """, re.VERBOSE) + re_Hid = re.compile("^Game \#(?P\d+) starts.") + #re_GameInfo = re.compile(""" + #PartyPoker\sGame\s\#(?P[0-9]+):\s+ + #(Tournament\s\# # open paren of tournament info + #(?P\d+),\s + #(?P[%(LS)s\+\d\.]+ # here's how I plan to use LS + #\s?(?P%(LEGAL_ISO)s)? + #)\s)? # close paren of tournament info + #(?PHORSE|8\-Game|HOSE)?\s?\(? + #(?PHold\'em|Razz|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball)\s + #(?PNo\sLimit|Limit|Pot\sLimit)\)?,?\s + #(-\sLevel\s(?P[IVXLC]+)\s)? + #\(? # open paren of the stakes + #(?P%(LS)s|)? + #(?P[.0-9]+)/(%(LS)s)? + #(?P[.0-9]+) + #\s?(?P%(LEGAL_ISO)s)? + #\)\s-\s # close paren of the stakes + #(?P.*$)""" % substitutions, + #re.MULTILINE|re.VERBOSE) + + re_PlayerInfo = re.compile(""" + Seat\s(?P\d+):\s + (?P.*)\s + \(\s*\$?(?P[0-9,.]+)\s*(?:USD|)\s*\) + """ , + re.VERBOSE) + #re_PlayerInfo = re.compile(""" + #^Seat\s(?P[0-9]+):\s + #(?P.*)\s + #\((%(LS)s)?(?P[.0-9]+)\sin\schips\)""" % substitutions, + #re.MULTILINE|re.VERBOSE) + + re_HandInfo = re.compile(""" + ^Table\s+ + (?P[a-zA-Z0-9 ]+)\s+ + (?: \#|\(|)(?P\d+)\)?\s+ + (?:[^ ]+\s+\#(?P\d+).+)? # table number for mtt + \((?PReal|Play)\s+Money\)\s+ # FIXME: check if play money is correct + Seat\s+(?P
[-\ a-zA-Z\d]+)\'\s + #((?P\d+)-max\s)? + #(?P\(Play\sMoney\)\s)? + #(Seat\s\#(?P
[ a-zA-Z]+) - \$?(?P[.0-9]+)/\$?(?P[.0-9]+) - (?P.*) - (?P
[0-9]+):(?P[0-9]+) ET - (?P[0-9]+)/(?P[0-9]+)/(?P[0-9]+)Table (?P
[ a-zA-Z]+)\nSeat (?P