Merge branch 'master' of git://git.assembla.com/fpdboz.git
This commit is contained in:
commit
2e54518b4f
|
@ -133,8 +133,9 @@ or None if we fail to get the info """
|
||||||
|
|
||||||
self.info = {}
|
self.info = {}
|
||||||
mg = m.groupdict()
|
mg = m.groupdict()
|
||||||
|
print mg
|
||||||
|
|
||||||
limits = { 'No Limit':'nl', 'Limit':'fl' }
|
limits = { 'No Limit':'nl', 'No Limit ':'nl', 'Limit':'fl' }
|
||||||
games = { # base, category
|
games = { # base, category
|
||||||
'Holdem' : ('hold','holdem'),
|
'Holdem' : ('hold','holdem'),
|
||||||
'Holdem Tournament' : ('hold','holdem') }
|
'Holdem Tournament' : ('hold','holdem') }
|
||||||
|
|
|
@ -55,6 +55,7 @@ import Card
|
||||||
import Charset
|
import Charset
|
||||||
from Exceptions import *
|
from Exceptions import *
|
||||||
import Configuration
|
import Configuration
|
||||||
|
import Filters
|
||||||
|
|
||||||
|
|
||||||
# Other library modules
|
# Other library modules
|
||||||
|
@ -73,7 +74,7 @@ except ImportError:
|
||||||
use_numpy = False
|
use_numpy = False
|
||||||
|
|
||||||
|
|
||||||
DB_VERSION = 144
|
DB_VERSION = 145
|
||||||
|
|
||||||
|
|
||||||
# Variance created as sqlite has a bunch of undefined aggregate functions.
|
# Variance created as sqlite has a bunch of undefined aggregate functions.
|
||||||
|
@ -291,8 +292,8 @@ class Database:
|
||||||
|
|
||||||
# vars for hand ids or dates fetched according to above config:
|
# vars for hand ids or dates fetched according to above config:
|
||||||
self.hand_1day_ago = 0 # max hand id more than 24 hrs earlier than now
|
self.hand_1day_ago = 0 # max hand id more than 24 hrs earlier than now
|
||||||
self.date_ndays_ago = 'd000000' # date N days ago ('d' + YYMMDD)
|
self.date_ndays_ago = 'd00000000' # date N days ago ('d' + YYMMDD)
|
||||||
self.h_date_ndays_ago = 'd000000' # date N days ago ('d' + YYMMDD) for hero
|
self.h_date_ndays_ago = 'd00000000' # date N days ago ('d' + YYMMDD) for hero
|
||||||
self.date_nhands_ago = {} # dates N hands ago per player - not used yet
|
self.date_nhands_ago = {} # dates N hands ago per player - not used yet
|
||||||
|
|
||||||
self.saveActions = False if self.import_options['saveActions'] == False else True
|
self.saveActions = False if self.import_options['saveActions'] == False else True
|
||||||
|
@ -689,21 +690,23 @@ class Database:
|
||||||
else:
|
else:
|
||||||
if row and row[0]:
|
if row and row[0]:
|
||||||
self.hand_1day_ago = int(row[0])
|
self.hand_1day_ago = int(row[0])
|
||||||
|
|
||||||
d = timedelta(days=hud_days)
|
offset = strptime(Filters.Filters(self, self.config, self.sql).getDates()[0],"%Y-%m-%d %H:%M:%S").tm_hour
|
||||||
|
|
||||||
|
d = timedelta(days=hud_days, hours=offset)
|
||||||
now = datetime.utcnow() - d
|
now = datetime.utcnow() - d
|
||||||
self.date_ndays_ago = "d%02d%02d%02d" % (now.year - 2000, now.month, now.day)
|
self.date_ndays_ago = "d%02d%02d%02d%02d" % (now.year - 2000, now.month, now.day, offset)
|
||||||
|
|
||||||
d = timedelta(days=h_hud_days)
|
d = timedelta(days=h_hud_days, hours=offset)
|
||||||
now = datetime.utcnow() - d
|
now = datetime.utcnow() - d
|
||||||
self.h_date_ndays_ago = "d%02d%02d%02d" % (now.year - 2000, now.month, now.day)
|
self.h_date_ndays_ago = "d%02d%02d%02d%02d" % (now.year - 2000, now.month, now.day, offset)
|
||||||
|
|
||||||
def init_player_hud_stat_vars(self, playerid):
|
def init_player_hud_stat_vars(self, playerid):
|
||||||
# not sure if this is workable, to be continued ...
|
# not sure if this is workable, to be continued ...
|
||||||
try:
|
try:
|
||||||
# self.date_nhands_ago is used for fetching stats for last n hands (hud_style = 'H')
|
# self.date_nhands_ago is used for fetching stats for last n hands (hud_style = 'H')
|
||||||
# This option not used yet - needs to be called for each player :-(
|
# This option not used yet - needs to be called for each player :-(
|
||||||
self.date_nhands_ago[str(playerid)] = 'd000000'
|
self.date_nhands_ago[str(playerid)] = 'd00000000'
|
||||||
|
|
||||||
# should use aggregated version of query if appropriate
|
# should use aggregated version of query if appropriate
|
||||||
c.execute(self.sql.query['get_date_nhands_ago'], (self.hud_hands, playerid))
|
c.execute(self.sql.query['get_date_nhands_ago'], (self.hud_hands, playerid))
|
||||||
|
@ -771,11 +774,11 @@ class Database:
|
||||||
if hud_style == 'T':
|
if hud_style == 'T':
|
||||||
stylekey = self.date_ndays_ago
|
stylekey = self.date_ndays_ago
|
||||||
elif hud_style == 'A':
|
elif hud_style == 'A':
|
||||||
stylekey = '0000000' # all stylekey values should be higher than this
|
stylekey = '000000000' # all stylekey values should be higher than this
|
||||||
elif hud_style == 'S':
|
elif hud_style == 'S':
|
||||||
stylekey = 'zzzzzzz' # all stylekey values should be lower than this
|
stylekey = 'zzzzzzzzz' # all stylekey values should be lower than this
|
||||||
else:
|
else:
|
||||||
stylekey = '0000000'
|
stylekey = '000000000'
|
||||||
log.info('hud_style: %s' % hud_style)
|
log.info('hud_style: %s' % hud_style)
|
||||||
|
|
||||||
#elif hud_style == 'H':
|
#elif hud_style == 'H':
|
||||||
|
@ -784,11 +787,11 @@ class Database:
|
||||||
if h_hud_style == 'T':
|
if h_hud_style == 'T':
|
||||||
h_stylekey = self.h_date_ndays_ago
|
h_stylekey = self.h_date_ndays_ago
|
||||||
elif h_hud_style == 'A':
|
elif h_hud_style == 'A':
|
||||||
h_stylekey = '0000000' # all stylekey values should be higher than this
|
h_stylekey = '000000000' # all stylekey values should be higher than this
|
||||||
elif h_hud_style == 'S':
|
elif h_hud_style == 'S':
|
||||||
h_stylekey = 'zzzzzzz' # all stylekey values should be lower than this
|
h_stylekey = 'zzzzzzzzz' # all stylekey values should be lower than this
|
||||||
else:
|
else:
|
||||||
h_stylekey = '000000'
|
h_stylekey = '00000000'
|
||||||
log.info('h_hud_style: %s' % h_hud_style)
|
log.info('h_hud_style: %s' % h_hud_style)
|
||||||
|
|
||||||
#elif h_hud_style == 'H':
|
#elif h_hud_style == 'H':
|
||||||
|
@ -1824,11 +1827,11 @@ class Database:
|
||||||
"""Update cached statistics. If update fails because no record exists, do an insert."""
|
"""Update cached statistics. If update fails because no record exists, do an insert."""
|
||||||
|
|
||||||
if self.use_date_in_hudcache:
|
if self.use_date_in_hudcache:
|
||||||
styleKey = datetime.strftime(starttime, 'd%y%m%d')
|
styleKey = datetime.strftime(starttime, 'd%y%m%d%H')
|
||||||
#styleKey = "d%02d%02d%02d" % (hand_start_time.year-2000, hand_start_time.month, hand_start_time.day)
|
#styleKey = "d%02d%02d%02d%02d" % (hand_start_time.year-2000, hand_start_time.month, hand_start_time.day, hand_start_time.hour)
|
||||||
else:
|
else:
|
||||||
# hard-code styleKey as 'A000000' (all-time cache, no key) for now
|
# hard-code styleKey as 'A00000000' (all-time cache, no key) for now
|
||||||
styleKey = 'A000000'
|
styleKey = 'A00000000'
|
||||||
|
|
||||||
update_hudcache = self.sql.query['update_hudcache']
|
update_hudcache = self.sql.query['update_hudcache']
|
||||||
update_hudcache = update_hudcache.replace('%s', self.sql.query['placeholder'])
|
update_hudcache = update_hudcache.replace('%s', self.sql.query['placeholder'])
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
#Copyright 2010 Chaz Littlejohn
|
#Copyright 2010 Chaz Littlejohn
|
||||||
|
@ -28,18 +28,21 @@ import Configuration
|
||||||
import Database
|
import Database
|
||||||
|
|
||||||
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
__ARCHIVE_PRE_HEADER_REGEX='^Hand #(\d+)\s*$|\*{20}\s#\s\d+\s\*+\s+'
|
||||||
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX)
|
re_SplitArchive = re.compile(__ARCHIVE_PRE_HEADER_REGEX, re.MULTILINE)
|
||||||
|
|
||||||
|
|
||||||
class IdentifySite:
|
class IdentifySite:
|
||||||
def __init__(self, config, in_path = '-'):
|
def __init__(self, config, in_path = '-'):
|
||||||
self.in_path = in_path
|
self.in_path = in_path
|
||||||
self.config = config
|
self.config = config
|
||||||
self.db = Database.Database(config)
|
self.db = Database.Database(self.config)
|
||||||
self.sitelist = {}
|
self.sitelist = {}
|
||||||
self.filelist = {}
|
self.filelist = {}
|
||||||
self.generateSiteList()
|
self.generateSiteList()
|
||||||
self.walkDirectory(self.in_path, self.sitelist)
|
if os.path.isdir(self.in_path):
|
||||||
|
self.walkDirectory(self.in_path, self.sitelist)
|
||||||
|
else:
|
||||||
|
self.idSite(self.in_path, self.sitelist)
|
||||||
|
|
||||||
def generateSiteList(self):
|
def generateSiteList(self):
|
||||||
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
"""Generates a ordered dictionary of site, filter and filter name for each site in hhcs"""
|
||||||
|
@ -80,7 +83,7 @@ class IdentifySite:
|
||||||
for kodec in self.__listof(obj.codepage):
|
for kodec in self.__listof(obj.codepage):
|
||||||
try:
|
try:
|
||||||
in_fh = codecs.open(file, 'r', kodec)
|
in_fh = codecs.open(file, 'r', kodec)
|
||||||
whole_file = in_fh.read()
|
whole_file = in_fh.read(2000)
|
||||||
in_fh.close()
|
in_fh.close()
|
||||||
|
|
||||||
if info[2] in ('OnGame', 'Winamax'):
|
if info[2] in ('OnGame', 'Winamax'):
|
||||||
|
@ -94,7 +97,7 @@ class IdentifySite:
|
||||||
if re_SplitArchive.search(whole_file):
|
if re_SplitArchive.search(whole_file):
|
||||||
archive = True
|
archive = True
|
||||||
if m:
|
if m:
|
||||||
self.filelist[file] = [info[0]] + [info[1]] + [kodec] + [archive]
|
self.filelist[file] = [info[1]] + [kodec] + [archive]
|
||||||
break
|
break
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -59,6 +59,8 @@ def fpdb_options():
|
||||||
help=_("File to be split is a PokerStars or Full Tilt Poker archive file"))
|
help=_("File to be split is a PokerStars or Full Tilt Poker archive file"))
|
||||||
parser.add_option("-n", "--numhands", dest="hands", default="100", type="int",
|
parser.add_option("-n", "--numhands", dest="hands", default="100", type="int",
|
||||||
help=_("How many hands do you want saved to each file. Default is 100"))
|
help=_("How many hands do you want saved to each file. Default is 100"))
|
||||||
|
parser.add_option("-w", "--workerid", dest="workerid", default="0", type="int",
|
||||||
|
help=_("Specifies the worker id running the script"))
|
||||||
|
|
||||||
|
|
||||||
(options, argv) = parser.parse_args()
|
(options, argv) = parser.parse_args()
|
||||||
|
|
|
@ -298,7 +298,7 @@ class PokerStars(HandHistoryConverter):
|
||||||
if key == 'BUTTON':
|
if key == 'BUTTON':
|
||||||
hand.buttonpos = info[key]
|
hand.buttonpos = info[key]
|
||||||
if key == 'MAX':
|
if key == 'MAX':
|
||||||
hand.maxseats = int(info[key])
|
if info[key]: hand.maxseats = int(info[key])
|
||||||
|
|
||||||
if key == 'MIXED':
|
if key == 'MIXED':
|
||||||
hand.mixed = self.mixes[info[key]] if info[key] is not None else None
|
hand.mixed = self.mixes[info[key]] if info[key] is not None else None
|
||||||
|
|
|
@ -1064,7 +1064,7 @@ class Sql:
|
||||||
activeSeats SMALLINT NOT NULL,
|
activeSeats SMALLINT NOT NULL,
|
||||||
position CHAR(1),
|
position CHAR(1),
|
||||||
tourneyTypeId SMALLINT UNSIGNED, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
tourneyTypeId SMALLINT UNSIGNED, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
styleKey CHAR(9) NOT NULL, /* 1st char is style (A/T/H/S), other 8 are the key */
|
||||||
HDs INT NOT NULL,
|
HDs INT NOT NULL,
|
||||||
|
|
||||||
wonWhenSeenStreet1 FLOAT,
|
wonWhenSeenStreet1 FLOAT,
|
||||||
|
@ -1165,7 +1165,7 @@ class Sql:
|
||||||
activeSeats SMALLINT,
|
activeSeats SMALLINT,
|
||||||
position CHAR(1),
|
position CHAR(1),
|
||||||
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
tourneyTypeId INT, FOREIGN KEY (tourneyTypeId) REFERENCES TourneyTypes(id),
|
||||||
styleKey CHAR(7) NOT NULL, /* 1st char is style (A/T/H/S), other 6 are the key */
|
styleKey CHAR(9) NOT NULL, /* 1st char is style (A/T/H/S), other 8 are the key */
|
||||||
HDs INT,
|
HDs INT,
|
||||||
|
|
||||||
wonWhenSeenStreet1 FLOAT,
|
wonWhenSeenStreet1 FLOAT,
|
||||||
|
@ -2047,7 +2047,7 @@ class Sql:
|
||||||
# gets a date, would need to use handsplayers (not hudcache) to get exact hand Id
|
# gets a date, would need to use handsplayers (not hudcache) to get exact hand Id
|
||||||
if db_server == 'mysql':
|
if db_server == 'mysql':
|
||||||
self.query['get_date_nhands_ago'] = """
|
self.query['get_date_nhands_ago'] = """
|
||||||
select concat( 'd', date_format(max(h.startTime), '%Y%m%d') )
|
select concat( 'd', date_format(max(h.startTime), '%Y%m%d%H') )
|
||||||
from (select hp.playerId
|
from (select hp.playerId
|
||||||
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
||||||
from HandsPlayers hp
|
from HandsPlayers hp
|
||||||
|
@ -2059,7 +2059,7 @@ class Sql:
|
||||||
"""
|
"""
|
||||||
elif db_server == 'postgresql':
|
elif db_server == 'postgresql':
|
||||||
self.query['get_date_nhands_ago'] = """
|
self.query['get_date_nhands_ago'] = """
|
||||||
select 'd' || to_char(max(h3.startTime), 'YYMMDD')
|
select 'd' || to_char(max(h3.startTime), 'YYMMDDHH')
|
||||||
from (select hp.playerId
|
from (select hp.playerId
|
||||||
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
||||||
from HandsPlayers hp
|
from HandsPlayers hp
|
||||||
|
@ -2071,7 +2071,7 @@ class Sql:
|
||||||
"""
|
"""
|
||||||
elif db_server == 'sqlite': # untested guess at query:
|
elif db_server == 'sqlite': # untested guess at query:
|
||||||
self.query['get_date_nhands_ago'] = """
|
self.query['get_date_nhands_ago'] = """
|
||||||
select 'd' || strftime(max(h3.startTime), 'YYMMDD')
|
select 'd' || strftime(max(h3.startTime), 'YYMMDDHH')
|
||||||
from (select hp.playerId
|
from (select hp.playerId
|
||||||
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
,coalesce(greatest(max(hp.handId)-%s,1),1) as maxminusx
|
||||||
from HandsPlayers hp
|
from HandsPlayers hp
|
||||||
|
@ -3290,7 +3290,7 @@ class Sql:
|
||||||
else 'E'
|
else 'E'
|
||||||
end AS hc_position
|
end AS hc_position
|
||||||
<tourney_select_clause>
|
<tourney_select_clause>
|
||||||
,date_format(h.startTime, 'd%y%m%d')
|
,date_format(h.startTime, 'd%y%m%d%H')
|
||||||
,count(1)
|
,count(1)
|
||||||
,sum(wonWhenSeenStreet1)
|
,sum(wonWhenSeenStreet1)
|
||||||
,sum(wonWhenSeenStreet2)
|
,sum(wonWhenSeenStreet2)
|
||||||
|
@ -3379,7 +3379,7 @@ class Sql:
|
||||||
,h.seats
|
,h.seats
|
||||||
,hc_position
|
,hc_position
|
||||||
<tourney_group_clause>
|
<tourney_group_clause>
|
||||||
,date_format(h.startTime, 'd%y%m%d')
|
,date_format(h.startTime, 'd%y%m%d%H')
|
||||||
"""
|
"""
|
||||||
elif db_server == 'postgresql':
|
elif db_server == 'postgresql':
|
||||||
self.query['rebuildHudCache'] = """
|
self.query['rebuildHudCache'] = """
|
||||||
|
@ -3488,7 +3488,7 @@ class Sql:
|
||||||
else 'E'
|
else 'E'
|
||||||
end AS hc_position
|
end AS hc_position
|
||||||
<tourney_select_clause>
|
<tourney_select_clause>
|
||||||
,'d' || to_char(h.startTime, 'YYMMDD')
|
,'d' || to_char(h.startTime, 'YYMMDDHH')
|
||||||
,count(1)
|
,count(1)
|
||||||
,sum(wonWhenSeenStreet1)
|
,sum(wonWhenSeenStreet1)
|
||||||
,sum(wonWhenSeenStreet2)
|
,sum(wonWhenSeenStreet2)
|
||||||
|
@ -3577,7 +3577,7 @@ class Sql:
|
||||||
,h.seats
|
,h.seats
|
||||||
,hc_position
|
,hc_position
|
||||||
<tourney_group_clause>
|
<tourney_group_clause>
|
||||||
,to_char(h.startTime, 'YYMMDD')
|
,to_char(h.startTime, 'YYMMDDHH')
|
||||||
"""
|
"""
|
||||||
else: # assume sqlite
|
else: # assume sqlite
|
||||||
self.query['rebuildHudCache'] = """
|
self.query['rebuildHudCache'] = """
|
||||||
|
@ -3686,7 +3686,7 @@ class Sql:
|
||||||
else 'E'
|
else 'E'
|
||||||
end AS hc_position
|
end AS hc_position
|
||||||
<tourney_select_clause>
|
<tourney_select_clause>
|
||||||
,'d' || substr(strftime('%Y%m%d', h.startTime),3,7)
|
,'d' || substr(strftime('%Y%m%d%H', h.startTime),3,9)
|
||||||
,count(1)
|
,count(1)
|
||||||
,sum(wonWhenSeenStreet1)
|
,sum(wonWhenSeenStreet1)
|
||||||
,sum(wonWhenSeenStreet2)
|
,sum(wonWhenSeenStreet2)
|
||||||
|
@ -3775,7 +3775,7 @@ class Sql:
|
||||||
,h.seats
|
,h.seats
|
||||||
,hc_position
|
,hc_position
|
||||||
<tourney_group_clause>
|
<tourney_group_clause>
|
||||||
,'d' || substr(strftime('%Y%m%d', h.startTime),3,7)
|
,'d' || substr(strftime('%Y%m%d%H', h.startTime),3,9)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.query['insert_hudcache'] = """
|
self.query['insert_hudcache'] = """
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
#Copyright 2010 Chaz Littlejohn
|
# Copyright 2010, Chaz Littlejohn
|
||||||
#This program is free software: you can redistribute it and/or modify
|
#
|
||||||
#it under the terms of the GNU Affero General Public License as published by
|
# This program is free software; you can redistribute it and/or modify
|
||||||
#the Free Software Foundation, version 3 of the License.
|
# it under the terms of the GNU General Public License as published by
|
||||||
#
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
#This program is distributed in the hope that it will be useful,
|
# (at your option) any later version.
|
||||||
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
#
|
||||||
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# This program is distributed in the hope that it will be useful,
|
||||||
#GNU General Public License for more details.
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
#
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
#You should have received a copy of the GNU Affero General Public License
|
# GNU General Public License for more details.
|
||||||
#along with this program. If not, see <http://www.gnu.org/licenses/>.
|
#
|
||||||
#In the "official" distribution you can find the license in agpl-3.0.txt.
|
# 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 L10n
|
import L10n
|
||||||
_ = L10n.get_translation()
|
_ = L10n.get_translation()
|
||||||
|
@ -28,6 +31,7 @@ import Options
|
||||||
import Configuration
|
import Configuration
|
||||||
from Exceptions import *
|
from Exceptions import *
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
|
import time
|
||||||
|
|
||||||
(options, argv) = Options.fpdb_options()
|
(options, argv) = Options.fpdb_options()
|
||||||
|
|
||||||
|
@ -37,7 +41,7 @@ codepage = ["utf-16", "utf-8", "cp1252"]
|
||||||
|
|
||||||
|
|
||||||
class SplitHandHistory:
|
class SplitHandHistory:
|
||||||
def __init__(self, config, in_path = '-', out_path = None, hands = 100, filter = "PokerStarsToFpdb", archive = False):
|
def __init__(self, config, in_path = '-', out_path = None, hands = 100, filter = "PokerStarsToFpdb", archive = False, workerid = 0):
|
||||||
self.config = config
|
self.config = config
|
||||||
self.in_path = in_path
|
self.in_path = in_path
|
||||||
self.out_path = out_path
|
self.out_path = out_path
|
||||||
|
@ -50,22 +54,25 @@ class SplitHandHistory:
|
||||||
self.line_addendum = None
|
self.line_addendum = None
|
||||||
self.filedone = False
|
self.filedone = False
|
||||||
|
|
||||||
|
self.timestamp = str(time.time())
|
||||||
|
self.workerid = '%02d' % workerid
|
||||||
|
|
||||||
#Acquire re_SplitHands for this hh
|
#Acquire re_SplitHands for this hh
|
||||||
filter_name = filter.replace("ToFpdb", "")
|
self.filter_name = filter.replace("ToFpdb", "")
|
||||||
mod = __import__(filter)
|
mod = __import__(filter)
|
||||||
obj = getattr(mod, filter_name, None)
|
obj = getattr(mod, self.filter_name, None)
|
||||||
self.re_SplitHands = obj.re_SplitHands
|
self.re_SplitHands = obj.re_SplitHands
|
||||||
|
|
||||||
#Determine line delimiter type if any
|
#Determine line delimiter type if any
|
||||||
if self.re_SplitHands.match('\n\n'):
|
|
||||||
self.line_delimiter = '\n\n'
|
|
||||||
if self.re_SplitHands.match('\n\n\n'):
|
if self.re_SplitHands.match('\n\n\n'):
|
||||||
self.line_delimiter = '\n\n\n'
|
self.line_delimiter = '\n\n\n'
|
||||||
|
if self.re_SplitHands.match('\n\n'):
|
||||||
|
self.line_delimiter = '\n\n'
|
||||||
|
|
||||||
#Add new line addendum for sites which match SplitHand to next line as well
|
#Add new line addendum for sites which match SplitHand to next line as well
|
||||||
if filter_name == 'OnGame':
|
if self.filter_name == 'OnGame':
|
||||||
self.line_addendum = '*'
|
self.line_addendum = '*'
|
||||||
if filter_name == 'Carbon':
|
if self.filter_name == 'Carbon':
|
||||||
self.line_addendum = '<game'
|
self.line_addendum = '<game'
|
||||||
|
|
||||||
#Open the gargantuan file
|
#Open the gargantuan file
|
||||||
|
@ -75,6 +82,7 @@ class SplitHandHistory:
|
||||||
except IOError:
|
except IOError:
|
||||||
print _('File not found')
|
print _('File not found')
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
self.kodec = kodec
|
||||||
|
|
||||||
#Split with do_hands_per_file if archive and paragraphs if a regular hh
|
#Split with do_hands_per_file if archive and paragraphs if a regular hh
|
||||||
if self.archive:
|
if self.archive:
|
||||||
|
@ -105,9 +113,10 @@ class SplitHandHistory:
|
||||||
print _('Nope, will not work (fileno=%d)' % fileno)
|
print _('Nope, will not work (fileno=%d)' % fileno)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
basename = os.path.splitext(os.path.basename(self.in_path))[0]
|
basename = os.path.splitext(os.path.basename(self.in_path))[0]
|
||||||
name = os.path.join(self.out_path, basename+'-%06d.txt' % fileno)
|
name = os.path.join(self.out_path, self.filter_name+'-'+basename+'_'+self.workerid+'_'+self.timestamp+'_%06d.txt' % fileno)
|
||||||
print '-> %s' % name
|
print '-> %s' % name
|
||||||
newfile = file(name, 'w')
|
newfile = file(name, 'w')
|
||||||
|
os.chmod(name, 0775)
|
||||||
return newfile
|
return newfile
|
||||||
|
|
||||||
#Archive Hand Splitter
|
#Archive Hand Splitter
|
||||||
|
@ -122,8 +131,11 @@ class SplitHandHistory:
|
||||||
except FpdbEndOfFile:
|
except FpdbEndOfFile:
|
||||||
done = True
|
done = True
|
||||||
break
|
break
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print _('Absurd character done messed you up')
|
||||||
|
sys.exit(2)
|
||||||
except:
|
except:
|
||||||
print _("Unexpected error processing file")
|
print _('Unexpected error processing file')
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
n += 1
|
n += 1
|
||||||
outfile.close()
|
outfile.close()
|
||||||
|
@ -174,7 +186,7 @@ class SplitHandHistory:
|
||||||
l = infile.readline()
|
l = infile.readline()
|
||||||
l = l.replace('\r\n', '\n')
|
l = l.replace('\r\n', '\n')
|
||||||
outfile.write(l)
|
outfile.write(l)
|
||||||
l = infile.readline()
|
l = infile.readline().encode(self.kodec)
|
||||||
|
|
||||||
while len(l) < 3:
|
while len(l) < 3:
|
||||||
l = infile.readline()
|
l = infile.readline()
|
||||||
|
@ -182,7 +194,7 @@ class SplitHandHistory:
|
||||||
while len(l) > 2:
|
while len(l) > 2:
|
||||||
l = l.replace('\r\n', '\n')
|
l = l.replace('\r\n', '\n')
|
||||||
outfile.write(l)
|
outfile.write(l)
|
||||||
l = infile.readline()
|
l = infile.readline().encode(self.kodec)
|
||||||
outfile.write(self.line_delimiter)
|
outfile.write(self.line_delimiter)
|
||||||
return infile
|
return infile
|
||||||
|
|
||||||
|
@ -195,13 +207,19 @@ class SplitHandHistory:
|
||||||
def main(argv=None):
|
def main(argv=None):
|
||||||
if argv is None:
|
if argv is None:
|
||||||
argv = sys.argv[1:]
|
argv = sys.argv[1:]
|
||||||
|
|
||||||
|
if not options.filename:
|
||||||
|
options.filename = sys.argv[1]
|
||||||
|
|
||||||
if not options.config:
|
if not options.config:
|
||||||
options.config = Configuration.Config(file = "HUD_config.test.xml")
|
options.config = sys.argv[2]
|
||||||
|
|
||||||
|
if sys.argv[3] == "True":
|
||||||
|
options.archive = True
|
||||||
|
|
||||||
if options.filename:
|
if options.filename:
|
||||||
SplitHH = SplitHandHistory(options.config, options.filename, options.outpath, options.hands,
|
SplitHH = SplitHandHistory(options.config, options.filename, options.outpath, options.hands,
|
||||||
options.hhc, options.archive)
|
options.hhc, options.archive, options.workerid)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
|
2
pyfpdb/interlocks.py
Executable file → Normal file
2
pyfpdb/interlocks.py
Executable file → Normal file
|
@ -108,7 +108,7 @@ class InterProcessLockFcntl(InterProcessLockBase):
|
||||||
self.lockfd = 0
|
self.lockfd = 0
|
||||||
try:
|
try:
|
||||||
os.unlink(self.lock_file_name)
|
os.unlink(self.lock_file_name)
|
||||||
except IOError:
|
except OSError:
|
||||||
# We don't care about the existence of the file too much here. It's the flock() we care about,
|
# We don't care about the existence of the file too much here. It's the flock() we care about,
|
||||||
# And that should just go away magically.
|
# And that should just go away magically.
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
PokerStars Game #2428142447: Hold'em Limit ($1/$2 USD) - 2005/08/26 16:12:22 ET
|
||||||
|
Table 'Teucer II' Seat #5 is the button
|
||||||
|
Seat 1: Frankson34 ($24 in chips)
|
||||||
|
Seat 2: webb22 ($64 in chips)
|
||||||
|
Seat 3: eric_mtx ($26 in chips)
|
||||||
|
Seat 4: sososolid ($147.75 in chips)
|
||||||
|
Seat 5: DRILHER ($48.25 in chips)
|
||||||
|
Seat 6: Naughtychic ($60 in chips)
|
||||||
|
Seat 7: Terps78 ($71.50 in chips)
|
||||||
|
Seat 8: ChazDazzle ($69.25 in chips)
|
||||||
|
Seat 9: alekos ($55 in chips)
|
||||||
|
Seat 10: BigNards84 ($64.25 in chips)
|
||||||
|
Naughtychic: posts small blind $0.50
|
||||||
|
Terps78: posts big blind $1
|
||||||
|
*** HOLE CARDS ***
|
||||||
|
Dealt to ChazDazzle [8c Kd]
|
||||||
|
ChazDazzle: folds
|
||||||
|
alekos: folds
|
||||||
|
BigNards84: raises $1 to $2
|
||||||
|
Frankson34: folds
|
||||||
|
webb22: folds
|
||||||
|
eric_mtx: folds
|
||||||
|
ChazDazzle leaves the table
|
||||||
|
sososolid: folds
|
||||||
|
DRILHER: folds
|
||||||
|
cdhender joins the table at seat #8
|
||||||
|
Naughtychic: folds
|
||||||
|
Terps78: folds
|
||||||
|
BigNards84 collected $2.50 from pot
|
||||||
|
BigNards84: doesn't show hand
|
||||||
|
*** SUMMARY ***
|
||||||
|
Total pot $2.50 | Rake $0
|
||||||
|
Seat 1: Frankson34 folded before Flop (didn't bet)
|
||||||
|
Seat 2: webb22 folded before Flop (didn't bet)
|
||||||
|
Seat 3: eric_mtx folded before Flop (didn't bet)
|
||||||
|
Seat 4: sososolid folded before Flop (didn't bet)
|
||||||
|
Seat 5: DRILHER (button) folded before Flop (didn't bet)
|
||||||
|
Seat 6: Naughtychic (small blind) folded before Flop
|
||||||
|
Seat 7: Terps78 (big blind) folded before Flop
|
||||||
|
Seat 8: ChazDazzle folded before Flop (didn't bet)
|
||||||
|
Seat 9: alekos folded before Flop (didn't bet)
|
||||||
|
Seat 10: BigNards84 collected ($2.50)
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user