Merge branch 'master' of git://git.assembla.com/fpdb-eric
Conflicts: pyfpdb/Configuration.py
This commit is contained in:
commit
cc89433ba8
|
@ -191,7 +191,7 @@ class Betfair(HandHistoryConverter):
|
||||||
elif action.group('ATYPE') == 'checks':
|
elif action.group('ATYPE') == 'checks':
|
||||||
hand.addCheck( street, action.group('PNAME'))
|
hand.addCheck( street, action.group('PNAME'))
|
||||||
else:
|
else:
|
||||||
print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)
|
sys.stderr.write( "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),))
|
||||||
|
|
||||||
|
|
||||||
def readShowdownActions(self, hand):
|
def readShowdownActions(self, hand):
|
||||||
|
|
|
@ -67,7 +67,7 @@ class CarbonPoker(HandHistoryConverter):
|
||||||
if(type == "Holdem"):
|
if(type == "Holdem"):
|
||||||
gametype = gametype + ["hold"]
|
gametype = gametype + ["hold"]
|
||||||
else:
|
else:
|
||||||
print "Unknown gametype: '%s'" % (type)
|
print "Carbon: Unknown gametype: '%s'" % (type)
|
||||||
|
|
||||||
stakes = desc_node[0].getAttribute("stakes")
|
stakes = desc_node[0].getAttribute("stakes")
|
||||||
#TODO: no examples of anything except nlhe
|
#TODO: no examples of anything except nlhe
|
||||||
|
|
|
@ -128,24 +128,17 @@ class Site:
|
||||||
self.ypad = node.getAttribute("ypad")
|
self.ypad = node.getAttribute("ypad")
|
||||||
self.layout = {}
|
self.layout = {}
|
||||||
|
|
||||||
print self.site_name, self.HH_path
|
print "Loading site", self.site_name
|
||||||
|
|
||||||
for layout_node in node.getElementsByTagName('layout'):
|
for layout_node in node.getElementsByTagName('layout'):
|
||||||
lo = Layout(layout_node)
|
lo = Layout(layout_node)
|
||||||
self.layout[lo.max] = lo
|
self.layout[lo.max] = lo
|
||||||
|
|
||||||
# Site defaults
|
# Site defaults
|
||||||
if self.xpad == "": self.xpad = 1
|
self.xpad = 1 if self.xpad == "" else int(self.xpad)
|
||||||
else: self.xpad = int(self.xpad)
|
self.ypad = 0 if self.ypad == "" else int(self.ypad)
|
||||||
|
self.font_size = 7 if self.font_size == "" else int(self.font_size)
|
||||||
if self.ypad == "": self.ypad = 0
|
self.hudopacity = 1.0 if self.hudopacity == "" else float(self.hudopacity)
|
||||||
else: self.ypad = int(self.ypad)
|
|
||||||
|
|
||||||
if self.font_size == "": self.font_size = 7
|
|
||||||
else: self.font_size = int(self.font_size)
|
|
||||||
|
|
||||||
if self.hudopacity == "": self.hudopacity = 1.0
|
|
||||||
else: self.hudopacity = float(self.hudopacity)
|
|
||||||
|
|
||||||
if self.use_frames == "": self.use_frames = False
|
if self.use_frames == "": self.use_frames = False
|
||||||
if self.font == "": self.font = "Sans"
|
if self.font == "": self.font = "Sans"
|
||||||
|
@ -340,22 +333,20 @@ class Config:
|
||||||
# we check the existence of "file" and try to recover if it doesn't exist
|
# we check the existence of "file" and try to recover if it doesn't exist
|
||||||
|
|
||||||
self.default_config_path = self.get_default_config_path()
|
self.default_config_path = self.get_default_config_path()
|
||||||
if file != None: # configuration file path has been passed
|
if file is not None: # config file path passed in
|
||||||
file = os.path.expanduser(file)
|
file = os.path.expanduser(file)
|
||||||
if not os.path.exists(file):
|
if not os.path.exists(file):
|
||||||
print "Configuration file %s not found. Using defaults." % (file)
|
print "Configuration file %s not found. Using defaults." % (file)
|
||||||
sys.stderr.write("Configuration file %s not found. Using defaults." % (file))
|
sys.stderr.write("Configuration file %s not found. Using defaults." % (file))
|
||||||
file = None
|
file = None
|
||||||
|
|
||||||
if file == None: # configuration file path not passed or invalid
|
if file is None: # configuration file path not passed or invalid
|
||||||
file = self.find_config() #Look for a config file in the normal places
|
file = self.find_config() #Look for a config file in the normal places
|
||||||
|
|
||||||
if file == None: # no config file in the normal places
|
if file is None: # no config file in the normal places
|
||||||
file = self.find_example_config() #Look for an example file to edit
|
file = self.find_example_config() #Look for an example file to edit
|
||||||
if file != None:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if file == None: # that didn't work either, just die
|
if file is None: # that didn't work either, just die
|
||||||
print "No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting"
|
print "No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting"
|
||||||
sys.stderr.write("No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting")
|
sys.stderr.write("No HUD_config_xml found after looking in current directory and "+self.default_config_path+"\nExiting")
|
||||||
print "press enter to continue"
|
print "press enter to continue"
|
||||||
|
@ -451,7 +442,7 @@ class Config:
|
||||||
db = self.get_db_parameters()
|
db = self.get_db_parameters()
|
||||||
if db['db-password'] == 'YOUR MYSQL PASSWORD':
|
if db['db-password'] == 'YOUR MYSQL PASSWORD':
|
||||||
df_file = self.find_default_conf()
|
df_file = self.find_default_conf()
|
||||||
if df_file == None: # this is bad
|
if df_file is None: # this is bad
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
df_parms = self.read_default_conf(df_file)
|
df_parms = self.read_default_conf(df_file)
|
||||||
|
@ -542,7 +533,7 @@ class Config:
|
||||||
|
|
||||||
def get_layout_node(self, site_node, layout):
|
def get_layout_node(self, site_node, layout):
|
||||||
for layout_node in site_node.getElementsByTagName("layout"):
|
for layout_node in site_node.getElementsByTagName("layout"):
|
||||||
if layout_node.getAttribute("max") == None:
|
if layout_node.getAttribute("max") is None:
|
||||||
return None
|
return None
|
||||||
if int( layout_node.getAttribute("max") ) == int( layout ):
|
if int( layout_node.getAttribute("max") ) == int( layout ):
|
||||||
return layout_node
|
return layout_node
|
||||||
|
@ -558,7 +549,7 @@ class Config:
|
||||||
return location_node
|
return location_node
|
||||||
|
|
||||||
def save(self, file = None):
|
def save(self, file = None):
|
||||||
if file != None:
|
if file is not None:
|
||||||
with open(file, 'w') as f:
|
with open(file, 'w') as f:
|
||||||
self.doc.writexml(f)
|
self.doc.writexml(f)
|
||||||
else:
|
else:
|
||||||
|
@ -570,7 +561,9 @@ class Config:
|
||||||
fav_seat = None, locations = None):
|
fav_seat = None, locations = None):
|
||||||
site_node = self.get_site_node(site_name)
|
site_node = self.get_site_node(site_name)
|
||||||
layout_node = self.get_layout_node(site_node, max)
|
layout_node = self.get_layout_node(site_node, max)
|
||||||
if layout_node == None: return
|
# TODO: how do we support inserting new layouts?
|
||||||
|
if layout_node is None:
|
||||||
|
return
|
||||||
for i in range(1, max + 1):
|
for i in range(1, max + 1):
|
||||||
location_node = self.get_location_node(layout_node, i)
|
location_node = self.get_location_node(layout_node, i)
|
||||||
location_node.setAttribute("x", str( locations[i-1][0] ))
|
location_node.setAttribute("x", str( locations[i-1][0] ))
|
||||||
|
@ -580,7 +573,7 @@ class Config:
|
||||||
def edit_aux_layout(self, aux_name, max, width = None, height = None, locations = None):
|
def edit_aux_layout(self, aux_name, max, width = None, height = None, locations = None):
|
||||||
aux_node = self.get_aux_node(aux_name)
|
aux_node = self.get_aux_node(aux_name)
|
||||||
layout_node = self.get_layout_node(aux_node, max)
|
layout_node = self.get_layout_node(aux_node, max)
|
||||||
if layout_node == None:
|
if layout_node is None:
|
||||||
print "aux node not found"
|
print "aux node not found"
|
||||||
return
|
return
|
||||||
print "editing locations =", locations
|
print "editing locations =", locations
|
||||||
|
@ -635,17 +628,17 @@ class Config:
|
||||||
db_pass = None, db_server = None, db_type = None):
|
db_pass = None, db_server = None, db_type = None):
|
||||||
db_node = self.get_db_node(db_name)
|
db_node = self.get_db_node(db_name)
|
||||||
if db_node != None:
|
if db_node != None:
|
||||||
if db_ip != None: db_node.setAttribute("db_ip", db_ip)
|
if db_ip is not None: db_node.setAttribute("db_ip", db_ip)
|
||||||
if db_user != None: db_node.setAttribute("db_user", db_user)
|
if db_user is not None: db_node.setAttribute("db_user", db_user)
|
||||||
if db_pass != None: db_node.setAttribute("db_pass", db_pass)
|
if db_pass is not None: db_node.setAttribute("db_pass", db_pass)
|
||||||
if db_server != None: db_node.setAttribute("db_server", db_server)
|
if db_server is not None: db_node.setAttribute("db_server", db_server)
|
||||||
if db_type != None: db_node.setAttribute("db_type", db_type)
|
if db_type is not None: db_node.setAttribute("db_type", db_type)
|
||||||
if self.supported_databases.has_key(db_name):
|
if self.supported_databases.has_key(db_name):
|
||||||
if db_ip != None: self.supported_databases[db_name].dp_ip = db_ip
|
if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip
|
||||||
if db_user != None: self.supported_databases[db_name].dp_user = db_user
|
if db_user is not None: self.supported_databases[db_name].dp_user = db_user
|
||||||
if db_pass != None: self.supported_databases[db_name].dp_pass = db_pass
|
if db_pass is not None: self.supported_databases[db_name].dp_pass = db_pass
|
||||||
if db_server != None: self.supported_databases[db_name].dp_server = db_server
|
if db_server is not None: self.supported_databases[db_name].dp_server = db_server
|
||||||
if db_type != None: self.supported_databases[db_name].dp_type = db_type
|
if db_type is not None: self.supported_databases[db_name].dp_type = db_type
|
||||||
return
|
return
|
||||||
|
|
||||||
def getDefaultSite(self):
|
def getDefaultSite(self):
|
||||||
|
@ -836,19 +829,19 @@ class Config:
|
||||||
font = None, font_size = None):
|
font = None, font_size = None):
|
||||||
"""Sets the specified site parameters for the specified site."""
|
"""Sets the specified site parameters for the specified site."""
|
||||||
site_node = self.get_site_node(site_name)
|
site_node = self.get_site_node(site_name)
|
||||||
if db_node != None:
|
if db_node is not None:
|
||||||
if converter != None: site_node.setAttribute("converter", converter)
|
if converter is not None: site_node.setAttribute("converter", converter)
|
||||||
if decoder != None: site_node.setAttribute("decoder", decoder)
|
if decoder is not None: site_node.setAttribute("decoder", decoder)
|
||||||
if hudbgcolor != None: site_node.setAttribute("hudbgcolor", hudbgcolor)
|
if hudbgcolor is not None: site_node.setAttribute("hudbgcolor", hudbgcolor)
|
||||||
if hudfgcolor != None: site_node.setAttribute("hudfgcolor", hudfgcolor)
|
if hudfgcolor is not None: site_node.setAttribute("hudfgcolor", hudfgcolor)
|
||||||
if hudopacity != None: site_node.setAttribute("hudopacity", hudopacity)
|
if hudopacity is not None: site_node.setAttribute("hudopacity", hudopacity)
|
||||||
if screen_name != None: site_node.setAttribute("screen_name", screen_name)
|
if screen_name is not None: site_node.setAttribute("screen_name", screen_name)
|
||||||
if site_path != None: site_node.setAttribute("site_path", site_path)
|
if site_path is not None: site_node.setAttribute("site_path", site_path)
|
||||||
if table_finder != None: site_node.setAttribute("table_finder", table_finder)
|
if table_finder is not None: site_node.setAttribute("table_finder", table_finder)
|
||||||
if HH_path != None: site_node.setAttribute("HH_path", HH_path)
|
if HH_path is not None: site_node.setAttribute("HH_path", HH_path)
|
||||||
if enabled != None: site_node.setAttribute("enabled", enabled)
|
if enabled is not None: site_node.setAttribute("enabled", enabled)
|
||||||
if font != None: site_node.setAttribute("font", font)
|
if font is not None: site_node.setAttribute("font", font)
|
||||||
if font_size != None: site_node.setAttribute("font_size", font_size)
|
if font_size is not None: site_node.setAttribute("font_size", font_size)
|
||||||
return
|
return
|
||||||
|
|
||||||
def get_aux_windows(self):
|
def get_aux_windows(self):
|
||||||
|
|
|
@ -353,7 +353,7 @@ class Database:
|
||||||
# else:
|
# else:
|
||||||
# cards += ranks[d['card' + str(i) + 'Value']] + d['card' +str(i) + 'Suit']
|
# cards += ranks[d['card' + str(i) + 'Value']] + d['card' +str(i) + 'Suit']
|
||||||
cv = "card%dvalue" % i
|
cv = "card%dvalue" % i
|
||||||
if cv not in d or d[cv] == None:
|
if cv not in d or d[cv] is None:
|
||||||
break
|
break
|
||||||
elif d[cv] == 0:
|
elif d[cv] == 0:
|
||||||
cards += "xx"
|
cards += "xx"
|
||||||
|
@ -395,7 +395,7 @@ class Database:
|
||||||
row = c.fetchone()
|
row = c.fetchone()
|
||||||
except: # TODO: what error is a database error?!
|
except: # TODO: what error is a database error?!
|
||||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||||
print "*** Error: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
print "*** Database Error: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
||||||
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])
|
||||||
|
@ -421,10 +421,10 @@ class Database:
|
||||||
if row and row[0]:
|
if row and row[0]:
|
||||||
self.date_nhands_ago[str(playerid)] = row[0]
|
self.date_nhands_ago[str(playerid)] = row[0]
|
||||||
c.close()
|
c.close()
|
||||||
print "date n hands ago = " + self.date_nhands_ago[str(playerid)] + "(playerid "+str(playerid)+")"
|
print "Database: date n hands ago = " + self.date_nhands_ago[str(playerid)] + "(playerid "+str(playerid)+")"
|
||||||
except:
|
except:
|
||||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||||
print "***Error: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
print "*** Database Error: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
||||||
|
|
||||||
def get_stats_from_hand( self, hand, type # type is "ring" or "tour"
|
def get_stats_from_hand( self, hand, type # type is "ring" or "tour"
|
||||||
, hud_params = {'aggregate_tour':False, 'aggregate_ring':False, 'hud_style':'A', 'hud_days':30, 'agg_bb_mult':100
|
, hud_params = {'aggregate_tour':False, 'aggregate_ring':False, 'hud_style':'A', 'hud_days':30, 'agg_bb_mult':100
|
||||||
|
@ -551,7 +551,7 @@ class Database:
|
||||||
def get_player_names(self, config, site_id=None, like_player_name="%"):
|
def get_player_names(self, config, site_id=None, like_player_name="%"):
|
||||||
"""Fetch player names from players. Use site_id and like_player_name if provided"""
|
"""Fetch player names from players. Use site_id and like_player_name if provided"""
|
||||||
|
|
||||||
if site_id == None:
|
if site_id is None:
|
||||||
site_id = -1
|
site_id = -1
|
||||||
c = self.get_cursor()
|
c = self.get_cursor()
|
||||||
c.execute(self.sql.query['get_player_names'], (like_player_name, site_id, site_id))
|
c.execute(self.sql.query['get_player_names'], (like_player_name, site_id, site_id))
|
||||||
|
@ -657,7 +657,7 @@ class Database:
|
||||||
except:
|
except:
|
||||||
ret = -1
|
ret = -1
|
||||||
err = traceback.extract_tb(sys.exc_info()[2])
|
err = traceback.extract_tb(sys.exc_info()[2])
|
||||||
print "***get_last_insert_id error: " + str(sys.exc_info()[1])
|
print "*** Database get_last_insert_id error: " + str(sys.exc_info()[1])
|
||||||
print "\n".join( [e[0]+':'+str(e[1])+" "+e[2] for e in err] )
|
print "\n".join( [e[0]+':'+str(e[1])+" "+e[2] for e in err] )
|
||||||
raise
|
raise
|
||||||
return ret
|
return ret
|
||||||
|
@ -761,14 +761,18 @@ class Database:
|
||||||
|
|
||||||
hands_id = self.storeHands( self.backend, siteHandNo, gametypeId
|
hands_id = self.storeHands( self.backend, siteHandNo, gametypeId
|
||||||
, handStartTime, names, tableName, maxSeats
|
, handStartTime, names, tableName, maxSeats
|
||||||
, hudImportData, board_values, board_suits )
|
, hudImportData, (None, None, None, None, None), (None, None, None, None, None) )
|
||||||
|
# changed board_values and board_suits to arrays of None, just like the
|
||||||
|
# cash game version of this function does - i don't believe this to be
|
||||||
|
# the correct thing to do (tell me if i'm wrong) but it should keep the
|
||||||
|
# importer from crashing
|
||||||
|
|
||||||
hands_players_ids = self.store_hands_players_stud_tourney(self.backend, hands_id
|
hands_players_ids = self.store_hands_players_stud_tourney(self.backend, hands_id
|
||||||
, playerIds, startCashes, antes, cardValues, cardSuits
|
, playerIds, startCashes, antes, cardValues, cardSuits
|
||||||
, winnings, rakes, seatNos, tourneys_players_ids, tourneyTypeId)
|
, winnings, rakes, seatNos, tourneys_players_ids, tourneyTypeId)
|
||||||
|
|
||||||
if 'dropHudCache' not in settings or settings['dropHudCache'] != 'drop':
|
if 'dropHudCache' not in settings or settings['dropHudCache'] != 'drop':
|
||||||
self.storeHudCache(self.backend, base, category, gametypeId, hand_start_time, playerIds, hudImportData)
|
self.storeHudCache(self.backend, base, category, gametypeId, handStartTime, playerIds, hudImportData)
|
||||||
|
|
||||||
return hands_id
|
return hands_id
|
||||||
#end def tourney_stud
|
#end def tourney_stud
|
||||||
|
@ -1179,7 +1183,7 @@ class Database:
|
||||||
if p_id:
|
if p_id:
|
||||||
self.hero_ids[site_id] = int(p_id)
|
self.hero_ids[site_id] = int(p_id)
|
||||||
|
|
||||||
if start == None:
|
if start is None:
|
||||||
start = self.hero_hudstart_def
|
start = self.hero_hudstart_def
|
||||||
if self.hero_ids == {}:
|
if self.hero_ids == {}:
|
||||||
where = ""
|
where = ""
|
||||||
|
@ -1946,7 +1950,7 @@ class Database:
|
||||||
def store_hands_players_stud_tourney(self, backend, hands_id, player_ids, start_cashes,
|
def store_hands_players_stud_tourney(self, backend, hands_id, player_ids, start_cashes,
|
||||||
antes, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids, tourneyTypeId):
|
antes, card_values, card_suits, winnings, rakes, seatNos, tourneys_players_ids, tourneyTypeId):
|
||||||
#stores hands_players for tourney stud/razz hands
|
#stores hands_players for tourney stud/razz hands
|
||||||
|
return # TODO: stubbed out until someone updates it for current database structuring
|
||||||
try:
|
try:
|
||||||
result=[]
|
result=[]
|
||||||
for i in xrange(len(player_ids)):
|
for i in xrange(len(player_ids)):
|
||||||
|
|
|
@ -305,10 +305,10 @@ class Filters(threading.Thread):
|
||||||
print "self.limit[%s] set to %s" %(limit, self.limits[limit])
|
print "self.limit[%s] set to %s" %(limit, self.limits[limit])
|
||||||
if limit.isdigit() or (len(limit) > 2 and limit[-2:] == 'nl'):
|
if limit.isdigit() or (len(limit) > 2 and limit[-2:] == 'nl'):
|
||||||
if self.limits[limit]:
|
if self.limits[limit]:
|
||||||
if self.cbNoLimits != None:
|
if self.cbNoLimits is not None:
|
||||||
self.cbNoLimits.set_active(False)
|
self.cbNoLimits.set_active(False)
|
||||||
else:
|
else:
|
||||||
if self.cbAllLimits != None:
|
if self.cbAllLimits is not None:
|
||||||
self.cbAllLimits.set_active(False)
|
self.cbAllLimits.set_active(False)
|
||||||
if not self.limits[limit]:
|
if not self.limits[limit]:
|
||||||
if limit.isdigit():
|
if limit.isdigit():
|
||||||
|
@ -319,9 +319,9 @@ class Filters(threading.Thread):
|
||||||
if self.limits[limit]:
|
if self.limits[limit]:
|
||||||
#for cb in self.cbLimits.values():
|
#for cb in self.cbLimits.values():
|
||||||
# cb.set_active(True)
|
# cb.set_active(True)
|
||||||
if self.cbFL != None:
|
if self.cbFL is not None:
|
||||||
self.cbFL.set_active(True)
|
self.cbFL.set_active(True)
|
||||||
if self.cbNL != None:
|
if self.cbNL is not None:
|
||||||
self.cbNL.set_active(True)
|
self.cbNL.set_active(True)
|
||||||
elif limit == "none":
|
elif limit == "none":
|
||||||
if self.limits[limit]:
|
if self.limits[limit]:
|
||||||
|
|
|
@ -184,11 +184,11 @@ class Fulltilt(HandHistoryConverter):
|
||||||
info['limitType'] = limits[mg['LIMIT']]
|
info['limitType'] = limits[mg['LIMIT']]
|
||||||
info['sb'] = mg['SB']
|
info['sb'] = mg['SB']
|
||||||
info['bb'] = mg['BB']
|
info['bb'] = mg['BB']
|
||||||
if mg['GAME'] != None:
|
if mg['GAME'] is not None:
|
||||||
(info['base'], info['category']) = games[mg['GAME']]
|
(info['base'], info['category']) = games[mg['GAME']]
|
||||||
if mg['CURRENCY'] != None:
|
if mg['CURRENCY'] is not None:
|
||||||
info['currency'] = currencies[mg['CURRENCY']]
|
info['currency'] = currencies[mg['CURRENCY']]
|
||||||
if mg['TOURNO'] == None: info['type'] = "ring"
|
if mg['TOURNO'] is None: info['type'] = "ring"
|
||||||
else: info['type'] = "tour"
|
else: info['type'] = "tour"
|
||||||
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
||||||
# if info['type'] == "tour": return None # importer is screwed on tournies, pass on those hands so we don't interrupt other autoimporting
|
# if info['type'] == "tour": return None # importer is screwed on tournies, pass on those hands so we don't interrupt other autoimporting
|
||||||
|
@ -196,7 +196,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
|
|
||||||
def readHandInfo(self, hand):
|
def readHandInfo(self, hand):
|
||||||
m = self.re_HandInfo.search(hand.handText)
|
m = self.re_HandInfo.search(hand.handText)
|
||||||
if(m == None):
|
if m is None:
|
||||||
logging.info("Didn't match re_HandInfo")
|
logging.info("Didn't match re_HandInfo")
|
||||||
logging.info(hand.handText)
|
logging.info(hand.handText)
|
||||||
return None
|
return None
|
||||||
|
@ -212,7 +212,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
if m2: hand.maxseats = int(m2.group('MAX'))
|
if m2: hand.maxseats = int(m2.group('MAX'))
|
||||||
|
|
||||||
hand.tourNo = m.group('TOURNO')
|
hand.tourNo = m.group('TOURNO')
|
||||||
if m.group('PLAY') != None:
|
if m.group('PLAY') is not None:
|
||||||
hand.gametype['currency'] = 'play'
|
hand.gametype['currency'] = 'play'
|
||||||
|
|
||||||
# Done: if there's a way to figure these out, we should.. otherwise we have to stuff it with unknowns
|
# Done: if there's a way to figure these out, we should.. otherwise we have to stuff it with unknowns
|
||||||
|
@ -240,9 +240,9 @@ class Fulltilt(HandHistoryConverter):
|
||||||
hand.isShootout = True
|
hand.isShootout = True
|
||||||
|
|
||||||
|
|
||||||
if hand.buyin == None:
|
if hand.buyin is None:
|
||||||
hand.buyin = "$0.00+$0.00"
|
hand.buyin = "$0.00+$0.00"
|
||||||
if hand.level == None:
|
if hand.level is None:
|
||||||
hand.level = "0"
|
hand.level = "0"
|
||||||
|
|
||||||
# These work, but the info is already in the Hand class - should be used for tourneys though.
|
# These work, but the info is already in the Hand class - should be used for tourneys though.
|
||||||
|
@ -343,11 +343,11 @@ class Fulltilt(HandHistoryConverter):
|
||||||
m = self.re_HeroCards.finditer(hand.streets[street])
|
m = self.re_HeroCards.finditer(hand.streets[street])
|
||||||
for found in m:
|
for found in m:
|
||||||
player = found.group('PNAME')
|
player = found.group('PNAME')
|
||||||
if found.group('NEWCARDS') == None:
|
if found.group('NEWCARDS') is None:
|
||||||
newcards = []
|
newcards = []
|
||||||
else:
|
else:
|
||||||
newcards = found.group('NEWCARDS').split(' ')
|
newcards = found.group('NEWCARDS').split(' ')
|
||||||
if found.group('OLDCARDS') == None:
|
if found.group('OLDCARDS') is None:
|
||||||
oldcards = []
|
oldcards = []
|
||||||
else:
|
else:
|
||||||
oldcards = found.group('OLDCARDS').split(' ')
|
oldcards = found.group('OLDCARDS').split(' ')
|
||||||
|
@ -376,7 +376,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
elif action.group('ATYPE') == ' checks':
|
elif action.group('ATYPE') == ' checks':
|
||||||
hand.addCheck( street, action.group('PNAME'))
|
hand.addCheck( street, action.group('PNAME'))
|
||||||
else:
|
else:
|
||||||
print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)
|
print "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)
|
||||||
|
|
||||||
|
|
||||||
def readShowdownActions(self, hand):
|
def readShowdownActions(self, hand):
|
||||||
|
@ -416,7 +416,8 @@ class Fulltilt(HandHistoryConverter):
|
||||||
|
|
||||||
def readOther(self, hand):
|
def readOther(self, hand):
|
||||||
m = self.re_Mixed.search(self.in_path)
|
m = self.re_Mixed.search(self.in_path)
|
||||||
if m == None: hand.mixed = None
|
if m is None:
|
||||||
|
hand.mixed = None
|
||||||
else:
|
else:
|
||||||
hand.mixed = self.mixes[m.groupdict()['MIXED']]
|
hand.mixed = self.mixes[m.groupdict()['MIXED']]
|
||||||
|
|
||||||
|
@ -472,8 +473,10 @@ class Fulltilt(HandHistoryConverter):
|
||||||
(info['base'], info['category']) = games[mg['GAME']]
|
(info['base'], info['category']) = games[mg['GAME']]
|
||||||
if mg['CURRENCY'] is not None:
|
if mg['CURRENCY'] is not None:
|
||||||
info['currency'] = currencies[mg['CURRENCY']]
|
info['currency'] = currencies[mg['CURRENCY']]
|
||||||
if mg['TOURNO'] == None: info['type'] = "ring"
|
if mg['TOURNO'] is None:
|
||||||
else: info['type'] = "tour"
|
info['type'] = "ring"
|
||||||
|
else:
|
||||||
|
info['type'] = "tour"
|
||||||
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
||||||
|
|
||||||
# Info is now ready to be copied in the tourney object
|
# Info is now ready to be copied in the tourney object
|
||||||
|
@ -654,7 +657,7 @@ class Fulltilt(HandHistoryConverter):
|
||||||
|
|
||||||
tourney.addPlayer(rank, a.group('PNAME'), winnings, 0, 0, 0, 0)
|
tourney.addPlayer(rank, a.group('PNAME'), winnings, 0, 0, 0, 0)
|
||||||
else:
|
else:
|
||||||
print "Player finishing stats unreadable : %s" % a
|
print "FullTilt: Player finishing stats unreadable : %s" % a
|
||||||
|
|
||||||
# Find Hero
|
# Find Hero
|
||||||
n = self.re_TourneyHeroFinishingP.search(playersText)
|
n = self.re_TourneyHeroFinishingP.search(playersText)
|
||||||
|
@ -663,9 +666,9 @@ class Fulltilt(HandHistoryConverter):
|
||||||
tourney.hero = heroName
|
tourney.hero = heroName
|
||||||
# Is this really useful ?
|
# Is this really useful ?
|
||||||
if heroName not in tourney.finishPositions:
|
if heroName not in tourney.finishPositions:
|
||||||
print heroName, "not found in tourney.finishPositions ..."
|
print "FullTilt:", heroName, "not found in tourney.finishPositions ..."
|
||||||
elif (tourney.finishPositions[heroName] != Decimal(n.group('HERO_FINISHING_POS'))):
|
elif (tourney.finishPositions[heroName] != Decimal(n.group('HERO_FINISHING_POS'))):
|
||||||
print "Bad parsing : finish position incoherent : %s / %s" % (tourney.finishPositions[heroName], n.group('HERO_FINISHING_POS'))
|
print "FullTilt: Bad parsing : finish position incoherent : %s / %s" % (tourney.finishPositions[heroName], n.group('HERO_FINISHING_POS'))
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -33,16 +33,15 @@ import string
|
||||||
|
|
||||||
class GuiAutoImport (threading.Thread):
|
class GuiAutoImport (threading.Thread):
|
||||||
def __init__(self, settings, config, sql):
|
def __init__(self, settings, config, sql):
|
||||||
"""Constructor for GuiAutoImport"""
|
|
||||||
self.importtimer = 0
|
self.importtimer = 0
|
||||||
self.settings=settings
|
self.settings = settings
|
||||||
self.config=config
|
self.config = config
|
||||||
self.sql = sql
|
self.sql = sql
|
||||||
|
|
||||||
imp = self.config.get_import_parameters()
|
imp = self.config.get_import_parameters()
|
||||||
|
|
||||||
print "Import parameters"
|
# print "Import parameters"
|
||||||
print imp
|
# print imp
|
||||||
|
|
||||||
self.input_settings = {}
|
self.input_settings = {}
|
||||||
self.pipe_to_hud = None
|
self.pipe_to_hud = None
|
||||||
|
@ -55,12 +54,12 @@ class GuiAutoImport (threading.Thread):
|
||||||
self.importer.setHandCount(0)
|
self.importer.setHandCount(0)
|
||||||
# self.importer.setWatchTime()
|
# self.importer.setWatchTime()
|
||||||
|
|
||||||
self.server=settings['db-host']
|
self.server = settings['db-host']
|
||||||
self.user=settings['db-user']
|
self.user = settings['db-user']
|
||||||
self.password=settings['db-password']
|
self.password = settings['db-password']
|
||||||
self.database=settings['db-databaseName']
|
self.database = settings['db-databaseName']
|
||||||
|
|
||||||
self.mainVBox=gtk.VBox(False,1)
|
self.mainVBox = gtk.VBox(False,1)
|
||||||
|
|
||||||
hbox = gtk.HBox(True, 0) # contains 2 equal vboxes
|
hbox = gtk.HBox(True, 0) # contains 2 equal vboxes
|
||||||
self.mainVBox.pack_start(hbox, False, False, 0)
|
self.mainVBox.pack_start(hbox, False, False, 0)
|
||||||
|
@ -130,7 +129,8 @@ class GuiAutoImport (threading.Thread):
|
||||||
data[1].set_text(dia_chooser.get_filename())
|
data[1].set_text(dia_chooser.get_filename())
|
||||||
self.input_settings[data[0]][0] = dia_chooser.get_filename()
|
self.input_settings[data[0]][0] = dia_chooser.get_filename()
|
||||||
elif response == gtk.RESPONSE_CANCEL:
|
elif response == gtk.RESPONSE_CANCEL:
|
||||||
print 'Closed, no files selected'
|
#print 'Closed, no files selected'
|
||||||
|
pass
|
||||||
dia_chooser.destroy()
|
dia_chooser.destroy()
|
||||||
#end def GuiAutoImport.browseClicked
|
#end def GuiAutoImport.browseClicked
|
||||||
|
|
||||||
|
@ -143,7 +143,6 @@ class GuiAutoImport (threading.Thread):
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
gobject.timeout_add(1000, self.reset_startbutton)
|
gobject.timeout_add(1000, self.reset_startbutton)
|
||||||
return True
|
return True
|
||||||
else:
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def reset_startbutton(self):
|
def reset_startbutton(self):
|
||||||
|
@ -184,22 +183,24 @@ class GuiAutoImport (threading.Thread):
|
||||||
command = os.path.join(sys.path[0], 'HUD_main.py')
|
command = os.path.join(sys.path[0], 'HUD_main.py')
|
||||||
command = [command, ] + string.split(self.settings['cl_options'])
|
command = [command, ] + string.split(self.settings['cl_options'])
|
||||||
bs = 1
|
bs = 1
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.pipe_to_hud = subprocess.Popen(command, bufsize = bs, stdin = subprocess.PIPE,
|
self.pipe_to_hud = subprocess.Popen(command, bufsize=bs,
|
||||||
universal_newlines = True)
|
stdin=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
except:
|
except:
|
||||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||||
print "*** Error: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
print "*** GuiAutoImport Error opening pipe: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1])
|
||||||
else:
|
else:
|
||||||
for site in self.input_settings:
|
for site in self.input_settings:
|
||||||
self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1])
|
self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1])
|
||||||
|
print " * Add", site, " import directory", str(self.input_settings[site][0])
|
||||||
print "+Import directory - Site: " + site + " dir: " + str(self.input_settings[site][0])
|
print "+Import directory - Site: " + site + " dir: " + str(self.input_settings[site][0])
|
||||||
self.do_import()
|
self.do_import()
|
||||||
|
|
||||||
interval = int(self.intervalEntry.get_text())
|
interval = int(self.intervalEntry.get_text())
|
||||||
if self.importtimer != 0:
|
if self.importtimer != 0:
|
||||||
gobject.source_remove(self.importtimer)
|
gobject.source_remove(self.importtimer)
|
||||||
self.importtimer = gobject.timeout_add(interval*1000, self.do_import)
|
self.importtimer = gobject.timeout_add(interval * 1000, self.do_import)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "auto-import aborted - global lock not available"
|
print "auto-import aborted - global lock not available"
|
||||||
|
@ -209,7 +210,7 @@ class GuiAutoImport (threading.Thread):
|
||||||
self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer
|
self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer
|
||||||
print "Stopping autoimport - global lock released."
|
print "Stopping autoimport - global lock released."
|
||||||
if self.pipe_to_hud.poll() is not None:
|
if self.pipe_to_hud.poll() is not None:
|
||||||
print "HUD already terminated"
|
print " * Stop Autoimport: HUD already terminated"
|
||||||
else:
|
else:
|
||||||
#print >>self.pipe_to_hud.stdin, "\n"
|
#print >>self.pipe_to_hud.stdin, "\n"
|
||||||
self.pipe_to_hud.communicate('\n') # waits for process to terminate
|
self.pipe_to_hud.communicate('\n') # waits for process to terminate
|
||||||
|
@ -227,7 +228,7 @@ class GuiAutoImport (threading.Thread):
|
||||||
#enabling and disabling sites from this interface not possible
|
#enabling and disabling sites from this interface not possible
|
||||||
#expects a box to layout the line horizontally
|
#expects a box to layout the line horizontally
|
||||||
def createSiteLine(self, hbox1, hbox2, site, iconpath, hhpath, filter_name, active = True):
|
def createSiteLine(self, hbox1, hbox2, site, iconpath, hhpath, filter_name, active = True):
|
||||||
label = gtk.Label(site + " auto-import:")
|
label = gtk.Label("%s auto-import:" % site)
|
||||||
hbox1.pack_start(label, False, False, 3)
|
hbox1.pack_start(label, False, False, 3)
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
|
@ -241,7 +242,7 @@ class GuiAutoImport (threading.Thread):
|
||||||
hbox2.pack_start(browseButton, False, False, 3)
|
hbox2.pack_start(browseButton, False, False, 3)
|
||||||
browseButton.show()
|
browseButton.show()
|
||||||
|
|
||||||
label = gtk.Label(' ' + site + " filter:")
|
label = gtk.Label("%s filter:" % site)
|
||||||
hbox2.pack_start(label, False, False, 3)
|
hbox2.pack_start(label, False, False, 3)
|
||||||
label.show()
|
label.show()
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ class GuiBulkImport():
|
||||||
self.progressbar.set_fraction(0)
|
self.progressbar.set_fraction(0)
|
||||||
except:
|
except:
|
||||||
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
err = traceback.extract_tb(sys.exc_info()[2])[-1]
|
||||||
print "***Error: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
print "*** BulkImport Error: "+err[2]+"("+str(err[1])+"): "+str(sys.exc_info()[1])
|
||||||
self.settings['global_lock'].release()
|
self.settings['global_lock'].release()
|
||||||
else:
|
else:
|
||||||
print "bulk-import aborted - global lock not available"
|
print "bulk-import aborted - global lock not available"
|
||||||
|
@ -142,32 +142,38 @@ class GuiBulkImport():
|
||||||
self.chooser.show()
|
self.chooser.show()
|
||||||
|
|
||||||
# Table widget to hold the settings
|
# Table widget to hold the settings
|
||||||
self.table = gtk.Table(rows = 5, columns = 5, homogeneous = False)
|
self.table = gtk.Table(rows=5, columns=5, homogeneous=False)
|
||||||
self.vbox.add(self.table)
|
self.vbox.add(self.table)
|
||||||
self.table.show()
|
self.table.show()
|
||||||
|
|
||||||
# checkbox - print start/stop?
|
# checkbox - print start/stop?
|
||||||
self.chk_st_st = gtk.CheckButton('Print Start/Stop Info')
|
self.chk_st_st = gtk.CheckButton('Print Start/Stop Info')
|
||||||
self.table.attach(self.chk_st_st, 0, 1, 0, 1, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.chk_st_st, 0, 1, 0, 1, xpadding=10, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.chk_st_st.show()
|
self.chk_st_st.show()
|
||||||
self.chk_st_st.set_active(True)
|
self.chk_st_st.set_active(True)
|
||||||
|
|
||||||
# label - status
|
# label - status
|
||||||
self.lab_status = gtk.Label("Hands/status print:")
|
self.lab_status = gtk.Label("Hands/status print:")
|
||||||
self.table.attach(self.lab_status, 1, 2, 0, 1, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_status, 1, 2, 0, 1, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_status.show()
|
self.lab_status.show()
|
||||||
self.lab_status.set_justify(gtk.JUSTIFY_RIGHT)
|
self.lab_status.set_justify(gtk.JUSTIFY_RIGHT)
|
||||||
self.lab_status.set_alignment(1.0, 0.5)
|
self.lab_status.set_alignment(1.0, 0.5)
|
||||||
|
|
||||||
# spin button - status
|
# spin button - status
|
||||||
status_adj = gtk.Adjustment(value=100, lower=0, upper=300, step_incr=10, page_incr=1, page_size=0) #not sure what upper value should be!
|
status_adj = gtk.Adjustment(value=100, lower=0, upper=300, step_incr=10,
|
||||||
self.spin_status = gtk.SpinButton(adjustment=status_adj, climb_rate=0.0, digits=0)
|
page_incr=1, page_size=0) #not sure what upper value should be!
|
||||||
self.table.attach(self.spin_status, 2, 3, 0, 1, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.spin_status = gtk.SpinButton(adjustment=status_adj, climb_rate=0.0,
|
||||||
|
digits=0)
|
||||||
|
self.table.attach(self.spin_status, 2, 3, 0, 1, xpadding=10, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.spin_status.show()
|
self.spin_status.show()
|
||||||
|
|
||||||
# label - threads
|
# label - threads
|
||||||
self.lab_threads = gtk.Label("Number of threads:")
|
self.lab_threads = gtk.Label("Number of threads:")
|
||||||
self.table.attach(self.lab_threads, 3, 4, 0, 1, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_threads, 3, 4, 0, 1, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_threads.show()
|
self.lab_threads.show()
|
||||||
if not self.allowThreads:
|
if not self.allowThreads:
|
||||||
self.lab_threads.set_sensitive(False)
|
self.lab_threads.set_sensitive(False)
|
||||||
|
@ -175,34 +181,39 @@ class GuiBulkImport():
|
||||||
self.lab_threads.set_alignment(1.0, 0.5)
|
self.lab_threads.set_alignment(1.0, 0.5)
|
||||||
|
|
||||||
# spin button - threads
|
# spin button - threads
|
||||||
threads_adj = gtk.Adjustment(value=0, lower=0, upper=32, step_incr=1, page_incr=1, page_size=0) #not sure what upper value should be!
|
threads_adj = gtk.Adjustment(value=0, lower=0, upper=32, step_incr=1,
|
||||||
|
page_incr=1, page_size=0) #not sure what upper value should be!
|
||||||
self.spin_threads = gtk.SpinButton(adjustment=threads_adj, climb_rate=0.0, digits=0)
|
self.spin_threads = gtk.SpinButton(adjustment=threads_adj, climb_rate=0.0, digits=0)
|
||||||
self.table.attach(self.spin_threads, 4, 5, 0, 1, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.spin_threads, 4, 5, 0, 1, xpadding=10, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.spin_threads.show()
|
self.spin_threads.show()
|
||||||
if not self.allowThreads:
|
if not self.allowThreads:
|
||||||
self.spin_threads.set_sensitive(False)
|
self.spin_threads.set_sensitive(False)
|
||||||
|
|
||||||
# checkbox - fail on error?
|
# checkbox - fail on error?
|
||||||
self.chk_fail = gtk.CheckButton('Fail on error')
|
self.chk_fail = gtk.CheckButton('Fail on error')
|
||||||
self.table.attach(self.chk_fail, 0, 1, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.chk_fail, 0, 1, 1, 2, xpadding=10, ypadding=0, yoptions=gtk.SHRINK)
|
||||||
self.chk_fail.show()
|
self.chk_fail.show()
|
||||||
|
|
||||||
# label - hands
|
# label - hands
|
||||||
self.lab_hands = gtk.Label("Hands/file:")
|
self.lab_hands = gtk.Label("Hands/file:")
|
||||||
self.table.attach(self.lab_hands, 1, 2, 1, 2, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_hands, 1, 2, 1, 2, xpadding=0, ypadding=0, yoptions=gtk.SHRINK)
|
||||||
self.lab_hands.show()
|
self.lab_hands.show()
|
||||||
self.lab_hands.set_justify(gtk.JUSTIFY_RIGHT)
|
self.lab_hands.set_justify(gtk.JUSTIFY_RIGHT)
|
||||||
self.lab_hands.set_alignment(1.0, 0.5)
|
self.lab_hands.set_alignment(1.0, 0.5)
|
||||||
|
|
||||||
# spin button - hands to import
|
# spin button - hands to import
|
||||||
hands_adj = gtk.Adjustment(value=0, lower=0, upper=10, step_incr=1, page_incr=1, page_size=0) #not sure what upper value should be!
|
hands_adj = gtk.Adjustment(value=0, lower=0, upper=10, step_incr=1,
|
||||||
|
page_incr=1, page_size=0) #not sure what upper value should be!
|
||||||
self.spin_hands = gtk.SpinButton(adjustment=hands_adj, climb_rate=0.0, digits=0)
|
self.spin_hands = gtk.SpinButton(adjustment=hands_adj, climb_rate=0.0, digits=0)
|
||||||
self.table.attach(self.spin_hands, 2, 3, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.spin_hands, 2, 3, 1, 2, xpadding=10, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.spin_hands.show()
|
self.spin_hands.show()
|
||||||
|
|
||||||
# label - drop indexes
|
# label - drop indexes
|
||||||
self.lab_drop = gtk.Label("Drop indexes:")
|
self.lab_drop = gtk.Label("Drop indexes:")
|
||||||
self.table.attach(self.lab_drop, 3, 4, 1, 2, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_drop, 3, 4, 1, 2, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_drop.show()
|
self.lab_drop.show()
|
||||||
self.lab_drop.set_justify(gtk.JUSTIFY_RIGHT)
|
self.lab_drop.set_justify(gtk.JUSTIFY_RIGHT)
|
||||||
self.lab_drop.set_alignment(1.0, 0.5)
|
self.lab_drop.set_alignment(1.0, 0.5)
|
||||||
|
@ -213,12 +224,14 @@ class GuiBulkImport():
|
||||||
self.cb_dropindexes.append_text("don't drop")
|
self.cb_dropindexes.append_text("don't drop")
|
||||||
self.cb_dropindexes.append_text('drop')
|
self.cb_dropindexes.append_text('drop')
|
||||||
self.cb_dropindexes.set_active(0)
|
self.cb_dropindexes.set_active(0)
|
||||||
self.table.attach(self.cb_dropindexes, 4, 5, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.cb_dropindexes, 4, 5, 1, 2, xpadding=10,
|
||||||
|
ypadding=0, yoptions=gtk.SHRINK)
|
||||||
self.cb_dropindexes.show()
|
self.cb_dropindexes.show()
|
||||||
|
|
||||||
# label - filter
|
# label - filter
|
||||||
self.lab_filter = gtk.Label("Site filter:")
|
self.lab_filter = gtk.Label("Site filter:")
|
||||||
self.table.attach(self.lab_filter, 1, 2, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_filter, 1, 2, 2, 3, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_filter.show()
|
self.lab_filter.show()
|
||||||
self.lab_filter.set_justify(gtk.JUSTIFY_RIGHT)
|
self.lab_filter.set_justify(gtk.JUSTIFY_RIGHT)
|
||||||
self.lab_filter.set_alignment(1.0, 0.5)
|
self.lab_filter.set_alignment(1.0, 0.5)
|
||||||
|
@ -229,12 +242,14 @@ class GuiBulkImport():
|
||||||
print w
|
print w
|
||||||
self.cbfilter.append_text(w)
|
self.cbfilter.append_text(w)
|
||||||
self.cbfilter.set_active(0)
|
self.cbfilter.set_active(0)
|
||||||
self.table.attach(self.cbfilter, 2, 3, 2, 3, xpadding = 10, ypadding = 1, yoptions=gtk.SHRINK)
|
self.table.attach(self.cbfilter, 2, 3, 2, 3, xpadding=10, ypadding=1,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.cbfilter.show()
|
self.cbfilter.show()
|
||||||
|
|
||||||
# label - drop hudcache
|
# label - drop hudcache
|
||||||
self.lab_hdrop = gtk.Label("Drop HudCache:")
|
self.lab_hdrop = gtk.Label("Drop HudCache:")
|
||||||
self.table.attach(self.lab_hdrop, 3, 4, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_hdrop, 3, 4, 2, 3, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_hdrop.show()
|
self.lab_hdrop.show()
|
||||||
self.lab_hdrop.set_justify(gtk.JUSTIFY_RIGHT)
|
self.lab_hdrop.set_justify(gtk.JUSTIFY_RIGHT)
|
||||||
self.lab_hdrop.set_alignment(1.0, 0.5)
|
self.lab_hdrop.set_alignment(1.0, 0.5)
|
||||||
|
@ -245,19 +260,22 @@ class GuiBulkImport():
|
||||||
self.cb_drophudcache.append_text("don't drop")
|
self.cb_drophudcache.append_text("don't drop")
|
||||||
self.cb_drophudcache.append_text('drop')
|
self.cb_drophudcache.append_text('drop')
|
||||||
self.cb_drophudcache.set_active(0)
|
self.cb_drophudcache.set_active(0)
|
||||||
self.table.attach(self.cb_drophudcache, 4, 5, 2, 3, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.cb_drophudcache, 4, 5, 2, 3, xpadding=10,
|
||||||
|
ypadding=0, yoptions=gtk.SHRINK)
|
||||||
self.cb_drophudcache.show()
|
self.cb_drophudcache.show()
|
||||||
|
|
||||||
# button - Import
|
# button - Import
|
||||||
self.load_button = gtk.Button('Import') # todo: rename variables to import too
|
self.load_button = gtk.Button('Import') # todo: rename variables to import too
|
||||||
self.load_button.connect('clicked', self.load_clicked,
|
self.load_button.connect('clicked', self.load_clicked,
|
||||||
'Import clicked')
|
'Import clicked')
|
||||||
self.table.attach(self.load_button, 2, 3, 4, 5, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.load_button, 2, 3, 4, 5, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.load_button.show()
|
self.load_button.show()
|
||||||
|
|
||||||
# label - spacer (keeps rows 3 & 5 apart)
|
# label - spacer (keeps rows 3 & 5 apart)
|
||||||
self.lab_spacer = gtk.Label()
|
self.lab_spacer = gtk.Label()
|
||||||
self.table.attach(self.lab_spacer, 3, 5, 3, 4, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
self.table.attach(self.lab_spacer, 3, 5, 3, 4, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.lab_spacer.show()
|
self.lab_spacer.show()
|
||||||
|
|
||||||
# label - info
|
# label - info
|
||||||
|
@ -265,7 +283,8 @@ class GuiBulkImport():
|
||||||
# self.table.attach(self.lab_info, 3, 5, 4, 5, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
# self.table.attach(self.lab_info, 3, 5, 4, 5, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
|
||||||
# self.lab_info.show()
|
# self.lab_info.show()
|
||||||
self.progressbar = gtk.ProgressBar()
|
self.progressbar = gtk.ProgressBar()
|
||||||
self.table.attach(self.progressbar, 3, 5, 4, 5, xpadding = 0, ypadding = 0, yoptions = gtk.SHRINK)
|
self.table.attach(self.progressbar, 3, 5, 4, 5, xpadding=0, ypadding=0,
|
||||||
|
yoptions=gtk.SHRINK)
|
||||||
self.progressbar.set_text("Waiting...")
|
self.progressbar.set_text("Waiting...")
|
||||||
self.progressbar.set_fraction(0)
|
self.progressbar.set_fraction(0)
|
||||||
self.progressbar.show()
|
self.progressbar.show()
|
||||||
|
|
|
@ -310,7 +310,7 @@ class GuiSessionViewer (threading.Thread):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if self.fig != None:
|
if self.fig is not None:
|
||||||
self.fig.clear()
|
self.fig.clear()
|
||||||
self.fig = Figure(figsize=(5,4), dpi=100)
|
self.fig = Figure(figsize=(5,4), dpi=100)
|
||||||
if self.canvas is not None:
|
if self.canvas is not None:
|
||||||
|
|
|
@ -270,11 +270,11 @@ class HUD_main(object):
|
||||||
tablewindow = Tables.discover_tournament_table(self.config, tour_number, tab_number)
|
tablewindow = Tables.discover_tournament_table(self.config, tour_number, tab_number)
|
||||||
else:
|
else:
|
||||||
tablewindow = Tables.discover_table_by_name(self.config, table_name)
|
tablewindow = Tables.discover_table_by_name(self.config, table_name)
|
||||||
if tablewindow == None:
|
if tablewindow is None:
|
||||||
# If no client window is found on the screen, complain and continue
|
# If no client window is found on the screen, complain and continue
|
||||||
if type == "tour":
|
if type == "tour":
|
||||||
table_name = "%s %s" % (tour_number, tab_number)
|
table_name = "%s %s" % (tour_number, tab_number)
|
||||||
sys.stderr.write("table name "+table_name+" not found, skipping.\n")
|
sys.stderr.write("HUD create: table name "+table_name+" not found, skipping.\n")
|
||||||
else:
|
else:
|
||||||
self.create_HUD(new_hand_id, tablewindow, temp_key, max, poker_game, type, stat_dict, cards)
|
self.create_HUD(new_hand_id, tablewindow, temp_key, max, poker_game, type, stat_dict, cards)
|
||||||
self.db_connection.connection.rollback()
|
self.db_connection.connection.rollback()
|
||||||
|
|
|
@ -550,12 +550,12 @@ Map the tuple self.gametype onto the pokerstars string describing it
|
||||||
"""Return the first HH line for the current hand."""
|
"""Return the first HH line for the current hand."""
|
||||||
gs = "PokerStars Game #%s: " % self.handid
|
gs = "PokerStars Game #%s: " % self.handid
|
||||||
|
|
||||||
if self.tourNo != None and self.mixed != None: # mixed tournament
|
if self.tourNo is not None and self.mixed is not None: # mixed tournament
|
||||||
gs = gs + "Tournament #%s, %s %s (%s) - Level %s (%s) - " % (self.tourNo, self.buyin, self.MS[self.mixed], self.getGameTypeAsString(), self.level, self.getStakesAsString())
|
gs = gs + "Tournament #%s, %s %s (%s) - Level %s (%s) - " % (self.tourNo, self.buyin, self.MS[self.mixed], self.getGameTypeAsString(), self.level, self.getStakesAsString())
|
||||||
elif self.tourNo != None: # all other tournaments
|
elif self.tourNo is not None: # all other tournaments
|
||||||
gs = gs + "Tournament #%s, %s %s - Level %s (%s) - " % (self.tourNo,
|
gs = gs + "Tournament #%s, %s %s - Level %s (%s) - " % (self.tourNo,
|
||||||
self.buyin, self.getGameTypeAsString(), self.level, self.getStakesAsString())
|
self.buyin, self.getGameTypeAsString(), self.level, self.getStakesAsString())
|
||||||
elif self.mixed != None: # all other mixed games
|
elif self.mixed is not None: # all other mixed games
|
||||||
gs = gs + " %s (%s, %s) - " % (self.MS[self.mixed],
|
gs = gs + " %s (%s, %s) - " % (self.MS[self.mixed],
|
||||||
self.getGameTypeAsString(), self.getStakesAsString())
|
self.getGameTypeAsString(), self.getStakesAsString())
|
||||||
else: # non-mixed cash games
|
else: # non-mixed cash games
|
||||||
|
@ -628,7 +628,7 @@ class HoldemOmahaHand(Hand):
|
||||||
hhc.readShownCards(self)
|
hhc.readShownCards(self)
|
||||||
self.totalPot() # finalise it (total the pot)
|
self.totalPot() # finalise it (total the pot)
|
||||||
hhc.getRake(self)
|
hhc.getRake(self)
|
||||||
if self.maxseats == None:
|
if self.maxseats is None:
|
||||||
self.maxseats = hhc.guessMaxSeats(self)
|
self.maxseats = hhc.guessMaxSeats(self)
|
||||||
hhc.readOther(self)
|
hhc.readOther(self)
|
||||||
elif builtFrom == "DB":
|
elif builtFrom == "DB":
|
||||||
|
@ -897,7 +897,7 @@ class DrawHand(Hand):
|
||||||
hhc.readShownCards(self)
|
hhc.readShownCards(self)
|
||||||
self.totalPot() # finalise it (total the pot)
|
self.totalPot() # finalise it (total the pot)
|
||||||
hhc.getRake(self)
|
hhc.getRake(self)
|
||||||
if self.maxseats == None:
|
if self.maxseats is None:
|
||||||
self.maxseats = hhc.guessMaxSeats(self)
|
self.maxseats = hhc.guessMaxSeats(self)
|
||||||
hhc.readOther(self)
|
hhc.readOther(self)
|
||||||
elif builtFrom == "DB":
|
elif builtFrom == "DB":
|
||||||
|
@ -1073,7 +1073,7 @@ class StudHand(Hand):
|
||||||
hhc.readShownCards(self) # not done yet
|
hhc.readShownCards(self) # not done yet
|
||||||
self.totalPot() # finalise it (total the pot)
|
self.totalPot() # finalise it (total the pot)
|
||||||
hhc.getRake(self)
|
hhc.getRake(self)
|
||||||
if self.maxseats == None:
|
if self.maxseats is None:
|
||||||
self.maxseats = hhc.guessMaxSeats(self)
|
self.maxseats = hhc.guessMaxSeats(self)
|
||||||
hhc.readOther(self)
|
hhc.readOther(self)
|
||||||
elif builtFrom == "DB":
|
elif builtFrom == "DB":
|
||||||
|
|
|
@ -150,9 +150,9 @@ Otherwise, finish at EOF.
|
||||||
for handText in self.tailHands():
|
for handText in self.tailHands():
|
||||||
try:
|
try:
|
||||||
self.processHand(handText)
|
self.processHand(handText)
|
||||||
numHands+=1
|
numHands += 1
|
||||||
except FpdbParseError, e:
|
except FpdbParseError, e:
|
||||||
numErrors+=1
|
numErrors += 1
|
||||||
log.warning("Failed to convert hand %s" % e.hid)
|
log.warning("Failed to convert hand %s" % e.hid)
|
||||||
log.debug(handText)
|
log.debug(handText)
|
||||||
else:
|
else:
|
||||||
|
@ -166,7 +166,7 @@ Otherwise, finish at EOF.
|
||||||
try:
|
try:
|
||||||
self.processedHands.append(self.processHand(handText))
|
self.processedHands.append(self.processHand(handText))
|
||||||
except FpdbParseError, e:
|
except FpdbParseError, e:
|
||||||
numErrors+=1
|
numErrors += 1
|
||||||
log.warning("Failed to convert hand %s" % e.hid)
|
log.warning("Failed to convert hand %s" % e.hid)
|
||||||
log.debug(handText)
|
log.debug(handText)
|
||||||
numHands = len(handsList)
|
numHands = len(handsList)
|
||||||
|
@ -195,7 +195,8 @@ This requires a regex that greedily groups and matches the 'splitter' between ha
|
||||||
which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py.
|
which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if self.in_path == '-': raise StopIteration
|
if self.in_path == '-':
|
||||||
|
raise StopIteration
|
||||||
interval = 1.0 # seconds to sleep between reads for new data
|
interval = 1.0 # seconds to sleep between reads for new data
|
||||||
fd = codecs.open(self.in_path,'r', self.codepage)
|
fd = codecs.open(self.in_path,'r', self.codepage)
|
||||||
data = ''
|
data = ''
|
||||||
|
@ -256,7 +257,7 @@ which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py.
|
||||||
self.readFile()
|
self.readFile()
|
||||||
self.obs = self.obs.strip()
|
self.obs = self.obs.strip()
|
||||||
self.obs = self.obs.replace('\r\n', '\n')
|
self.obs = self.obs.replace('\r\n', '\n')
|
||||||
if self.obs == "" or self.obs == None:
|
if self.obs is None or self.obs == "":
|
||||||
log.info("Read no hands.")
|
log.info("Read no hands.")
|
||||||
return []
|
return []
|
||||||
return re.split(self.re_SplitHands, self.obs)
|
return re.split(self.re_SplitHands, self.obs)
|
||||||
|
@ -396,7 +397,7 @@ or None if we fail to get the info """
|
||||||
if True: # basically.. I don't know
|
if True: # basically.. I don't know
|
||||||
sane = True
|
sane = True
|
||||||
|
|
||||||
if(self.in_path != '-' and self.out_path == self.in_path):
|
if self.in_path != '-' and self.out_path == self.in_path:
|
||||||
print "HH Sanity Check: output and input files are the same, check config"
|
print "HH Sanity Check: output and input files are the same, check config"
|
||||||
sane = False
|
sane = False
|
||||||
|
|
||||||
|
@ -417,16 +418,19 @@ or None if we fail to get the info """
|
||||||
for l in list:
|
for l in list:
|
||||||
# print "'" + l + "'"
|
# print "'" + l + "'"
|
||||||
hands = hands + [Hand.Hand(self.sitename, self.gametype, l)]
|
hands = hands + [Hand.Hand(self.sitename, self.gametype, l)]
|
||||||
|
# TODO: This looks like it could be replaced with a list comp.. ?
|
||||||
return hands
|
return hands
|
||||||
|
|
||||||
def __listof(self, x):
|
def __listof(self, x):
|
||||||
if isinstance(x, list) or isinstance(x, tuple): return x
|
if isinstance(x, list) or isinstance(x, tuple):
|
||||||
else: return [x]
|
return x
|
||||||
|
else:
|
||||||
|
return [x]
|
||||||
|
|
||||||
def readFile(self):
|
def readFile(self):
|
||||||
"""Open in_path according to self.codepage. Exceptions caught further up"""
|
"""Open in_path according to self.codepage. Exceptions caught further up"""
|
||||||
|
|
||||||
if(self.filetype == "text"):
|
if self.filetype == "text":
|
||||||
if self.in_path == '-':
|
if self.in_path == '-':
|
||||||
# read from stdin
|
# read from stdin
|
||||||
log.debug("Reading stdin with %s" % self.codepage) # is this necessary? or possible? or what?
|
log.debug("Reading stdin with %s" % self.codepage) # is this necessary? or possible? or what?
|
||||||
|
@ -446,12 +450,15 @@ or None if we fail to get the info """
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
print "unable to read file with any codec in list!", self.in_path
|
print "unable to read file with any codec in list!", self.in_path
|
||||||
elif(self.filetype == "xml"):
|
elif self.filetype == "xml":
|
||||||
doc = xml.dom.minidom.parse(filename)
|
doc = xml.dom.minidom.parse(filename)
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
|
|
||||||
def guessMaxSeats(self, hand):
|
def guessMaxSeats(self, hand):
|
||||||
"""Return a guess at max_seats when not specified in HH."""
|
"""Return a guess at maxseats when not specified in HH."""
|
||||||
|
# if some other code prior to this has already set it, return it
|
||||||
|
if maxseats > 1 and maxseats < 11:
|
||||||
|
return maxseats
|
||||||
mo = self.maxOccSeat(hand)
|
mo = self.maxOccSeat(hand)
|
||||||
|
|
||||||
if mo == 10: return 10 #that was easy
|
if mo == 10: return 10 #that was easy
|
||||||
|
@ -471,7 +478,8 @@ or None if we fail to get the info """
|
||||||
def maxOccSeat(self, hand):
|
def maxOccSeat(self, hand):
|
||||||
max = 0
|
max = 0
|
||||||
for player in hand.players:
|
for player in hand.players:
|
||||||
if player[0] > max: max = player[0]
|
if player[0] > max:
|
||||||
|
max = player[0]
|
||||||
return max
|
return max
|
||||||
|
|
||||||
def getStatus(self):
|
def getStatus(self):
|
||||||
|
|
|
@ -61,7 +61,7 @@ class Hud:
|
||||||
def __init__(self, parent, table, max, poker_game, config, db_connection):
|
def __init__(self, parent, table, max, poker_game, config, db_connection):
|
||||||
# __init__ is (now) intended to be called from the stdin thread, so it
|
# __init__ is (now) intended to be called from the stdin thread, so it
|
||||||
# cannot touch the gui
|
# cannot touch the gui
|
||||||
if parent == None: # running from cli ..
|
if parent is None: # running from cli ..
|
||||||
self.parent = self
|
self.parent = self
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.table = table
|
self.table = table
|
||||||
|
@ -87,11 +87,6 @@ class Hud:
|
||||||
self.backgroundcolor = gtk.gdk.color_parse(self.colors['hudbgcolor'])
|
self.backgroundcolor = gtk.gdk.color_parse(self.colors['hudbgcolor'])
|
||||||
self.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
self.foregroundcolor = gtk.gdk.color_parse(self.colors['hudfgcolor'])
|
||||||
|
|
||||||
|
|
||||||
if font == None:
|
|
||||||
font = "Sans"
|
|
||||||
if font_size == None:
|
|
||||||
font_size = "8"
|
|
||||||
self.font = pango.FontDescription("%s %s" % (font, font_size))
|
self.font = pango.FontDescription("%s %s" % (font, font_size))
|
||||||
# do we need to add some sort of condition here for dealing with a request for a font that doesn't exist?
|
# do we need to add some sort of condition here for dealing with a request for a font that doesn't exist?
|
||||||
|
|
||||||
|
@ -136,7 +131,7 @@ class Hud:
|
||||||
|
|
||||||
killitem = gtk.MenuItem('Kill This HUD')
|
killitem = gtk.MenuItem('Kill This HUD')
|
||||||
menu.append(killitem)
|
menu.append(killitem)
|
||||||
if self.parent != None:
|
if self.parent is not None:
|
||||||
killitem.connect("activate", self.parent.kill_hud, self.table_name)
|
killitem.connect("activate", self.parent.kill_hud, self.table_name)
|
||||||
|
|
||||||
saveitem = gtk.MenuItem('Save HUD Layout')
|
saveitem = gtk.MenuItem('Save HUD Layout')
|
||||||
|
@ -455,6 +450,9 @@ class Hud:
|
||||||
# Need range here, not xrange -> need the actual list
|
# Need range here, not xrange -> need the actual list
|
||||||
adj = range(0, self.max + 1) # default seat adjustments = no adjustment
|
adj = range(0, self.max + 1) # default seat adjustments = no adjustment
|
||||||
# does the user have a fav_seat?
|
# does the user have a fav_seat?
|
||||||
|
if self.max not in config.supported_sites[self.table.site].layout:
|
||||||
|
sys.stderr.write("No layout found for %d-max games for site %s\n" % (self.max, self.table.site) )
|
||||||
|
return adj
|
||||||
if self.table.site != None and int(config.supported_sites[self.table.site].layout[self.max].fav_seat) > 0:
|
if self.table.site != None and int(config.supported_sites[self.table.site].layout[self.max].fav_seat) > 0:
|
||||||
try:
|
try:
|
||||||
fav_seat = config.supported_sites[self.table.site].layout[self.max].fav_seat
|
fav_seat = config.supported_sites[self.table.site].layout[self.max].fav_seat
|
||||||
|
@ -494,6 +492,10 @@ class Hud:
|
||||||
sys.stderr.write("------------------------------------------------------------\nCreating hud from hand %s\n" % hand)
|
sys.stderr.write("------------------------------------------------------------\nCreating hud from hand %s\n" % hand)
|
||||||
adj = self.adj_seats(hand, config)
|
adj = self.adj_seats(hand, config)
|
||||||
loc = self.config.get_locations(self.table.site, self.max)
|
loc = self.config.get_locations(self.table.site, self.max)
|
||||||
|
if loc is None and self.max != 10:
|
||||||
|
loc = self.config.get_locations(self.table.site, 10)
|
||||||
|
if loc is None and self.max != 9:
|
||||||
|
loc = self.config.get_locations(self.table.site, 9)
|
||||||
|
|
||||||
# create the stat windows
|
# create the stat windows
|
||||||
for i in xrange(1, self.max + 1):
|
for i in xrange(1, self.max + 1):
|
||||||
|
|
|
@ -479,7 +479,7 @@ class Flop_Mucked(Aux_Seats):
|
||||||
if i != "common":
|
if i != "common":
|
||||||
id = self.get_id_from_seat(i)
|
id = self.get_id_from_seat(i)
|
||||||
# sc: had KeyError here with new table so added id != None test as a guess:
|
# sc: had KeyError here with new table so added id != None test as a guess:
|
||||||
if id != None:
|
if id is not None:
|
||||||
self.m_windows[i].eb.set_tooltip_text(self.hud.stat_dict[id]['screen_name'])
|
self.m_windows[i].eb.set_tooltip_text(self.hud.stat_dict[id]['screen_name'])
|
||||||
|
|
||||||
def update_gui(self, new_hand_id):
|
def update_gui(self, new_hand_id):
|
||||||
|
|
|
@ -164,7 +164,7 @@ class PokerStars(HandHistoryConverter):
|
||||||
if 'CURRENCY' in mg:
|
if 'CURRENCY' in mg:
|
||||||
info['currency'] = currencies[mg['CURRENCY']]
|
info['currency'] = currencies[mg['CURRENCY']]
|
||||||
|
|
||||||
if 'TOURNO' in mg and mg['TOURNO'] == None:
|
if 'TOURNO' in mg and mg['TOURNO'] is None:
|
||||||
info['type'] = 'ring'
|
info['type'] = 'ring'
|
||||||
else:
|
else:
|
||||||
info['type'] = 'tour'
|
info['type'] = 'tour'
|
||||||
|
@ -172,7 +172,6 @@ class PokerStars(HandHistoryConverter):
|
||||||
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
# NB: SB, BB must be interpreted as blinds or bets depending on limit type.
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
|
||||||
def readHandInfo(self, hand):
|
def readHandInfo(self, hand):
|
||||||
info = {}
|
info = {}
|
||||||
m = self.re_HandInfo.search(hand.handText,re.DOTALL)
|
m = self.re_HandInfo.search(hand.handText,re.DOTALL)
|
||||||
|
@ -182,7 +181,8 @@ class PokerStars(HandHistoryConverter):
|
||||||
else:
|
else:
|
||||||
pass # throw an exception here, eh?
|
pass # throw an exception here, eh?
|
||||||
m = self.re_GameInfo.search(hand.handText)
|
m = self.re_GameInfo.search(hand.handText)
|
||||||
if m: info.update(m.groupdict())
|
if m:
|
||||||
|
info.update(m.groupdict())
|
||||||
# m = self.re_Button.search(hand.handText)
|
# m = self.re_Button.search(hand.handText)
|
||||||
# if m: info.update(m.groupdict())
|
# if m: info.update(m.groupdict())
|
||||||
# TODO : I rather like the idea of just having this dict as hand.info
|
# TODO : I rather like the idea of just having this dict as hand.info
|
||||||
|
@ -205,8 +205,7 @@ class PokerStars(HandHistoryConverter):
|
||||||
hand.maxseats = int(info[key])
|
hand.maxseats = int(info[key])
|
||||||
|
|
||||||
if key == 'MIXED':
|
if key == 'MIXED':
|
||||||
if info[key] == None: hand.mixed = None
|
hand.mixed = self.mixes[info[key]] if info[key] is not None else None
|
||||||
else: hand.mixed = self.mixes[info[key]]
|
|
||||||
|
|
||||||
if key == 'TOURNO':
|
if key == 'TOURNO':
|
||||||
hand.tourNo = info[key]
|
hand.tourNo = info[key]
|
||||||
|
@ -214,7 +213,7 @@ class PokerStars(HandHistoryConverter):
|
||||||
hand.buyin = info[key]
|
hand.buyin = info[key]
|
||||||
if key == 'LEVEL':
|
if key == 'LEVEL':
|
||||||
hand.level = info[key]
|
hand.level = info[key]
|
||||||
if key == 'PLAY' and info['PLAY'] != None:
|
if key == 'PLAY' and info['PLAY'] is not None:
|
||||||
# hand.currency = 'play' # overrides previously set value
|
# hand.currency = 'play' # overrides previously set value
|
||||||
hand.gametype['currency'] = 'play'
|
hand.gametype['currency'] = 'play'
|
||||||
|
|
||||||
|
@ -304,11 +303,11 @@ class PokerStars(HandHistoryConverter):
|
||||||
m = self.re_HeroCards.finditer(hand.streets[street])
|
m = self.re_HeroCards.finditer(hand.streets[street])
|
||||||
for found in m:
|
for found in m:
|
||||||
player = found.group('PNAME')
|
player = found.group('PNAME')
|
||||||
if found.group('NEWCARDS') == None:
|
if found.group('NEWCARDS') is None:
|
||||||
newcards = []
|
newcards = []
|
||||||
else:
|
else:
|
||||||
newcards = found.group('NEWCARDS').split(' ')
|
newcards = found.group('NEWCARDS').split(' ')
|
||||||
if found.group('OLDCARDS') == None:
|
if found.group('OLDCARDS') is None:
|
||||||
oldcards = []
|
oldcards = []
|
||||||
else:
|
else:
|
||||||
oldcards = found.group('OLDCARDS').split(' ')
|
oldcards = found.group('OLDCARDS').split(' ')
|
||||||
|
|
|
@ -68,14 +68,14 @@ def do_tip(widget, tip):
|
||||||
|
|
||||||
def do_stat(stat_dict, player = 24, stat = 'vpip'):
|
def do_stat(stat_dict, player = 24, stat = 'vpip'):
|
||||||
match = re_Places.search(stat)
|
match = re_Places.search(stat)
|
||||||
if match == None:
|
if match is None:
|
||||||
result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player})
|
result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player})
|
||||||
else:
|
else:
|
||||||
base = stat[0:-2]
|
base = stat[0:-2]
|
||||||
places = int(stat[-1:])
|
places = int(stat[-1:])
|
||||||
result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': base, 'player': player})
|
result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': base, 'player': player})
|
||||||
match = re_Percent.search(result[1])
|
match = re_Percent.search(result[1])
|
||||||
if match == None:
|
if match is None:
|
||||||
result = (result[0], "%.*f" % (places, result[0]), result[2], result[3], result[4], result[5])
|
result = (result[0], "%.*f" % (places, result[0]), result[2], result[3], result[4], result[5])
|
||||||
else:
|
else:
|
||||||
result = (result[0], "%.*f%%" % (places, 100*result[0]), result[2], result[3], result[4], result[5])
|
result = (result[0], "%.*f%%" % (places, 100*result[0]), result[2], result[3], result[4], result[5])
|
||||||
|
|
|
@ -95,12 +95,12 @@ gobject.signal_new("client_destroyed", gtk.Window,
|
||||||
class Table_Window(object):
|
class Table_Window(object):
|
||||||
def __init__(self, table_name = None, tournament = None, table_number = None):
|
def __init__(self, table_name = None, tournament = None, table_number = None):
|
||||||
|
|
||||||
if table_name != None:
|
if table_name is not None:
|
||||||
search_string = table_name
|
search_string = table_name
|
||||||
self.name = table_name
|
self.name = table_name
|
||||||
self.tournament = None
|
self.tournament = None
|
||||||
self.table = None
|
self.table = None
|
||||||
elif tournament != None and table_number != None:
|
elif tournament is not None and table_number is not None:
|
||||||
print "tournament %s, table %s" % (tournament, table_number)
|
print "tournament %s, table %s" % (tournament, table_number)
|
||||||
self.tournament = int(tournament)
|
self.tournament = int(tournament)
|
||||||
self.table = int(table_number)
|
self.table = int(table_number)
|
||||||
|
@ -133,7 +133,7 @@ class Table_Window(object):
|
||||||
def check_geometry(self):
|
def check_geometry(self):
|
||||||
new_geo = self.get_geometry()
|
new_geo = self.get_geometry()
|
||||||
|
|
||||||
if new_geo == None: # window destroyed
|
if new_geo is None: # window destroyed
|
||||||
return "client_destroyed"
|
return "client_destroyed"
|
||||||
|
|
||||||
elif self.x != new_geo['x'] or self.y != new_geo['y']: # window moved
|
elif self.x != new_geo['x'] or self.y != new_geo['y']: # window moved
|
||||||
|
|
|
@ -105,7 +105,7 @@ def discover_table_by_name(c, tablename):
|
||||||
info = discover_mac_by_name(c, tablename)
|
info = discover_mac_by_name(c, tablename)
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
if info == None:
|
if info is None:
|
||||||
return None
|
return None
|
||||||
return Table_Window(info)
|
return Table_Window(info)
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ def discover_posix(c):
|
||||||
if 'History for table:' in listing: continue
|
if 'History for table:' in listing: continue
|
||||||
if 'has no name' in listing: continue
|
if 'has no name' in listing: continue
|
||||||
info = decode_xwininfo(c, listing)
|
info = decode_xwininfo(c, listing)
|
||||||
if info['site'] == None: continue
|
if info['site'] is None: continue
|
||||||
if info['title'] == info['exe']: continue
|
if info['title'] == info['exe']: continue
|
||||||
# this appears to be a poker client, so make a table object for it
|
# this appears to be a poker client, so make a table object for it
|
||||||
tw = Table_Window(info)
|
tw = Table_Window(info)
|
||||||
|
|
|
@ -289,7 +289,7 @@ class ttracker_main(object):
|
||||||
tablewindow = Tables.discover_tournament_table(self.config, tour_number, tab_number)
|
tablewindow = Tables.discover_tournament_table(self.config, tour_number, tab_number)
|
||||||
else:
|
else:
|
||||||
tablewindow = Tables.discover_table_by_name(self.config, table_name)
|
tablewindow = Tables.discover_table_by_name(self.config, table_name)
|
||||||
if tablewindow == None:
|
if tablewindow is None:
|
||||||
# If no client window is found on the screen, complain and continue
|
# If no client window is found on the screen, complain and continue
|
||||||
if type == "tour":
|
if type == "tour":
|
||||||
table_name = "%s %s" % (tour_number, tab_number)
|
table_name = "%s %s" % (tour_number, tab_number)
|
||||||
|
|
|
@ -447,7 +447,7 @@ class fpdb:
|
||||||
self.settings.update(self.config.get_import_parameters())
|
self.settings.update(self.config.get_import_parameters())
|
||||||
self.settings.update(self.config.get_default_paths())
|
self.settings.update(self.config.get_default_paths())
|
||||||
|
|
||||||
if self.db != None and self.db.fdb != None:
|
if self.db is not None and self.db.fdb is not None:
|
||||||
self.db.disconnect()
|
self.db.disconnect()
|
||||||
|
|
||||||
self.sql = SQL.Sql(type = self.settings['db-type'], db_server = self.settings['db-server'])
|
self.sql = SQL.Sql(type = self.settings['db-type'], db_server = self.settings['db-server'])
|
||||||
|
@ -487,7 +487,7 @@ class fpdb:
|
||||||
response = diaDbVersionWarning.run()
|
response = diaDbVersionWarning.run()
|
||||||
diaDbVersionWarning.destroy()
|
diaDbVersionWarning.destroy()
|
||||||
|
|
||||||
if self.status_bar == None:
|
if self.status_bar is None:
|
||||||
self.status_bar = gtk.Label("Status: Connected to %s database named %s on host %s"%(self.db.get_backend_name(),self.db.database, self.db.host))
|
self.status_bar = gtk.Label("Status: Connected to %s database named %s on host %s"%(self.db.get_backend_name(),self.db.database, self.db.host))
|
||||||
self.main_vbox.pack_end(self.status_bar, False, True, 0)
|
self.main_vbox.pack_end(self.status_bar, False, True, 0)
|
||||||
self.status_bar.show()
|
self.status_bar.show()
|
||||||
|
@ -513,10 +513,10 @@ class fpdb:
|
||||||
# self.lock.release()
|
# self.lock.release()
|
||||||
|
|
||||||
def quit(self, widget, data=None):
|
def quit(self, widget, data=None):
|
||||||
|
# TODO: can we get some / all of the stuff done in this function to execute on any kind of abort?
|
||||||
print "Quitting normally"
|
print "Quitting normally"
|
||||||
#check if current settings differ from profile, if so offer to save or abort
|
# TODO: check if current settings differ from profile, if so offer to save or abort
|
||||||
self.db.disconnect()
|
self.db.disconnect()
|
||||||
# hide icon as it doesn't go away immediately in Windows - is this ok in Linux Eric?
|
|
||||||
self.statusIcon.set_visible(False)
|
self.statusIcon.set_visible(False)
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
||||||
|
|
|
@ -182,14 +182,15 @@ class Importer:
|
||||||
if os.path.isdir(inputPath):
|
if os.path.isdir(inputPath):
|
||||||
for subdir in os.walk(inputPath):
|
for subdir in os.walk(inputPath):
|
||||||
for file in subdir[2]:
|
for file in subdir[2]:
|
||||||
self.addImportFile(os.path.join(subdir[0], file), site=site, filter=filter)
|
self.addImportFile(os.path.join(subdir[0], file), site=site,
|
||||||
|
filter=filter)
|
||||||
else:
|
else:
|
||||||
self.addImportFile(inputPath, site=site, filter=filter)
|
self.addImportFile(inputPath, site=site, filter=filter)
|
||||||
#Add a directory of files to filelist
|
#Add a directory of files to filelist
|
||||||
#Only one import directory per site supported.
|
#Only one import directory per site supported.
|
||||||
#dirlist is a hash of lists:
|
#dirlist is a hash of lists:
|
||||||
#dirlist{ 'PokerStars' => ["/path/to/import/", "filtername"] }
|
#dirlist{ 'PokerStars' => ["/path/to/import/", "filtername"] }
|
||||||
def addImportDirectory(self,dir,monitor = False, site = "default", filter = "passthrough"):
|
def addImportDirectory(self,dir,monitor=False, site="default", filter="passthrough"):
|
||||||
#gets called by GuiAutoImport.
|
#gets called by GuiAutoImport.
|
||||||
#This should really be using os.walk
|
#This should really be using os.walk
|
||||||
#http://docs.python.org/library/os.html
|
#http://docs.python.org/library/os.html
|
||||||
|
@ -203,7 +204,7 @@ class Importer:
|
||||||
#print " adding file ", file
|
#print " adding file ", file
|
||||||
self.addImportFile(os.path.join(dir, file), site, filter)
|
self.addImportFile(os.path.join(dir, file), site, filter)
|
||||||
else:
|
else:
|
||||||
log.warning("Attempted to add non-directory: '" + str(dir) + "' as an import directory")
|
log.warning("Attempted to add non-directory: '%s' as an import directory" % str(dir))
|
||||||
|
|
||||||
def runImport(self):
|
def runImport(self):
|
||||||
""""Run full import on self.filelist. This is called from GuiBulkImport.py"""
|
""""Run full import on self.filelist. This is called from GuiBulkImport.py"""
|
||||||
|
@ -250,6 +251,9 @@ class Importer:
|
||||||
#self.writeq.join()
|
#self.writeq.join()
|
||||||
#using empty() might be more reliable:
|
#using empty() might be more reliable:
|
||||||
while not self.writeq.empty() and len(threading.enumerate()) > 1:
|
while not self.writeq.empty() and len(threading.enumerate()) > 1:
|
||||||
|
# TODO: Do we need to actually tell the progress indicator to move, or is it already moving, and we just need to process events...
|
||||||
|
while gtk.events_pending(): # see http://faq.pygtk.org/index.py?req=index for more hints (3.7)
|
||||||
|
gtk.main_iteration(False)
|
||||||
sleep(0.5)
|
sleep(0.5)
|
||||||
print " ... writers finished"
|
print " ... writers finished"
|
||||||
|
|
||||||
|
@ -400,7 +404,7 @@ class Importer:
|
||||||
file = file.decode(fpdb_simple.LOCALE_ENCODING)
|
file = file.decode(fpdb_simple.LOCALE_ENCODING)
|
||||||
|
|
||||||
# Load filter, process file, pass returned filename to import_fpdb_file
|
# Load filter, process file, pass returned filename to import_fpdb_file
|
||||||
if self.settings['threads'] > 0 and self.writeq != None:
|
if self.settings['threads'] > 0 and self.writeq is not None:
|
||||||
log.info("Converting " + file + " (" + str(q.qsize()) + ")")
|
log.info("Converting " + file + " (" + str(q.qsize()) + ")")
|
||||||
else:
|
else:
|
||||||
log.info("Converting " + file)
|
log.info("Converting " + file)
|
||||||
|
@ -418,9 +422,9 @@ class Importer:
|
||||||
obj = getattr(mod, filter_name, None)
|
obj = getattr(mod, filter_name, None)
|
||||||
if callable(obj):
|
if callable(obj):
|
||||||
hhc = obj(in_path = file, out_path = out_path, index = 0) # Index into file 0 until changeover
|
hhc = obj(in_path = file, out_path = out_path, index = 0) # Index into file 0 until changeover
|
||||||
if(hhc.getStatus() and self.NEWIMPORT == False):
|
if hhc.getStatus() and self.NEWIMPORT == False:
|
||||||
(stored, duplicates, partial, errors, ttime) = self.import_fpdb_file(db, out_path, site, q)
|
(stored, duplicates, partial, errors, ttime) = self.import_fpdb_file(db, out_path, site, q)
|
||||||
elif (hhc.getStatus() and self.NEWIMPORT == True):
|
elif hhc.getStatus() and self.NEWIMPORT == True:
|
||||||
#This code doesn't do anything yet
|
#This code doesn't do anything yet
|
||||||
handlist = hhc.getProcessedHands()
|
handlist = hhc.getProcessedHands()
|
||||||
self.pos_in_file[file] = hhc.getLastCharacterRead()
|
self.pos_in_file[file] = hhc.getLastCharacterRead()
|
||||||
|
@ -458,7 +462,7 @@ class Importer:
|
||||||
loc = self.pos_in_file[file]
|
loc = self.pos_in_file[file]
|
||||||
#size = os.path.getsize(file)
|
#size = os.path.getsize(file)
|
||||||
#print "loc =", loc, 'size =', size
|
#print "loc =", loc, 'size =', size
|
||||||
except:
|
except IndexError:
|
||||||
pass
|
pass
|
||||||
# Read input file into class and close file
|
# Read input file into class and close file
|
||||||
inputFile.seek(loc)
|
inputFile.seek(loc)
|
||||||
|
@ -475,20 +479,20 @@ class Importer:
|
||||||
|
|
||||||
db.commit()
|
db.commit()
|
||||||
ttime = time() - starttime
|
ttime = time() - starttime
|
||||||
if q == None:
|
if q is None:
|
||||||
log.info("Total stored: %(stored)d\tduplicates:%(duplicates)d\terrors:%(errors)d\ttime:%(ttime)s" % locals())
|
log.info("Total stored: %(stored)d\tduplicates:%(duplicates)d\terrors:%(errors)d\ttime:%(ttime)s" % locals())
|
||||||
|
|
||||||
if not stored:
|
if not stored:
|
||||||
if duplicates:
|
if duplicates:
|
||||||
for line_no in xrange(len(self.lines)):
|
for line_no in xrange(len(self.lines)):
|
||||||
if self.lines[line_no].find("Game #")!=-1:
|
if self.lines[line_no].find("Game #") != -1:
|
||||||
final_game_line=self.lines[line_no]
|
final_game_line = self.lines[line_no]
|
||||||
handsId=fpdb_simple.parseSiteHandNo(final_game_line)
|
handsId=fpdb_simple.parseSiteHandNo(final_game_line)
|
||||||
else:
|
else:
|
||||||
print "failed to read a single hand from file:", inputFile
|
print "failed to read a single hand from file:", inputFile
|
||||||
handsId=0
|
handsId = 0
|
||||||
#todo: this will cause return of an unstored hand number if the last hand was error
|
#todo: this will cause return of an unstored hand number if the last hand was error
|
||||||
self.handsId=handsId
|
self.handsId = handsId
|
||||||
|
|
||||||
return (stored, duplicates, partial, errors, ttime)
|
return (stored, duplicates, partial, errors, ttime)
|
||||||
# end def import_fpdb_file
|
# end def import_fpdb_file
|
||||||
|
@ -508,13 +512,13 @@ class Importer:
|
||||||
#print "DEBUG: import_fpdb_file: failed on lines[0]: '%s' '%s' '%s' '%s' " %( file, site, lines, loc)
|
#print "DEBUG: import_fpdb_file: failed on lines[0]: '%s' '%s' '%s' '%s' " %( file, site, lines, loc)
|
||||||
return (0,0,0,1,0,0)
|
return (0,0,0,1,0,0)
|
||||||
|
|
||||||
if firstline.find("Tournament Summary")!=-1:
|
if "Tournament Summary" in firstline:
|
||||||
print "TODO: implement importing tournament summaries"
|
print "TODO: implement importing tournament summaries"
|
||||||
#self.faobs = readfile(inputFile)
|
#self.faobs = readfile(inputFile)
|
||||||
#self.parseTourneyHistory()
|
#self.parseTourneyHistory()
|
||||||
return (0,0,0,1,0,0)
|
return (0,0,0,1,0,0)
|
||||||
|
|
||||||
category=fpdb_simple.recogniseCategory(firstline)
|
category = fpdb_simple.recogniseCategory(firstline)
|
||||||
|
|
||||||
startpos = 0
|
startpos = 0
|
||||||
stored = 0 #counter
|
stored = 0 #counter
|
||||||
|
@ -524,24 +528,23 @@ class Importer:
|
||||||
ttime = 0
|
ttime = 0
|
||||||
handsId = 0
|
handsId = 0
|
||||||
|
|
||||||
for i in xrange (len(lines)):
|
for i in xrange(len(lines)):
|
||||||
if (len(lines[i])<2): #Wierd way to detect for '\r\n' or '\n'
|
if len(lines[i]) < 2: #Wierd way to detect for '\r\n' or '\n'
|
||||||
endpos=i
|
endpos = i
|
||||||
hand=lines[startpos:endpos]
|
hand = lines[startpos:endpos]
|
||||||
|
|
||||||
if (len(hand[0])<2):
|
if len(hand[0]) < 2:
|
||||||
hand=hand[1:]
|
hand=hand[1:]
|
||||||
|
|
||||||
|
if len(hand) < 3:
|
||||||
if (len(hand)<3):
|
|
||||||
pass
|
pass
|
||||||
#TODO: This is ugly - we didn't actually find the start of the
|
#TODO: This is ugly - we didn't actually find the start of the
|
||||||
# hand with the outer loop so we test again...
|
# hand with the outer loop so we test again...
|
||||||
else:
|
else:
|
||||||
isTourney=fpdb_simple.isTourney(hand[0])
|
isTourney = fpdb_simple.isTourney(hand[0])
|
||||||
if not isTourney:
|
if not isTourney:
|
||||||
hand = fpdb_simple.filterAnteBlindFold(hand)
|
hand = fpdb_simple.filterAnteBlindFold(hand)
|
||||||
self.hand=hand
|
self.hand = hand
|
||||||
|
|
||||||
try:
|
try:
|
||||||
handsId = fpdb_parse_logic.mainParser( self.settings, self.siteIds[site]
|
handsId = fpdb_parse_logic.mainParser( self.settings, self.siteIds[site]
|
||||||
|
@ -553,7 +556,7 @@ class Importer:
|
||||||
if self.callHud:
|
if self.callHud:
|
||||||
#print "call to HUD here. handsId:",handsId
|
#print "call to HUD here. handsId:",handsId
|
||||||
#pipe the Hands.id out to the HUD
|
#pipe the Hands.id out to the HUD
|
||||||
print "sending hand to hud", handsId, "pipe =", self.caller.pipe_to_hud
|
print "fpdb_import: sending hand to hud", handsId, "pipe =", self.caller.pipe_to_hud
|
||||||
self.caller.pipe_to_hud.stdin.write("%s" % (handsId) + os.linesep)
|
self.caller.pipe_to_hud.stdin.write("%s" % (handsId) + os.linesep)
|
||||||
except Exceptions.DuplicateError:
|
except Exceptions.DuplicateError:
|
||||||
duplicates += 1
|
duplicates += 1
|
||||||
|
|
|
@ -30,7 +30,7 @@ def mainParser(settings, siteID, category, hand, config, db = None, writeq = Non
|
||||||
backend = settings['db-backend']
|
backend = settings['db-backend']
|
||||||
# Ideally db connection is passed in, if not use sql list if passed in,
|
# Ideally db connection is passed in, if not use sql list if passed in,
|
||||||
# otherwise start from scratch
|
# otherwise start from scratch
|
||||||
if db == None:
|
if db is None:
|
||||||
db = Database.Database(c = config, sql = None)
|
db = Database.Database(c = config, sql = None)
|
||||||
category = fpdb_simple.recogniseCategory(hand[0])
|
category = fpdb_simple.recogniseCategory(hand[0])
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ def mainParser(settings, siteID, category, hand, config, db = None, writeq = Non
|
||||||
, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
, actionNos, hudImportData, maxSeats, tableName, seatNos)
|
||||||
|
|
||||||
# save hand in db via direct call or via q if in a thread
|
# save hand in db via direct call or via q if in a thread
|
||||||
if writeq == None:
|
if writeq is None:
|
||||||
result = db.store_the_hand(htw)
|
result = db.store_the_hand(htw)
|
||||||
else:
|
else:
|
||||||
writeq.put(htw)
|
writeq.put(htw)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user