#!/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 sitename = "PartyPoker" codepage = "cp1252" siteId = 9 # TODO: automate; it's a class variable so shouldn't hit DB too often filetype = "text" # "text" or "xml". I propose we subclass HHC to HHC_Text and HHC_XML. 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[0-9,]+)\s*(?:USD)?\s* (?P(NL|PL|))\s+ (?P(Texas\ Hold\'em|Omaha)) \s*\-\s* (?P.+) """, re.VERBOSE) re_GameInfoTrny = re.compile(""" (?P(NL|PL|))\s+ (?P(Texas\ Hold\'em|Omaha))\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_PlayerInfo = re.compile(""" Seat\s(?P\d+):\s (?P.*)\s \(\s*\$?(?P[0-9,.]+)\s*(?:USD|)\s*\) """ , 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