diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py
index 4963923d..a4ec69d2 100755
--- a/pyfpdb/Database.py
+++ b/pyfpdb/Database.py
@@ -924,6 +924,7 @@ class Database:
c.execute("INSERT INTO Sites (name,currency) VALUES ('UltimateBet', 'USD')")
c.execute("INSERT INTO Sites (name,currency) VALUES ('Betfair', 'USD')")
c.execute("INSERT INTO Sites (name,currency) VALUES ('Absolute', 'USD')")
+ c.execute("INSERT INTO Sites (name,currency) VALUES ('PartyPoker', 'USD')")
if self.backend == self.SQLITE:
c.execute("INSERT INTO TourneyTypes VALUES (NULL, 1, 0, 0, 0, 0);")
else:
diff --git a/pyfpdb/HUD_config.xml.example b/pyfpdb/HUD_config.xml.example
index 23ff279a..43cf4bcd 100644
--- a/pyfpdb/HUD_config.xml.example
+++ b/pyfpdb/HUD_config.xml.example
@@ -248,6 +248,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -383,6 +428,7 @@
+
diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py
index 20ccfc25..0946e6f9 100644
--- a/pyfpdb/Hand.py
+++ b/pyfpdb/Hand.py
@@ -40,7 +40,7 @@ class Hand(object):
LCS = {'H':'h', 'D':'d', 'C':'c', 'S':'s'}
SYMBOL = {'USD': '$', 'EUR': u'$', 'T$': '', 'play': ''}
MS = {'horse' : 'HORSE', '8game' : '8-Game', 'hose' : 'HOSE', 'ha': 'HA'}
- SITEIDS = {'Fulltilt':1, 'PokerStars':2, 'Everleaf':3, 'Win2day':4, 'OnGame':5, 'UltimateBet':6, 'Betfair':7, 'Absolute':8}
+ SITEIDS = {'Fulltilt':1, 'PokerStars':2, 'Everleaf':3, 'Win2day':4, 'OnGame':5, 'UltimateBet':6, 'Betfair':7, 'Absolute':8, 'PartyPoker':9 }
def __init__(self, sitename, gametype, handText, builtFrom = "HHC"):
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