From 12c08f6aa55c75d9b5ef71bb636d4043a3981f9e Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Tue, 2 Mar 2010 23:12:55 -0500 Subject: [PATCH 001/217] Delete xwininfo stuff. Reinstall Xlib stuff. --- pyfpdb/Tables_Demo.py | 6 +-- pyfpdb/XTables.py | 100 ++++++++++++++---------------------------- 2 files changed, 34 insertions(+), 72 deletions(-) diff --git a/pyfpdb/Tables_Demo.py b/pyfpdb/Tables_Demo.py index 92bb1a3c..199e81c2 100755 --- a/pyfpdb/Tables_Demo.py +++ b/pyfpdb/Tables_Demo.py @@ -3,7 +3,7 @@ Main program module to test/demo the Tables subclasses. """ -# Copyright 2008 - 2009, Ray E. Barker +# Copyright 2008 - 2010, Ray E. Barker # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,10 +24,8 @@ Main program module to test/demo the Tables subclasses. # Standard Library modules import sys import os -import re # pyGTK modules -import pygtk import gtk import gobject @@ -103,7 +101,7 @@ if __name__=="__main__": fake = fake_hud(table) print "fake =", fake -# gobject.timeout_add(100, check_on_table, table, fake) + gobject.timeout_add(100, check_on_table, table, fake) print "calling main" gtk.main() diff --git a/pyfpdb/XTables.py b/pyfpdb/XTables.py index 29a9b1d9..6b06eb0f 100644 --- a/pyfpdb/XTables.py +++ b/pyfpdb/XTables.py @@ -1,11 +1,9 @@ #!/usr/bin/env python -"""Discover_Tables.py +"""XTables.py -Inspects the currently open windows and finds those of interest to us--that is -poker table windows from supported sites. Returns a list -of Table_Window objects representing the windows found. +XWindows specific methods for TableWindows Class. """ -# Copyright 2008 - 2009, Ray E. Barker +# Copyright 2008 - 2010, Ray E. Barker # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,14 +23,11 @@ of Table_Window objects representing the windows found. # Standard Library modules import re -import os # pyGTK modules -import pygtk import gtk # Other Library modules -import Xlib import Xlib.display # FreePokerTools modules @@ -46,72 +41,41 @@ name_atom = disp.get_atom("WM_NAME", 1) class Table(Table_Window): def find_table_parameters(self, search_string): -# self.window = None -# done_looping = False -# for outside in root.query_tree().children: -# for inside in outside.query_tree().children: -# if done_looping: break -# prop = inside.get_property(name_atom, Xlib.Xatom.STRING, 0, 1000) -# print prop -# if prop is None: continue -# if prop.value and re.search(search_string, prop.value): -# if self.check_bad_words(prop.value): continue -## if inside.get_wm_name() and re.search(search_string, inside.get_wm_name()): -## if self.check_bad_words(inside.get_wm_name()): -## print "bad word =", inside.get_wm_name() -## continue -# self.window = inside -# self.parent = outside -# done_looping = True -# break + self.window = None + done_looping = False + for outside in root.query_tree().children: + for inside in outside.query_tree().children: + if done_looping: break + if inside.get_wm_name() and re.search(search_string, inside.get_wm_name()): + if self.check_bad_words(inside.get_wm_name()): continue + self.window = inside + self.parent = outside + done_looping = True + break - window_number = None - for listing in os.popen('xwininfo -root -tree').readlines(): - if re.search(search_string, listing): -# print listing - mo = re.match('\s+([\dxabcdef]+) (.+):\s\(\"([a-zA-Z.]+)\".+ (\d+)x(\d+)\+\d+\+\d+ \+(\d+)\+(\d+)', listing) - self.number = int( mo.group(1), 0) - self.width = int( mo.group(4) ) - self.height = int( mo.group(5) ) - self.x = int( mo.group(6) ) - self.y = int( mo.group(7) ) - self.title = re.sub('\"', '', mo.group(2)) - self.exe = "" # not used? - self.hud = None -# done_looping = False -# for outside in root.query_tree().children: -# for inside in outside.query_tree().children: -# if done_looping: break -# if inside.id == window_number: -# self.window = inside -# self.parent = outside -# done_looping = True -# break - - if window_number is None: + if self.window == None or self.parent == None: + print "Window %s not found. Skipping." % search_string return None -# my_geo = self.window.get_geometry() -# pa_geo = self.parent.get_geometry() -# -# self.x = pa_geo.x + my_geo.x -# self.y = pa_geo.y + my_geo.y -# self.width = my_geo.width -# self.height = my_geo.height -# self.exe = self.window.get_wm_class()[0] -# self.title = self.window.get_wm_name() -# self.site = "" -# self.hud = None + my_geo = self.window.get_geometry() + pa_geo = self.parent.get_geometry() -# window_string = str(self.window) - mo = re.match('Xlib\.display\.Window\(([\dxabcdef]+)', window_string) + self.x = pa_geo.x + my_geo.x + self.y = pa_geo.y + my_geo.y + self.width = my_geo.width + self.height = my_geo.height + self.exe = self.window.get_wm_class()[0] + self.title = self.window.get_wm_name() + self.site = "" + self.hud = None + self.number = self.get_xid() + + def get_xid(self): + mo = re.match('Xlib\.display\.Window\(([\dxabcdef]+)', str(self.window)) if not mo: - print "Not matched" - self.gdk_handle = None + return None else: - self.number = int( mo.group(1), 0) - print "number =", self.number -# self.gdk_handle = gtk.gdk.window_foreign_new(int(self.number)) + return int( mo.group(1), 0) def get_geometry(self): try: From b4a08af2b1ec56be83280ad12d4359c645b3d0b3 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 13:09:26 +0300 Subject: [PATCH 002/217] Remove trailing percent symbols from HUD values The values that are displayed in the HUD box included the '%' symbol if these values were percentages. This clutters the HUD for those who don't need such extra characters. This patch removes the trailing '%' from result[1]. The default formatting for HUD values is '%3.1f' and if decimal places need to be changed, the code for those is now simpler. A user who wishes to show a percent symbol after any given stat value, can edit HUD_config.xml and assign such stats the hudsuffix="%" attribute. This patch also changes the way the tooltip strings are constructed. Instead of appending the percent symbol to generated string, the '%' is now generated in place by the format-string stanza '%%'. --- pyfpdb/Stats.py | 457 +++++++++++++++++++++++------------------------- 1 file changed, 221 insertions(+), 236 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index ffb1e47e..22900da8 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -78,7 +78,6 @@ log = logging.getLogger("db") re_Places = re.compile("_[0-9]$") -re_Percent = re.compile("%$") # String manipulation import codecs @@ -88,35 +87,21 @@ def do_tip(widget, tip): _tip = Charset.to_utf8(tip) widget.set_tooltip_text(_tip) + def do_stat(stat_dict, player = 24, stat = 'vpip'): match = re_Places.search(stat) - if match is None: - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) - else: + result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) + + # If decimal places have been defined, override result[1] + if match: base = stat[0:-2] places = int(stat[-1:]) - result = (0.0, '0.0', 'notset=0', 'notset=0', '0', 'not set') - try: - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': base, 'player': player}) - except: - pass # - log.info(_("exception getting stat %s for player %s %s") % (base, str(player), str(sys.exc_info()))) - log.debug(_("Stats.do_stat result = %s") % str(result) ) - - match = re_Percent.search(result[1]) - try: - if match is None: - result = (result[0], "%.*f" % (places, result[0]), result[2], result[3], result[4], result[5]) - else: - result = (result[0], "%.*f%%" % (places, 100*result[0]), result[2], result[3], result[4], result[5]) - except: - log.info(_("error: %s") % str(sys.exc_info())) - raise + result[1] = '%.*f' % (places, 100.0*result[0]) return result # OK, for reference the tuple returned by the stat is: # 0 - The stat, raw, no formating, eg 0.33333333 -# 1 - formatted stat with appropriate precision and punctuation, eg 33% +# 1 - formatted stat with appropriate precision, eg. 33; shown in HUD # 2 - formatted stat with appropriate precision, punctuation and a hint, eg v=33% # 3 - same as #2 except name of stat instead of hint, eg vpip=33% # 4 - the calculation that got the stat, eg 9/27 @@ -147,17 +132,17 @@ def vpip(stat_dict, player): try: stat = float(stat_dict[player]['vpip'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100*stat) + '%', - 'v=%3.1f' % (100*stat) + '%', - 'vpip=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), + '%3.1f' % (100.0*stat), + 'v=%3.1f%%' % (100.0*stat), + 'vpip=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, - '%3.1f' % (0) + '%', - 'v=%3.1f' % (0) + '%', - 'vpip=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'v=%3.1f%%' % (0), + 'vpip=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Voluntarily Put In Pot Pre-Flop%') ) @@ -167,18 +152,18 @@ def pfr(stat_dict, player): try: stat = float(stat_dict[player]['pfr'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100*stat) + '%', - 'p=%3.1f' % (100*stat) + '%', - 'pfr=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'p=%3.1f%%' % (100.0*stat), + 'pfr=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['pfr'], stat_dict[player]['n']), _('Pre-Flop Raise %') ) except: return (stat, - '%3.1f' % (0) + '%', - 'p=%3.1f' % (0) + '%', - 'pfr=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'p=%3.1f%%' % (0), + 'pfr=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Pre-Flop Raise %') ) @@ -188,18 +173,18 @@ def wtsd(stat_dict, player): try: stat = float(stat_dict[player]['sd'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'w=%3.1f' % (100*stat) + '%', - 'wtsd=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'w=%3.1f%%' % (100.0*stat), + 'wtsd=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), _('% went to showdown') ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wtsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'w=%3.1f%%' % (0), + 'wtsd=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% went to showdown') ) @@ -209,18 +194,18 @@ def wmsd(stat_dict, player): try: stat = float(stat_dict[player]['wmsd'])/float(stat_dict[player]['sd']) return (stat, - '%3.1f' % (100*stat) + '%', - 'w=%3.1f' % (100*stat) + '%', - 'wmsd=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'w=%3.1f%%' % (100.0*stat), + 'wmsd=%3.1f%%' % (100.0*stat), '(%5.1f/%d)' % (float(stat_dict[player]['wmsd']), stat_dict[player]['sd']), _('% won money at showdown') ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wmsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'w=%3.1f%%' % (0), + 'wmsd=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% won money at showdown') ) @@ -230,19 +215,19 @@ def profit100(stat_dict, player): try: stat = float(stat_dict[player]['net'])/float(stat_dict[player]['n']) return (stat, - '%.0f' % (100.0*stat), - 'p=%.0f' % (100.0*stat), - 'p/100=%.0f' % (100.0*stat), + '%.0f' % (100.0*stat), + 'p=%.0f' % (100.0*stat), + 'p/100=%.0f' % (100.0*stat), '%d/%d' % (stat_dict[player]['net'], stat_dict[player]['n']), _('profit/100hands') ) except: print _("exception calcing p/100: 100 * %d / %d") % (stat_dict[player]['net'], stat_dict[player]['n']) return (stat, - '%.0f' % (0.0), - 'p=%.0f' % (0.0), - 'p/100=%.0f' % (0.0), - '(%d/%d)' % (0, 0), + '%.0f' % (0.0), + 'p=%.0f' % (0.0), + 'p/100=%.0f' % (0.0), + '(%d/%d)' % (0, 0), _('profit/100hands') ) @@ -252,19 +237,19 @@ def bbper100(stat_dict, player): try: stat = 100.0 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), _('big blinds/100 hands') ) except: log.info("exception calcing bb/100: "+str(stat_dict[player])) return (stat, - '%.0f' % (0), - 'bb100=%.0f' % (0), - 'bb100=%.0f' % (0), - '(%f)' % (0), + '%.0f' % (0), + 'bb100=%.0f' % (0), + 'bb100=%.0f' % (0), + '(%f)' % (0), _('big blinds/100 hands') ) @@ -274,19 +259,19 @@ def BBper100(stat_dict, player): try: stat = 50 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), _('Big Bets/100 hands') ) except: log.info(_("exception calcing BB/100: ")+str(stat_dict[player])) return (stat, - '%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - '(%f)' % (0.0), + '%.0f' % (0.0), + 'BB100=%.0f' % (0.0), + 'BB100=%.0f' % (0.0), + '(%f)' % (0.0), _('Big Bets/100 hands') ) @@ -297,10 +282,10 @@ def saw_f(stat_dict, player): den = float(stat_dict[player]['n']) stat = num/den return (stat, - '%3.1f' % (100*stat) + '%', - 'sf=%3.1f' % (100*stat) + '%', - 'saw_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), + '%3.1f' % (100.0*stat), + 'sf=%3.1f%%' % (100.0*stat), + 'saw_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), _('Flop Seen %') ) except: @@ -308,10 +293,10 @@ def saw_f(stat_dict, player): num = 0 den = 0 return (stat, - '%3.1f' % (stat) + '%', - 'sf=%3.1f' % (stat) + '%', - 'saw_f=%3.1f' % (stat) + '%', - '(%d/%d)' % (num, den), + '%3.1f' % (stat), + 'sf=%3.1f%%' % (stat), + 'saw_f=%3.1f%%' % (stat), + '(%d/%d)' % (num, den), _('Flop Seen %') ) @@ -352,18 +337,18 @@ def fold_f(stat_dict, player): try: stat = float(stat_dict[player]['fold_2'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff=%3.1f' % (100*stat) + '%', - 'fold_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'ff=%3.1f%%' % (100.0*stat), + 'fold_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), _('folded flop/4th') ) except: return (stat, - '%3.1f' % (0) + '%', - 'ff=%3.1f' % (0) + '%', - 'fold_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff=%3.1f%%' % (0), + 'fold_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('folded flop/4th') ) @@ -373,10 +358,10 @@ def steal(stat_dict, player): try: stat = float(stat_dict[player]['steal'])/float(stat_dict[player]['steal_opp']) return (stat, - '%3.1f' % (100*stat) + '%', - 'st=%3.1f' % (100*stat) + '%', - 'steal=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), + '%3.1f' % (100.0*stat), + 'st=%3.1f%%' % (100.0*stat), + 'steal=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), _('% steal attempted') ) except: @@ -388,10 +373,10 @@ def f_SB_steal(stat_dict, player): try: stat = float(stat_dict[player]['sbnotdef'])/float(stat_dict[player]['sbstolen']) return (stat, - '%3.1f' % (100*stat) + '%', - 'fSB=%3.1f' % (100*stat) + '%', - 'fSB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), + '%3.1f' % (100.0*stat), + 'fSB=%3.1f%%' % (100.0*stat), + 'fSB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), _('% folded SB to steal')) except: return (stat, @@ -407,10 +392,10 @@ def f_BB_steal(stat_dict, player): try: stat = float(stat_dict[player]['bbnotdef'])/float(stat_dict[player]['bbstolen']) return (stat, - '%3.1f' % (100*stat) + '%', - 'fBB=%3.1f' % (100*stat) + '%', - 'fBB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), + '%3.1f' % (100.0*stat), + 'fBB=%3.1f%%' % (100.0*stat), + 'fBB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), _('% folded BB to steal')) except: return (stat, @@ -429,10 +414,10 @@ def f_steal(stat_dict, player): stat = float(folded_blind)/float(blind_stolen) return (stat, - '%3.1f' % (100*stat) + '%', - 'fB=%3.1f' % (100*stat) + '%', - 'fB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (folded_blind, blind_stolen), + '%3.1f' % (100.0*stat), + 'fB=%3.1f%%' % (100.0*stat), + 'fB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (folded_blind, blind_stolen), _('% folded blind to steal')) except: return (stat, @@ -448,17 +433,17 @@ def three_B(stat_dict, player): try: stat = float(stat_dict[player]['tb_0'])/float(stat_dict[player]['tb_opp_0']) return (stat, - '%3.1f' % (100*stat) + '%', - '3B=%3.1f' % (100*stat) + '%', - '3B_pf=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), + '%3.1f' % (100.0*stat), + '3B=%3.1f%%' % (100.0*stat), + '3B_pf=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), _('% 3/4 Bet preflop/3rd')) except: return (stat, - '%3.1f' % (0) + '%', - '3B=%3.1f' % (0) + '%', - '3B_pf=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + '3B=%3.1f%%' % (0), + '3B_pf=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% 3/4 Bet preflop/3rd')) def WMsF(stat_dict, player): @@ -467,17 +452,17 @@ def WMsF(stat_dict, player): try: stat = float(stat_dict[player]['w_w_s_1'])/float(stat_dict[player]['saw_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'wf=%3.1f' % (100*stat) + '%', - 'w_w_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'wf=%3.1f%%' % (100.0*stat), + 'w_w_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), _('% won$/saw flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'wf=%3.1f' % (0) + '%', - 'w_w_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'wf=%3.1f%%' % (0), + 'w_w_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% won$/saw flop/4th')) def a_freq1(stat_dict, player): @@ -486,17 +471,17 @@ def a_freq1(stat_dict, player): try: stat = float(stat_dict[player]['aggr_1'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a1=%3.1f' % (100*stat) + '%', - 'a_fq_1=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'a1=%3.1f%%' % (100.0*stat), + 'a_fq_1=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['aggr_1'], stat_dict[player]['saw_f']), _('Aggression Freq flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a1=%3.1f' % (0) + '%', - 'a_fq_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a1=%3.1f%%' % (0), + 'a_fq_1=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq flop/4th')) def a_freq2(stat_dict, player): @@ -505,17 +490,17 @@ def a_freq2(stat_dict, player): try: stat = float(stat_dict[player]['aggr_2'])/float(stat_dict[player]['saw_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a2=%3.1f' % (100*stat) + '%', - 'a_fq_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), + '%3.1f' % (100.0*stat), + 'a2=%3.1f%%' % (100.0*stat), + 'a_fq_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), _('Aggression Freq turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a2=%3.1f' % (0) + '%', - 'a_fq_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a2=%3.1f%%' % (0), + 'a_fq_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq turn/5th')) def a_freq3(stat_dict, player): @@ -524,17 +509,17 @@ def a_freq3(stat_dict, player): try: stat = float(stat_dict[player]['aggr_3'])/float(stat_dict[player]['saw_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a3=%3.1f' % (100*stat) + '%', - 'a_fq_3=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'a3=%3.1f%%' % (100.0*stat), + 'a_fq_3=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['aggr_3'], stat_dict[player]['saw_3']), _('Aggression Freq river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a3=%3.1f' % (0) + '%', - 'a_fq_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a3=%3.1f%%' % (0), + 'a_fq_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq river/6th')) def a_freq4(stat_dict, player): @@ -543,17 +528,17 @@ def a_freq4(stat_dict, player): try: stat = float(stat_dict[player]['aggr_4'])/float(stat_dict[player]['saw_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a4=%3.1f' % (100*stat) + '%', - 'a_fq_4=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), + '%3.1f' % (100.0*stat), + 'a4=%3.1f%%' % (100.0*stat), + 'a_fq_4=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), _('Aggression Freq 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a4=%3.1f' % (0) + '%', - 'a_fq_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a4=%3.1f%%' % (0), + 'a_fq_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq 7th')) def a_freq_123(stat_dict, player): @@ -563,9 +548,9 @@ def a_freq_123(stat_dict, player): stat = float( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] ) / float( stat_dict[player]['saw_1'] + stat_dict[player]['saw_2'] + stat_dict[player]['saw_3']); return (stat, - '%3.1f' % (100*stat) + '%', - 'afq=%3.1f' % (100*stat) + '%', - 'postf_aggfq=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'afq=%3.1f%%' % (100.0*stat), + 'postf_aggfq=%3.1f%%' % (100.0*stat), '(%d/%d)' % ( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] @@ -576,10 +561,10 @@ def a_freq_123(stat_dict, player): _('Post-Flop Aggression Freq')) except: return (stat, - '%2.0f' % (0) + '%', - 'a3=%2.0f' % (0) + '%', - 'a_fq_3=%2.0f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%2.0f' % (0), + 'a3=%2.0f%%' % (0), + 'a_fq_3=%2.0f%%' % (0), + '(%d/%d)' % (0, 0), _('Post-Flop Aggression Freq')) def agg_freq(stat_dict, player): @@ -597,17 +582,17 @@ def agg_freq(stat_dict, player): stat = float (bet_raise) / float(post_call + post_fold + bet_raise) return (stat, - '%3.1f' % (100*stat) + '%', - 'afr=%3.1f' % (100*stat) + '%', - 'agg_fr=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), + '%3.1f' % (100.0*stat), + 'afr=%3.1f%%' % (100.0*stat), + 'agg_fr=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), _('Aggression Freq')) except: return (stat, - '%2.1f' % (0) + '%', - 'af=%3.1f' % (0) + '%', - 'agg_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%2.1f' % (0), + 'af=%3.1f%%' % (0), + 'agg_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq')) def agg_fact(stat_dict, player): @@ -647,17 +632,17 @@ def cbet(stat_dict, player): oppt = stat_dict[player]['cb_opp_1']+stat_dict[player]['cb_opp_2']+stat_dict[player]['cb_opp_3']+stat_dict[player]['cb_opp_4'] stat = float(cbets)/float(oppt) return (stat, - '%3.1f' % (100*stat) + '%', - 'cbet=%3.1f' % (100*stat) + '%', - 'cbet=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (cbets, oppt), + '%3.1f' % (100.0*stat), + 'cbet=%3.1f%%' % (100.0*stat), + 'cbet=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (cbets, oppt), _('% continuation bet ')) except: return (stat, - '%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cbet=%3.1f%%' % (0), + 'cbet=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet ')) def cb1(stat_dict, player): @@ -666,17 +651,17 @@ def cb1(stat_dict, player): try: stat = float(stat_dict[player]['cb_1'])/float(stat_dict[player]['cb_opp_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb1=%3.1f' % (100*stat) + '%', - 'cb_1=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), + '%3.1f' % (100.0*stat), + 'cb1=%3.1f%%' % (100.0*stat), + 'cb_1=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), _('% continuation bet flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb1=%3.1f' % (0) + '%', - 'cb_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb1=%3.1f%%' % (0), + 'cb_1=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet flop/4th')) def cb2(stat_dict, player): @@ -685,17 +670,17 @@ def cb2(stat_dict, player): try: stat = float(stat_dict[player]['cb_2'])/float(stat_dict[player]['cb_opp_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb2=%3.1f' % (100*stat) + '%', - 'cb_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), + '%3.1f' % (100.0*stat), + 'cb2=%3.1f%%' % (100.0*stat), + 'cb_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), _('% continuation bet turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb2=%3.1f' % (0) + '%', - 'cb_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb2=%3.1f%%' % (0), + 'cb_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet turn/5th')) def cb3(stat_dict, player): @@ -704,17 +689,17 @@ def cb3(stat_dict, player): try: stat = float(stat_dict[player]['cb_3'])/float(stat_dict[player]['cb_opp_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb3=%3.1f' % (100*stat) + '%', - 'cb_3=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), + '%3.1f' % (100.0*stat), + 'cb3=%3.1f%%' % (100.0*stat), + 'cb_3=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), _('% continuation bet river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb3=%3.1f' % (0) + '%', - 'cb_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb3=%3.1f%%' % (0), + 'cb_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet river/6th')) def cb4(stat_dict, player): @@ -723,17 +708,17 @@ def cb4(stat_dict, player): try: stat = float(stat_dict[player]['cb_4'])/float(stat_dict[player]['cb_opp_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb4=%3.1f' % (100*stat) + '%', - 'cb_4=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'cb4=%3.1f%%' % (100.0*stat), + 'cb_4=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['cb_4'], stat_dict[player]['cb_opp_4']), _('% continuation bet 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb4=%3.1f' % (0) + '%', - 'cb_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb4=%3.1f%%' % (0), + 'cb_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet 7th')) def ffreq1(stat_dict, player): @@ -742,10 +727,10 @@ def ffreq1(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_1'])/float(stat_dict[player]['was_raised_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff1=%3.1f' % (100*stat) + '%', - 'ff_1=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), + '%3.1f' % (100.0*stat), + 'ff1=%3.1f%%' % (100.0*stat), + 'ff_1=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), _('% fold frequency flop/4th')) except: return (stat, @@ -761,17 +746,17 @@ def ffreq2(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_2'])/float(stat_dict[player]['was_raised_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff2=%3.1f' % (100*stat) + '%', - 'ff_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), + '%3.1f' % (100.0*stat), + 'ff2=%3.1f%%' % (100.0*stat), + 'ff_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), _('% fold frequency turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff2=%3.1f' % (0) + '%', - 'ff_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff2=%3.1f%%' % (0), + 'ff_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency turn/5th')) def ffreq3(stat_dict, player): @@ -780,17 +765,17 @@ def ffreq3(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_3'])/float(stat_dict[player]['was_raised_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff3=%3.1f' % (100*stat) + '%', - 'ff_3=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), + '%3.1f' % (100.0*stat), + 'ff3=%3.1f%%' % (100.0*stat), + 'ff_3=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), _('% fold frequency river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff3=%3.1f' % (0) + '%', - 'ff_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff3=%3.1f%%' % (0), + 'ff_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency river/6th')) def ffreq4(stat_dict, player): @@ -799,24 +784,24 @@ def ffreq4(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_4'])/float(stat_dict[player]['was_raised_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff4=%3.1f' % (100*stat) + '%', - 'ff_4=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), + '%3.1f' % (100.0*stat), + 'ff4=%3.1f%%' % (100.0*stat), + 'ff_4=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), _('% fold frequency 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff4=%3.1f' % (0) + '%', - 'ff_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff4=%3.1f%%' % (0), + 'ff_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency 7th')) if __name__== "__main__": statlist = dir() misslist = [ "Configuration", "Database", "Charset", "codecs", "encoder" , "do_stat", "do_tip", "GInitiallyUnowned", "gtk", "pygtk" - , "re", "re_Percent", "re_Places" + , "re", "re_Places" ] statlist = [ x for x in statlist if x not in dir(sys) ] statlist = [ x for x in statlist if x not in dir(codecs) ] From 4a92638941eb105ab80ca3c1a1ecc41f5d18bf14 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 13:57:01 +0300 Subject: [PATCH 003/217] Return "hard" NA for missing/incalculable stats It makes very little sense to do a format string for nothing but zeroes in case of unknown values. Simply return a set of 'NA' strings in place of usual stats. This makes the error cases consistent throughout Stats.py --- pyfpdb/Stats.py | 211 ++++++++++++++++++++++++------------------------ 1 file changed, 105 insertions(+), 106 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index 22900da8..cfe82f0a 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -139,10 +139,10 @@ def vpip(stat_dict, player): _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, - '%3.1f' % (0), - 'v=%3.1f%%' % (0), - 'vpip=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'v=NA', + 'vpip=NA', + '(0/0)', _('Voluntarily Put In Pot Pre-Flop%') ) @@ -160,10 +160,10 @@ def pfr(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'p=%3.1f%%' % (0), - 'pfr=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'pfr=NA', + '(0/0)', _('Pre-Flop Raise %') ) @@ -181,10 +181,10 @@ def wtsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'w=%3.1f%%' % (0), - 'wtsd=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wtsd=NA', + '(0/0)', _('% went to showdown') ) @@ -202,10 +202,10 @@ def wmsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'w=%3.1f%%' % (0), - 'wmsd=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wmsd=NA', + '(0/0)', _('% won money at showdown') ) @@ -224,10 +224,10 @@ def profit100(stat_dict, player): except: print _("exception calcing p/100: 100 * %d / %d") % (stat_dict[player]['net'], stat_dict[player]['n']) return (stat, - '%.0f' % (0.0), - 'p=%.0f' % (0.0), - 'p/100=%.0f' % (0.0), - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'p/100=NA', + '(0/0)', _('profit/100hands') ) @@ -246,10 +246,10 @@ def bbper100(stat_dict, player): except: log.info("exception calcing bb/100: "+str(stat_dict[player])) return (stat, - '%.0f' % (0), - 'bb100=%.0f' % (0), - 'bb100=%.0f' % (0), - '(%f)' % (0), + 'NA', + 'bb100=NA', + 'bb100=NA', + '(--)', _('big blinds/100 hands') ) @@ -268,10 +268,10 @@ def BBper100(stat_dict, player): except: log.info(_("exception calcing BB/100: ")+str(stat_dict[player])) return (stat, - '%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - '(%f)' % (0.0), + 'NA', + 'BB100=NA', + 'BB100=NA', + '(--)', _('Big Bets/100 hands') ) @@ -290,13 +290,11 @@ def saw_f(stat_dict, player): ) except: stat = 0.0 - num = 0 - den = 0 return (stat, - '%3.1f' % (stat), - 'sf=%3.1f%%' % (stat), - 'saw_f=%3.1f%%' % (stat), - '(%d/%d)' % (num, den), + 'NA', + 'sf=NA', + 'saw_f=NA', + '(0/0)', _('Flop Seen %') ) @@ -323,6 +321,7 @@ def n(stat_dict, player): _('number hands seen') ) except: + # Number of hands shouldn't ever be "NA"; zeroes are better here return (0, '%d' % (0), 'n=%d' % (0), @@ -345,10 +344,10 @@ def fold_f(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'ff=%3.1f%%' % (0), - 'fold_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff=NA', + 'fold_f=NA', + '(0/0)', _('folded flop/4th') ) @@ -440,10 +439,10 @@ def three_B(stat_dict, player): _('% 3/4 Bet preflop/3rd')) except: return (stat, - '%3.1f' % (0), - '3B=%3.1f%%' % (0), - '3B_pf=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + '3B=NA', + '3B_pf=NA', + '(0/0)', _('% 3/4 Bet preflop/3rd')) def WMsF(stat_dict, player): @@ -459,10 +458,10 @@ def WMsF(stat_dict, player): _('% won$/saw flop/4th')) except: return (stat, - '%3.1f' % (0), - 'wf=%3.1f%%' % (0), - 'w_w_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'wf=NA', + 'w_w_f=NA', + '(0/0)', _('% won$/saw flop/4th')) def a_freq1(stat_dict, player): @@ -478,10 +477,10 @@ def a_freq1(stat_dict, player): _('Aggression Freq flop/4th')) except: return (stat, - '%3.1f' % (0), - 'a1=%3.1f%%' % (0), - 'a_fq_1=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a1=NA', + 'a_fq_1=NA', + '(0/0)', _('Aggression Freq flop/4th')) def a_freq2(stat_dict, player): @@ -497,10 +496,10 @@ def a_freq2(stat_dict, player): _('Aggression Freq turn/5th')) except: return (stat, - '%3.1f' % (0), - 'a2=%3.1f%%' % (0), - 'a_fq_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a2=NA', + 'a_fq_2=NA', + '(0/0)', _('Aggression Freq turn/5th')) def a_freq3(stat_dict, player): @@ -516,10 +515,10 @@ def a_freq3(stat_dict, player): _('Aggression Freq river/6th')) except: return (stat, - '%3.1f' % (0), - 'a3=%3.1f%%' % (0), - 'a_fq_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Aggression Freq river/6th')) def a_freq4(stat_dict, player): @@ -535,10 +534,10 @@ def a_freq4(stat_dict, player): _('Aggression Freq 7th')) except: return (stat, - '%3.1f' % (0), - 'a4=%3.1f%%' % (0), - 'a_fq_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a4=NA', + 'a_fq_4=NA', + '(0/0)', _('Aggression Freq 7th')) def a_freq_123(stat_dict, player): @@ -561,10 +560,10 @@ def a_freq_123(stat_dict, player): _('Post-Flop Aggression Freq')) except: return (stat, - '%2.0f' % (0), - 'a3=%2.0f%%' % (0), - 'a_fq_3=%2.0f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Post-Flop Aggression Freq')) def agg_freq(stat_dict, player): @@ -589,10 +588,10 @@ def agg_freq(stat_dict, player): _('Aggression Freq')) except: return (stat, - '%2.1f' % (0), - 'af=%3.1f%%' % (0), - 'agg_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'af=NA', + 'agg_f=NA', + '(0/0)', _('Aggression Freq')) def agg_fact(stat_dict, player): @@ -615,10 +614,10 @@ def agg_fact(stat_dict, player): _('Aggression Factor')) except: return (stat, - '%2.2f' % (0) , - 'afa=%2.2f' % (0) , - 'agg_fa=%2.2f' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'afa=NA', + 'agg_fa=NA', + '(0/0)', _('Aggression Factor')) def cbet(stat_dict, player): @@ -639,10 +638,10 @@ def cbet(stat_dict, player): _('% continuation bet ')) except: return (stat, - '%3.1f' % (0), - 'cbet=%3.1f%%' % (0), - 'cbet=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cbet=NA', + 'cbet=NA', + '(0/0)', _('% continuation bet ')) def cb1(stat_dict, player): @@ -658,10 +657,10 @@ def cb1(stat_dict, player): _('% continuation bet flop/4th')) except: return (stat, - '%3.1f' % (0), - 'cb1=%3.1f%%' % (0), - 'cb_1=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb1=NA', + 'cb_1=NA', + '(0/0)', _('% continuation bet flop/4th')) def cb2(stat_dict, player): @@ -677,10 +676,10 @@ def cb2(stat_dict, player): _('% continuation bet turn/5th')) except: return (stat, - '%3.1f' % (0), - 'cb2=%3.1f%%' % (0), - 'cb_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb2=NA', + 'cb_2=NA', + '(0/0)', _('% continuation bet turn/5th')) def cb3(stat_dict, player): @@ -696,10 +695,10 @@ def cb3(stat_dict, player): _('% continuation bet river/6th')) except: return (stat, - '%3.1f' % (0), - 'cb3=%3.1f%%' % (0), - 'cb_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb3=NA', + 'cb_3=NA', + '(0/0)', _('% continuation bet river/6th')) def cb4(stat_dict, player): @@ -715,10 +714,10 @@ def cb4(stat_dict, player): _('% continuation bet 7th')) except: return (stat, - '%3.1f' % (0), - 'cb4=%3.1f%%' % (0), - 'cb_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb4=NA', + 'cb_4=NA', + '(0/0)', _('% continuation bet 7th')) def ffreq1(stat_dict, player): @@ -753,10 +752,10 @@ def ffreq2(stat_dict, player): _('% fold frequency turn/5th')) except: return (stat, - '%3.1f' % (0), - 'ff2=%3.1f%%' % (0), - 'ff_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff2=NA', + 'ff_2=NA', + '(0/0)', _('% fold frequency turn/5th')) def ffreq3(stat_dict, player): @@ -772,10 +771,10 @@ def ffreq3(stat_dict, player): _('% fold frequency river/6th')) except: return (stat, - '%3.1f' % (0), - 'ff3=%3.1f%%' % (0), - 'ff_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff3=NA', + 'ff_3=NA', + '(0/0)', _('% fold frequency river/6th')) def ffreq4(stat_dict, player): @@ -791,10 +790,10 @@ def ffreq4(stat_dict, player): _('% fold frequency 7th')) except: return (stat, - '%3.1f' % (0), - 'ff4=%3.1f%%' % (0), - 'ff_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff4=NA', + 'ff_4=NA', + '(0/0)', _('% fold frequency 7th')) if __name__== "__main__": From d2483b88665b1ea4ff5fcb49143b5ab31cd5d4eb Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 14:12:29 +0300 Subject: [PATCH 004/217] Add comment on decimal place override --- pyfpdb/Stats.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index cfe82f0a..285a45ea 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -93,6 +93,11 @@ def do_stat(stat_dict, player = 24, stat = 'vpip'): result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) # If decimal places have been defined, override result[1] + # NOTE: decimal place override ALWAYS assumes the raw result is a + # fraction (x/100); manual decimal places really only make sense for + # percentage values. Also, profit/100 hands (bb/BB) already default + # to three decimal places anyhow, so they are unlikely override + # candidates. if match: base = stat[0:-2] places = int(stat[-1:]) From 42497bf27a2f41909277884fd0271b071c29ef07 Mon Sep 17 00:00:00 2001 From: Worros Date: Sat, 28 Aug 2010 17:20:50 +0800 Subject: [PATCH 005/217] THP: Fix parser name call chain Also comment out Party for the moment, as there is a hh file that crashes the parser --- pyfpdb/TestHandsPlayers.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py index ae521f71..6e49c7ff 100644 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -34,14 +34,14 @@ class FpdbError: idx = f.find('regression') print "(%3d) : %s" %(self.histogram[f], f[idx:]) -def compare(leaf, importer, errors): +def compare(leaf, importer, errors, site): filename = leaf #print "DEBUG: fileanme: %s" % filename # Test if this is a hand history file if filename.endswith('.txt'): # test if there is a .hp version of the file - importer.addBulkImportImportFileOrDir(filename, site="PokerStars") + importer.addBulkImportImportFileOrDir(filename, site=site) (stored, dups, partial, errs, ttime) = importer.runImport() if os.path.isfile(filename + '.hp'): # Compare them @@ -76,15 +76,15 @@ def compare(leaf, importer, errors): -def walk_testfiles(dir, function, importer, errors): +def walk_testfiles(dir, function, importer, errors, site): """Walks a directory, and executes a callback on each file """ dir = os.path.abspath(dir) for file in [file for file in os.listdir(dir) if not file in [".",".."]]: nfile = os.path.join(dir,file) if os.path.isdir(nfile): - walk_testfiles(nfile, compare, importer, errors) + walk_testfiles(nfile, compare, importer, errors, site) else: - compare(nfile, importer, errors) + compare(nfile, importer, errors, site) def main(argv=None): if argv is None: @@ -110,10 +110,10 @@ def main(argv=None): PartyPokerErrors = FpdbError('Party Poker') BetfairErrors = FpdbError('Betfair') - walk_testfiles("regression-test-files/cash/Stars/", compare, importer, PokerStarsErrors) - walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors) - walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors) - walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors) + walk_testfiles("regression-test-files/cash/Stars/", compare, importer, PokerStarsErrors, "PokerStars") + walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") + #walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") + walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors, "Betfair") totalerrors = PokerStarsErrors.errorcount + FTPErrors.errorcount + PartyPokerErrors.errorcount + BetfairErrors.errorcount From ff2a9fcc5a5c1cefab10b75457da4d427919af92 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sat, 28 Aug 2010 22:49:59 +0200 Subject: [PATCH 006/217] move gettext import to the right place in GuiGraphViewer --- pyfpdb/GuiGraphViewer.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pyfpdb/GuiGraphViewer.py b/pyfpdb/GuiGraphViewer.py index fe82aa44..09acb483 100644 --- a/pyfpdb/GuiGraphViewer.py +++ b/pyfpdb/GuiGraphViewer.py @@ -26,22 +26,6 @@ from time import * from datetime import datetime #import pokereval -try: - import matplotlib - matplotlib.use('GTKCairo') - from matplotlib.figure import Figure - from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas - from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar - from matplotlib.font_manager import FontProperties - from numpy import arange, cumsum - from pylab import * -except ImportError, inst: - print _("""Failed to load libs for graphing, graphing will not function. Please - install numpy and matplotlib if you want to use graphs.""") - print _("""This is of no consequence for other parts of the program, e.g. import - and HUD are NOT affected by this problem.""") - print "ImportError: %s" % inst.args - import locale lang=locale.getdefaultlocale()[0][0:2] if lang=="en": @@ -59,6 +43,22 @@ import Database import Filters import Charset +try: + import matplotlib + matplotlib.use('GTKCairo') + from matplotlib.figure import Figure + from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas + from matplotlib.backends.backend_gtkagg import NavigationToolbar2GTKAgg as NavigationToolbar + from matplotlib.font_manager import FontProperties + from numpy import arange, cumsum + from pylab import * +except ImportError, inst: + print _("""Failed to load libs for graphing, graphing will not function. Please + install numpy and matplotlib if you want to use graphs.""") + print _("""This is of no consequence for other parts of the program, e.g. import + and HUD are NOT affected by this problem.""") + print "ImportError: %s" % inst.args + class GuiGraphViewer (threading.Thread): def __init__(self, querylist, config, parent, debug=True): From ee20cbbcc161e506c0122a235af79bc6b002b8a6 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 14:21:49 +0200 Subject: [PATCH 007/217] some small GUI string improvements --- pyfpdb/fpdb.pyw | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index adeb34c7..024d56ef 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -52,7 +52,7 @@ if os.name == 'nt' and sys.version[0:3] not in ('2.5', '2.6', '2.7') and '-r' no else: os.execvpe('python', ('python', 'fpdb.pyw', '-r'), os.environ) # first arg is ignored (name of program being run) else: - print _("\npython 2.5 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n") + print _("\npython 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n") raw_input(_("Press ENTER to continue.")) exit() else: @@ -86,7 +86,7 @@ try: import gtk import pango except: - print _("Unable to load PYGTK modules required for GUI. Please install PyCairo, PyGObject, and PyGTK from www.pygtk.org.") + print _("Unable to load PyGTK modules required for GUI. Please install PyCairo, PyGObject, and PyGTK from www.pygtk.org.") raw_input(_("Press ENTER to continue.")) exit() @@ -436,7 +436,7 @@ class fpdb: diaHudTable.vbox.add(label) label.show() - label=gtk.Label(_("To configure things like colouring you will still have to manually edit your HUD_config.xml.")) + label=gtk.Label(_("To configure things like colouring you will still have to use the Preferences dialogue or manually edit your HUD_config.xml.")) diaHudTable.vbox.add(label) label.show() @@ -545,7 +545,7 @@ class fpdb: dia_confirm = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format=_("Confirm deleting and recreating tables")) diastring = _("Please confirm that you want to (re-)create the tables. If there already are tables in the database ") \ - +self.db.database+" on "+self.db.host+_(" they will be deleted.\nThis may take a while.") + +self.db.database+" on "+self.db.host+_(" they will be deleted and you will have to re-import your histories.\nThis may take a while.") dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted # disable windowclose, do not want the the underlying processing interrupted mid-process dia_confirm.set_deletable(False) From 219180822f0cd3e6c3cbc552e6e30166b4d6271b Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 14:24:04 +0200 Subject: [PATCH 008/217] l10n: improve create script, update PO files, some german translation --- pyfpdb/locale/create-po-file.sh | 1 + pyfpdb/locale/fpdb-de_DE.po | 149 +++++++++++++++++++------------- pyfpdb/locale/fpdb-en_GB.po | 14 +-- pyfpdb/locale/fpdb-hu_HU.po | 36 ++++---- 4 files changed, 117 insertions(+), 83 deletions(-) diff --git a/pyfpdb/locale/create-po-file.sh b/pyfpdb/locale/create-po-file.sh index d26c853a..49adc81f 100755 --- a/pyfpdb/locale/create-po-file.sh +++ b/pyfpdb/locale/create-po-file.sh @@ -1,3 +1,4 @@ cd .. +rm *.pyc python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.po *.py* diff --git a/pyfpdb/locale/fpdb-de_DE.po b/pyfpdb/locale/fpdb-de_DE.po index 9d7032b7..86577671 100644 --- a/pyfpdb/locale/fpdb-de_DE.po +++ b/pyfpdb/locale/fpdb-de_DE.po @@ -4,8 +4,8 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-26 18:52+CEST\n" -"PO-Revision-Date: 2010-08-25 18:41+0200\n" +"POT-Creation-Date: 2010-08-29 14:22+CEST\n" +"PO-Revision-Date: 2010-08-29 14:20+0200\n" "Last-Translator: Steffen Schaumburg \n" "Language-Team: Fpdb\n" "Language: de\n" @@ -18,7 +18,7 @@ msgstr "" #: Anonymise.py:55 msgid "Could not find file %s" -msgstr "" +msgstr "Konnte Datei %s nicht finden" #: Anonymise.py:61 msgid "Output being written to" @@ -907,13 +907,13 @@ msgstr "" msgid "Log Viewer" msgstr "" -#: GuiGraphViewer.py:39 +#: GuiGraphViewer.py:56 msgid "" "Failed to load libs for graphing, graphing will not function. Please\n" " install numpy and matplotlib if you want to use graphs." msgstr "" -#: GuiGraphViewer.py:41 +#: GuiGraphViewer.py:58 msgid "" "This is of no consequence for other parts of the program, e.g. import \n" " and HUD are NOT affected by this problem." @@ -2412,17 +2412,20 @@ msgstr "" #: fpdb.pyw:48 msgid " - press return to continue\n" -msgstr "" +msgstr " - drücken Sie Enter um fortzufahren" #: fpdb.pyw:55 msgid "" "\n" -"python 2.5 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" +"python 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" msgstr "" +"\n" +"Python 2.5-2.7 nicht gefunden, bitte installieren Sie Python 2.5, 2.6 oder " +"2.7 für fpdb\n" #: fpdb.pyw:56 fpdb.pyw:68 fpdb.pyw:90 msgid "Press ENTER to continue." -msgstr "" +msgstr "Drücken Sie ENTER um fortzufahren" #: fpdb.pyw:67 msgid "" @@ -2430,88 +2433,105 @@ msgid "" "not loading. Please install the PYWIN32 package from http://sourceforge.net/" "projects/pywin32/" msgstr "" +"Ihr Betriebssystem scheint Windows zu sein, aber die Windows Python " +"Extensions konnten nicht geladen werden. Bitte installieren Sie das PYWIN32-" +"Paket von http://sourceforge.net/projects/pywin32/" #: fpdb.pyw:89 msgid "" -"Unable to load PYGTK modules required for GUI. Please install PyCairo, " +"Unable to load PyGTK modules required for GUI. Please install PyCairo, " "PyGObject, and PyGTK from www.pygtk.org." msgstr "" +"Die für die GUI benötigten PyGTK module konnten nicht geladen werden. Bitte " +"installieren Sie PyCairo, PyGObject und PyGTK von www.pygtk.org." #: fpdb.pyw:247 msgid "" "Copyright 2008-2010, Steffen, Eratosthenes, Carl Gherardi, Eric Blade, _mt, " "sqlcoder, Bostik, and others" msgstr "" +"Copyright 2008-2010, Steffen, Eratosthenes, Carl Gherardi, Eric Blade, _mt, " +"sqlcoder, Bostik und andere" #: fpdb.pyw:248 msgid "" "You are free to change, and distribute original or changed versions of fpdb " "within the rules set out by the license" msgstr "" +"Sie dürfen fpdb innerhalb der Regeln der Lizenz verändern, verbreiten und " +"verändert verbreiten." #: fpdb.pyw:249 msgid "Please see fpdb's start screen for license information" -msgstr "" +msgstr "Lizenzinformationen finden Sie auf fpdb's Startbildschirm" #: fpdb.pyw:253 msgid "and others" -msgstr "" +msgstr "und andere" #: fpdb.pyw:259 msgid "Operating System" -msgstr "" +msgstr "Betriebssystem" #: fpdb.pyw:280 msgid "Your config file is: " -msgstr "" +msgstr "Ihre Konfigurationsdatei ist:" #: fpdb.pyw:285 msgid "Version Information:" -msgstr "" +msgstr "Versionsinformationen:" #: fpdb.pyw:292 msgid "Threads: " -msgstr "" +msgstr "Threads:" #: fpdb.pyw:315 msgid "" "Updated preferences have not been loaded because windows are open. Re-start " "fpdb to load them." msgstr "" +"Die neuen Einstellungen konnten nicht geladen werden da fpdb-Fenster offen " +"sind. Bitte starten Sie fpdb neu um sie zu verwenden." #: fpdb.pyw:325 msgid "Maintain Databases" -msgstr "" +msgstr "Datenbanken verwalten" #: fpdb.pyw:335 msgid "saving updated db data" -msgstr "" +msgstr "speichere aktualisierte DB-Daten" #: fpdb.pyw:342 msgid "guidb response was " -msgstr "" +msgstr "GuiDBs Antwort war " #: fpdb.pyw:348 msgid "" "Cannot open Database Maintenance window because other windows have been " "opened. Re-start fpdb to use this option." msgstr "" +"Konnte Datenbank-Verwaltungsfenster nicht öffnen da andere Fenster geöffnet " +"waren/sind. Starten Sie fpdb neu um diese Funktion zu nutzen." #: fpdb.pyw:351 msgid "Number of Hands: " -msgstr "" +msgstr "Hände: " #: fpdb.pyw:352 msgid "" "\n" "Number of Tourneys: " msgstr "" +"\n" +"Tournamente: " #: fpdb.pyw:353 msgid "" "\n" "Number of TourneyTypes: " msgstr "" +"\n" +"Tournamentarten (TourneyTypes): " #: fpdb.pyw:354 msgid "Database Statistics" @@ -2519,40 +2539,46 @@ msgstr "Datenbankstatistiken" #: fpdb.pyw:363 msgid "HUD Configurator - choose category" -msgstr "" +msgstr "HUD-Konfigurator - Kategorieauswahl" #: fpdb.pyw:369 msgid "" "Please select the game category for which you want to configure HUD stats:" msgstr "" +"Bitte wählen Sie die Spielkategorie, für die Sie HUD-Statistiken " +"konfigurieren möchten:" #: fpdb.pyw:421 msgid "HUD Configurator - please choose your stats" -msgstr "" +msgstr "HUD-Konfigurator - Statistikauswahl" #: fpdb.pyw:427 msgid "Please choose the stats you wish to use in the below table." -msgstr "" +msgstr "Bitte wählen Sie die Statistiken, die Sie nutzen möchten." #: fpdb.pyw:431 msgid "Note that you may not select any stat more than once or it will crash." msgstr "" +"Bitte beachten Sie, dass das HUD abstürzt wenn Sie Statistiken mehr als " +"einmal auswählen." #: fpdb.pyw:435 msgid "" "It is not currently possible to select \"empty\" or anything else to that " "end." -msgstr "" +msgstr "Es ist momentan nicht möglich \"leer\" o.ä. auszuwählen." #: fpdb.pyw:439 msgid "" -"To configure things like colouring you will still have to manually edit your " -"HUD_config.xml." +"To configure things like colouring you will still have to use the " +"Preferences dialogue or manually edit your HUD_config.xml." msgstr "" +"Um Farben usw. zu konfigurieren müssen Sie weiterhin den Einstellungs-Dialog " +"verwenden oder Ihre HUD_config.xml manuell bearbeiten." #: fpdb.pyw:546 msgid "Confirm deleting and recreating tables" -msgstr "" +msgstr "Tabellen löschen und reinitialisieren" #: fpdb.pyw:547 msgid "" @@ -2562,17 +2588,17 @@ msgstr "" #: fpdb.pyw:548 msgid "" -" they will be deleted.\n" +" they will be deleted and you will have to re-import your histories.\n" "This may take a while." msgstr "" #: fpdb.pyw:573 msgid "User cancelled recreating tables" -msgstr "" +msgstr "Benutzer hat Reinitialisierung der Tabellen abgebrochen" #: fpdb.pyw:580 msgid "Please confirm that you want to re-create the HUD cache." -msgstr "" +msgstr "Bitte bestätigen Sie, dass Sie den HUD-Cache neu erstellen möchten." #: fpdb.pyw:588 msgid " Hero's cache starts: " @@ -2584,35 +2610,36 @@ msgstr "" #: fpdb.pyw:615 msgid " Rebuilding HUD Cache ... " -msgstr "" +msgstr " Der HUD-Cache wird neu erstellt ... " #: fpdb.pyw:623 msgid "User cancelled rebuilding hud cache" -msgstr "" +msgstr "Benutzer hat Neuerstellung des HUD-Cache abgebrochen" #: fpdb.pyw:635 msgid "Confirm rebuilding database indexes" -msgstr "" +msgstr "Bestätigung der Neuerstellung der Datenbankindexe" #: fpdb.pyw:636 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" +"Bitte bestätigen Sie, dass Sie die Datenbankindexe neu erstellen möchten." #: fpdb.pyw:644 msgid " Rebuilding Indexes ... " -msgstr "" +msgstr " Datenbankindexe werden neu erstellt ... " #: fpdb.pyw:651 msgid " Cleaning Database ... " -msgstr "" +msgstr " Reinige Datenbank ... " #: fpdb.pyw:656 msgid " Analyzing Database ... " -msgstr "" +msgstr " Analysiere Datenbank ... " #: fpdb.pyw:661 msgid "User cancelled rebuilding db indexes" -msgstr "" +msgstr "Benutzer hat Neuerstellung der Datenbankindexe abgebrochen" #: fpdb.pyw:756 msgid "" @@ -2621,7 +2648,7 @@ msgstr "" #: fpdb.pyw:759 msgid "Fatal Error - Config File Missing" -msgstr "" +msgstr "Schwerer Fehler - Konfigurationsdatei nicht gefunden" #: fpdb.pyw:761 msgid "Please copy the config file from the docs folder to:" @@ -2642,7 +2669,6 @@ msgid "_Quit" msgstr "_Beenden" #: fpdb.pyw:827 -#, fuzzy msgid "L" msgstr "L" @@ -2688,31 +2714,31 @@ msgstr "" #: fpdb.pyw:834 msgid "A" -msgstr "" +msgstr "A" #: fpdb.pyw:834 msgid "_Auto Import and HUD" -msgstr "" +msgstr "_Autoimport und HUD" #: fpdb.pyw:835 msgid "H" -msgstr "" +msgstr "H" #: fpdb.pyw:835 msgid "_HUD Configurator" -msgstr "" +msgstr "_HUD-Konfigurator" #: fpdb.pyw:836 msgid "G" -msgstr "" +msgstr "G" #: fpdb.pyw:836 msgid "_Graphs" -msgstr "" +msgstr "_Graphen" #: fpdb.pyw:837 msgid "P" -msgstr "" +msgstr "P" #: fpdb.pyw:837 msgid "Ring _Player Stats (tabulated view, not on pgsql)" @@ -2720,7 +2746,7 @@ msgstr "" #: fpdb.pyw:838 msgid "T" -msgstr "" +msgstr "T" #: fpdb.pyw:838 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" @@ -2728,39 +2754,39 @@ msgstr "" #: fpdb.pyw:839 msgid "Tourney _Viewer" -msgstr "" +msgstr "Tourney-_Betrachter" #: fpdb.pyw:840 msgid "O" -msgstr "" +msgstr "O" #: fpdb.pyw:840 msgid "P_ositional Stats (tabulated view, not on sqlite)" -msgstr "" +msgstr "Statistiken nach Position (Tabelle, nicht auf sqlite)" #: fpdb.pyw:841 fpdb.pyw:1057 msgid "Session Stats" -msgstr "" +msgstr "Statistiken nach Sitzung" #: fpdb.pyw:842 msgid "_Database" -msgstr "" +msgstr "_Datenbank" #: fpdb.pyw:843 msgid "_Maintain Databases" -msgstr "" +msgstr "Datenbanken _Verwalten" #: fpdb.pyw:844 msgid "Create or Recreate _Tables" -msgstr "" +msgstr "_Tabellen erstellen oder neu erstellen" #: fpdb.pyw:845 msgid "Rebuild HUD Cache" -msgstr "" +msgstr "HUD-Cache neu erstellen" #: fpdb.pyw:846 msgid "Rebuild DB Indexes" -msgstr "" +msgstr "Datenbankindexe neu erstellen" #: fpdb.pyw:847 msgid "_Statistics" @@ -2768,23 +2794,23 @@ msgstr "_Statistiken" #: fpdb.pyw:848 msgid "Dump Database to Textfile (takes ALOT of time)" -msgstr "" +msgstr "Datenbank in eine Textdatei schreiben (dauert SEHR lange)" #: fpdb.pyw:849 msgid "_Help" -msgstr "" +msgstr "_Hilfe" #: fpdb.pyw:850 msgid "_Log Messages" -msgstr "" +msgstr "_Log-Dateien" #: fpdb.pyw:851 msgid "A_bout, License, Copying" -msgstr "" +msgstr "_Über, Lizenz, Kopieren" #: fpdb.pyw:869 msgid "There is an error in your config file\n" -msgstr "" +msgstr "Fehler in Ihrer Konfigurationsdatei\n" #: fpdb.pyw:870 msgid "" @@ -2792,6 +2818,9 @@ msgid "" "\n" "Error is: " msgstr "" +"\n" +"\n" +"Der Fehler ist:" #: fpdb.pyw:871 msgid "CONFIG FILE ERROR" diff --git a/pyfpdb/locale/fpdb-en_GB.po b/pyfpdb/locale/fpdb-en_GB.po index 350b9f5a..6776e979 100644 --- a/pyfpdb/locale/fpdb-en_GB.po +++ b/pyfpdb/locale/fpdb-en_GB.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-26 18:52+CEST\n" +"POT-Creation-Date: 2010-08-29 14:22+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -893,13 +893,13 @@ msgstr "" msgid "Log Viewer" msgstr "" -#: GuiGraphViewer.py:39 +#: GuiGraphViewer.py:56 msgid "" "Failed to load libs for graphing, graphing will not function. Please\n" " install numpy and matplotlib if you want to use graphs." msgstr "" -#: GuiGraphViewer.py:41 +#: GuiGraphViewer.py:58 msgid "" "This is of no consequence for other parts of the program, e.g. import \n" " and HUD are NOT affected by this problem." @@ -2394,7 +2394,7 @@ msgstr "" #: fpdb.pyw:55 msgid "" "\n" -"python 2.5 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" +"python 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" msgstr "" #: fpdb.pyw:56 fpdb.pyw:68 fpdb.pyw:90 @@ -2406,7 +2406,7 @@ msgid "We appear to be running in Windows, but the Windows Python Extensions are msgstr "" #: fpdb.pyw:89 -msgid "Unable to load PYGTK modules required for GUI. Please install PyCairo, PyGObject, and PyGTK from www.pygtk.org." +msgid "Unable to load PyGTK modules required for GUI. Please install PyCairo, PyGObject, and PyGTK from www.pygtk.org." msgstr "" #: fpdb.pyw:247 @@ -2506,7 +2506,7 @@ msgid "It is not currently possible to select \"empty\" or anything else to that msgstr "" #: fpdb.pyw:439 -msgid "To configure things like colouring you will still have to manually edit your HUD_config.xml." +msgid "To configure things like colouring you will still have to use the Preferences dialogue or manually edit your HUD_config.xml." msgstr "" #: fpdb.pyw:546 @@ -2519,7 +2519,7 @@ msgstr "" #: fpdb.pyw:548 msgid "" -" they will be deleted.\n" +" they will be deleted and you will have to re-import your histories.\n" "This may take a while." msgstr "" diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index 651006ea..bbf68785 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-26 18:52+CEST\n" +"POT-Creation-Date: 2010-08-29 14:22+CEST\n" "PO-Revision-Date: 2010-08-28 12:32+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -854,8 +854,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" -"s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " +"%s másodperc alatt - %.0f/mp" #: GuiDatabase.py:106 GuiLogView.py:96 msgid "Refresh" @@ -963,7 +963,7 @@ msgstr "Napló böngésző (teszt)" msgid "Log Viewer" msgstr "Napló böngésző" -#: GuiGraphViewer.py:39 +#: GuiGraphViewer.py:56 msgid "" "Failed to load libs for graphing, graphing will not function. Please\n" " install numpy and matplotlib if you want to use graphs." @@ -971,7 +971,7 @@ msgstr "" "Nem sikerült a grafikonokhoz szükséges libraryl betöltése.\n" "A grafikonokhoz telepítsd a numpy-t és a matplotlib-et." -#: GuiGraphViewer.py:41 +#: GuiGraphViewer.py:58 msgid "" "This is of no consequence for other parts of the program, e.g. import \n" " and HUD are NOT affected by this problem." @@ -1306,11 +1306,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2527,9 +2527,10 @@ msgid " - press return to continue\n" msgstr " - nyomj ENTER-t a folytatáshoz\n" #: fpdb.pyw:55 +#, fuzzy msgid "" "\n" -"python 2.5 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" +"python 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" msgstr "" "\n" "Python 2.5 nincs meg, kérlek telepítsd a Python 2.5-öt, 2.6-ot, vagy 2.7-et " @@ -2550,8 +2551,9 @@ msgstr "" "http://sourceforge.net/projects/pywin32/" #: fpdb.pyw:89 +#, fuzzy msgid "" -"Unable to load PYGTK modules required for GUI. Please install PyCairo, " +"Unable to load PyGTK modules required for GUI. Please install PyCairo, " "PyGObject, and PyGTK from www.pygtk.org." msgstr "" "Nem sikerült a GUI által igényelt PyGTK modulok betöltése. Kérlek telepítsd " @@ -2678,9 +2680,10 @@ msgid "" msgstr "Jelenleg nem lehetséges olyat választani, hogy \"üres\" vagy hasonló." #: fpdb.pyw:439 +#, fuzzy msgid "" -"To configure things like colouring you will still have to manually edit your " -"HUD_config.xml." +"To configure things like colouring you will still have to use the " +"Preferences dialogue or manually edit your HUD_config.xml." msgstr "" "Bizonyos dolgok (pl. színezés) beállításához egyelőre még kézzel kell " "szerkesztened a HUD_config.xml fájlt." @@ -2698,8 +2701,9 @@ msgstr "" "már vannak táblák az adatbázisban (" #: fpdb.pyw:548 +#, fuzzy msgid "" -" they will be deleted.\n" +" they will be deleted and you will have to re-import your histories.\n" "This may take a while." msgstr "" "), akkor azok törölve lesznek.\n" @@ -3136,8 +3140,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" -"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " +"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1078 msgid "Help" From 693dfb4e19a9faf53b20ea498e35b94c69a865e8 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 14:25:44 +0200 Subject: [PATCH 009/217] update GUI version string to 0.20.906 plus git --- pyfpdb/fpdb.pyw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index 024d56ef..cefc87ac 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -129,7 +129,7 @@ import Configuration import Exceptions import Stats -VERSION = "0.20.906" +VERSION = "0.20.906 plus git" class fpdb: From a81dd66f227cd52f2669ca175c78977abd8dd1f8 Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Sun, 29 Aug 2010 14:26:38 +0200 Subject: [PATCH 010/217] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index bbf68785..5d4b6e45 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-29 14:22+CEST\n" -"PO-Revision-Date: 2010-08-28 12:32+0200\n" +"PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -854,8 +854,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:106 GuiLogView.py:96 msgid "Refresh" @@ -1306,11 +1306,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2527,14 +2527,13 @@ msgid " - press return to continue\n" msgstr " - nyomj ENTER-t a folytatáshoz\n" #: fpdb.pyw:55 -#, fuzzy msgid "" "\n" "python 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" msgstr "" "\n" -"Python 2.5 nincs meg, kérlek telepítsd a Python 2.5-öt, 2.6-ot, vagy 2.7-et " -"az fpdb számára\n" +"Python 2.5-2.7 nem található, kérlek telepítsd a Python 2.5-öt, 2.6-ot, vagy " +"2.7-et az fpdb számára\n" #: fpdb.pyw:56 fpdb.pyw:68 fpdb.pyw:90 msgid "Press ENTER to continue." @@ -2551,7 +2550,6 @@ msgstr "" "http://sourceforge.net/projects/pywin32/" #: fpdb.pyw:89 -#, fuzzy msgid "" "Unable to load PyGTK modules required for GUI. Please install PyCairo, " "PyGObject, and PyGTK from www.pygtk.org." @@ -2680,13 +2678,13 @@ msgid "" msgstr "Jelenleg nem lehetséges olyat választani, hogy \"üres\" vagy hasonló." #: fpdb.pyw:439 -#, fuzzy msgid "" "To configure things like colouring you will still have to use the " "Preferences dialogue or manually edit your HUD_config.xml." msgstr "" -"Bizonyos dolgok (pl. színezés) beállításához egyelőre még kézzel kell " -"szerkesztened a HUD_config.xml fájlt." +"Bizonyos dolgok (pl. színezés) beállításához egyelőre még a Beállítások " +"menüpontot kell használnod, vagy kézzel kell szerkesztened a HUD_config.xml " +"fájlt." #: fpdb.pyw:546 msgid "Confirm deleting and recreating tables" @@ -2701,12 +2699,12 @@ msgstr "" "már vannak táblák az adatbázisban (" #: fpdb.pyw:548 -#, fuzzy msgid "" " they will be deleted and you will have to re-import your histories.\n" "This may take a while." msgstr "" -"), akkor azok törölve lesznek.\n" +"), akkor azok törölve lesznek, és újra kell importálnod a " +"leosztástörténeteket.\n" "Ja, és ez eltarthat egy darabig:)" #: fpdb.pyw:573 @@ -3140,8 +3138,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1078 msgid "Help" From 641b863cbf80e588a36df05c98ee95124c87fb0b Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 14:37:29 +0200 Subject: [PATCH 011/217] l10n: update mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 1048 -> 7463 bytes pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 64382 -> 64610 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index 291c02d07d070c90c03e5dbad86cca418d8d7d00..eed07f34f8ceb70e4deaedb2e68839d2b3a7dc43 100644 GIT binary patch literal 7463 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 delta 390 zcmZ2(HG`x6o)F7a1|Z-AVi_Rr0dbJPA0V3xi2p)q4n_!H7)r|lX02*e-@y_g|%D3nfs z(%C>7sF9%zNP`^R4WvO9&jQjQikM zay*_4Hp%&UB}Mr;cEOVwIYfB^ic;g#Qj1dal2eN(@8Ppy@lDLkn=Hq#F}a4{iOo#G z(89`e@)3R|c2f}3#BlRlehtRS=|b|TM%9am@x{Al<`tKu=H!&-rKjdic9F5=@<=Q# PD9KIDJG^J|dKn7Ore-*Vr??#SO4r4F^ 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 U_^^drZe@CB6_-4`^=i=n00z60=Kufz delta 11801 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 Date: Sun, 29 Aug 2010 15:19:04 +0200 Subject: [PATCH 012/217] gentoo: add combined ebuild --- packaging/gentoo/fpdb-all.ebuild | 90 ++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 packaging/gentoo/fpdb-all.ebuild diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild new file mode 100644 index 00000000..49e20d50 --- /dev/null +++ b/packaging/gentoo/fpdb-all.ebuild @@ -0,0 +1,90 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="2" + +inherit eutils +inherit games +if [[ ${PV} = 9999* ]]; then + inherit git +fi + +NEED_PYTHON=2.6 + +DESCRIPTION="A free/open source tracker/HUD for use with online poker" +HOMEPAGE="http://fpdb.wiki.sourceforge.net/" +if [[ ${PV} = 9999* ]]; then + EGIT_REPO_URI="git://git.assembla.com/fpdb.git" + KEYWORDS="" + IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +elif [[ ${PV} = 0.20.90* ]]; then + SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" + KEYWORDS="~amd64 ~x86" + IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +else; then + SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" + KEYWORDS="~amd64 ~x86" + IUSE="graph mysql postgres sqlite" +fi + +LICENSE="AGPL-3" +SLOT="0" + +RDEPEND=" + mysql? ( virtual/mysql + dev-python/mysql-python ) + postgres? ( dev-db/postgresql-server + dev-python/psycopg ) + sqlite? ( dev-lang/python[sqlite] + dev-python/numpy ) + >=x11-libs/gtk+-2.10 + dev-python/pygtk + graph? ( dev-python/numpy + dev-python/matplotlib[gtk] ) + dev-python/python-xlib + dev-python/pytz" +DEPEND="${RDEPEND}" + +if [[ ${PV} = 9999* ]]; then + src_unpack() { + git_src_unpack + } +fi + +src_install() { + insinto "${GAMES_DATADIR}"/${PN} + doins -r gfx + doins -r pyfpdb + + if [[ ${PV} >= 0.20.901 ]]; then + if use linguas_hu; then + dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo + fi + + if use linguas_it; then + dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + fi + fi + + doins readme.txt + + exeinto "${GAMES_DATADIR}"/${PN} + doexe run_fpdb.py + + dodir "${GAMES_BINDIR}" + dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} + + newicon gfx/fpdb-icon.png ${PN}.png + make_desktop_entry ${PN} + + chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + prepgamesdirs +} + +pkg_postinst() { + games_pkg_postinst + elog "Note that if you really want to use mysql or postgresql you will have to create" + elog "the database and user yourself and enter it into the fpdb config." + elog "You can find the instructions on the project's website." +} From c6a9baa31f1fecbfac3404ac039124984c160d43 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 15:37:26 +0200 Subject: [PATCH 013/217] gentoo: fix bash errors and repoman complaints --- packaging/gentoo/fpdb-all.ebuild | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild index 49e20d50..36a0823e 100644 --- a/packaging/gentoo/fpdb-all.ebuild +++ b/packaging/gentoo/fpdb-all.ebuild @@ -7,25 +7,25 @@ EAPI="2" inherit eutils inherit games if [[ ${PV} = 9999* ]]; then - inherit git + inherit git fi NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" +IUSE="graph mysql postgres sqlite" if [[ ${PV} = 9999* ]]; then EGIT_REPO_URI="git://git.assembla.com/fpdb.git" KEYWORDS="" - IUSE="graph mysql postgres sqlite linguas_hu linguas_it" + IUSE="${IUSE} linguas_hu linguas_it" elif [[ ${PV} = 0.20.90* ]]; then SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="graph mysql postgres sqlite linguas_hu linguas_it" -else; then + IUSE="${IUSE} linguas_hu linguas_it" +else SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="graph mysql postgres sqlite" fi LICENSE="AGPL-3" @@ -57,7 +57,7 @@ src_install() { doins -r gfx doins -r pyfpdb - if [[ ${PV} >= 0.20.901 ]]; then + if [[ ${PV} > 0.20.900 ]]; then if use linguas_hu; then dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo fi From 909b47cdbb5588ecb7a3c497c1d60eb38d7911dd Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Sun, 29 Aug 2010 17:03:49 +0200 Subject: [PATCH 014/217] ebuild: added LINGUAS_DE, removed LINGUAS_IT, cleaned up checks --- packaging/gentoo/fpdb-all.ebuild | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild index 36a0823e..65b5e9ec 100644 --- a/packaging/gentoo/fpdb-all.ebuild +++ b/packaging/gentoo/fpdb-all.ebuild @@ -18,11 +18,15 @@ IUSE="graph mysql postgres sqlite" if [[ ${PV} = 9999* ]]; then EGIT_REPO_URI="git://git.assembla.com/fpdb.git" KEYWORDS="" - IUSE="${IUSE} linguas_hu linguas_it" + IUSE="${IUSE} linguas_de linguas_hu" elif [[ ${PV} = 0.20.90* ]]; then SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="${IUSE} linguas_hu linguas_it" + if [[ ${PV} > 0.20.906 ]]; then + IUSE="${IUSE} linguas_de linguas_hu" + elif [[ ${PV} > 0.20.904 ]]; then + IUSE="${IUSE} linguas_hu" + fi else SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" @@ -57,14 +61,17 @@ src_install() { doins -r gfx doins -r pyfpdb - if [[ ${PV} > 0.20.900 ]]; then + if [[ ${PV} > 0.20.904 ]]; then if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + domo pyfpdb/locale/*.mo - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + elif [[ ${PV} > 0.20.906 ]]; then + if use linguas_de; then + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo fi + domo pyfpdb/locale/*.mo fi doins readme.txt From 8a4e33c14c7839a22be0295a575ae41f5bf69821 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:37:21 +0200 Subject: [PATCH 015/217] gentoo: back to split ebuilds as recommended by sunrise on IRC --- packaging/gentoo/current_stable.ebuild | 2 +- packaging/gentoo/current_testing.ebuild | 12 ++- packaging/gentoo/dev-readme.txt | 5 -- packaging/gentoo/fpdb-9999.ebuild | 17 +++-- packaging/gentoo/fpdb-all.ebuild | 97 ------------------------- 5 files changed, 15 insertions(+), 118 deletions(-) delete mode 100644 packaging/gentoo/fpdb-all.ebuild diff --git a/packaging/gentoo/current_stable.ebuild b/packaging/gentoo/current_stable.ebuild index edc70791..23e9d147 100644 --- a/packaging/gentoo/current_stable.ebuild +++ b/packaging/gentoo/current_stable.ebuild @@ -7,7 +7,7 @@ EAPI="2" inherit eutils inherit games -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index 9741f2b8..db7d9bb6 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -7,7 +7,7 @@ EAPI="2" inherit eutils inherit games -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -18,7 +18,7 @@ SLOT="0" KEYWORDS="~amd64 ~x86" #note: this should work on other architectures too, please send me your experiences -IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +IUSE="graph mysql postgres sqlite linguas_hu" RDEPEND=" mysql? ( virtual/mysql dev-python/mysql-python ) @@ -40,12 +40,10 @@ src_install() { doins -r pyfpdb if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo - fi - - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/dev-readme.txt b/packaging/gentoo/dev-readme.txt index b81776fc..0effdf1b 100644 --- a/packaging/gentoo/dev-readme.txt +++ b/packaging/gentoo/dev-readme.txt @@ -1,10 +1,5 @@ Repoman currently gives the following errors for our ebuilds: ebuild.allmasked: This error can be ignored, as all our packages are supposed to be masked - ebuild.badheader 3 - games-util/fpdb/fpdb-0.20.1.ebuild: Malformed CVS Header on line: 3 - games-util/fpdb/fpdb-0.20.904.ebuild: Malformed CVS Header on line: 3 - games-util/fpdb/fpdb-9999.ebuild: Malformed CVS Header on line: 3 - not sure what the correct header is for a sunrise ebuild so leaving as-is for now Useful Links: http://overlays.gentoo.org/proj/sunrise/wiki/SunriseFaq diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 683b3f45..2ed31832 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -8,7 +8,7 @@ inherit eutils inherit games inherit git -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -17,9 +17,8 @@ EGIT_REPO_URI="git://git.assembla.com/fpdb.git" LICENSE="AGPL-3" SLOT="0" KEYWORDS="" -#note: this should work on other architectures too, please send me your experiences -IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +IUSE="graph mysql postgres sqlite linguas_de linguas_hu" RDEPEND=" mysql? ( virtual/mysql dev-python/mysql-python ) @@ -44,13 +43,15 @@ src_install() { doins -r gfx doins -r pyfpdb + if use linguas_de; then + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo + fi + if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo - fi - - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild deleted file mode 100644 index 65b5e9ec..00000000 --- a/packaging/gentoo/fpdb-all.ebuild +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright 1999-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI="2" - -inherit eutils -inherit games -if [[ ${PV} = 9999* ]]; then - inherit git -fi - -NEED_PYTHON=2.6 - -DESCRIPTION="A free/open source tracker/HUD for use with online poker" -HOMEPAGE="http://fpdb.wiki.sourceforge.net/" -IUSE="graph mysql postgres sqlite" -if [[ ${PV} = 9999* ]]; then - EGIT_REPO_URI="git://git.assembla.com/fpdb.git" - KEYWORDS="" - IUSE="${IUSE} linguas_de linguas_hu" -elif [[ ${PV} = 0.20.90* ]]; then - SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" - KEYWORDS="~amd64 ~x86" - if [[ ${PV} > 0.20.906 ]]; then - IUSE="${IUSE} linguas_de linguas_hu" - elif [[ ${PV} > 0.20.904 ]]; then - IUSE="${IUSE} linguas_hu" - fi -else - SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" - KEYWORDS="~amd64 ~x86" -fi - -LICENSE="AGPL-3" -SLOT="0" - -RDEPEND=" - mysql? ( virtual/mysql - dev-python/mysql-python ) - postgres? ( dev-db/postgresql-server - dev-python/psycopg ) - sqlite? ( dev-lang/python[sqlite] - dev-python/numpy ) - >=x11-libs/gtk+-2.10 - dev-python/pygtk - graph? ( dev-python/numpy - dev-python/matplotlib[gtk] ) - dev-python/python-xlib - dev-python/pytz" -DEPEND="${RDEPEND}" - -if [[ ${PV} = 9999* ]]; then - src_unpack() { - git_src_unpack - } -fi - -src_install() { - insinto "${GAMES_DATADIR}"/${PN} - doins -r gfx - doins -r pyfpdb - - if [[ ${PV} > 0.20.904 ]]; then - if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo - fi - domo pyfpdb/locale/*.mo - - elif [[ ${PV} > 0.20.906 ]]; then - if use linguas_de; then - msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo - fi - domo pyfpdb/locale/*.mo - fi - - doins readme.txt - - exeinto "${GAMES_DATADIR}"/${PN} - doexe run_fpdb.py - - dodir "${GAMES_BINDIR}" - dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} - - newicon gfx/fpdb-icon.png ${PN}.png - make_desktop_entry ${PN} - - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw - prepgamesdirs -} - -pkg_postinst() { - games_pkg_postinst - elog "Note that if you really want to use mysql or postgresql you will have to create" - elog "the database and user yourself and enter it into the fpdb config." - elog "You can find the instructions on the project's website." -} From a9e06b9cf40fd134f11611c27a9e4131a645312b Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:43:52 +0200 Subject: [PATCH 016/217] gentoo: update changelog --- packaging/gentoo/ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packaging/gentoo/ChangeLog b/packaging/gentoo/ChangeLog index f72a9a13..57aaabe6 100644 --- a/packaging/gentoo/ChangeLog +++ b/packaging/gentoo/ChangeLog @@ -2,6 +2,19 @@ # Distributed under the terms of the GNU General Public License v2 # created by Steffen Schaumburg, steffen@schaumburger.info + 29 Aug 2010; Erki Ferenc + fpdb-0.20.906.ebuild, fpdb-9999.ebuild: + improve l10n handling + + 29 Aug 2010; Steffen Schaumburg + fpdb-0.20.1.ebuild, fpdb-0.20.906.ebuild, fpdb-9999.ebuild: + change required python version to 2.6 + +*fpdb-0.20.906 (29 Aug 2010) + 29 Aug 2010; Steffen Schaumburg + +fpdb-0.20.906.ebuild -fpdb-0.20.904.ebuild: + Bump version + *fpdb-0.20.1 fpdb-0.20.904 fpdb-9999 (17 Aug 2010) 17 Aug 2010; Steffen Schaumburg From 71bda38c5e6106361acd03fdefcfef7626a191b7 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:51:05 +0200 Subject: [PATCH 017/217] gentoo: update manifest, removing trailing whitespaces --- packaging/gentoo/Manifest | 10 +++++----- packaging/gentoo/current_testing.ebuild | 6 +++--- packaging/gentoo/fpdb-9999.ebuild | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packaging/gentoo/Manifest b/packaging/gentoo/Manifest index 2b12bcf1..1096a2e6 100644 --- a/packaging/gentoo/Manifest +++ b/packaging/gentoo/Manifest @@ -1,7 +1,7 @@ DIST fpdb-0.20.1.tar.bz2 662807 RMD160 b5f22a684c605ddbba7d2154005a822b02a19490 SHA1 e4cc40de5849d3ae33a680d917b340ab37c6448b SHA256 46eff0625f300c070ce88c519ae6019f6e1c98a7725733c5e16b50a058247fe3 -DIST fpdb-0.20.904.tar.bz2 632871 RMD160 6af83a9b30e8b3f394b011a4dc92937f130b9e15 SHA1 083c51f1627f901e24801bf6abebf1d07646bd89 SHA256 5e72055fe7ebb0c6048282f8edc972ee01be21063d6f8071abef22111f3e82f9 -EBUILD fpdb-0.20.1.ebuild 1591 RMD160 56ccbca72353e56718a927178e58d148177f5846 SHA1 770df692b29b7314d70703010e1f6afac623c3f3 SHA256 e3f434df58d98760a118458166f9fdfcf3612712c78c704f089f6e8ec72bd224 -EBUILD fpdb-0.20.904.ebuild 1595 RMD160 b5cbcdb8d2984b149c833db8b6aee362168e9c7d SHA1 7151fd3cef087c38060b44adb622843a84209f33 SHA256 41c6ed71aa0ff727d670c94cc72cf595bcd038f601121e51222532df727a6d01 -EBUILD fpdb-9999.ebuild 1618 RMD160 843d309bbc2ccdd95dbb4b0eb08571d8e16d06ad SHA1 b1ebdbe0e40bd6c0d4ec417dd2b8a135884547a6 SHA256 72205c1f94bcf2c3f310d396928e357fabaee4861773044c1dac71f98f6596bf -MISC ChangeLog 395 RMD160 b195ccf198011356ca79b16071093c4d92e5927a SHA1 9aa56e5dc9c5d03b62fb60bc81069f3440b1f606 SHA256 b7ba8c180da0e6a405d939c4485f9c8e52fdcafb04207ef6de217a807015bd03 +DIST fpdb-0.20.906.tar.bz2 702558 RMD160 bc5d01ef4899502aea33f286ac4274ef7ef498ef SHA1 9791680d53de1b276dc0297ac43a0e11758d3e19 SHA256 9ae706d5e9c2a2ee031d2b222ba46e088993cc892fc08b5276bbfd5e44a0436b +EBUILD fpdb-0.20.1.ebuild 1508 RMD160 7585cd1de73172649e182782d427a476afed4036 SHA1 3c92d6dbb868b8b4c26b75539771641087742761 SHA256 9a7d302016e4c4d6cc18af14514bd5112d18aeb7dc6390a3413e3e4cc71da6bd +EBUILD fpdb-0.20.906.ebuild 1643 RMD160 ed44ee49d715458b54edbbe054eb5c9775c6ac7a SHA1 ebd8ea291ace0671d4eb264754dfb0616373a51a SHA256 a9bdad768a0ab5ef065f3e6e2e1bd89dded6e0d3b64c4771944c4aae7d163efd +EBUILD fpdb-9999.ebuild 1685 RMD160 f06457ead33dca99c0acf830f26bbf2f8ca12cd1 SHA1 70444fa4a88439955472407ec0b072970993631a SHA256 2df59120b376bb4e5966f8a719bc881c756b3210b7a30d394ee1753efbfd706e +MISC ChangeLog 831 RMD160 efd32886d09b0750e680716030c0034c3a280a25 SHA1 82f3eda3cd83cbba3e45d4b75593e74f3dd4f568 SHA256 d74efef05cf51ef3840ef043218c8a30c1bcccfa9d9d2e4ca1b7198ed1c91f29 MISC metadata.xml 550 RMD160 a6fa8799f644c0882f832a12cc9e6a0f4f09ae7f SHA1 3a40c442cadb1f532e0299040c2da79e9721dd4f SHA256 b5a1c538de3786446a87479b1023cdb4f084085feb7290959619739969ce7d3b diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index db7d9bb6..4d95b85b 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -40,10 +40,10 @@ src_install() { doins -r pyfpdb if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi - - domo pyfpdb/locale/*.mo + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 2ed31832..480d8158 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -44,14 +44,14 @@ src_install() { doins -r pyfpdb if use linguas_de; then - msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo fi - + if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi - - domo pyfpdb/locale/*.mo + + domo pyfpdb/locale/*.mo doins readme.txt From 2ff55401ca5ba41c98905162e3b2e318bc476778 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 18:25:41 +0200 Subject: [PATCH 018/217] gentoo: update ebuilds with sunrise suggestions (only testing done fully) --- packaging/gentoo/current_stable.ebuild | 7 ++----- packaging/gentoo/current_testing.ebuild | 25 +++++++++++-------------- packaging/gentoo/fpdb-9999.ebuild | 8 ++------ 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/packaging/gentoo/current_stable.ebuild b/packaging/gentoo/current_stable.ebuild index 23e9d147..666c7fee 100644 --- a/packaging/gentoo/current_stable.ebuild +++ b/packaging/gentoo/current_stable.ebuild @@ -4,10 +4,7 @@ EAPI="2" -inherit eutils -inherit games - -NEED_PYTHON=2.6 +inherit eutils games DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -49,7 +46,7 @@ src_install() { newicon gfx/fpdb-icon.png ${PN}.png make_desktop_entry ${PN} - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index 4d95b85b..525200fb 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -4,10 +4,7 @@ EAPI="2" -inherit eutils -inherit games - -NEED_PYTHON=2.6 +inherit eutils games DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -36,27 +33,27 @@ DEPEND="${RDEPEND}" src_install() { insinto "${GAMES_DATADIR}"/${PN} - doins -r gfx - doins -r pyfpdb + doins -r gfx || die "failed to install gfx directory" + doins -r pyfpdb || die "failed to install pyfpdb directory" if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo || die "failed to create hungarian mo file" fi - domo pyfpdb/locale/*.mo + domo pyfpdb/locale/*.mo || die "failed to install mo files" - doins readme.txt + doins readme.txt || die "failed to install readme.txt file" exeinto "${GAMES_DATADIR}"/${PN} - doexe run_fpdb.py + doexe run_fpdb.py || die "failed to install executable run_fpdb.py" dodir "${GAMES_BINDIR}" - dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} + dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} || die "failed to create symlink for starting fpdb" - newicon gfx/fpdb-icon.png ${PN}.png - make_desktop_entry ${PN} + newicon gfx/fpdb-icon.png ${PN}.png || die "failed to install fpdb icon" + make_desktop_entry ${PN} || die "failed to create desktop entry" - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 480d8158..a2469183 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -4,11 +4,7 @@ EAPI="2" -inherit eutils -inherit games -inherit git - -NEED_PYTHON=2.6 +inherit eutils games git DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -64,7 +60,7 @@ src_install() { newicon gfx/fpdb-icon.png ${PN}.png make_desktop_entry ${PN} - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } From 168b1146463978d8afb2fe9f264bc4e51dd775b1 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 19:12:48 +0200 Subject: [PATCH 019/217] l10n: some minor string changes --- pyfpdb/GuiAutoImport.py | 20 ++++++++++---------- pyfpdb/fpdb.pyw | 19 +++++++++---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py index c386f475..8170fd9f 100755 --- a/pyfpdb/GuiAutoImport.py +++ b/pyfpdb/GuiAutoImport.py @@ -113,7 +113,7 @@ class GuiAutoImport (threading.Thread): hbox.pack_start(lbl1, expand=True, fill=False) self.doAutoImportBool = False - self.startButton = gtk.ToggleButton(_(" Start _Autoimport ")) + self.startButton = gtk.ToggleButton(_(" Start _Auto Import ")) self.startButton.connect("clicked", self.startClicked, "start clicked") hbox.pack_start(self.startButton, expand=False, fill=False) @@ -132,7 +132,7 @@ class GuiAutoImport (threading.Thread): scrolledwindow.add(self.textview) self.mainVBox.show_all() - self.addText(_("AutoImport Ready.")) + self.addText(_("Auto Import Ready.")) def addText(self, text): end_iter = self.textbuffer.get_end_iter() @@ -145,7 +145,7 @@ class GuiAutoImport (threading.Thread): """runs when user clicks one of the browse buttons in the auto import tab""" current_path=data[1].get_text() - dia_chooser = gtk.FileChooserDialog(title=_("Please choose the path that you want to auto import"), + dia_chooser = gtk.FileChooserDialog(title=_("Please choose the path that you want to Auto Import"), action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) #dia_chooser.set_current_folder(pathname) @@ -179,9 +179,9 @@ class GuiAutoImport (threading.Thread): def reset_startbutton(self): if self.pipe_to_hud is not None: - self.startButton.set_label(_(u' Stop _Autoimport ')) + self.startButton.set_label(_(u' Stop _Auto Import ')) else: - self.startButton.set_label(_(u' Start _Autoimport ')) + self.startButton.set_label(_(u' Start _Auto Import ')) return False @@ -206,7 +206,7 @@ class GuiAutoImport (threading.Thread): if self.settings['global_lock'].acquire(False): # returns false immediately if lock not acquired self.addText(_("\nGlobal lock taken ... Auto Import Started.\n")) self.doAutoImportBool = True - widget.set_label(_(u' _Stop Autoimport ')) + widget.set_label(_(u' _Stop Auto Import ')) if self.pipe_to_hud is None: if Configuration.FROZEN: path = Configuration.EXEC_PATH @@ -246,19 +246,19 @@ class GuiAutoImport (threading.Thread): self.importtimer = gobject.timeout_add(interval * 1000, self.do_import) else: - self.addText(_("\nauto-import aborted - global lock not available")) + self.addText(_("\nAuto Import aborted - global lock not available")) else: # toggled off gobject.source_remove(self.importtimer) self.settings['global_lock'].release() self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer - self.addText(_("\nStopping autoimport - global lock released.")) + self.addText(_("\nStopping Auto Import - global lock released.")) if self.pipe_to_hud.poll() is not None: - self.addText(_("\n * Stop Autoimport: HUD already terminated")) + self.addText(_("\n * Stop Auto Import: HUD already terminated")) else: #print >>self.pipe_to_hud.stdin, "\n" self.pipe_to_hud.communicate('\n') # waits for process to terminate self.pipe_to_hud = None - self.startButton.set_label(_(u' Start _Autoimport ')) + self.startButton.set_label(_(u' Start _Auto Import ')) #end def GuiAutoImport.startClicked diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index cefc87ac..d6cf4015 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -876,8 +876,7 @@ class fpdb: if self.config.example_copy: self.info_box(_("Config file") , _("has been created at:\n%s.\n") % self.config.file - + _("Edit your screen_name and hand history path in the supported_sites ") - + _("section of the Preferences window (Main menu) before trying to import hands.")) + + _("Edit your screen_name and hand history path in the supported_sites section of the Preferences window (Main menu) before trying to import hands.")) self.settings = {} self.settings['global_lock'] = self.lock if (os.sep=="/"): @@ -906,10 +905,10 @@ class fpdb: err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - ") \ + _("Please check that the MySQL service has been started") except Exceptions.FpdbPostgresqlAccessDenied: - err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") + err_msg = _("PostgreSQL Server reports: Access denied. Are your permissions set correctly?") except Exceptions.FpdbPostgresqlNoDatabase: - err_msg = _("Postgres client reports: Unable to connect - ") \ - + _("Please check that the Postgres service has been started") + err_msg = _("PostgreSQL client reports: Unable to connect - ") \ + + _("Please check that the PostgreSQL service has been started") if err_msg is not None: self.db = None self.warning_box(err_msg) @@ -966,10 +965,10 @@ class fpdb: def obtain_global_lock(self, source): ret = self.lock.acquire(source=source) # will return false if lock is already held if ret: - print _("\nGlobal lock taken by"), source + print (_("\nGlobal lock taken by %s") % source) self.lockTakenBy=source else: - print _("\nFailed to get global lock, it is currently held by"), source + print (_("\nFailed to get global lock, it is currently held by %s") % source) return ret # need to release it later: # self.lock.release() @@ -1134,8 +1133,8 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an if not options.errorsToConsole: fileName = os.path.join(self.config.dir_log, 'fpdb-errors.txt') - print _("\nNote: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in:\n") \ - + self.config.dir_log + _("\nAny major error will be reported there _only_.\n") + print (_("\nNote: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in: %s") % self.config.dir_log) \ + + _("\nAny major error will be reported there _only_.\n") errorFile = open(fileName, 'w', 0) sys.stderr = errorFile @@ -1239,7 +1238,7 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an hhdir = hhbase if not os.path.isdir(hhdir): diapath = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format="Setup hh dir") - diastring = _("WARNING: Unable to find output hh directory %s\n\n Press YES to create this directory, or NO to select a new one.") % hhdir + diastring = _("WARNING: Unable to find output hand history directory %s\n\n Press YES to create this directory, or NO to select a new one.") % hhdir diapath.format_secondary_text(diastring) response = diapath.run() diapath.destroy() From 14ea4714b9c81b1d7b0c78ad2fc4645e26e07293 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 19:17:13 +0200 Subject: [PATCH 020/217] l10n: rename template po file to .pot, merge scripts --- pyfpdb/locale/create-mo-files.sh | 4 ---- pyfpdb/locale/create-po-file.sh | 4 ---- pyfpdb/locale/{fpdb-en_GB.po => fpdb-en_GB.pot} | 0 pyfpdb/locale/localise.sh | 14 ++++++++++++++ pyfpdb/locale/update-po-files.sh | 3 --- 5 files changed, 14 insertions(+), 11 deletions(-) delete mode 100755 pyfpdb/locale/create-mo-files.sh delete mode 100755 pyfpdb/locale/create-po-file.sh rename pyfpdb/locale/{fpdb-en_GB.po => fpdb-en_GB.pot} (100%) create mode 100755 pyfpdb/locale/localise.sh delete mode 100755 pyfpdb/locale/update-po-files.sh diff --git a/pyfpdb/locale/create-mo-files.sh b/pyfpdb/locale/create-mo-files.sh deleted file mode 100755 index 5df25bcb..00000000 --- a/pyfpdb/locale/create-mo-files.sh +++ /dev/null @@ -1,4 +0,0 @@ -cd .. -python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po -python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/de/LC_MESSAGES/fpdb.mo locale/fpdb-de_DE.po - diff --git a/pyfpdb/locale/create-po-file.sh b/pyfpdb/locale/create-po-file.sh deleted file mode 100755 index 49adc81f..00000000 --- a/pyfpdb/locale/create-po-file.sh +++ /dev/null @@ -1,4 +0,0 @@ -cd .. -rm *.pyc -python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.po *.py* - diff --git a/pyfpdb/locale/fpdb-en_GB.po b/pyfpdb/locale/fpdb-en_GB.pot similarity index 100% rename from pyfpdb/locale/fpdb-en_GB.po rename to pyfpdb/locale/fpdb-en_GB.pot diff --git a/pyfpdb/locale/localise.sh b/pyfpdb/locale/localise.sh new file mode 100755 index 00000000..89fba06f --- /dev/null +++ b/pyfpdb/locale/localise.sh @@ -0,0 +1,14 @@ +cd .. +rm *.pyc + +echo "creating template po file" +python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.pot *.py* + +echo "merging template with existing translations" +msgmerge --update locale/fpdb-hu_HU.po locale/fpdb-en_GB.pot +msgmerge --update locale/fpdb-de_DE.po locale/fpdb-en_GB.pot + +echo "compiling mo files" +python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po +python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/de/LC_MESSAGES/fpdb.mo locale/fpdb-de_DE.po + diff --git a/pyfpdb/locale/update-po-files.sh b/pyfpdb/locale/update-po-files.sh deleted file mode 100755 index f39b143d..00000000 --- a/pyfpdb/locale/update-po-files.sh +++ /dev/null @@ -1,3 +0,0 @@ -msgmerge --update fpdb-hu_HU.po fpdb-en_GB.po -msgmerge --update fpdb-de_DE.po fpdb-en_GB.po - From f27396ea12def4620870539f745ad131ad84db2c Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 29 Aug 2010 20:18:01 +0300 Subject: [PATCH 021/217] Generalise .po file updates This should catch all future translations too --- pyfpdb/locale/update-po-files.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pyfpdb/locale/update-po-files.sh b/pyfpdb/locale/update-po-files.sh index f39b143d..0b6956e6 100755 --- a/pyfpdb/locale/update-po-files.sh +++ b/pyfpdb/locale/update-po-files.sh @@ -1,3 +1,12 @@ -msgmerge --update fpdb-hu_HU.po fpdb-en_GB.po -msgmerge --update fpdb-de_DE.po fpdb-en_GB.po +#!/bin/sh + +# Our master file +REFERENCE_PO=fpdb-en_GB.po + +# Update all .po files +for po in *.po; do + if [ ${po} != ${REFERENCE_PO} ]; then + msgmerge --update ${po} ${REFERENCE_PO} + fi +done From 3990b40e3db7023a6c1f027ae19fd527165de343 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:35:16 +0200 Subject: [PATCH 022/217] Some string changes, mostly consistency to make translation easier --- pyfpdb/Filters.py | 6 +++--- pyfpdb/GuiBulkImport.py | 2 +- pyfpdb/GuiDatabase.py | 12 +++++++----- pyfpdb/fpdb.pyw | 5 +++-- pyfpdb/fpdb_import.py | 8 ++++---- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pyfpdb/Filters.py b/pyfpdb/Filters.py index 4bbc6057..136c0ab6 100644 --- a/pyfpdb/Filters.py +++ b/pyfpdb/Filters.py @@ -63,7 +63,7 @@ class Filters(threading.Thread): ,'seatsbetween':_('Between:'), 'seatsand':_('And:'), 'seatsshow':_('Show Number of _Players') ,'playerstitle':_('Hero:'), 'sitestitle':_('Sites:'), 'gamestitle':_('Games:') ,'limitstitle':_('Limits:'), 'seatstitle':_('Number of Players:') - ,'groupstitle':_('Grouping:'), 'posnshow':_('Show Position Stats:') + ,'groupstitle':_('Grouping:'), 'posnshow':_('Show Position Stats') ,'datestitle':_('Date:') ,'groupsall':_('All Players') ,'limitsFL':'FL', 'limitsNL':'NL', 'limitsPL':'PL', 'ring':_('Ring'), 'tour':_('Tourney') @@ -891,7 +891,7 @@ class Filters(threading.Thread): hbox = gtk.HBox() vbox1.pack_start(hbox, False, True, 0) - lbl_start = gtk.Label('From:') + lbl_start = gtk.Label(_('From:')) btn_start = gtk.Button() btn_start.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)) @@ -905,7 +905,7 @@ class Filters(threading.Thread): hbox = gtk.HBox() vbox1.pack_start(hbox, False, True, 0) - lbl_end = gtk.Label(' To:') + lbl_end = gtk.Label(_('To:')) btn_end = gtk.Button() btn_end.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)) btn_end.connect('clicked', self.__calendar_dialog, self.end_date) diff --git a/pyfpdb/GuiBulkImport.py b/pyfpdb/GuiBulkImport.py index 943a81fd..a90f566c 100755 --- a/pyfpdb/GuiBulkImport.py +++ b/pyfpdb/GuiBulkImport.py @@ -136,7 +136,7 @@ class GuiBulkImport(): #self.settings['global_lock'].release() self.settings['global_lock'].release() else: - print _("bulk-import aborted - global lock not available") + print _("bulk import aborted - global lock not available") def get_vbox(self): """returns the vbox of this thread""" diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index 599f0a7e..e85e3057 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -300,7 +300,7 @@ class GuiDatabase: self.dia.show() except: err = traceback.extract_tb(sys.exc_info()[2])[-1] - print _('loaddbs error: ')+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' \ + print _('loadDbs error: ')+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' \ + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) def sortCols(self, col, n): @@ -368,7 +368,7 @@ class GuiDatabase: try: # is creating empty db for sqlite ... mod db.py further? # add noDbTables flag to db.py? - log.debug(_("loaddbs: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) + log.debug(_("testDB: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) db.connect(backend=dbms_num, host=host, database=name, user=user, password=passwd, create=False) if db.connected: log.debug(_(" connected ok")) @@ -384,14 +384,16 @@ class GuiDatabase: status = "failed" icon = gtk.STOCK_CANCEL except Exceptions.FpdbMySQLNoDatabase: - err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started") + err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - ") \ + + _("Please check that the MySQL service has been started") status = "failed" icon = gtk.STOCK_CANCEL except Exceptions.FpdbPostgresqlAccessDenied: - err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") + err_msg = _("PostgreSQL Server reports: Access denied. Are your permissions set correctly?") status = "failed" except Exceptions.FpdbPostgresqlNoDatabase: - err_msg = _("Postgres client reports: Unable to connect - Please check that the Postgres service has been started") + err_msg = _("PostgreSQL client reports: Unable to connect - ") \ + + _("Please check that the PostgreSQL service has been started") status = "failed" icon = gtk.STOCK_CANCEL except: diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index d6cf4015..0cfe49ed 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -544,8 +544,9 @@ class fpdb: #lock_released = False dia_confirm = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format=_("Confirm deleting and recreating tables")) - diastring = _("Please confirm that you want to (re-)create the tables. If there already are tables in the database ") \ - +self.db.database+" on "+self.db.host+_(" they will be deleted and you will have to re-import your histories.\nThis may take a while.") + diastring = _("Please confirm that you want to (re-)create the tables.") \ + + (_(" If there already are tables in the database %s on %s they will be deleted and you will have to re-import your histories.\n") % (self.db.database, self.db.host)) \ + + _("This may take a while.") dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted # disable windowclose, do not want the the underlying processing interrupted mid-process dia_confirm.set_deletable(False) diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index 8ff2ba86..39550a17 100755 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -224,7 +224,7 @@ class Importer: #print " adding file ", file self.addImportFile(os.path.join(dir, file), site, filter) else: - log.warning(_("Attempted to add non-directory: '%s' as an import directory") % str(dir)) + log.warning(_("Attempted to add non-directory '%s' as an import directory") % str(dir)) def runImport(self): """"Run full import on self.filelist. This is called from GuiBulkImport.py""" @@ -310,7 +310,7 @@ class Importer: toterrors += errors for i in xrange( self.settings['threads'] ): - print _("sending finish msg qlen ="), q.qsize() + print _("sending finish message queue length ="), q.qsize() db.send_finish_msg(q) return (totstored, totdups, totpartial, toterrors) @@ -436,9 +436,9 @@ class Importer: # Load filter, process file, pass returned filename to import_fpdb_file if self.settings['threads'] > 0 and self.writeq is not None: - log.info(_("Converting ") + file + " (" + str(q.qsize()) + ")") + log.info((_("Converting %s") % file) + " (" + str(q.qsize()) + ")") else: - log.info(_("Converting ") + file) + log.info(_("Converting %s") % file) hhbase = self.config.get_import_parameters().get("hhArchiveBase") hhbase = os.path.expanduser(hhbase) hhdir = os.path.join(hhbase,site) From f6d5d2f9fcd8fc9894299e903bd5f13a3b9926a4 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:35:33 +0200 Subject: [PATCH 023/217] fpdb.pyw: remove unneeded unused method --- pyfpdb/fpdb.pyw | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index 0cfe49ed..94beac23 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -756,24 +756,6 @@ class fpdb: def dia_save_profile(self, widget, data=None): self.warning_box(_("Unimplemented: Save Profile (try saving a HUD layout, that should do it)")) - def diaSetupWizard(self, path): - diaSetupWizard = gtk.Dialog(title=_("Fatal Error - Config File Missing"), parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK)) - - label = gtk.Label(_("Please copy the config file from the docs folder to:")) - diaSetupWizard.vbox.add(label) - label.show() - - label = gtk.Label(path) - diaSetupWizard.vbox.add(label) - label.show() - - label = gtk.Label(_("and edit it according to the install documentation at http://fpdb.sourceforge.net")) - diaSetupWizard.vbox.add(label) - label.show() - - response = diaSetupWizard.run() - sys.exit(1) - def get_menu(self, window): """returns the menu for this program""" fpdbmenu = """ From 8efa4d5a9cd6b7ff45ce57c255953ba9810d8587 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:46:01 +0200 Subject: [PATCH 024/217] slightly improve error message --- pyfpdb/Configuration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index e9f1521c..31151358 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -132,8 +132,8 @@ def get_config(file_name, fallback = True): print msg logging.info(msg) except: - print _("Error copying .example file, cannot fall back. Exiting.\n") - sys.stderr.write(_("Error copying .example file, cannot fall back. Exiting.\n")) + print _("Error copying .example config file, cannot fall back. Exiting.\n") + sys.stderr.write(_("Error copying .example config file, cannot fall back. Exiting.\n")) sys.stderr.write( str(sys.exc_info()) ) sys.exit() elif fallback: From d53b0f7f2af3baebe0994832601943fc4caef20e Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:46:21 +0200 Subject: [PATCH 025/217] l10n: german now 1/3 complete, update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 7463 -> 20424 bytes pyfpdb/locale/fpdb-de_DE.po | 1158 ++++++++++++++------------ pyfpdb/locale/fpdb-en_GB.pot | 851 ++++++++++--------- pyfpdb/locale/fpdb-hu_HU.po | 1003 ++++++++++++---------- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 64610 -> 59291 bytes pyfpdb/locale/localise.sh | 1 + 6 files changed, 1629 insertions(+), 1384 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index eed07f34f8ceb70e4deaedb2e68839d2b3a7dc43..ae007611f0d5cdb7fd5668fce4dc3508fb32db9a 100644 GIT binary patch literal 20424 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 LZ0ng;(H>LP*e delta 1906 zcmYM!TWl0n9LMpqSc;aG!fsm%lyFKZl$J}ov>?kR7P<>{X;F&=i%6#Jba%AO!t5*! zD7H}nBcg!=MibPiA*4PT7tlTsFVRR8A`fZ;UgCq1Hxdbn`l5dS+aWgH`J6dBb1uLC zX)nJWIu{%HC0uk`@w1gr4WCn!6+##uQfJ zHI#+j#E2SEYSO(*Eu*6fYcY=VF@;U|5^lkZ7{+_ z1$Y%Df!nCDioq&y6`sQ_IFhAthlbQNJ#FHFXHh0HNJ{EWl%1YM%BVgH`Y)kG`6WuU zzam4aKT)2W%<3XI73F>&$^z<i7UBCX%-=4t4{32 z9axWfl!aVJIed45{!-#x%zYGPp2q`IfnJ#W<%>f>$BTg`@U6hH!1IBh1b&TDy6^EA z-a;wWLAD*mcQA$Dq5PGsW&85|V<<_Cj&NN~<21J7wt8j-WwUCA*cOgoQppqzv^!;va=an5cQA^t;JQi4_Sj6!_V|=iQ{G5r2e@7Xxh@7M( z)hH9zA>~v{uo%}P2U^8Z27DyY3HnD-4%hLZ{|%IJK0uA*DDU6E64}~K8ZzD}hN87s`R=mC=p&oav+!{(dFX7g%muQ^;X(_F1+ zh;&%K)n{dG-Q!!nll7hcthrd(T$`YONKcHqRBz0khN7cBi>kd&AV!)tjSr^<_OauV&oBTv_wQg2pMHZ4Izy zGgd!Zmh)WufZn~`v4?FhzkOjWRI%Om3NLiJgBfoR3(UB&e6*o06wdh>-MMFP#`Cr1 z4(QE~c9>&}Pnm|sCi7WiMOD_?&l+`Z?||jo1A3rO)3D6-rg%|HYbtp>3Xda%FRCPk);A*`7|= z=^6t^Dk4Cm- z3h6D~y}|Z99`s3YP3L&XgpxD!j^+)iT7L|`nb5Li>!yXL2^)sam(r(;7_x4ZtZ N, 2010. msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" -"PO-Revision-Date: 2010-08-29 14:20+0200\n" +"POT-Creation-Date: 2010-08-29 20:42+CEST\n" +"PO-Revision-Date: 2010-08-29 20:45+0200\n" "Last-Translator: Steffen Schaumburg \n" "Language-Team: Fpdb\n" "Language: de\n" @@ -36,19 +35,19 @@ msgstr "" msgid "No bringin found" msgstr "" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "" @@ -58,104 +57,111 @@ msgstr "" #: Charset.py:45 Charset.py:60 Charset.py:75 Charset.py:86 Charset.py:94 msgid "Could not convert: \"%s\"\n" -msgstr "" +msgstr "Konnte \"%s\" nicht konvertieren.\n" #: Charset.py:48 Charset.py:63 Charset.py:78 msgid "Could not encode: \"%s\"\n" -msgstr "" +msgstr "Konnte \"%s% nicht kodieren.\n" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "Config file has been created at %s.\n" -msgstr "" +msgstr "Konfigurationsdatei %s wurde erstellt.\n" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" " or %s\n" msgstr "" -#: Configuration.py:131 Configuration.py:132 -msgid "Error copying .example file, cannot fall back. Exiting.\n" -msgstr "" +#: Configuration.py:135 Configuration.py:136 +msgid "Error copying .example config file, cannot fall back. Exiting.\n" +msgstr "Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " +"fehlgeschlagen. Beende fpdb.\n" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" -msgstr "" +msgstr "Keine %s gefunden, Fallback nicht möglich. Beende fpdb.\n" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "" -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "" -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" -msgstr "" +msgstr "Erstelle Verzeichnis \"%s\"" -#: Configuration.py:205 +#: Configuration.py:211 msgid "" "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're " "not on a Mac, please report this problem." msgstr "" -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:655 +#: Configuration.py:661 msgid "" "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "" -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" -msgstr "" +msgstr "Lese Konfigurationsdatei %s" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" msgstr "" +"\n" +"Lese Konfigurationsdatei %s\n" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "" +#: Configuration.py:831 +msgid "Error parsing example file %s. See error log file." +msgstr "" + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "" @@ -449,211 +455,229 @@ msgstr "" msgid "get_stats took: %4.3f seconds" msgstr "" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "" #: Filters.py:62 msgid "All" -msgstr "" +msgstr "Alle" #: Filters.py:62 msgid "None" -msgstr "" +msgstr "Keine" #: Filters.py:62 msgid "Show _Limits" -msgstr "" +msgstr "_Limits anzeigen" #: Filters.py:63 msgid "Show Number of _Players" -msgstr "" +msgstr "_Spielerzahl anzeigen" #: Filters.py:63 TourneyFilters.py:60 msgid "And:" -msgstr "" +msgstr "Und:" #: Filters.py:63 TourneyFilters.py:60 msgid "Between:" -msgstr "" +msgstr "Zwischen:" #: Filters.py:64 msgid "Games:" -msgstr "" +msgstr "Spiele:" #: Filters.py:64 TourneyFilters.py:59 msgid "Hero:" -msgstr "" +msgstr "Held:" #: Filters.py:64 TourneyFilters.py:59 msgid "Sites:" -msgstr "" +msgstr "Seien:" #: Filters.py:65 msgid "Limits:" -msgstr "" +msgstr "Limits:" #: Filters.py:65 TourneyFilters.py:59 msgid "Number of Players:" -msgstr "" +msgstr "Spielerzahl:" #: Filters.py:66 msgid "Grouping:" -msgstr "" +msgstr "Gruppieren:" #: Filters.py:66 -msgid "Show Position Stats:" -msgstr "" +msgid "Show Position Stats" +msgstr "Positionen Anzeigen" #: Filters.py:67 TourneyFilters.py:60 msgid "Date:" -msgstr "" +msgstr "Datum:" #: Filters.py:68 msgid "All Players" -msgstr "" +msgstr "Alle Spieler" #: Filters.py:69 msgid "Ring" -msgstr "" +msgstr "Ring" #: Filters.py:69 msgid "Tourney" -msgstr "" +msgstr "Tourney" #: Filters.py:103 TourneyFilters.py:116 msgid "Either 0 or more than one site matched (%s) - EEK" -msgstr "" +msgstr "Entweder 0 oder mehr als eine Seite wurden (%s) erkannt" #: Filters.py:313 msgid "%s was toggled %s" -msgstr "" +msgstr "%s wurde auf %s gestellt" #: Filters.py:313 msgid "OFF" -msgstr "" +msgstr "AUS" #: Filters.py:313 msgid "ON" -msgstr "" +msgstr "AN" #: Filters.py:394 msgid "self.sites[%s] set to %s" -msgstr "" +msgstr "self.sites[%s] auf %s gesetzt" #: Filters.py:400 msgid "self.games[%s] set to %s" -msgstr "" +msgstr "self.games[%s] auf %s gesetzt" #: Filters.py:406 msgid "self.limit[%s] set to %s" -msgstr "" +msgstr "self.limit[%s] auf %s gesetzt" #: Filters.py:543 msgid "self.seats[%s] set to %s" -msgstr "" +msgstr "self.seats[%s] auf %s gesetzt" #: Filters.py:549 msgid "self.groups[%s] set to %s" -msgstr "" +msgstr "self.groups[%s] auf %s gesetzt" #: Filters.py:582 msgid "Min # Hands:" -msgstr "" +msgstr "Min. Hände:" #: Filters.py:648 msgid "INFO: No tourney types returned from database" -msgstr "" +msgstr "INFO: Keine Tourney-Arten (TourneyTypes) von der Datenbank erhalten" #: Filters.py:649 msgid "No tourney types returned from database" -msgstr "" +msgstr "Keine Tourney-Arten (TourneyTypes) von der Datenbank erhalten" #: Filters.py:675 Filters.py:764 msgid "INFO: No games returned from database" -msgstr "" +msgstr "INFO: Keine Spielarten (games) von der Datenbank erhalten" #: Filters.py:676 Filters.py:765 msgid "No games returned from database" -msgstr "" +msgstr "Keine Spielarten (games) von der Datenbank erhalten" + +#: Filters.py:894 +msgid "From:" +msgstr "Von:" + +#: Filters.py:908 +msgid "To:" +msgstr "Bis:" #: Filters.py:913 msgid " Clear Dates " -msgstr "" +msgstr " Datum zurücksetzen" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" -msgstr "" +msgstr "Wählen Sie ein Datum" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" -msgstr "" +msgstr "Fertig" #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" -msgstr "" +msgstr "Zeit zwischen Imports in Sekunden:" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " -msgstr "" +msgid " Start _Auto Import " +msgstr " Starte _Autoimport " #: GuiAutoImport.py:135 -msgid "AutoImport Ready." -msgstr "" +msgid "Auto Import Ready." +msgstr "Autoimport bereit." #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" -msgstr "" +msgid "Please choose the path that you want to Auto Import" +msgstr "Bitte wählen Sie den Pfad den Sie automatisch importieren möchten" #: GuiAutoImport.py:171 msgid " _Auto Import Running " -msgstr "" +msgstr " _Auto Import läuft " #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " -msgstr "" +msgid " Stop _Auto Import " +msgstr " _Autoimport Anhalten " #: GuiAutoImport.py:207 msgid "" "\n" "Global lock taken ... Auto Import Started.\n" msgstr "" +"\n" +"Globaler Lock genommen ... Autoimport gestartet\n" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " -msgstr "" +msgid " _Stop Auto Import " +msgstr " Autoimport An_halten" #: GuiAutoImport.py:225 msgid "opening pipe to HUD" -msgstr "" +msgstr "öffne Pipe zum HUD" #: GuiAutoImport.py:237 msgid "" "\n" "*** GuiAutoImport Error opening pipe: " msgstr "" +"\n" +"*** GuiAutoImport Fehler beim Öffnen der Pipe: " #: GuiAutoImport.py:249 msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" +"\n" +"Autoimport abgebrochen - globaler Lock nicht verfügbar" #: GuiAutoImport.py:254 msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" +"\n" +"Autoimport wird angehalten - globaler Lock freigegeben" #: GuiAutoImport.py:256 msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" +"\n" +" * Autoimport anhalten: HUD ist bereits beendet" #: GuiAutoImport.py:283 msgid "Browse..." -msgstr "" +msgstr "Durchsuchen..." #: GuiAutoImport.py:326 GuiBulkImport.py:354 msgid "How often to print a one-line status report (0 (default) means never)" @@ -664,84 +688,88 @@ msgid "" "\n" "Global lock taken ..." msgstr "" +"\n" +"Globaler Lock genommen ..." #: GuiBulkImport.py:68 msgid "Importing..." -msgstr "" +msgstr "Importiere..." #: GuiBulkImport.py:117 msgid "" "GuiBulkImport.load done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: " "%d in %s seconds - %.0f/sec" msgstr "" +"GuiBulkImport.load ist fertig: Gespeichert: %d \tDupletten: %d \tTeilweise: " +"%d \tFehler: %d in %s Sekunden - %.0f/sek" #: GuiBulkImport.py:131 msgid "Import Complete" -msgstr "" +msgstr "Import fertig" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" -msgstr "" +msgid "bulk import aborted - global lock not available" +msgstr "Massenimport abgebrochen - globaler Lock nicht verfügbar" #: GuiBulkImport.py:165 msgid "Print Start/Stop Info" -msgstr "" +msgstr "Start-/Stop-Infos ausgeben" #: GuiBulkImport.py:172 msgid "Hands/status print:" -msgstr "" +msgstr "Hände/Statusausgabe:" #: GuiBulkImport.py:189 msgid "Number of threads:" -msgstr "" +msgstr "Anzahl Threads:" #: GuiBulkImport.py:209 msgid "Fail on error" -msgstr "" +msgstr "Bei Fehler abbrechen" #: GuiBulkImport.py:214 msgid "Hands/file:" -msgstr "" +msgstr "Hände/Datei:" #: GuiBulkImport.py:229 msgid "Drop indexes:" -msgstr "" +msgstr "Indexe löschen:" #: GuiBulkImport.py:238 GuiBulkImport.py:288 msgid "auto" -msgstr "" +msgstr "auto" #: GuiBulkImport.py:239 GuiBulkImport.py:289 GuiBulkImport.py:398 msgid "don't drop" -msgstr "" +msgstr "Nein" #: GuiBulkImport.py:240 GuiBulkImport.py:290 msgid "drop" -msgstr "" +msgstr "Ja" #: GuiBulkImport.py:246 msgid "HUD Test mode" -msgstr "" +msgstr "HUD-Testmodus" #: GuiBulkImport.py:251 msgid "Site filter:" -msgstr "" +msgstr "Site-Filter:" #: GuiBulkImport.py:279 msgid "Drop HudCache:" -msgstr "" +msgstr "HudCache löschen:" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" -msgstr "" +msgstr "_Massenimport" #: GuiBulkImport.py:299 msgid "Import clicked" -msgstr "" +msgstr "Import geklickt" #: GuiBulkImport.py:317 msgid "Waiting..." -msgstr "" +msgstr "Warte..." #: GuiBulkImport.py:346 msgid "Input file in quiet mode" @@ -809,101 +837,164 @@ msgid "" "in %s seconds - %.0f/sec" msgstr "" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" -msgstr "" - -#: GuiDatabase.py:111 -msgid "Type" -msgstr "" - -#: GuiDatabase.py:112 -msgid "Name" -msgstr "" - -#: GuiDatabase.py:113 -msgid "Description" -msgstr "" - -#: GuiDatabase.py:114 GuiImapFetcher.py:119 -msgid "Username" -msgstr "" - -#: GuiDatabase.py:115 GuiImapFetcher.py:119 -msgid "Password" -msgstr "" - -#: GuiDatabase.py:116 -msgid "Host" -msgstr "" - #: GuiDatabase.py:117 -msgid "Default" -msgstr "" +msgid "_Add" +msgstr "_Hinzufügen" -#: GuiDatabase.py:118 +#: GuiDatabase.py:121 +msgid "_Refresh" +msgstr "_Aktualisieren" + +#: GuiDatabase.py:125 +msgid "Type" +msgstr "Typ" + +#: GuiDatabase.py:126 +msgid "Name" +msgstr "Name" + +#: GuiDatabase.py:127 +msgid "Description" +msgstr "Beschreibung" + +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +msgid "Username" +msgstr "Benutzername" + +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +msgid "Password" +msgstr "Passwort" + +#: GuiDatabase.py:130 +msgid "Host" +msgstr "Host" + +#: GuiDatabase.py:131 +msgid "Open" +msgstr "Geöffnet" + +#: GuiDatabase.py:132 msgid "Status" -msgstr "" +msgstr "Status" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " +msgstr "Teste Datenbankverbindungen..." + +#: GuiDatabase.py:293 +msgid "finished." +msgstr "Fertig." + +#: GuiDatabase.py:303 +msgid "loadDbs error: " +msgstr "loadDbs Fehler:" + +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +msgid "***sortCols error: " +msgstr "***sortCols Fehler: " + +#: GuiDatabase.py:326 +msgid "sortCols error: " +msgstr "sortCols Fehler: " + +#: GuiDatabase.py:371 +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" msgstr "" -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" -msgstr "" - -#: GuiDatabase.py:284 +#: GuiDatabase.py:374 msgid " connected ok" -msgstr "" +msgstr " Verbindung OK" -#: GuiDatabase.py:291 +#: GuiDatabase.py:381 msgid " not connected but no exception" -msgstr "" +msgstr " Nicht verbunden aber keine Exception" -#: GuiDatabase.py:293 fpdb.pyw:904 +#: GuiDatabase.py:383 fpdb.pyw:886 msgid "" "MySQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" +"MySQL Server meldet: Zugriff verweigert. Sind Ihre Zugriffsrechte korrekt " +"gesetzt?" -#: GuiDatabase.py:297 +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " +msgstr "" +"MySQL Client meldet Fehler Nr. 2002 oder 2003. Konnte nicht verbinden - " + +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "Bitte überprüfen Sie, dass der MySQL-Dienst gestartet ist" + +#: GuiDatabase.py:392 fpdb.pyw:891 msgid "" -"MySQL client reports: 2002 or 2003 error. Unable to connect - Please check " -"that the MySQL service has been started" +"PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" -#: GuiDatabase.py:301 fpdb.pyw:909 -msgid "" -"Postgres Server reports: Access denied. Are your permissions set correctly?" +#: GuiDatabase.py:395 fpdb.pyw:893 +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "PostgreSQL Client meldet Fehler: Konnte nicht verbinden - " + +#: GuiDatabase.py:396 fpdb.pyw:894 +msgid "Please check that the PostgreSQL service has been started" +msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" + +#: GuiDatabase.py:406 +msgid "db connection to " msgstr "" -#: GuiDatabase.py:304 -msgid "" -"Postgres client reports: Unable to connect - Please check that the Postgres " -"service has been started" +#: GuiDatabase.py:434 +msgid "DB Type" msgstr "" -#: GuiDatabase.py:321 -msgid "finished." +#: GuiDatabase.py:444 +msgid "DB Name" msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " +#: GuiDatabase.py:452 +msgid "DB Description" msgstr "" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 -msgid "***sortCols error: " +#: GuiDatabase.py:473 +msgid "Host Computer" msgstr "" -#: GuiDatabase.py:354 -msgid "sortCols error: " -msgstr "" +#: GuiDatabase.py:528 +msgid "Database created" +msgstr "Datenbank erstellt" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:531 +msgid "Database creation failed" +msgstr "Datenbankerstellung fehlgeschlagen" + +#: GuiDatabase.py:550 +msgid "No Database Name given" +msgstr "Kein Datenbankname eingegeben" + +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "Keine Datenbankbeschreibung eingegeben" + +#: GuiDatabase.py:556 +msgid "No Username given" +msgstr "Kein Benutzername eingegeben" + +#: GuiDatabase.py:559 +msgid "No Password given" +msgstr "Kein Passwort eingegeben" + +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "Kein Host eingegeben" + +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "Wollen Sie es nochmal versuchen?" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1047,13 +1138,17 @@ msgstr "" msgid "Log Messages" msgstr "" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "" #: GuiPositionalStats.py:332 msgid "Positional Stats page displayed in %4.2f seconds" -msgstr "" +msgstr "Statistiken nach Position wurde in %4.2f Sekunden angezeigt" #: GuiPrefs.py:81 msgid "Setting" @@ -1174,7 +1269,7 @@ msgstr "" msgid "Note: error output is being diverted to:\n" msgstr "" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1242,358 +1337,358 @@ msgstr "" msgid "Using db name = %s\n" msgstr "" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "" -#: Hand.py:645 +#: Hand.py:646 msgid "" "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, " "expecting datetime.date object, received:" msgstr "" -#: Hand.py:646 +#: Hand.py:647 msgid "" "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "" -#: Hand.py:701 +#: Hand.py:702 msgid "" "*** Parse error reading blinds (check compilePlayerRegexs as a likely " "culprit)" msgstr "" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "" -#: Hand.py:1449 +#: Hand.py:1450 msgid "" "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should " "be impossible for anyone who is not a hero" msgstr "" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "" @@ -1716,139 +1811,129 @@ msgid "" " on %s." msgstr "" -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr "" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr "" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr "" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr "" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr "" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr "" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr "" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr "" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr "" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr "" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "" -#: Hud.py:552 +#: Hud.py:551 msgid "No layout found for %d-max games for site %s\n" msgstr "" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" msgstr "" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "" -#: Hud.py:574 +#: Hud.py:573 msgid "Error finding actual seat.\n" msgstr "" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" msgstr "" -#: Hud.py:639 +#: Hud.py:638 msgid "" "KeyError at the start of the for loop in update in hud_main. How this can " "possibly happen is totally beyond my comprehension. Your HUD may be about to " "get really weird. -Eric" msgstr "" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" - -#: Hud.py:955 -msgid "Table not found." -msgstr "" - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "" @@ -1861,36 +1946,36 @@ msgstr "" msgid "No Name" msgstr "" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" +#: OnGameToFpdb.py:288 +msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" -msgstr "" - -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "" @@ -1975,187 +2060,167 @@ msgstr "" msgid "in not result starttime" msgstr "" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "" - -#: Stats.py:113 -msgid "error: %s" -msgstr "" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "" -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" "Legal stats:" msgstr "" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, " "etc)\n" msgstr "" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "" - -#: Tables.py:261 -msgid "attach to window" -msgstr "" - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "" @@ -2581,238 +2646,228 @@ msgid "Confirm deleting and recreating tables" msgstr "Tabellen löschen und reinitialisieren" #: fpdb.pyw:547 -msgid "" -"Please confirm that you want to (re-)create the tables. If there already are " -"tables in the database " -msgstr "" +msgid "Please confirm that you want to (re-)create the tables." +msgstr "Bitte bestätigen Sie, dass Sie die Tabellen neu erstellen möchten." #: fpdb.pyw:548 msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted " +"and you will have to re-import your histories.\n" msgstr "" +" Falls bereits Tabellen in der Datenbank %s auf %s existieren werden Sie " +"gelöscht werden und Sie werden Ihre Histories neu importieren müssen.\n" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "Dies kann eine Weile dauern." + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "Benutzer hat Reinitialisierung der Tabellen abgebrochen" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "Bitte bestätigen Sie, dass Sie den HUD-Cache neu erstellen möchten." -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr "" -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr "" -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr " Der HUD-Cache wird neu erstellt ... " -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "Benutzer hat Neuerstellung des HUD-Cache abgebrochen" -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "Bestätigung der Neuerstellung der Datenbankindexe" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" "Bitte bestätigen Sie, dass Sie die Datenbankindexe neu erstellen möchten." -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr " Datenbankindexe werden neu erstellt ... " -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr " Reinige Datenbank ... " -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr " Analysiere Datenbank ... " -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "Benutzer hat Neuerstellung der Datenbankindexe abgebrochen" -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "" "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "Schwerer Fehler - Konfigurationsdatei nicht gefunden" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "" - -#: fpdb.pyw:769 -msgid "" -"and edit it according to the install documentation at http://fpdb." -"sourceforge.net" -msgstr "" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "_Hauptmenü" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "_Beenden" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "L" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "Profil _Laden (kaputt)" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "S" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "Profil _Speichern (nicht fertig)" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "F" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "_Einstellungen" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "_Importieren" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "B" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "I" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "_Import per eMail/IMAP" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "A" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "_Autoimport und HUD" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "H" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "_HUD-Konfigurator" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "G" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "_Graphen" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "P" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "T" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "Tourney-_Betrachter" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "O" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "Statistiken nach Position (Tabelle, nicht auf sqlite)" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "Statistiken nach Sitzung" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "_Datenbank" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "Datenbanken _Verwalten" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "_Tabellen erstellen oder neu erstellen" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "HUD-Cache neu erstellen" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "Datenbankindexe neu erstellen" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "_Statistiken" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "Datenbank in eine Textdatei schreiben (dauert SEHR lange)" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "_Hilfe" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "_Log-Dateien" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "_Über, Lizenz, Kopieren" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "There is an error in your config file\n" msgstr "Fehler in Ihrer Konfigurationsdatei\n" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" @@ -2822,126 +2877,120 @@ msgstr "" "\n" "Der Fehler ist:" -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" -msgstr "" +msgstr "FEHLER IN DER KONFIGURATIONSDATEI" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "Logfile is %s\n" -msgstr "" +msgstr "Die Logdatei ist %s\n" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" msgstr "" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " -msgstr "" - -#: fpdb.pyw:880 +#: fpdb.pyw:862 +#, fuzzy msgid "" -"section of the Preferences window (Main menu) before trying to import hands." +"Edit your screen_name and hand history path in the supported_sites section " +"of the Preferences window (Main menu) before trying to import hands." msgstr "" +"Tragen Sie Ihren Benutzernamen (screen_name) und den Pfad zu den Hand " +"History Dateien in supported_sites ein " -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" -msgstr "" +msgstr "Mit SQLite verbunden: %s" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "" - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" -msgstr "" +msgstr "Achtung - Falsche Datenbankversion" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "" +"Falsche Version der Datenbankstrukturen oder fehlende Tabellen gefunden." -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "" "This error is not necessarily fatal but it is strongly recommended that you " "recreate the tables by using the Database menu." msgstr "" +"Dieser Fehler führt nicht zwangsläufig zu einem Absturz aber es wird " +"dringendst empfohlen, dass Sie die Tabellen über das Datenbank-Menü neu " +"erstellen." -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "" "Not doing this will likely lead to misbehaviour including fpdb crashes, " "corrupt data etc." msgstr "" +"Falls Sie dies nicht tun wird fpdb höchstwahrscheinlich abstürzen oder " +"falsche Daten speichern/anzeigen." -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" -msgstr "" +msgstr "Status: Verbunden mit %s-Datenbank namens %s auf Host: %s" -#: fpdb.pyw:969 +#: fpdb.pyw:951 msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" +"\n" +"Globaler Lock durch %s genommen" -#: fpdb.pyw:972 +#: fpdb.pyw:954 msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" +"\n" +"Konnte globalen Lock nicht ergreifen, wird momentan von %s gehalten" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" -msgstr "" +msgstr "Beende normal" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "Global lock released.\n" -msgstr "" +msgstr "Globaler Lock freigegeben.\n" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" -msgstr "" +msgstr "Autoimport" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" -msgstr "" +msgstr "Massenimport" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" -msgstr "" +msgstr "Import per eMail" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" -msgstr "" +msgstr "Tourney-Betrachter" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" -msgstr "" +msgstr "Statistiken nach Position" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in " @@ -2970,38 +3019,67 @@ msgid "" "You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0." "txt and mit.txt in the fpdb installation directory." msgstr "" +"Fpdb braucht Übersetzer!\n" +"Falls Sie eine andere Sprache können und ein paar Minuten oder mehr übrig " +"haben eMailen Sie bitte steffen@schaumburger.info\n" +"\n" +"Willkommen zu fpdb!\n" +"Wenn Sie über neue Versionen informiert werden wollen besuchen Sie bitte " +"https://lists.sourceforge.net/lists/listinfo/fpdb-announce\n" +"Wenn Sie die Entwicklung näher verfolgen möchten besuchen Sie bitte https://" +"lists.sourceforge.net/lists/listinfo/fpdb-main\n" +"\n" +"Dieses Programm ist noch eine Alpha-Version, das Datenbankformat ändert sich " +"also noch manchmal.\n" +"Sie sollten daher Ihre Hand History Dateien immer aufbewahren damit Sie nach " +"einem Update ggf. re-importieren können.\n" +"\n" +"Für Dokumentation besuchen Sie bitte unsere Webseite/Wiki unter http://fpdb." +"sourceforge.net/ .\n" +"Wenn Sie Hilfe brauchen klicken Sie auf \"Contact - Get Help\" auf unserer " +"Webseite oder eMailen Sie mir auf Deutsch an steffen@schaumburger.info.\n" +"\n" +"Dieses Programm ist freie Software (frei wie in Freiheit) teilweise unter " +"der AGPL3-Lizenz und teilweise unter GPL2 und später.\n" +"Das Windows-Installer-Paket enthält Code unter MIT-Lizenz.\n" +"Sie können die vollständigen Lizenztexte im fpdb-Installationsverzeichnis " +"unter agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt und mit.txt finden." -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" -msgstr "" +msgstr "Hilfe" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" -msgstr "" +msgstr "Graphen" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " -"in:\n" +"in: %s" msgstr "" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." -msgstr "" +msgstr "fpdb startet ..." -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" -msgstr "" +msgstr "FPDB WARNUNG" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" +"WARNUNG: Konnte Hand History Ausgabeverzeichnis %s nicht finden\n" +"\n" +"Klicken Sie JA um das Verzeichnis zu erstellen, oder NEIN um ein anderes " +"auszuwählen." -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "" "WARNING: Unable to create hand output directory. Importing is not likely to " "work until this is fixed." @@ -3009,15 +3087,15 @@ msgstr "" #: fpdb_import.py:60 msgid "Import database module: MySQLdb not found" -msgstr "" +msgstr "Import von Datenbankmodul: MySQLdb nicht gefunden" #: fpdb_import.py:67 msgid "Import database module: psycopg2 not found" -msgstr "" +msgstr "Import von Datenbankmodul: psycopg2 nicht gefunden" #: fpdb_import.py:189 msgid "Database ID for %s not found" -msgstr "" +msgstr "Datenbank-ID für %s nicht gefunden" #: fpdb_import.py:191 msgid "" @@ -3026,44 +3104,45 @@ msgid "" msgstr "" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "" #: fpdb_import.py:237 msgid "Started at %s -- %d files to import. indexes: %s" -msgstr "" +msgstr "Beginn %s -- %d Dateien zu importieren. Indexe: %s" #: fpdb_import.py:246 msgid "No need to drop indexes." -msgstr "" +msgstr "Es ist nicht nötig die Indexe zu löschen." #: fpdb_import.py:265 msgid "writers finished already" -msgstr "" +msgstr "Writer sind bereits fertig" #: fpdb_import.py:268 msgid "waiting for writers to finish ..." -msgstr "" +msgstr "Warte, dass Writer fertig werden ..." #: fpdb_import.py:278 msgid " ... writers finished" -msgstr "" +msgstr " ... Writer sind fertig" #: fpdb_import.py:284 msgid "No need to rebuild indexes." -msgstr "" +msgstr "Es ist nicht nötig die Indexe neu zu erstellen" #: fpdb_import.py:288 msgid "No need to rebuild hudcache." -msgstr "" +msgstr "Es ist nicht nötig HudCache neu zu erstellen" #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +msgid "sending finish message queue length =" msgstr "" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " -msgstr "" +#, fuzzy +msgid "Converting %s" +msgstr "Konvertiere " #: fpdb_import.py:477 msgid "Hand processed but empty" @@ -3129,3 +3208,14 @@ msgid "" "no gtk directories found in your path - install gtk or edit the path " "manually\n" msgstr "" + +#~ msgid "Fatal Error - Config File Missing" +#~ msgstr "Schwerer Fehler - Konfigurationsdatei nicht gefunden" + +#, fuzzy +#~ msgid "Postgres client reports: Unable to connect - " +#~ msgstr "PostgreSQL Client meldet Fehler: Konnte nicht verbinden - " + +#, fuzzy +#~ msgid "Please check that the Postgres service has been started" +#~ msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index 6776e979..ba73641a 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" +"POT-Creation-Date: 2010-08-29 20:45+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,19 +35,19 @@ msgstr "" msgid "No bringin found" msgstr "" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "" @@ -65,98 +65,102 @@ msgid "" "Could not encode: \"%s\"\n" msgstr "" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "" "Config file has been created at %s.\n" msgstr "" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" " or %s\n" msgstr "" -#: Configuration.py:131 Configuration.py:132 +#: Configuration.py:135 Configuration.py:136 msgid "" -"Error copying .example file, cannot fall back. Exiting.\n" +"Error copying .example config file, cannot fall back. Exiting.\n" msgstr "" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "" "No %s found, cannot fall back. Exiting.\n" msgstr "" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "" -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "" -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" msgstr "" -#: Configuration.py:205 +#: Configuration.py:211 msgid "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're not on a Mac, please report this problem." msgstr "" -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:655 +#: Configuration.py:661 msgid "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "" -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" msgstr "" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" msgstr "" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "" +#: Configuration.py:831 +msgid "Error parsing example file %s. See error log file." +msgstr "" + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "" @@ -449,7 +453,7 @@ msgstr "" msgid "get_stats took: %4.3f seconds" msgstr "" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "" @@ -502,7 +506,7 @@ msgid "Grouping:" msgstr "" #: Filters.py:66 -msgid "Show Position Stats:" +msgid "Show Position Stats" msgstr "" #: Filters.py:67 TourneyFilters.py:60 @@ -577,15 +581,23 @@ msgstr "" msgid "No games returned from database" msgstr "" +#: Filters.py:894 +msgid "From:" +msgstr "" + +#: Filters.py:908 +msgid "To:" +msgstr "" + #: Filters.py:913 msgid " Clear Dates " msgstr "" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" msgstr "" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" msgstr "" @@ -594,15 +606,15 @@ msgid "Time between imports in seconds:" msgstr "" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " +msgid " Start _Auto Import " msgstr "" #: GuiAutoImport.py:135 -msgid "AutoImport Ready." +msgid "Auto Import Ready." msgstr "" #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" +msgid "Please choose the path that you want to Auto Import" msgstr "" #: GuiAutoImport.py:171 @@ -610,7 +622,7 @@ msgid " _Auto Import Running " msgstr "" #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " +msgid " Stop _Auto Import " msgstr "" #: GuiAutoImport.py:207 @@ -620,7 +632,7 @@ msgid "" msgstr "" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " +msgid " _Stop Auto Import " msgstr "" #: GuiAutoImport.py:225 @@ -636,19 +648,19 @@ msgstr "" #: GuiAutoImport.py:249 msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" #: GuiAutoImport.py:254 msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" #: GuiAutoImport.py:256 msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" #: GuiAutoImport.py:283 @@ -678,7 +690,7 @@ msgid "Import Complete" msgstr "" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" +msgid "bulk import aborted - global lock not available" msgstr "" #: GuiBulkImport.py:165 @@ -729,7 +741,7 @@ msgstr "" msgid "Drop HudCache:" msgstr "" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" msgstr "" @@ -801,95 +813,159 @@ msgstr "" msgid "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d in %s seconds - %.0f/sec" msgstr "" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" +#: GuiDatabase.py:117 +msgid "_Add" msgstr "" -#: GuiDatabase.py:111 +#: GuiDatabase.py:121 +msgid "_Refresh" +msgstr "" + +#: GuiDatabase.py:125 msgid "Type" msgstr "" -#: GuiDatabase.py:112 +#: GuiDatabase.py:126 msgid "Name" msgstr "" -#: GuiDatabase.py:113 +#: GuiDatabase.py:127 msgid "Description" msgstr "" -#: GuiDatabase.py:114 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 msgid "Username" msgstr "" -#: GuiDatabase.py:115 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 msgid "Password" msgstr "" -#: GuiDatabase.py:116 +#: GuiDatabase.py:130 msgid "Host" msgstr "" -#: GuiDatabase.py:117 -msgid "Default" +#: GuiDatabase.py:131 +msgid "Open" msgstr "" -#: GuiDatabase.py:118 +#: GuiDatabase.py:132 msgid "Status" msgstr "" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " msgstr "" -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" -msgstr "" - -#: GuiDatabase.py:284 -msgid " connected ok" -msgstr "" - -#: GuiDatabase.py:291 -msgid " not connected but no exception" -msgstr "" - -#: GuiDatabase.py:293 fpdb.pyw:904 -msgid "MySQL Server reports: Access denied. Are your permissions set correctly?" -msgstr "" - -#: GuiDatabase.py:297 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started" -msgstr "" - -#: GuiDatabase.py:301 fpdb.pyw:909 -msgid "Postgres Server reports: Access denied. Are your permissions set correctly?" -msgstr "" - -#: GuiDatabase.py:304 -msgid "Postgres client reports: Unable to connect - Please check that the Postgres service has been started" -msgstr "" - -#: GuiDatabase.py:321 +#: GuiDatabase.py:293 msgid "finished." msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " +#: GuiDatabase.py:303 +msgid "loadDbs error: " msgstr "" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 msgid "***sortCols error: " msgstr "" -#: GuiDatabase.py:354 +#: GuiDatabase.py:326 msgid "sortCols error: " msgstr "" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:371 +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" +msgstr "" + +#: GuiDatabase.py:374 +msgid " connected ok" +msgstr "" + +#: GuiDatabase.py:381 +msgid " not connected but no exception" +msgstr "" + +#: GuiDatabase.py:383 fpdb.pyw:886 +msgid "MySQL Server reports: Access denied. Are your permissions set correctly?" +msgstr "" + +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " +msgstr "" + +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "" + +#: GuiDatabase.py:392 fpdb.pyw:891 +msgid "PostgreSQL Server reports: Access denied. Are your permissions set correctly?" +msgstr "" + +#: GuiDatabase.py:395 fpdb.pyw:893 +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "" + +#: GuiDatabase.py:396 fpdb.pyw:894 +msgid "Please check that the PostgreSQL service has been started" +msgstr "" + +#: GuiDatabase.py:406 +msgid "db connection to " +msgstr "" + +#: GuiDatabase.py:434 +msgid "DB Type" +msgstr "" + +#: GuiDatabase.py:444 +msgid "DB Name" +msgstr "" + +#: GuiDatabase.py:452 +msgid "DB Description" +msgstr "" + +#: GuiDatabase.py:473 +msgid "Host Computer" +msgstr "" + +#: GuiDatabase.py:528 +msgid "Database created" +msgstr "" + +#: GuiDatabase.py:531 +msgid "Database creation failed" +msgstr "" + +#: GuiDatabase.py:550 +msgid "No Database Name given" +msgstr "" + +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "" + +#: GuiDatabase.py:556 +msgid "No Username given" +msgstr "" + +#: GuiDatabase.py:559 +msgid "No Password given" +msgstr "" + +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "" + +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1030,6 +1106,10 @@ msgstr "" msgid "Log Messages" msgstr "" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "" @@ -1154,7 +1234,7 @@ msgid "" "Note: error output is being diverted to:\n" msgstr "" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1226,351 +1306,351 @@ msgid "" "Using db name = %s\n" msgstr "" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "" -#: Hand.py:645 +#: Hand.py:646 msgid "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, expecting datetime.date object, received:" msgstr "" -#: Hand.py:646 +#: Hand.py:647 msgid "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "" -#: Hand.py:701 +#: Hand.py:702 msgid "*** Parse error reading blinds (check compilePlayerRegexs as a likely culprit)" msgstr "" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "" -#: Hand.py:1449 +#: Hand.py:1450 msgid "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should be impossible for anyone who is not a hero" msgstr "" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "" @@ -1693,138 +1773,128 @@ msgid "" " on %s." msgstr "" -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr "" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr "" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr "" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr "" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr "" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr "" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr "" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr "" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr "" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr "" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "" -#: Hud.py:552 +#: Hud.py:551 msgid "" "No layout found for %d-max games for site %s\n" msgstr "" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" msgstr "" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "" -#: Hud.py:574 +#: Hud.py:573 msgid "" "Error finding actual seat.\n" msgstr "" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" msgstr "" -#: Hud.py:639 +#: Hud.py:638 msgid "KeyError at the start of the for loop in update in hud_main. How this can possibly happen is totally beyond my comprehension. Your HUD may be about to get really weird. -Eric" msgstr "" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" - -#: Hud.py:955 -msgid "Table not found." -msgstr "" - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "" @@ -1837,36 +1907,36 @@ msgstr "" msgid "No Name" msgstr "" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" +#: OnGameToFpdb.py:288 +msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" -msgstr "" - -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "" @@ -1950,186 +2020,166 @@ msgstr "" msgid "in not result starttime" msgstr "" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "" - -#: Stats.py:113 -msgid "error: %s" -msgstr "" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "" -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" "Legal stats:" msgstr "" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, etc)\n" msgstr "" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "" - -#: Tables.py:261 -msgid "attach to window" -msgstr "" - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "" @@ -2514,356 +2564,327 @@ msgid "Confirm deleting and recreating tables" msgstr "" #: fpdb.pyw:547 -msgid "Please confirm that you want to (re-)create the tables. If there already are tables in the database " +msgid "Please confirm that you want to (re-)create the tables." msgstr "" #: fpdb.pyw:548 msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted and you will have to re-import your histories.\n" msgstr "" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "" + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "" -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr "" -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr "" -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr "" -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "" -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr "" -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr "" -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr "" -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "" -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "" - -#: fpdb.pyw:769 -msgid "and edit it according to the install documentation at http://fpdb.sourceforge.net" -msgstr "" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "" "There is an error in your config file\n" msgstr "" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" "Error is: " msgstr "" -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" msgstr "" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "" "Logfile is %s\n" msgstr "" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" msgstr "" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " +#: fpdb.pyw:862 +msgid "Edit your screen_name and hand history path in the supported_sites section of the Preferences window (Main menu) before trying to import hands." msgstr "" -#: fpdb.pyw:880 -msgid "section of the Preferences window (Main menu) before trying to import hands." -msgstr "" - -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" msgstr "" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "" - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" msgstr "" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "" -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "This error is not necessarily fatal but it is strongly recommended that you recreate the tables by using the Database menu." msgstr "" -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "Not doing this will likely lead to misbehaviour including fpdb crashes, corrupt data etc." msgstr "" -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" msgstr "" -#: fpdb.pyw:969 +#: fpdb.pyw:951 msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" -#: fpdb.pyw:972 +#: fpdb.pyw:954 msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" msgstr "" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "" "Global lock released.\n" msgstr "" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" msgstr "" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" msgstr "" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" msgstr "" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" msgstr "" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" msgstr "" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in touch by emailing steffen@schaumburger.info\n" @@ -2884,36 +2905,36 @@ msgid "" "You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt and mit.txt in the fpdb installation directory." msgstr "" -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" msgstr "" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" msgstr "" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 msgid "" "\n" -"Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in:\n" +"Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in: %s" msgstr "" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." msgstr "" -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" msgstr "" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "WARNING: Unable to create hand output directory. Importing is not likely to work until this is fixed." msgstr "" @@ -2934,7 +2955,7 @@ msgid "[ERROR] More than 1 Database ID found for %s - Multiple currencies not im msgstr "" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "" #: fpdb_import.py:237 @@ -2966,11 +2987,11 @@ msgid "No need to rebuild hudcache." msgstr "" #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +msgid "sending finish message queue length =" msgstr "" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " +msgid "Converting %s" msgstr "" #: fpdb_import.py:477 diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index 5d4b6e45..2c2ea758 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" +"POT-Creation-Date: 2010-08-29 20:42+CEST\n" "PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -36,19 +36,19 @@ msgstr "re_HandInfo nem illeszkedik" msgid "No bringin found" msgstr "Beülő nem található" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "DEBUG: nem ismert readAction: '%s' '%s'" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "leosztástörténet feldolgozása" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "feldolgozás eredményének helye" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "kövesse a kimenetet (tail -f)" @@ -64,11 +64,11 @@ msgstr "Nem sikerült konvertálni: \"%s\"\n" msgid "Could not encode: \"%s\"\n" msgstr "Nem sikerült kódolni: \"%s\"\n" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "Config file has been created at %s.\n" msgstr "Konfigurációs fájl létrehozva itt: %s.\n" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" @@ -78,27 +78,28 @@ msgstr "" " itt: %s\n" " vagy itt: %s\n" -#: Configuration.py:131 Configuration.py:132 -msgid "Error copying .example file, cannot fall back. Exiting.\n" +#: Configuration.py:135 Configuration.py:136 +#, fuzzy +msgid "Error copying .example config file, cannot fall back. Exiting.\n" msgstr "Hiba a .example fájl másolása közben, nem tudom folytatni. Kilépés.\n" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" msgstr "%s nem található, nem tudom folytatni. Kilépés.\n" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "Alapértelmezett naplózó előkészítve ehhez: " -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "Alapértelmezett naplózó előkészítve ehhez: " -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" msgstr "Könyvtár létrehozása: '%s'" -#: Configuration.py:205 +#: Configuration.py:211 msgid "" "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're " "not on a Mac, please report this problem." @@ -106,59 +107,59 @@ msgstr "" "US-ASCII az alapértelmezett karakterkódolás, CP1252 használata ehelyett.Ha " "nem Mac-et használsz, akkor kérlek jelentsd ezt a problémát." -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "Terem betöltése" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "config.general: %s = %s hozzáadása" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "hibás érték az xalignment-ben - figyelmen kívül hagyás" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "hiányzó konfigurációs bekezdés: raw_hands" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" "Érvénytelen raw_hands.save beállítás, az alapértelmezett \"error\" használata" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" "Érvénytelen raw_hands.compression beállítás, az alapértelmezett \"none\" " "használata" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "hiányzó konfigurációs bekezdés: raw_tourneys" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" "Érvénytelen raw_tourneys.save beállítás, az alapértelmezett \"error\" " "használata" -#: Configuration.py:655 +#: Configuration.py:661 msgid "" "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" "Érvénytelen raw_tourneys.compression beállítás, az alapértelmezett \"none\" " "használata" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "A %s konfigurációs fájl nem található. Alapértelmezések használata." -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" msgstr "%s konfigurációs fájl olvasása" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" @@ -166,10 +167,15 @@ msgstr "" "\n" "%s konfigurációs fájl olvasása\n" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." +#: Configuration.py:831 +#, fuzzy +msgid "Error parsing example file %s. See error log file." +msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "SQLAlchemy connection pool használatának kihagyása." @@ -474,7 +480,7 @@ msgstr "kezdőkéz =" msgid "get_stats took: %4.3f seconds" msgstr "get_stats időigény: %4.3f mp" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "nyomj ENTER-t a folytatáshoz" @@ -527,7 +533,8 @@ msgid "Grouping:" msgstr "Csoportosítás:" #: Filters.py:66 -msgid "Show Position Stats:" +#, fuzzy +msgid "Show Position Stats" msgstr "Pozíció" #: Filters.py:67 TourneyFilters.py:60 @@ -602,15 +609,23 @@ msgstr "INFO: nem található játék az adatbázisban" msgid "No games returned from database" msgstr "Nem található játék az adatbázisban" +#: Filters.py:894 +msgid "From:" +msgstr "" + +#: Filters.py:908 +msgid "To:" +msgstr "" + #: Filters.py:913 msgid " Clear Dates " msgstr "Törlés" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" msgstr "Válassz napot" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" msgstr "Kész" @@ -619,15 +634,18 @@ msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " +#, fuzzy +msgid " Start _Auto Import " msgstr " _AutoImport indítása " #: GuiAutoImport.py:135 -msgid "AutoImport Ready." +#, fuzzy +msgid "Auto Import Ready." msgstr "AutoImport kész." #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" +#, fuzzy +msgid "Please choose the path that you want to Auto Import" msgstr "Válaszd ki a könyvtárat az AutoImporthoz" #: GuiAutoImport.py:171 @@ -635,7 +653,8 @@ msgid " _Auto Import Running " msgstr " _AutoImport fut " #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " +#, fuzzy +msgid " Stop _Auto Import " msgstr " _AutoImport leállítása " #: GuiAutoImport.py:207 @@ -647,7 +666,8 @@ msgstr "" "Globális zárolás OK ... AutoImport elindítva.\n" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " +#, fuzzy +msgid " _Stop Auto Import " msgstr " _AutoImport leállítása " #: GuiAutoImport.py:225 @@ -663,25 +683,28 @@ msgstr "" "*** GuiAutoImport Hiba a cső nyitásakor: " #: GuiAutoImport.py:249 +#, fuzzy msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" "\n" "AutoImport megszakítva - nem elérhető a globális zárolás" #: GuiAutoImport.py:254 +#, fuzzy msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" "\n" "AutoImport leállítása - globális zárolás feloldva." #: GuiAutoImport.py:256 +#, fuzzy msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" "\n" " * AutoImport megállítása: A HUD már nem fut" @@ -721,7 +744,8 @@ msgid "Import Complete" msgstr "Importálás kész" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" +#, fuzzy +msgid "bulk import aborted - global lock not available" msgstr "importálás megszakítva - nem elérhető a globális zárolás" #: GuiBulkImport.py:165 @@ -772,7 +796,7 @@ msgstr "Terem:" msgid "Drop HudCache:" msgstr "HUD gyorstár eldobása:" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" msgstr "_Importálás" @@ -854,112 +878,185 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" -"s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " +"%s másodperc alatt - %.0f/mp" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" +#: GuiDatabase.py:117 +msgid "_Add" +msgstr "" + +#: GuiDatabase.py:121 +#, fuzzy +msgid "_Refresh" msgstr "Frissítés" -#: GuiDatabase.py:111 +#: GuiDatabase.py:125 msgid "Type" msgstr "Típus" -#: GuiDatabase.py:112 +#: GuiDatabase.py:126 msgid "Name" msgstr "Név" -#: GuiDatabase.py:113 +#: GuiDatabase.py:127 msgid "Description" msgstr "Leírás" -#: GuiDatabase.py:114 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 msgid "Username" msgstr "Felhasználónév" -#: GuiDatabase.py:115 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 msgid "Password" msgstr "Jelszó" -#: GuiDatabase.py:116 +#: GuiDatabase.py:130 msgid "Host" msgstr "Kiszolgáló" -#: GuiDatabase.py:117 -msgid "Default" -msgstr "Alapértelmezett" +#: GuiDatabase.py:131 +msgid "Open" +msgstr "" -#: GuiDatabase.py:118 +#: GuiDatabase.py:132 msgid "Status" msgstr "Állapot" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " msgstr "Adatbázis-kapcsolatok ellenőrzése ..." -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" +#: GuiDatabase.py:293 +msgid "finished." +msgstr "befejezve." + +#: GuiDatabase.py:303 +#, fuzzy +msgid "loadDbs error: " +msgstr "loaddbs hiba: " + +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +msgid "***sortCols error: " +msgstr "***sortCols hiba: " + +#: GuiDatabase.py:326 +msgid "sortCols error: " +msgstr "sortCols hiba: " + +#: GuiDatabase.py:371 +#, fuzzy +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" msgstr "loaddbs: kapcolódási próbálkozás: %s/%s, %s, %s/%s" -#: GuiDatabase.py:284 +#: GuiDatabase.py:374 msgid " connected ok" msgstr " kapcsolódás OK" -#: GuiDatabase.py:291 +#: GuiDatabase.py:381 msgid " not connected but no exception" msgstr " nem kapcsolódott, de nem volt hibaüzenet" -#: GuiDatabase.py:293 fpdb.pyw:904 +#: GuiDatabase.py:383 fpdb.pyw:886 msgid "" "MySQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" "MySQL szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " "jogosultságaid?" -#: GuiDatabase.py:297 -msgid "" -"MySQL client reports: 2002 or 2003 error. Unable to connect - Please check " -"that the MySQL service has been started" +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " msgstr "" "MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a kapcsolódás " -"- Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" +"- " -#: GuiDatabase.py:301 fpdb.pyw:909 +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" + +#: GuiDatabase.py:392 fpdb.pyw:891 +#, fuzzy msgid "" -"Postgres Server reports: Access denied. Are your permissions set correctly?" +"PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" "Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " "jogosultságaid?" -#: GuiDatabase.py:304 -msgid "" -"Postgres client reports: Unable to connect - Please check that the Postgres " -"service has been started" +#: GuiDatabase.py:395 fpdb.pyw:893 +#, fuzzy +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " + +#: GuiDatabase.py:396 fpdb.pyw:894 +#, fuzzy +msgid "Please check that the PostgreSQL service has been started" +msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" + +#: GuiDatabase.py:406 +#, fuzzy +msgid "db connection to " +msgstr "folytató nyitás %" + +#: GuiDatabase.py:434 +#, fuzzy +msgid "DB Type" +msgstr "Típus" + +#: GuiDatabase.py:444 +#, fuzzy +msgid "DB Name" +msgstr "Név" + +#: GuiDatabase.py:452 +#, fuzzy +msgid "DB Description" +msgstr "Leírás" + +#: GuiDatabase.py:473 +#, fuzzy +msgid "Host Computer" +msgstr "Importálás kész" + +#: GuiDatabase.py:528 +#, fuzzy +msgid "Database created" +msgstr "A_datbázis" + +#: GuiDatabase.py:531 +#, fuzzy +msgid "Database creation failed" +msgstr " index létrehozása nem sikerült: " + +#: GuiDatabase.py:550 +msgid "No Database Name given" msgstr "" -"Postgres kliens jelenti: Nem sikerült a kapcsolódás. .Kérlek ellenőrizd, " -"hogy a Postgres szolgáltatás el van-e indítva" -#: GuiDatabase.py:321 -msgid "finished." -msgstr "befejezve." +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " -msgstr "loaddbs hiba: " +#: GuiDatabase.py:556 +#, fuzzy +msgid "No Username given" +msgstr "Felhasználónév" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 -msgid "***sortCols error: " -msgstr "***sortCols hiba: " +#: GuiDatabase.py:559 +#, fuzzy +msgid "No Password given" +msgstr "Jelszó" -#: GuiDatabase.py:354 -msgid "sortCols error: " -msgstr "sortCols hiba: " +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "Napló böngésző (teszt)" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "Napló böngésző" @@ -1115,6 +1212,10 @@ msgstr "Nem" msgid "Log Messages" msgstr "Naplóbejegyzések" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "Frissítés" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "DEBUG: aktív terem: %s" @@ -1248,7 +1349,7 @@ msgstr "HUD_main indítás: %s adatbázis használata" msgid "Note: error output is being diverted to:\n" msgstr "Megjegyzés: a hibakimenet ide van átirányítva:\n" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1306,11 +1407,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -1320,260 +1421,261 @@ msgstr "HUD_main indítás\n" msgid "Using db name = %s\n" msgstr "%s adatbázis használata\n" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "BB" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "SB" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "GOMB" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "LEOSZTÁS" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "TEREM" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "ASZTAL NEVE" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "JÁTÉKOS" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "MAX. SZÉKEK" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "SZINT" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "KEVERT" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "UTOLSÓ TÉT" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "AKCIÓ UTCÁK" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "UTCÁK" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "MINDEN UTCA" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "KÖZÖS UTCÁK" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "HOLE UTCÁK" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "SZÁMOLT SZÉKEK" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "OSZTOTT" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "MUTATOTT" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "NEM MUTATOTT" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "TELJES KASSZA" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "TELJES BEGYŰJTÖTT" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "JUTALÉK" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "KEZDÉSI IDŐ" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "VERSENY SZÁM" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "VERSENYAZONOSÍTÓ" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "VERSENYTÍPUS AZONOSÍTÓ" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "NEVEZÉSI DÍJ" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "NEVEZÉSI DÍJ PÉNZNEME" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "KEZDŐ ZSETONOK" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "DÍJ" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "REBUY" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "ADDON" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "KIÜTÉSES" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "FEJVADÁSZ" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "MÁTRIX" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "SHOOTOUT" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "VERSENY MEGJEGYZÉS" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "JÁTÉKOSOK" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "LETÉTEK" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "BETETT" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "KASSZA" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "ÜLTETÉS" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "JÁTÉKTÍPUS" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "AKCIÓ" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "BEGYŰJTŐK" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "TÉTEK" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "ASZTAL" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "DOBÁSOK" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "KEZDŐKÉZ" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "VERSENYJÁTÉKOS AZONOSÍTÓK" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "[ERROR] Kezdőkéz hozzáadása ismeretlen játékoshoz: %s" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "Hand.insert(): %s leosztásazonosító duplikáció" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +#, fuzzy +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "markStreets nem egyezik - Leosztás érvénytelenítését feltételezem" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" "FpdbParseError: markStreets hívása meghiúsult: az első 100 karakter: '%s'" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "DEBUG: checkPlayerExists %s hiba a következő leosztásban: %s" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "checkPlayerExists: '%s hiba a következő leosztásban: %s" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "%s utcán %s játékos ennyit megad: %s" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "%s utcán %s játékos eddig emel: %s" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "%s utcán %s játékos ennyit hív: %s" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "%s utcán %s játékos dob" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "%s utcán %s játékos passzol" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "addShownCards %s játékos kézben=%s mind=%s" -#: Hand.py:645 +#: Hand.py:646 msgid "" "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, " "expecting datetime.date object, received:" @@ -1581,18 +1683,18 @@ msgstr "" "*** ERROR - HAND: writeGameLine hívása nem várt STARTTIME értékkel, datetime." "date objektumot vár, ezt kapta:" -#: Hand.py:646 +#: Hand.py:647 msgid "" "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" "*** Győződj meg róla, hogy a feldolgozód helyesen állítja be a hand." "startTime értékét!" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "*** Játék sztring:" -#: Hand.py:701 +#: Hand.py:702 msgid "" "*** Parse error reading blinds (check compilePlayerRegexs as a likely " "culprit)" @@ -1600,75 +1702,75 @@ msgstr "" "*** Feldolgozási hiba a vakok beolvasása közben (valószínűleg a " "compilePlayerRegex-eket kell ellenőrizni)" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" "HoldemOmahaHand.__init__: nem lehet a leosztást összeállítani az " "adatbázisból a leosztás azonosítója nélkül" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" "HoldemOmahaHand.__init__: sem a HHC, sem az adatbázis+leosztásaonosító nem " "lett megadva" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "*** OSZTÁS ***" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "%s kapja: [%s]" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "*** ELSŐ CSERE ***" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "*** MÁSODIK CSERE ***" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "*** HARMADIK CSERE ***" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "*** MUTATÁS ***" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "*** ÖSSZEGZÉS ***" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "%s utcán %s játékos kiegészít erre: %s" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "Beülő: %s, %s" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "*** HARMADIK UTCA ***" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "*** NEGYEDIK UTCA ***" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "*** ÖTÖDIK UTCA ***" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "*** HATODIK UTCA ***" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "*** RIVER ***" -#: Hand.py:1449 +#: Hand.py:1450 msgid "" "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should " "be impossible for anyone who is not a hero" @@ -1676,15 +1778,15 @@ msgstr "" "join_holecards: a kézbe kapott lapok száma vagy < 4, 4 or 7 - 5 és 6 " "mindenki számára lehetetlen, aki nem hős" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "join_holcards: holecards(%s): %s" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "DEBUG: Pot.end() hívása a teljes kassza kiírása előtt" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "FpdbError egy Hand objektum kiírása közben" @@ -1812,99 +1914,99 @@ msgstr "" "Eddig %d leosztást játszottál\n" "a %s teremben." -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "Ezen HUD kilövése" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "HUD elrendezés mentése" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "Újrapozícionálás" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "Játékos statisztikák megjelenítése" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "Csak erre a vakszintre" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "Több vakszintre:" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr " A jelenlegi 0.5-2-szerese" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr " A jelenlegi 0.33-3-szorosa" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr " A jelenlegi 0.1-10-szerese" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr " Minden limit" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "Ennyi szék számára:" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr " Bármennyi" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr " Egyedi" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr " Csak ez" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "Szűkítés:" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr " Mind" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr " Session" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr " Az elmúlt %s nap" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "Ellenfél statisztikáinak mutatása" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "StatWindows debugolása" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "Max székek beállítása" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "Konfigurációs fájl frissítése" -#: Hud.py:552 +#: Hud.py:551 msgid "No layout found for %d-max games for site %s\n" msgstr "Nem található elrendezés a %d fős asztalok számára a %s teremben\n" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" @@ -1912,15 +2014,15 @@ msgstr "" "hiba a Hud.adj_seats helyen\n" "\n" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "A hiba a következő: %s" -#: Hud.py:574 +#: Hud.py:573 msgid "Error finding actual seat.\n" msgstr "Hiba az aktuális szék keresése közben.\n" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" @@ -1928,7 +2030,7 @@ msgstr "" "------------------------------------------------------------\n" "HUD készítése ebből a leosztásból: %s\n" -#: Hud.py:639 +#: Hud.py:638 msgid "" "KeyError at the start of the for loop in update in hud_main. How this can " "possibly happen is totally beyond my comprehension. Your HUD may be about to " @@ -1937,22 +2039,10 @@ msgstr "" "KeyError a for ciklus kezdeténél a hud_main-ban. Fogalmam sincs, hogy ez " "hogyan lehetséges. A HUD-od valószínűleg nagyon furcsa lesz. -Eric" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "(ja, a kulcs %s volt a statd pedig %s)" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" -"Kamu főablak, bla bla, bla\n" -"bla, bla" - -#: Hud.py:955 -msgid "Table not found." -msgstr "Az asztal nem található." - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "válasz a bejelentkezésre:" @@ -1965,36 +2055,38 @@ msgstr "IMAP import befejezve, kapcsolat lezárása" msgid "No Name" msgstr "Nincs név" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "determineGameType: FpdbParseError" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "Nem sikerült felismerni a játéktípust innen: '%s'" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +#, fuzzy +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "readButton: nem található" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" -msgstr "readBlinds indítása" - -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "re_postSB nem sikerült, leosztás=" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" +#: OnGameToFpdb.py:288 +#, fuzzy +msgid "readBlinds in noSB exception - no SB created" msgstr "readBlinds noSB-n belül hiba" -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "antek olvasása" @@ -2080,167 +2172,155 @@ msgstr "nem sikerült felismerni a beülő pénznemét ebben:" msgid "in not result starttime" msgstr "a starttime nem található részében" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "nem sikerült a pénznem meghatározása" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "hiba a %s statisztika számításakor %s játékosnál: %s" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "Stats.do_stat eredménye = %s" - -#: Stats.py:113 -msgid "error: %s" -msgstr "hiba: %s" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "teljes profit" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "önként befizet preflop %" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "preflop emelés" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "terítésig megy %" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "pénzt nyer terítéskor %" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "profit/100 leosztás" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "hiba a p/100 számítása közben: 100 * %d / %d" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "nagyvak/100 leosztás" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "nagytét/100 leosztás" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "hiba a BB/100 számítása közben: " -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "flopot néz %" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "látott leosztások száma" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "dobott flopon/4. utcán" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "lopási kísérlet %" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "kisvakból dob lopásra %" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "nagyvakból dob lopásra %" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "dob lopásra %" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "3/4-bet preflop/3. utcán %" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "$nyer/flopot/4. utcát néz %" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "agresszió gyakoriság flopon/4. utcán" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "agresszió gyakoriság turnön/5. utcán" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "agresszió gyakoriság riveren/6. utcán" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "agresszió gyakoriság 7. utcán" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "postflop agresszió gyakoriság" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "agresszió gyakoriság" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "agresszió faktor" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "folytató nyitás %" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "folytató nyitás flopon/4. utcán %" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "folytató nyitás turnön/5. utcán %" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "folytató nyitás riveren/6. utcán %" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "folytató nyitás 7. utcán %" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "dobási gyakoriság flopon/4. utcán %" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "dobási gyakoriság turnön/5. utcán %" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "dobási gyakoriság riveren/6. utcán %" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "dobási gyakoriság 7. utcán %" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "Példa statisztikák, játékos = %s leosztás = %s:" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" @@ -2250,7 +2330,7 @@ msgstr "" "\n" "Érvényes statisztikák:" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, " "etc)\n" @@ -2258,14 +2338,6 @@ msgstr "" "(írj a név után _0-t tizedesjegy nélküli megjelenítéshez, _1-et az egy " "tizedesjegyhez, stb.)\n" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "Ismeretlen asztal = %s" - -#: Tables.py:261 -msgid "attach to window" -msgstr "csatolás ezen ablakhoz: " - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "Kamu HUD Főablak" @@ -2691,248 +2763,235 @@ msgid "Confirm deleting and recreating tables" msgstr "Erősítsd meg a táblák törlését és újra létrehozását" #: fpdb.pyw:547 -msgid "" -"Please confirm that you want to (re-)create the tables. If there already are " -"tables in the database " +#, fuzzy +msgid "Please confirm that you want to (re-)create the tables." msgstr "" -"Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat. Ha " -"már vannak táblák az adatbázisban (" +"Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." #: fpdb.pyw:548 +#, fuzzy msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted " +"and you will have to re-import your histories.\n" msgstr "" "), akkor azok törölve lesznek, és újra kell importálnod a " "leosztástörténeteket.\n" "Ja, és ez eltarthat egy darabig:)" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "" + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "A felhasználó megszakította a táblák újra létrehozását" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "" "Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr " Saját gyorstár innentől: " -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr " Ellenfelek gyorstára innentől: " -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr " HUD gyorstár újraépítése ... " -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "A felhasználó megszakította a HUD gyorstár újraépítését." -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "Erősítsd meg az adatbázis indexeinek újraépítését" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" "Kérlek erősítsd meg, hogy valóban újra akarod építeni az adatbázis indexeit." -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr " Indexek újraépítése ... " -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr " Adatbázis tisztítása ... " -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr " Adatbázis elemzése ... " -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "A felhasználó megszakította az adatbázis indexeinek újraépítését." -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "" "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" "Még nincs kész: Profil mentése (addig használd a HUD elrendezésének " "mentését, az jó)" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "Kérlek másold át a konfigurációs fájlt a docs könyvtárból ide:" - -#: fpdb.pyw:769 -msgid "" -"and edit it according to the install documentation at http://fpdb." -"sourceforge.net" -msgstr "" -"majd szerkeszd a http://fpdb.sourceforge.net címen található telepítési " -"útmutató szerint" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "Fő_menü" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "_Kilépés" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "L" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "Profil betö_ltése (hibás)" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "S" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "Profil menté_se (todo)" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "B" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "_Beállítások" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "_Importálás" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "I" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "E" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "_Email import (IMAP)" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "_Nézetek" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "A" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "_AutoImport és HUD" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "H" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "_HUD beállítása" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "G" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "_Grafikonok" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "P" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "Kész_pénzes statisztikák (táblázat; Postgre-vel nem)" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "T" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "Versenyjá_tékos statisztikák (táblázat; Postgre-vel nem)" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "_Verseny nézet" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "O" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "P_ozíciós statisztikák (táblázat; SQLite-tal nem)" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "Session statisztikák" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "A_datbázis" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "_Karbantartás" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "_Táblák (újra) létrehozása" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "HUD gyorstár újraépítése" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "Adatbázis indexek újraépítése" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "_Statisztikák" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "Adatbázis kiírása textfájlba (SOKÁIG tart)" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "_Súgó" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "Nap_lóbejegyzések" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "_Névjegy, licensz, másolás" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "There is an error in your config file\n" msgstr "Hiba van a konfigurációs fájlodban\n" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" @@ -2942,19 +3001,19 @@ msgstr "" "\n" "A hiba a következő: " -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" msgstr "KONFIGURÁCIÓS FÁJL HIBA" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "Logfile is %s\n" msgstr "A naplófájl: %s\n" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "Konfigurációs fájl" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" @@ -2962,50 +3021,28 @@ msgstr "" "létrehozva itt:\n" "%s.\n" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " -msgstr "" -"Állítsd be az asztalnál látható nevedet és a leosztástörténetek helyét a " -"támogatott termek" - -#: fpdb.pyw:880 +#: fpdb.pyw:862 +#, fuzzy msgid "" -"section of the Preferences window (Main menu) before trying to import hands." +"Edit your screen_name and hand history path in the supported_sites section " +"of the Preferences window (Main menu) before trying to import hands." msgstr "" "résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál leosztásokat " "importálni." -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" msgstr "Kapcsolódva az SQLite adatbázishoz: %s" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" -"MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a kapcsolódás " -"- " - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" msgstr "Nyomatékos figyelmeztetés - Érvénytelen adatbázis verzió" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "Érvénytelen adatbázis verziót vagy hiányzó táblá(ka)t találtam." -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "" "This error is not necessarily fatal but it is strongly recommended that you " "recreate the tables by using the Database menu." @@ -3013,7 +3050,7 @@ msgstr "" "Ez a hiba nem feltétlenül végzetes, de erősen javasolt a táblák " "újragenerálása az Adatbázis menü használatával." -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "" "Not doing this will likely lead to misbehaviour including fpdb crashes, " "corrupt data etc." @@ -3022,65 +3059,67 @@ msgstr "" "kiléphet, tönkretehet adatokat, stb." # FIXME: would need a different word ordering in Hungarian -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" msgstr "" "Állapot: Kapcsolódva a(z) %s adatbázis-kezelő %s nevű adatbázisához a(z) %s " "kiszolgálón" -#: fpdb.pyw:969 +#: fpdb.pyw:951 +#, fuzzy msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" "\n" "Globális zárolást végzett:" -#: fpdb.pyw:972 +#: fpdb.pyw:954 +#, fuzzy msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" "\n" "Globális zárolás meghiúsult, jelenleg már zárolta:" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" msgstr "Normál kilépés" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "Global lock released.\n" msgstr "Globális zárolás feloldva.\n" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" msgstr "AutoImport" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" msgstr "Importálás" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" msgstr "Email import" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "Készpénzes statisztikák" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "Versenystatisztikák" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" msgstr "Verseny nézet" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" msgstr "Pozíciós statisztikák" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in " @@ -3138,38 +3177,40 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" -"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " +"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" msgstr "Súgó" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" msgstr "Grafikonok" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 +#, fuzzy msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " -"in:\n" +"in: %s" msgstr "" "\n" "Megjegyzés: a hibakimenet átirányítva az fpdb-errors.txt és HUD-errors.txt " "fájlokba itt:\n" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." msgstr "fpdb indítása ..." -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" msgstr "FPDB FIGYELMEZTETÉS" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 +#, fuzzy msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" @@ -3178,7 +3219,7 @@ msgstr "" " Kattints az IGEN gombra a könyvtár létrehozásához, vagy a NEM gombra egy " "másik könyvtár választásához." -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "" "WARNING: Unable to create hand output directory. Importing is not likely to " "work until this is fixed." @@ -3207,7 +3248,8 @@ msgstr "" "pénznem még nem támogatott" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +#, fuzzy +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "Nem könyvtár ('%s') megadása importálási könyvtárként" #: fpdb_import.py:237 @@ -3239,11 +3281,13 @@ msgid "No need to rebuild hudcache." msgstr "Nem szükséges a HUD gyorstár újraépítése." #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +#, fuzzy +msgid "sending finish message queue length =" msgstr "befejező üzenet küldése; qlen =" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " +#, fuzzy +msgid "Converting %s" msgstr "Konvertálás" #: fpdb_import.py:477 @@ -3321,6 +3365,95 @@ msgstr "" "Nem találhatóak a GTK könyvtárak az útvonaladban - telepítsd a GTK-t, vagy " "állítsd be kézzel az útvonalat\n" +#~ msgid "Fatal Error - Config File Missing" +#~ msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" + +#~ msgid "Please copy the config file from the docs folder to:" +#~ msgstr "Kérlek másold át a konfigurációs fájlt a docs könyvtárból ide:" + +#~ msgid "" +#~ "and edit it according to the install documentation at http://fpdb." +#~ "sourceforge.net" +#~ msgstr "" +#~ "majd szerkeszd a http://fpdb.sourceforge.net címen található telepítési " +#~ "útmutató szerint" + +#~ msgid "" +#~ "Please confirm that you want to (re-)create the tables. If there already " +#~ "are tables in the database " +#~ msgstr "" +#~ "Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat. " +#~ "Ha már vannak táblák az adatbázisban (" + +#~ msgid "" +#~ "Postgres Server reports: Access denied. Are your permissions set " +#~ "correctly?" +#~ msgstr "" +#~ "Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " +#~ "jogosultságaid?" + +#, fuzzy +#~ msgid "Postgres client reports: Unable to connect - " +#~ msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " + +#, fuzzy +#~ msgid "Please check that the Postgres service has been started" +#~ msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" + +#~ msgid "" +#~ "MySQL client reports: 2002 or 2003 error. Unable to connect - Please " +#~ "check that the MySQL service has been started" +#~ msgstr "" +#~ "MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a " +#~ "kapcsolódás - Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e " +#~ "indítva" + +#~ msgid "" +#~ "Postgres client reports: Unable to connect - Please check that the " +#~ "Postgres service has been started" +#~ msgstr "" +#~ "Postgres kliens jelenti: Nem sikerült a kapcsolódás. .Kérlek ellenőrizd, " +#~ "hogy a Postgres szolgáltatás el van-e indítva" + +#~ msgid "Default" +#~ msgstr "Alapértelmezett" + +#~ msgid "" +#~ "Fake main window, blah blah, blah\n" +#~ "blah, blah" +#~ msgstr "" +#~ "Kamu főablak, bla bla, bla\n" +#~ "bla, bla" + +#~ msgid "Table not found." +#~ msgstr "Az asztal nem található." + +#~ msgid "readBlinds starting" +#~ msgstr "readBlinds indítása" + +#~ msgid "re_postSB failed, hand=" +#~ msgstr "re_postSB nem sikerült, leosztás=" + +#~ msgid "exception getting stat %s for player %s %s" +#~ msgstr "hiba a %s statisztika számításakor %s játékosnál: %s" + +#~ msgid "Stats.do_stat result = %s" +#~ msgstr "Stats.do_stat eredménye = %s" + +#~ msgid "error: %s" +#~ msgstr "hiba: %s" + +#~ msgid "Found unknown table = %s" +#~ msgstr "Ismeretlen asztal = %s" + +#~ msgid "attach to window" +#~ msgstr "csatolás ezen ablakhoz: " + +#~ msgid "Edit your screen_name and hand history path in the supported_sites " +#~ msgstr "" +#~ "Állítsd be az asztalnál látható nevedet és a leosztástörténetek helyét a " +#~ "támogatott termek" + #~ msgid "_Set HandHistory Archive Directory" #~ msgstr "Leo_sztásarchívum könyvtára" diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index 225a4b034c9de3a5e235109041b0d19043fef288..a73df824a2626bf6477eb908db93d0522a0fa3dc 100644 GIT binary patch delta 11462 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 Vled(?71Fsg`1G%cy~jVO{@<-8{VM Date: Sun, 29 Aug 2010 21:10:57 +0200 Subject: [PATCH 026/217] Revert "Revert "gettextify FulltiltToFpdb.py"" This reverts commit a1f079e4479ed7865720c0adc7e4033625943635. --- pyfpdb/FulltiltToFpdb.py | 44 +++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index b235ed4d..f94903c5 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -18,6 +18,18 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ######################################################################## +import locale +lang=locale.getdefaultlocale()[0][0:2] +if lang=="en": + def _(string): return string +else: + import gettext + try: + trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) + trans.install() + except IOError: + def _(string): return string + import logging from HandHistoryConverter import * #import TourneySummary @@ -206,7 +218,7 @@ class Fulltilt(HandHistoryConverter): def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if m is None: - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) raise FpdbParseError("No match in readHandInfo.") hand.handid = m.group('HID') @@ -336,7 +348,7 @@ class Fulltilt(HandHistoryConverter): hand.addBlind(a.group('PNAME'), 'small & big blinds', a.group('SBBB')) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -346,10 +358,10 @@ class Fulltilt(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s") %(m.group('PNAME'), m.group('BRINGIN'))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found, handid =%s" % hand.handid) + logging.warning(_("No bringin found, handid =%s") % hand.handid) def readButton(self, hand): hand.buttonpos = int(self.re_Button.search(hand.handText).group('BUTTON')) @@ -406,7 +418,7 @@ class Fulltilt(HandHistoryConverter): elif action.group('ATYPE') == ' checks': hand.addCheck( street, action.group('PNAME')) else: - print "FullTilt: 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): @@ -482,7 +494,7 @@ class Fulltilt(HandHistoryConverter): m = self.re_TourneyInfo.search(tourneyText) if not m: - log.info( "determineTourneyType : Parsing NOK" ) + log.info(_("determineTourneyType : Parsing NOK")) return False mg = m.groupdict() #print mg @@ -540,7 +552,7 @@ class Fulltilt(HandHistoryConverter): if mg['TOURNO'] is not None: tourney.tourNo = mg['TOURNO'] else: - log.info( "Unable to get a valid Tournament ID -- File rejected" ) + log.info(_("Unable to get a valid Tournament ID -- File rejected")) return False if tourney.isMatrix: if mg['MATCHNO'] is not None: @@ -571,18 +583,18 @@ class Fulltilt(HandHistoryConverter): tourney.buyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) else : if 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) != tourney.buyin: - log.error( "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) ) + log.error(_("Conflict between buyins read in topline (%s) and in BuyIn field (%s)") % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) ) tourney.subTourneyBuyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) if mg['FEE'] is not None: if tourney.fee is None: tourney.fee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) else : if 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) != tourney.fee: - log.error( "Conflict between fees read in topline (%s) and in BuyIn field (%s)" % (tourney.fee, 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))) ) + log.error(_("Conflict between fees read in topline (%s) and in BuyIn field (%s)") % (tourney.fee, 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))) ) tourney.subTourneyFee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) if tourney.buyin is None: - log.info( "Unable to affect a buyin to this tournament : assume it's a freeroll" ) + log.info(_("Unable to affect a buyin to this tournament : assume it's a freeroll")) tourney.buyin = 0 tourney.fee = 0 else: @@ -683,7 +695,7 @@ class Fulltilt(HandHistoryConverter): tourney.addPlayer(rank, a.group('PNAME'), winnings, "USD", 0, 0, 0) #TODO: make it store actual winnings currency else: - print "FullTilt: Player finishing stats unreadable : %s" % a + print (_("FullTilt: Player finishing stats unreadable : %s") % a) # Find Hero n = self.re_TourneyHeroFinishingP.search(playersText) @@ -692,17 +704,17 @@ class Fulltilt(HandHistoryConverter): tourney.hero = heroName # Is this really useful ? if heroName not in tourney.ranks: - print "FullTilt:", heroName, "not found in tourney.ranks ..." + print (_("FullTilt: %s not found in tourney.ranks ...") % heroName) elif (tourney.ranks[heroName] != Decimal(n.group('HERO_FINISHING_POS'))): - print "FullTilt: Bad parsing : finish position incoherent : %s / %s" % (tourney.ranks[heroName], n.group('HERO_FINISHING_POS')) + print (_("FullTilt: Bad parsing : finish position incoherent : %s / %s") % (tourney.ranks[heroName], n.group('HERO_FINISHING_POS'))) return True if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="regression-test-files/fulltilt/razz/FT20090223 Danville - $0.50-$1 Ante $0.10 - Limit Razz.txt") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="regression-test-files/fulltilt/razz/FT20090223 Danville - $0.50-$1 Ante $0.10 - Limit Razz.txt") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 21c1e3340520e16bf0e2890fa212f2c050a7b1ec Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:17:58 +0200 Subject: [PATCH 027/217] l10n: missed gettextifying a string in betfairtofpdb --- pyfpdb/BetfairToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/BetfairToFpdb.py b/pyfpdb/BetfairToFpdb.py index 07ee2612..5ee3823f 100755 --- a/pyfpdb/BetfairToFpdb.py +++ b/pyfpdb/BetfairToFpdb.py @@ -127,7 +127,7 @@ class Betfair(HandHistoryConverter): #Shouldn't really dip into the Hand object, but i've no idea how to tell the length of iter m if len(hand.players) < 2: - logging.info("readPlayerStacks: Less than 2 players found in a hand") + logging.info(_("readPlayerStacks: Less than 2 players found in a hand")) def markStreets(self, hand): m = re.search(r"\*\* Dealing down cards \*\*(?P.+(?=\*\* Dealing Flop \*\*)|.+)" From 772f124a295c34a0d2663a8d0392bbf0e711967f Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:22:34 +0200 Subject: [PATCH 028/217] l10n: gettextify everleaftofpdb --- pyfpdb/EverleafToFpdb.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/pyfpdb/EverleafToFpdb.py b/pyfpdb/EverleafToFpdb.py index 8bff1cdd..fdded3f6 100755 --- a/pyfpdb/EverleafToFpdb.py +++ b/pyfpdb/EverleafToFpdb.py @@ -22,6 +22,18 @@ import sys import logging from HandHistoryConverter import * +import locale +lang=locale.getdefaultlocale()[0][0:2] +if lang=="en": + def _(string): return string +else: + import gettext + try: + trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) + trans.install() + except IOError: + def _(string): return string + # Class for converting Everleaf HH format. class Everleaf(HandHistoryConverter): @@ -133,7 +145,7 @@ or None if we fail to get the info """ def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if(m == None): - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s, Table %s" % (m.group('HID'), m.group('TABLE'))) @@ -202,7 +214,7 @@ or None if we fail to get the info """ hand.setCommunityCards(street=street, cards=cards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -214,14 +226,14 @@ or None if we fail to get the info """ logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found.") + logging.warning(_("No bringin found.")) def readBlinds(self, hand): m = self.re_PostSB.search(hand.handText) if m is not None: hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB')) else: - logging.debug("No small blind") + logging.debug(_("No small blind")) hand.addBlind(None, None, None) for a in self.re_PostBB.finditer(hand.handText): hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB')) @@ -249,7 +261,7 @@ or None if we fail to get the info """ def readStudPlayerCards(self, hand, street): # lol. see Plymouth.txt - logging.warning("Everleaf readStudPlayerCards is only a stub.") + logging.warning(_("Everleaf readStudPlayerCards is only a stub.")) #~ if street in ('THIRD', 'FOURTH', 'FIFTH', 'SIXTH'): #~ hand.addPlayerCards(player = player.group('PNAME'), street = street, closed = [], open = []) @@ -272,7 +284,7 @@ or None if we fail to get the info """ elif action.group('ATYPE') == ' complete to': hand.addComplete( street, action.group('PNAME'), action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),))) def readShowdownActions(self, hand): @@ -310,9 +322,9 @@ or None if we fail to get the info """ if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 4cae54a08644055339a7ff5bf1d085cc21fadfcf Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:22:46 +0200 Subject: [PATCH 029/217] l10n: another missed gettextify in betfairtofpdb --- pyfpdb/BetfairToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/BetfairToFpdb.py b/pyfpdb/BetfairToFpdb.py index 5ee3823f..ab870a27 100755 --- a/pyfpdb/BetfairToFpdb.py +++ b/pyfpdb/BetfairToFpdb.py @@ -164,7 +164,7 @@ class Betfair(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN')))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: logging.warning(_("No bringin found")) From 62fb2f91867edf1b901d11d4b5893ac0cb546e69 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:24:28 +0200 Subject: [PATCH 030/217] l10n: missed a gettextify in everleaftofpdb --- pyfpdb/EverleafToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/EverleafToFpdb.py b/pyfpdb/EverleafToFpdb.py index fdded3f6..1b27c555 100755 --- a/pyfpdb/EverleafToFpdb.py +++ b/pyfpdb/EverleafToFpdb.py @@ -293,7 +293,7 @@ or None if we fail to get the info """ for shows in self.re_ShowdownAction.finditer(hand.handText): cards = shows.group('CARDS') cards = cards.split(', ') - logging.debug("readShowdownActions %s %s" %(cards, shows.group('PNAME'))) + logging.debug(_("readShowdownActions %s %s" %(cards, shows.group('PNAME')))) hand.addShownCards(cards, shows.group('PNAME')) From 3c645b0e431d2781eb7314856fe3a61a268ec548 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:29:18 +0200 Subject: [PATCH 031/217] l10n: gettextify carbontofpdb --- pyfpdb/CarbonToFpdb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyfpdb/CarbonToFpdb.py b/pyfpdb/CarbonToFpdb.py index 9239ab12..49523ba6 100644 --- a/pyfpdb/CarbonToFpdb.py +++ b/pyfpdb/CarbonToFpdb.py @@ -148,7 +148,7 @@ or None if we fail to get the info """ def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if m is None: - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s-%s, Table %s" % (m.group('HID1'), @@ -254,8 +254,8 @@ or None if we fail to get the info """ elif action.group('ATYPE') == 'ALL_IN': hand.addAllIn(street, player, action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" - % (action.group('PSEAT'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" + % (action.group('PSEAT'),action.group('ATYPE'),))) def readShowdownActions(self, hand): for shows in self.re_ShowdownAction.finditer(hand.handText): @@ -285,9 +285,9 @@ or None if we fail to get the info """ if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", action="store_const", const=logging.INFO, dest="verbosity") parser.add_option("--vv", action="store_const", const=logging.DEBUG, dest="verbosity") From 2eb3d18b86409677512b62c612800b79149c7da9 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:31:34 +0200 Subject: [PATCH 032/217] l10n: gettextify AbsoluteToFpdb --- pyfpdb/AbsoluteToFpdb.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pyfpdb/AbsoluteToFpdb.py b/pyfpdb/AbsoluteToFpdb.py index 31e21764..7cef8c68 100755 --- a/pyfpdb/AbsoluteToFpdb.py +++ b/pyfpdb/AbsoluteToFpdb.py @@ -164,7 +164,7 @@ class Absolute(HandHistoryConverter): def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if(m == None): - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s, Table %s" % (m.group('HID'), m.group('TABLE'))) @@ -221,7 +221,7 @@ class Absolute(HandHistoryConverter): hand.setCommunityCards(street=street, cards=cards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -230,17 +230,17 @@ class Absolute(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN')))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found.") + logging.warning(_("No bringin found.")) def readBlinds(self, hand): m = self.re_PostSB.search(hand.handText) if m is not None: hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB')) else: - logging.debug("No small blind") + logging.debug(_("No small blind")) hand.addBlind(None, None, None) for a in self.re_PostBB.finditer(hand.handText): hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB')) @@ -267,7 +267,7 @@ class Absolute(HandHistoryConverter): def readStudPlayerCards(self, hand, street): # lol. see Plymouth.txt - logging.warning("Absolute readStudPlayerCards is only a stub.") + logging.warning(_("Absolute readStudPlayerCards is only a stub.")) #~ if street in ('THIRD', 'FOURTH', 'FIFTH', 'SIXTH'): #~ hand.addPlayerCards(player = player.group('PNAME'), street = street, closed = [], open = []) @@ -290,7 +290,7 @@ class Absolute(HandHistoryConverter): elif action.group('ATYPE') == ' complete to': # TODO: not supported yet ? hand.addComplete( street, action.group('PNAME'), action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),))) def readShowdownActions(self, hand): @@ -334,9 +334,9 @@ if __name__ == "__main__": config = Configuration.Config(None) parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 7a4eeba3c7396c473db4b6e98c39e5381c4eb5be Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:33:03 +0200 Subject: [PATCH 033/217] l10n: gettexify Win2dayToFpdb --- pyfpdb/Win2dayToFpdb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyfpdb/Win2dayToFpdb.py b/pyfpdb/Win2dayToFpdb.py index dd3d922e..47891f0f 100755 --- a/pyfpdb/Win2dayToFpdb.py +++ b/pyfpdb/Win2dayToFpdb.py @@ -153,7 +153,7 @@ class Win2day(HandHistoryConverter): hand.buttonpos = player[0] break else: - logging.info('readButton: not found') + logging.info(_('readButton: not found')) def readPlayerStacks(self, hand): logging.debug("readPlayerStacks") @@ -194,7 +194,7 @@ class Win2day(HandHistoryConverter): hand.setCommunityCards(street, boardCards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: #~ logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -332,7 +332,7 @@ class Win2day(HandHistoryConverter): elif action.group('ATYPE') == 'ACTION_STAND': hand.addStandsPat( street, action.group('PNAME')) else: - print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),) + print _("DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)) def readShowdownActions(self, hand): @@ -359,9 +359,9 @@ class Win2day(HandHistoryConverter): if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 717968e8bfeb8d079450a88de168db26fbf57714 Mon Sep 17 00:00:00 2001 From: gimick Date: Sun, 29 Aug 2010 20:55:40 +0100 Subject: [PATCH 034/217] Logging: Relocate info message from hud-errors to hud-log --- pyfpdb/Hud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py index 99b65c00..8454f433 100644 --- a/pyfpdb/Hud.py +++ b/pyfpdb/Hud.py @@ -586,7 +586,7 @@ class Hud: self.stat_dict = stat_dict self.cards = cards - sys.stderr.write(_("------------------------------------------------------------\nCreating hud from hand %s\n") % hand) + log.info(_('Creating hud from hand ')+str(hand)) adj = self.adj_seats(hand, config) loc = self.config.get_locations(self.table.site, self.max) if loc is None and self.max != 10: From 9a3782c64d9dfc52ad24eea8d81de67ff9104375 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 22:07:58 +0200 Subject: [PATCH 035/217] l10n: last file gettextified: UltimateBetToFpdb --- pyfpdb/UltimateBetToFpdb.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyfpdb/UltimateBetToFpdb.py b/pyfpdb/UltimateBetToFpdb.py index acf29b06..580244bb 100755 --- a/pyfpdb/UltimateBetToFpdb.py +++ b/pyfpdb/UltimateBetToFpdb.py @@ -39,7 +39,7 @@ in_path (default '-' = sys.stdin) out_path (default '-' = sys.stdout) follow : whether to tail -f the input""" HandHistoryConverter.__init__(self, in_path, out_path, sitename="UltimateBet", follow=follow, index=index) - logging.info("Initialising UltimateBetconverter class") + logging.info(_("Initialising UltimateBetconverter class")) self.filetype = "text" self.codepage = "cp1252" self.siteId = 6 # Needs to match id entry in Sites database @@ -141,7 +141,7 @@ follow : whether to tail -f the input""" if m: hand.buttonpos = int(m.group('BUTTON')) else: - logging.info('readButton: not found') + logging.info(_('readButton: not found')) def readPlayerStacks(self, hand): logging.debug("readPlayerStacks") @@ -180,7 +180,7 @@ follow : whether to tail -f the input""" hand.setCommunityCards(street, m.group('CARDS').split(' ')) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: #~ logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -290,7 +290,7 @@ follow : whether to tail -f the input""" #elif action.group('ATYPE') == ' stands pat': # hand.addStandsPat( street, action.group('PNAME')) else: - print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),) + print _("DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)) def readShowdownActions(self, hand): @@ -312,9 +312,9 @@ follow : whether to tail -f the input""" if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="regression-test-files/pokerstars/HH20090226 Natalie V - $0.10-$0.20 - HORSE.txt") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="regression-test-files/pokerstars/HH20090226 Natalie V - $0.10-$0.20 - HORSE.txt") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From af0aff530d66adb51ce322f10839b4102fd8074e Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 22:09:22 +0200 Subject: [PATCH 036/217] l10n: update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 20424 -> 20424 bytes pyfpdb/locale/fpdb-de_DE.po | 119 +++++++++++++++++++++----- pyfpdb/locale/fpdb-en_GB.pot | 116 ++++++++++++++++++++----- pyfpdb/locale/fpdb-hu_HU.po | 121 ++++++++++++++++++++++----- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 59291 -> 59291 bytes 5 files changed, 297 insertions(+), 59 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index ae007611f0d5cdb7fd5668fce4dc3508fb32db9a..5b67149b32a449e4d703768bf8d5603198bc4a95 100644 GIT binary patch delta 19 bcmX>xpYgxpYg\n" "Language-Team: Fpdb\n" @@ -15,6 +15,47 @@ msgstr "" "X-Generator: Virtaal 0.6.1\n" "Generated-By: pygettext.py 1.5\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +msgid "No bringin found." +msgstr "" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "Konnte Datei %s nicht finden" @@ -27,8 +68,8 @@ msgstr "" msgid "GameInfo regex did not match" msgstr "" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" msgstr "" #: BetfairToFpdb.py:170 @@ -39,18 +80,6 @@ msgstr "" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "" @@ -76,7 +105,8 @@ msgstr "" #: Configuration.py:135 Configuration.py:136 msgid "Error copying .example config file, cannot fall back. Exiting.\n" -msgstr "Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " +msgstr "" +"Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " "fehlgeschlagen. Beende fpdb.\n" #: Configuration.py:140 Configuration.py:141 @@ -459,6 +489,10 @@ msgstr "" msgid "press enter to continue" msgstr "" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "Alle" @@ -603,6 +637,50 @@ msgstr "Wählen Sie ein Datum" msgid "Done" msgstr "Fertig" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +msgid "No bringin found, handid =%s" +msgstr "" + +#: FulltiltToFpdb.py:421 +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Zeit zwischen Imports in Sekunden:" @@ -1968,6 +2046,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "" @@ -1975,10 +2054,6 @@ msgstr "" msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "" @@ -2467,6 +2542,10 @@ msgstr "" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "" diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index ba73641a..71ec500e 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 20:45+CEST\n" +"POT-Creation-Date: 2010-08-29 22:08+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,6 +15,47 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +msgid "No bringin found." +msgstr "" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "" @@ -27,8 +68,8 @@ msgstr "" msgid "GameInfo regex did not match" msgstr "" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" msgstr "" #: BetfairToFpdb.py:170 @@ -39,18 +80,6 @@ msgstr "" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "" @@ -457,6 +486,10 @@ msgstr "" msgid "press enter to continue" msgstr "" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "" @@ -601,6 +634,50 @@ msgstr "" msgid "Done" msgstr "" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +msgid "No bringin found, handid =%s" +msgstr "" + +#: FulltiltToFpdb.py:421 +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "" @@ -1929,6 +2006,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "" @@ -1936,10 +2014,6 @@ msgstr "" msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "" @@ -2428,6 +2502,10 @@ msgstr "" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "" diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index 2c2ea758..bc8be173 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 20:42+CEST\n" +"POT-Creation-Date: 2010-08-29 22:08+CEST\n" "PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -16,6 +16,48 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=n !=1;\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "re_HandInfo nem illeszkedik" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "antek olvasása" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +#, fuzzy +msgid "No bringin found." +msgstr "Beülő nem található" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "leosztástörténet feldolgozása" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "feldolgozás eredményének helye" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "kövesse a kimenetet (tail -f)" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "%s fájl nem található" @@ -28,9 +70,9 @@ msgstr "Az eredmény ide került kiírásra" msgid "GameInfo regex did not match" msgstr "GameInfo regex nem illeszkedik" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" -msgstr "re_HandInfo nem illeszkedik" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" +msgstr "" #: BetfairToFpdb.py:170 msgid "No bringin found" @@ -40,18 +82,6 @@ msgstr "Beülő nem található" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "DEBUG: nem ismert readAction: '%s' '%s'" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "leosztástörténet feldolgozása" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "feldolgozás eredményének helye" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "kövesse a kimenetet (tail -f)" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "fpdb kártyakódolás (ugyanaz, mint amit a pokersource használ)" @@ -484,6 +514,10 @@ msgstr "get_stats időigény: %4.3f mp" msgid "press enter to continue" msgstr "nyomj ENTER-t a folytatáshoz" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "Mind" @@ -629,6 +663,52 @@ msgstr "Válassz napot" msgid "Done" msgstr "Kész" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +#, fuzzy +msgid "No bringin found, handid =%s" +msgstr "Beülő nem található" + +#: FulltiltToFpdb.py:421 +#, fuzzy +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "DEBUG: nem ismert readAction: '%s' '%s'" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" @@ -2078,6 +2158,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "readButton: nem található" @@ -2086,10 +2167,6 @@ msgstr "readButton: nem található" msgid "readBlinds in noSB exception - no SB created" msgstr "readBlinds noSB-n belül hiba" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "antek olvasása" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "Ha be van állítva, akkor a hibakimenet a konzolra lesz irányítva." @@ -2586,6 +2663,10 @@ msgstr "addPlayer: helyezés:%s - név : '%s' - Nyeremény (%s)" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "incrementPlayerWinnings: név : '%s' - plusz nyeremény (%s)" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "A(z) %s nevű ablak nincs meg. Kihagyás." diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index a73df824a2626bf6477eb908db93d0522a0fa3dc..2c4ea94ad6821a6a58ae76a1be9d08ba23e49357 100644 GIT binary patch delta 19 bcmbPzo_Y3p<_+g+S&Xa Date: Sun, 29 Aug 2010 16:44:29 -0400 Subject: [PATCH 037/217] add Everleaf HH per Steffen's request --- .../NLHE-6max-USD-0.05-0.10-29Aug2010.txt | 416 ++++++++++++++++++ 1 file changed, 416 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/Everleaf/Flop/NLHE-6max-USD-0.05-0.10-29Aug2010.txt diff --git a/pyfpdb/regression-test-files/cash/Everleaf/Flop/NLHE-6max-USD-0.05-0.10-29Aug2010.txt b/pyfpdb/regression-test-files/cash/Everleaf/Flop/NLHE-6max-USD-0.05-0.10-29Aug2010.txt new file mode 100644 index 00000000..2b2d59d6 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Everleaf/Flop/NLHE-6max-USD-0.05-0.10-29Aug2010.txt @@ -0,0 +1,416 @@ +Everleaf Gaming Game #196321235 +***** Hand history for game #196321235 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:34:15 +Table Cortland XIV +Seat 6 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 12.40 USD ) +Seat 2: EricBlade ( $ 5 USD ) +Seat 3: gabitzatoade ( $ 5.45 USD ) +Seat 5: N0pr3s3n7 ( $ 10.29 USD ) +Seat 6: Coolcatcool ( $ 8.30 USD ) +zlodeu123: posts small blind [$ 0.05 USD] +EricBlade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 9h, Qd ] +gabitzatoade folds +N0pr3s3n7 raises [$ 0.35 USD] +Coolcatcool folds +zlodeu123 folds +EricBlade folds +N0pr3s3n7 does not show cards +N0pr3s3n7 wins $ 0.25 USD from main pot + + + +Everleaf Gaming Game #196321319 +***** Hand history for game #196321319 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:34:38 +Table Cortland XIV +Seat 1 is the button +Total number of players: 5 +Seat 1: zlodeu123 ( $ 12.35 USD ) +Seat 2: EricBlade ( $ 4.90 USD ) +Seat 3: gabitzatoade ( $ 5.45 USD ) +Seat 5: N0pr3s3n7 ( $ 10.44 USD ) +Seat 6: Coolcatcool ( $ 8.30 USD ) +EricBlade: posts small blind [$ 0.05 USD] +gabitzatoade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ Qd, 9d ] +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 folds +EricBlade raises [$ 0.25 USD] +gabitzatoade folds +EricBlade does not show cards +EricBlade wins $ 0.20 USD from main pot + + + +Everleaf Gaming Game #196321394 +***** Hand history for game #196321394 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:34:57 +Table Cortland XIV +Seat 2 is the button +Total number of players: 5 +Seat 1: zlodeu123 ( $ 12.35 USD ) +Seat 2: EricBlade ( $ 5 USD ) +Seat 3: gabitzatoade ( $ 5.35 USD ) +Seat 4: Miazza ( new player ) +Seat 5: N0pr3s3n7 ( $ 10.44 USD ) +Seat 6: Coolcatcool ( $ 8.30 USD ) +gabitzatoade: posts small blind [$ 0.05 USD] +N0pr3s3n7: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 9c, Ac ] +Coolcatcool folds +zlodeu123 folds +EricBlade raises [$ 0.35 USD] +gabitzatoade calls [$ 0.30 USD] +N0pr3s3n7 folds +** Dealing Flop ** [ 4c, Kh, 6h ] +gabitzatoade checks +EricBlade: bets [$ 0.40 USD] +gabitzatoade calls [$ 0.40 USD] +** Dealing Turn ** [ Qh ] +gabitzatoade checks +Miazza has joined the table +EricBlade checks +** Dealing River ** [ Qd ] +gabitzatoade checks +EricBlade checks +EricBlade shows [ 9c, Ac ] a pair of queens +gabitzatoade shows [ 4s, 4d ] a full house, fours full of queens +gabitzatoade wins $ 1.52 USD from main pot with a full house, fours full of queens [ Qh, Qd, 4s, 4d, 4c ] + + + +Everleaf Gaming Game #196321538 +***** Hand history for game #196321538 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:35:34 +Table Cortland XIV +Seat 3 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 12.35 USD ) +Seat 2: EricBlade ( $ 4.25 USD ) +Seat 3: gabitzatoade ( $ 6.12 USD ) +Seat 4: Miazza ( $ 5 USD ) +Seat 5: N0pr3s3n7 ( $ 10.34 USD ) +Seat 6: Coolcatcool ( $ 8.30 USD ) +N0pr3s3n7: posts small blind [$ 0.05 USD] +Coolcatcool: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ Kc, Jd ] +zlodeu123 raises [$ 0.35 USD] +EricBlade calls [$ 0.35 USD] +gabitzatoade folds +N0pr3s3n7 folds +Coolcatcool folds +** Dealing Flop ** [ 9s, 3c, Jc ] +zlodeu123: bets [$ 0.60 USD] +EricBlade raises [$ 1.80 USD] +zlodeu123 folds +EricBlade does not show cards +EricBlade wins $ 1.95 USD from main pot + + + +Everleaf Gaming Game #196321707 +***** Hand history for game #196321707 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:36:15 +Table Cortland XIV +Seat 5 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.40 USD ) +Seat 2: EricBlade ( $ 5.25 USD ) +Seat 3: gabitzatoade ( $ 6.12 USD ) +Seat 4: Miazza ( $ 5 USD ) +Seat 5: N0pr3s3n7 ( $ 10.29 USD ) +Seat 6: Coolcatcool ( $ 8.20 USD ) +Coolcatcool: posts small blind [$ 0.05 USD] +zlodeu123: posts big blind [$ 0.10 USD] +Miazza sits out +** Dealing down cards ** +Dealt to EricBlade [ 6d, 3d ] +EricBlade folds +gabitzatoade calls [$ 0.10 USD] +N0pr3s3n7 raises [$ 0.30 USD] +Coolcatcool folds +zlodeu123 folds +gabitzatoade calls [$ 0.20 USD] +** Dealing Flop ** [ 8d, 4d, Td ] +gabitzatoade checks +N0pr3s3n7: bets [$ 0.50 USD] +gabitzatoade folds +N0pr3s3n7 does not show cards +N0pr3s3n7 wins $ 0.72 USD from main pot + + + +Everleaf Gaming Game #196321850 +***** Hand history for game #196321850 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:36:52 +Table Cortland XIV +Seat 6 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.30 USD ) +Seat 2: EricBlade ( $ 5.25 USD ) +Seat 3: gabitzatoade ( $ 5.82 USD ) +Seat 4: Miazza ( $ 5 USD ) +Seat 5: N0pr3s3n7 ( $ 10.71 USD ) +Seat 6: Coolcatcool ( $ 8.15 USD ) +zlodeu123: posts small blind [$ 0.05 USD] +EricBlade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ Qh, Qd ] +gabitzatoade folds +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 folds +EricBlade does not show cards +EricBlade wins $ 0.10 USD from main pot + + + +Everleaf Gaming Game #196321947 +***** Hand history for game #196321947 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:37:15 +Table Cortland XIV +Seat 1 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.30 USD ) +Seat 3: gabitzatoade ( $ 5.82 USD ) +Seat 4: Miazza ( $ 5 USD ) +Seat 5: N0pr3s3n7 ( $ 10.71 USD ) +Seat 6: Coolcatcool ( $ 8.15 USD ) +EricBlade: posts small blind [$ 0.05 USD] +gabitzatoade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ Ts, Ks ] +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 folds +EricBlade raises [$ 0.25 USD] +gabitzatoade folds +EricBlade does not show cards +EricBlade wins $ 0.20 USD from main pot + + + +Everleaf Gaming Game #196322013 +***** Hand history for game #196322013 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:37:32 +Table Cortland XIV +Seat 2 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.40 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 5 USD ) +Seat 5: N0pr3s3n7 ( $ 10.71 USD ) +Seat 6: Coolcatcool ( $ 8.15 USD ) +gabitzatoade: posts small blind [$ 0.05 USD] +Miazza: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 2c, 4s ] +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 raises [$ 0.35 USD] +EricBlade folds +gabitzatoade calls [$ 0.30 USD] +Miazza folds +** Dealing Flop ** [ Ad, 6d, 6s ] +gabitzatoade checks +zlodeu123: bets [$ 0.60 USD] +gabitzatoade calls [$ 0.60 USD] +** Dealing Turn ** [ Jc ] +gabitzatoade checks +zlodeu123 checks +** Dealing River ** [ Th ] +gabitzatoade checks +zlodeu123 checks +zlodeu123 shows [ Ah, 8d ] two pairs, aces and sixes +gabitzatoade shows [ Ac, 9c ] two pairs, aces and sixes +gabitzatoade wins $ 0.95 USD from main pot with two pairs, aces and sixes [ Ac, Ad, Jc, 6d, 6s ] +zlodeu123 wins $ 0.95 USD from main pot with two pairs, aces and sixes [ Ah, Ad, Jc, 6d, 6s ] + + + +Everleaf Gaming Game #196322188 +***** Hand history for game #196322188 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:38:16 +Table Cortland XIV +Seat 3 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.40 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 4.90 USD ) +Seat 5: N0pr3s3n7 ( $ 10.71 USD ) +Seat 6: Coolcatcool ( $ 8.15 USD ) +Miazza: posts small blind [$ 0.05 USD] +N0pr3s3n7: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 7d, Kd ] +Coolcatcool folds +zlodeu123 folds +EricBlade raises [$ 0.35 USD] +gabitzatoade folds +Miazza folds +N0pr3s3n7 folds +EricBlade does not show cards +EricBlade wins $ 0.25 USD from main pot + + + +Everleaf Gaming Game #196322268 +***** Hand history for game #196322268 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:38:34 +Table Cortland XIV +Seat 4 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.55 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 4.85 USD ) +Seat 5: N0pr3s3n7 ( $ 10.61 USD ) +Seat 6: Coolcatcool ( $ 8.15 USD ) +N0pr3s3n7: posts small blind [$ 0.05 USD] +Coolcatcool: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 6d, Kc ] +zlodeu123 folds +EricBlade folds +gabitzatoade folds +Miazza raises [$ 0.35 USD] +N0pr3s3n7 folds +Coolcatcool raises [$ 0.50 USD] +Miazza folds +Coolcatcool does not show cards +Coolcatcool wins $ 0.75 USD from main pot + + + +Everleaf Gaming Game #196322353 +***** Hand history for game #196322353 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:38:57 +Table Cortland XIV +Seat 5 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.55 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 4.50 USD ) +Seat 5: N0pr3s3n7 ( $ 10.56 USD ) +Seat 6: Coolcatcool ( $ 8.55 USD ) +Coolcatcool: posts small blind [$ 0.05 USD] +zlodeu123: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 3h, 9s ] +EricBlade folds +gabitzatoade folds +Miazza folds +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 does not show cards +zlodeu123 wins $ 0.10 USD from main pot + + + +Everleaf Gaming Game #196322422 +***** Hand history for game #196322422 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:39:15 +Table Cortland XIV +Seat 6 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.30 USD ) +Seat 2: EricBlade ( $ 5.55 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 4.50 USD ) +Seat 5: N0pr3s3n7 ( $ 10.56 USD ) +Seat 6: Coolcatcool ( $ 8.50 USD ) +zlodeu123: posts small blind [$ 0.05 USD] +EricBlade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ Kd, 4h ] +gabitzatoade folds +Miazza folds +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 folds +EricBlade does not show cards +EricBlade wins $ 0.10 USD from main pot + + + +Everleaf Gaming Game #196322487 +***** Hand history for game #196322487 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:39:32 +Table Cortland XIV +Seat 1 is the button +Total number of players: 6 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.60 USD ) +Seat 3: gabitzatoade ( $ 5.72 USD ) +Seat 4: Miazza ( $ 4.50 USD ) +Seat 5: N0pr3s3n7 ( $ 10.56 USD ) +Seat 6: Coolcatcool ( $ 8.50 USD ) +EricBlade: posts small blind [$ 0.05 USD] +gabitzatoade: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ 9h, Th ] +Miazza folds +N0pr3s3n7 folds +Coolcatcool folds +zlodeu123 folds +EricBlade raises [$ 0.25 USD] +gabitzatoade calls [$ 0.20 USD] +** Dealing Flop ** [ 3d, 5d, 6c ] +EricBlade checks +gabitzatoade: bets [$ 0.40 USD] +EricBlade folds +gabitzatoade does not show cards +gabitzatoade wins $ 0.57 USD from main pot + + + +Everleaf Gaming Game #196322581 +***** Hand history for game #196322581 ***** +Blinds $0.05/$0.10 NL Hold'em - 2010/08/29 - 20:39:58 +Table Cortland XIV +Seat 2 is the button +Total number of players: 5 +Seat 1: zlodeu123 ( $ 11.25 USD ) +Seat 2: EricBlade ( $ 5.30 USD ) +Seat 3: gabitzatoade ( $ 5.99 USD ) +Seat 4: Miazza ( $ 4.50 USD ) +Seat 5: N0pr3s3n7 ( $ 10.56 USD ) +Seat 6: SAVCOMP ( new player ) +gabitzatoade: posts small blind [$ 0.05 USD] +Miazza: posts big blind [$ 0.10 USD] +** Dealing down cards ** +Dealt to EricBlade [ As, 4d ] +N0pr3s3n7 folds +zlodeu123 raises [$ 0.35 USD] +EricBlade folds +gabitzatoade calls [$ 0.30 USD] +SAVCOMP has joined the table +Miazza folds +** Dealing Flop ** [ 3h, 7h, Tc ] +gabitzatoade checks +zlodeu123 checks +** Dealing Turn ** [ Ks ] +gabitzatoade: bets [$ 0.30 USD] +zlodeu123 raises [$ 0.80 USD] +gabitzatoade calls [$ 0.50 USD] +** Dealing River ** [ Ts ] +gabitzatoade: bets [$ 2 USD] +zlodeu123 calls [$ 2 USD] +gabitzatoade shows [ 8s, 7s ] two pairs, tens and sevens +zlodeu123 shows [ Kd, Ad ] two pairs, kings and tens +zlodeu123 wins $ 6.08 USD from main pot with two pairs, kings and tens [ Ad, Kd, Ks, Tc, Ts ] + + + From 1f2c320fd2aa8dbe55182481ab4d19e4fb262f88 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 30 Aug 2010 01:19:23 +0200 Subject: [PATCH 038/217] l10n: add missing gettextifications in GuiDatabase --- pyfpdb/GuiDatabase.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index e85e3057..d6eaf14f 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -403,8 +403,7 @@ class GuiDatabase: status = "failed" icon = gtk.STOCK_CANCEL if err_msg: - log.info( _('db connection to ') + str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' - + err_msg ) + log.info( _('db connection to %s, %s, %s, %s, %s failed: %s') % (str(dbms_num), host, name, user, passwd, err_msg)) return( status, err_msg, icon ) @@ -412,7 +411,7 @@ class GuiDatabase: class AddDB(gtk.Dialog): def __init__(self, config, parent): - log.debug("AddDB starting") + log.debug(_("AddDB starting")) self.dbnames = { 'Sqlite' : Configuration.DATABASE_TYPE_SQLITE , 'MySQL' : Configuration.DATABASE_TYPE_MYSQL , 'PostgreSQL' : Configuration.DATABASE_TYPE_POSTGRESQL @@ -421,7 +420,7 @@ class AddDB(gtk.Dialog): # create dialog and add icon and label super(AddDB,self).__init__( parent=parent , flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT - , title="Add New Database" + , title=_("Add New Database") , buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT ,gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT) ) # , buttons=btns @@ -489,7 +488,7 @@ class AddDB(gtk.Dialog): def run(self): response = super(AddDB,self).run() - log.debug("adddb.run: response is "+str(response)+" accept is "+str(int(gtk.RESPONSE_ACCEPT))) + log.debug(_("addDB.run: response is %s accept is %s" % (str(response), str(int(gtk.RESPONSE_ACCEPT))))) ok,retry = False,True while response == gtk.RESPONSE_ACCEPT: @@ -503,7 +502,7 @@ class AddDB(gtk.Dialog): ,name, db_desc, user, passwd, host) = ("error", "error", None, None, None ,None, None, None, None, None) if ok: - log.debug("start creating new db") + log.debug(_("start creating new db")) # add a new db master_password = None dbms = self.dbnames[ self.cb_dbms.get_active_text() ] @@ -522,7 +521,7 @@ class AddDB(gtk.Dialog): # test db after creating? status, err_msg, icon = GuiDatabase.testDB(self.config, dbms, dbms_num, name, user, passwd, host) - log.debug('tested new db, result='+str((status,err_msg))) + log.debug(_('tested new db, result=%s') % str((status,err_msg))) if status == 'ok': #dia = InfoBox( parent=self, str1=_('Database created') ) str1 = _('Database created') @@ -541,7 +540,7 @@ class AddDB(gtk.Dialog): """check fields and return true/false according to whether user wants to try again return False if fields are ok """ - log.debug("check_fields: starting") + log.debug(_("check_fields: starting")) try_again = False ok = True @@ -573,11 +572,11 @@ class AddDB(gtk.Dialog): # checks for postgres pass else: - msg = "Unknown Database Type selected" + msg = _("Unknown Database Type selected") ok = False if not ok: - log.debug("check_fields: open dialog") + log.debug(_("check_fields: open dialog")) dia = gtk.MessageDialog( parent=self , flags=gtk.DIALOG_DESTROY_WITH_PARENT , type=gtk.MESSAGE_ERROR @@ -590,14 +589,14 @@ class AddDB(gtk.Dialog): dia.vbox.add(l) dia.show_all() ret = dia.run() - log.debug("check_fields: ret is "+str(ret)+" cancel is "+str(int(gtk.RESPONSE_CANCEL))) + log.debug(_("check_fields: ret is %s cancel is %s" % (str(ret), str(int(gtk.RESPONSE_CANCEL))))) if ret == gtk.RESPONSE_YES: try_again = True - log.debug("check_fields: destroy dialog") + log.debug(_("check_fields: destroy dialog")) dia.hide() dia.destroy() - log.debug("check_fields: returning ok as "+str(ok)+", try_again as "+str(try_again)) + log.debug(_("check_fields: returning ok as %s, try_again as %s") % (str(ok), str(try_again))) return(ok,try_again) def db_type_changed(self, widget, data): From 05220f1c6f651ed7920eb02d560bca737969ac25 Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Mon, 30 Aug 2010 01:21:55 +0200 Subject: [PATCH 039/217] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 209 +++++++++++++++--------------------- 1 file changed, 87 insertions(+), 122 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index bc8be173..b33e9e57 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-29 22:08+CEST\n" -"PO-Revision-Date: 2010-08-29 14:25+0200\n" +"PO-Revision-Date: 2010-08-30 01:20+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -28,17 +28,16 @@ msgid "reading antes" msgstr "antek olvasása" #: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 -#, fuzzy msgid "No bringin found." -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található." #: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 msgid "No small blind" -msgstr "" +msgstr "Nincs kisvak" #: AbsoluteToFpdb.py:270 msgid "Absolute readStudPlayerCards is only a stub." -msgstr "" +msgstr "Az Absolute terem readStudPlayerCards funkciója csak egy csonk." #: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 #: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 @@ -72,11 +71,11 @@ msgstr "GameInfo regex nem illeszkedik" #: BetfairToFpdb.py:130 msgid "readPlayerStacks: Less than 2 players found in a hand" -msgstr "" +msgstr "readPlayerStacks: Kettőnél kevesebb játékost találtam egy leosztásban" #: BetfairToFpdb.py:170 msgid "No bringin found" -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található" #: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" @@ -109,9 +108,10 @@ msgstr "" " vagy itt: %s\n" #: Configuration.py:135 Configuration.py:136 -#, fuzzy msgid "Error copying .example config file, cannot fall back. Exiting.\n" -msgstr "Hiba a .example fájl másolása közben, nem tudom folytatni. Kilépés.\n" +msgstr "" +"Hiba a .example konfigurációs fájl másolása közben, nem tudom folytatni. " +"Kilépés.\n" #: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" @@ -202,9 +202,8 @@ msgid "Error parsing %s. See error log file." msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." #: Configuration.py:831 -#, fuzzy msgid "Error parsing example file %s. See error log file." -msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." +msgstr "Hiba a(z) %s mintafájl értelmezése közben. Nézz bele a hibanaplóba." #: Database.py:74 msgid "Not using sqlalchemy connection pool." @@ -516,7 +515,7 @@ msgstr "nyomj ENTER-t a folytatáshoz" #: EverleafToFpdb.py:264 msgid "Everleaf readStudPlayerCards is only a stub." -msgstr "" +msgstr "Az Everleaf terem readStudPlayerCards funkciója csak egy csonk." #: Filters.py:62 msgid "All" @@ -567,9 +566,8 @@ msgid "Grouping:" msgstr "Csoportosítás:" #: Filters.py:66 -#, fuzzy msgid "Show Position Stats" -msgstr "Pozíció" +msgstr "Pozíciók" #: Filters.py:67 TourneyFilters.py:60 msgid "Date:" @@ -645,11 +643,11 @@ msgstr "Nem található játék az adatbázisban" #: Filters.py:894 msgid "From:" -msgstr "" +msgstr "Ettől:" #: Filters.py:908 msgid "To:" -msgstr "" +msgstr "Eddig:" #: Filters.py:913 msgid " Clear Dates " @@ -665,77 +663,75 @@ msgstr "Kész" #: FulltiltToFpdb.py:361 msgid "Player bringing in: %s for %s" -msgstr "" +msgstr "Nyitó hívás: %s hív %s-t" #: FulltiltToFpdb.py:364 -#, fuzzy msgid "No bringin found, handid =%s" -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található, leosztásazonosító = %s" #: FulltiltToFpdb.py:421 -#, fuzzy msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" -msgstr "DEBUG: nem ismert readAction: '%s' '%s'" +msgstr "FullTilt: DEBUG: nem ismert readAction: '%s' '%s'" #: FulltiltToFpdb.py:497 msgid "determineTourneyType : Parsing NOK" -msgstr "" +msgstr "determineTourneyType : értelmezés nem OK" #: FulltiltToFpdb.py:555 msgid "Unable to get a valid Tournament ID -- File rejected" -msgstr "" +msgstr "Nem sikerült érvényes versenyazonosítót találni --- A fájl elutasítva" #: FulltiltToFpdb.py:586 msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" msgstr "" +"Eltérés a beülők mértéke között a fejlécben (%s) és a Beülő mezőben (%s)" #: FulltiltToFpdb.py:593 msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" msgstr "" +"Eltérés a díjak mértéke között a fejlécben (%s) és a Beülő mezőben (%s)" #: FulltiltToFpdb.py:597 msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" msgstr "" +"Nem sikerült beülőt meghatározni ehhez a versenyhez : feltételezem, hogy ez " +"egy freeroll" #: FulltiltToFpdb.py:698 msgid "FullTilt: Player finishing stats unreadable : %s" -msgstr "" +msgstr "FullTilt: A következő játékos helyezési adata nem olvashatóak : %s" #: FulltiltToFpdb.py:707 msgid "FullTilt: %s not found in tourney.ranks ..." -msgstr "" +msgstr "FullTilt: %s nem található a verseny helyezései között ..." #: FulltiltToFpdb.py:709 msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" -msgstr "" +msgstr "FullTilt: Hibás értelmezés : a helyezések nem egyeznek : %s / %s" #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -#, fuzzy msgid " Start _Auto Import " -msgstr " _AutoImport indítása " +msgstr " _Auto Import indítása " #: GuiAutoImport.py:135 -#, fuzzy msgid "Auto Import Ready." -msgstr "AutoImport kész." +msgstr "Auto Import kész." #: GuiAutoImport.py:148 -#, fuzzy msgid "Please choose the path that you want to Auto Import" -msgstr "Válaszd ki a könyvtárat az AutoImporthoz" +msgstr "Válaszd ki a könyvtárat az Auto Importhoz" #: GuiAutoImport.py:171 msgid " _Auto Import Running " -msgstr " _AutoImport fut " +msgstr " _Auto Import fut " #: GuiAutoImport.py:182 -#, fuzzy msgid " Stop _Auto Import " -msgstr " _AutoImport leállítása " +msgstr " _Auto Import leállítása " #: GuiAutoImport.py:207 msgid "" @@ -743,12 +739,11 @@ msgid "" "Global lock taken ... Auto Import Started.\n" msgstr "" "\n" -"Globális zárolás OK ... AutoImport elindítva.\n" +"Globális zárolás OK ... Auto Import elindítva.\n" #: GuiAutoImport.py:209 -#, fuzzy msgid " _Stop Auto Import " -msgstr " _AutoImport leállítása " +msgstr " _Auto Import leállítása " #: GuiAutoImport.py:225 msgid "opening pipe to HUD" @@ -763,31 +758,28 @@ msgstr "" "*** GuiAutoImport Hiba a cső nyitásakor: " #: GuiAutoImport.py:249 -#, fuzzy msgid "" "\n" "Auto Import aborted - global lock not available" msgstr "" "\n" -"AutoImport megszakítva - nem elérhető a globális zárolás" +"Auto Import megszakítva - nem elérhető a globális zárolás" #: GuiAutoImport.py:254 -#, fuzzy msgid "" "\n" "Stopping Auto Import - global lock released." msgstr "" "\n" -"AutoImport leállítása - globális zárolás feloldva." +"Auto Import leállítása - globális zárolás feloldva." #: GuiAutoImport.py:256 -#, fuzzy msgid "" "\n" " * Stop Auto Import: HUD already terminated" msgstr "" "\n" -" * AutoImport megállítása: A HUD már nem fut" +" * Auto Import megállítása: A HUD már nem fut" #: GuiAutoImport.py:283 msgid "Browse..." @@ -824,7 +816,6 @@ msgid "Import Complete" msgstr "Importálás kész" #: GuiBulkImport.py:139 -#, fuzzy msgid "bulk import aborted - global lock not available" msgstr "importálás megszakítva - nem elérhető a globális zárolás" @@ -958,17 +949,16 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" -msgstr "" +msgstr "Hozzá_adás" #: GuiDatabase.py:121 -#, fuzzy msgid "_Refresh" -msgstr "Frissítés" +msgstr "F_rissítés" #: GuiDatabase.py:125 msgid "Type" @@ -996,7 +986,7 @@ msgstr "Kiszolgáló" #: GuiDatabase.py:131 msgid "Open" -msgstr "" +msgstr "Megnyitva" #: GuiDatabase.py:132 msgid "Status" @@ -1011,9 +1001,8 @@ msgid "finished." msgstr "befejezve." #: GuiDatabase.py:303 -#, fuzzy msgid "loadDbs error: " -msgstr "loaddbs hiba: " +msgstr "loadDbs hiba: " #: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 msgid "***sortCols error: " @@ -1024,9 +1013,8 @@ msgid "sortCols error: " msgstr "sortCols hiba: " #: GuiDatabase.py:371 -#, fuzzy msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" -msgstr "loaddbs: kapcolódási próbálkozás: %s/%s, %s, %s/%s" +msgstr "testDB: kapcsolódási kísérlet: %s/%s, %s, %s/%s" #: GuiDatabase.py:374 msgid " connected ok" @@ -1054,83 +1042,71 @@ msgid "Please check that the MySQL service has been started" msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" #: GuiDatabase.py:392 fpdb.pyw:891 -#, fuzzy msgid "" "PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" -"Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " +"PostgreSQL szerver jelenti: A hozzáférés megtagadva. Megfelelőek a " "jogosultságaid?" #: GuiDatabase.py:395 fpdb.pyw:893 -#, fuzzy msgid "PostgreSQL client reports: Unable to connect - " -msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " +msgstr "PostgreSQL kliens jelenti: Nem sikerült a kapcsolódás - " #: GuiDatabase.py:396 fpdb.pyw:894 -#, fuzzy msgid "Please check that the PostgreSQL service has been started" -msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" +msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 -#, fuzzy msgid "db connection to " -msgstr "folytató nyitás %" +msgstr "kapcsolódás az adatbázishoz " #: GuiDatabase.py:434 -#, fuzzy msgid "DB Type" -msgstr "Típus" +msgstr "Adatbázis típus" #: GuiDatabase.py:444 -#, fuzzy msgid "DB Name" -msgstr "Név" +msgstr "Adatbázis név" #: GuiDatabase.py:452 -#, fuzzy msgid "DB Description" -msgstr "Leírás" +msgstr "Adatbázis leírás" #: GuiDatabase.py:473 -#, fuzzy msgid "Host Computer" -msgstr "Importálás kész" +msgstr "Kiszolgáló" #: GuiDatabase.py:528 -#, fuzzy msgid "Database created" -msgstr "A_datbázis" +msgstr "Adatbázis létrehozva" #: GuiDatabase.py:531 -#, fuzzy msgid "Database creation failed" -msgstr " index létrehozása nem sikerült: " +msgstr "Adatbázis létrehozása nem sikerült" #: GuiDatabase.py:550 msgid "No Database Name given" -msgstr "" +msgstr "Nem lett adatbázis név megadva" #: GuiDatabase.py:553 msgid "No Database Description given" -msgstr "" +msgstr "Nem lett adatbázis leírás megadva" #: GuiDatabase.py:556 -#, fuzzy msgid "No Username given" -msgstr "Felhasználónév" +msgstr "Nem lett felhasználónév megadva" #: GuiDatabase.py:559 -#, fuzzy msgid "No Password given" -msgstr "Jelszó" +msgstr "Nem lett jelszó megadva" #: GuiDatabase.py:562 msgid "No Host given" -msgstr "" +msgstr "Nem lett kiszolgáló megadva" #: GuiDatabase.py:589 msgid "Do you want to try again?" -msgstr "" +msgstr "Meg akarod próbálni újból?" #: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" @@ -1487,11 +1463,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -1714,9 +1690,9 @@ msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "Hand.insert(): %s leosztásazonosító duplikáció" #: Hand.py:318 -#, fuzzy msgid "markstreets didn't match - Assuming hand %s was cancelled" -msgstr "markStreets nem egyezik - Leosztás érvénytelenítését feltételezem" +msgstr "" +"markstreets nem egyezik - A(z) %s leosztás érvénytelenítését feltételezem" #: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" @@ -1828,7 +1804,7 @@ msgstr "%s utcán %s játékos kiegészít erre: %s" #: Hand.py:1270 msgid "Bringin: %s, %s" -msgstr "Beülő: %s, %s" +msgstr "Nyitó hívás: %s, %s" #: Hand.py:1310 msgid "*** 3RD STREET ***" @@ -2149,13 +2125,13 @@ msgid "Unable to recognise gametype from: '%s'" msgstr "Nem sikerült felismerni a játéktípust innen: '%s'" #: OnGameToFpdb.py:192 -#, fuzzy msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" -msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" +msgstr "" +"determineGameType: limit nem található ebben: self.limits(%s). leosztás: '%s'" #: OnGameToFpdb.py:194 msgid "limit not found in self.limits(%s). hand: '%s'" -msgstr "" +msgstr "limit nem található ebben: self.limits(%s). leosztás: '%s'" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 #: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 @@ -2163,9 +2139,8 @@ msgid "readButton: not found" msgstr "readButton: nem található" #: OnGameToFpdb.py:288 -#, fuzzy msgid "readBlinds in noSB exception - no SB created" -msgstr "readBlinds noSB-n belül hiba" +msgstr "noSB-n belüli readBlinds hiba - kisvak nem lett létrehozva" #: Options.py:40 msgid "If passed error output will go to the console rather than ." @@ -2665,7 +2640,7 @@ msgstr "incrementPlayerWinnings: név : '%s' - plusz nyeremény (%s)" #: UltimateBetToFpdb.py:42 msgid "Initialising UltimateBetconverter class" -msgstr "" +msgstr "UltimateBetconverter osztály inicializálása" #: WinTables.py:82 msgid "Window %s not found. Skipping." @@ -2844,24 +2819,21 @@ msgid "Confirm deleting and recreating tables" msgstr "Erősítsd meg a táblák törlését és újra létrehozását" #: fpdb.pyw:547 -#, fuzzy msgid "Please confirm that you want to (re-)create the tables." msgstr "" -"Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." +"Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat." #: fpdb.pyw:548 -#, fuzzy msgid "" " If there already are tables in the database %s on %s they will be deleted " "and you will have to re-import your histories.\n" msgstr "" -"), akkor azok törölve lesznek, és újra kell importálnod a " -"leosztástörténeteket.\n" -"Ja, és ez eltarthat egy darabig:)" +" Ha már vannak táblák a(z) %s adatbázisban a(z) %s kiszolgálón, akkor azok " +"törölve lesznek, és újra kell majd importálnod a leosztástörténeteket.\n" #: fpdb.pyw:549 msgid "This may take a while." -msgstr "" +msgstr "Ez eltarthat egy darabig." #: fpdb.pyw:574 msgid "User cancelled recreating tables" @@ -2978,7 +2950,7 @@ msgstr "A" #: fpdb.pyw:817 msgid "_Auto Import and HUD" -msgstr "_AutoImport és HUD" +msgstr "_Auto Import és HUD" #: fpdb.pyw:818 msgid "H" @@ -3103,13 +3075,13 @@ msgstr "" "%s.\n" #: fpdb.pyw:862 -#, fuzzy msgid "" "Edit your screen_name and hand history path in the supported_sites section " "of the Preferences window (Main menu) before trying to import hands." msgstr "" -"résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál leosztásokat " -"importálni." +"Állítsd be a screen_name-et és a leosztástörténetek útvonalát a " +"supported_sites résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál " +"leosztásokat importálni." #: fpdb.pyw:884 msgid "Connected to SQLite: %s" @@ -3147,22 +3119,20 @@ msgstr "" "kiszolgálón" #: fpdb.pyw:951 -#, fuzzy msgid "" "\n" "Global lock taken by %s" msgstr "" "\n" -"Globális zárolást végzett:" +"Globális zárolást végzett %s" #: fpdb.pyw:954 -#, fuzzy msgid "" "\n" "Failed to get global lock, it is currently held by %s" msgstr "" "\n" -"Globális zárolás meghiúsult, jelenleg már zárolta:" +"Globális zárolás meghiúsult, %s már zárolta" #: fpdb.pyw:964 msgid "Quitting normally" @@ -3174,7 +3144,7 @@ msgstr "Globális zárolás feloldva.\n" #: fpdb.pyw:995 msgid "Auto Import" -msgstr "AutoImport" +msgstr "Auto Import" #: fpdb.pyw:1002 msgid "Bulk Import" @@ -3258,8 +3228,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help" @@ -3270,7 +3240,6 @@ msgid "Graphs" msgstr "Grafikonok" #: fpdb.pyw:1119 -#, fuzzy msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " @@ -3278,7 +3247,7 @@ msgid "" msgstr "" "\n" "Megjegyzés: a hibakimenet átirányítva az fpdb-errors.txt és HUD-errors.txt " -"fájlokba itt:\n" +"fájlokba itt: %s" #: fpdb.pyw:1148 msgid "fpdb starting ..." @@ -3289,7 +3258,6 @@ msgid "FPDB WARNING" msgstr "FPDB FIGYELMEZTETÉS" #: fpdb.pyw:1224 -#, fuzzy msgid "" "WARNING: Unable to find output hand history directory %s\n" "\n" @@ -3329,7 +3297,6 @@ msgstr "" "pénznem még nem támogatott" #: fpdb_import.py:227 -#, fuzzy msgid "Attempted to add non-directory '%s' as an import directory" msgstr "Nem könyvtár ('%s') megadása importálási könyvtárként" @@ -3362,14 +3329,12 @@ msgid "No need to rebuild hudcache." msgstr "Nem szükséges a HUD gyorstár újraépítése." #: fpdb_import.py:313 -#, fuzzy msgid "sending finish message queue length =" -msgstr "befejező üzenet küldése; qlen =" +msgstr "befejező üzenet küldése; sor hossza =" #: fpdb_import.py:439 fpdb_import.py:441 -#, fuzzy msgid "Converting %s" -msgstr "Konvertálás" +msgstr "%s konvertálása" #: fpdb_import.py:477 msgid "Hand processed but empty" From 54f7410e49c05862c8c72a5928cdf523bf87e104 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 30 Aug 2010 01:31:14 +0200 Subject: [PATCH 040/217] l10n: update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 20424 -> 20643 bytes pyfpdb/locale/fpdb-de_DE.po | 88 +++++++++++++++------ pyfpdb/locale/fpdb-en_GB.pot | 76 +++++++++++++----- pyfpdb/locale/fpdb-hu_HU.po | 114 +++++++++++++++++++-------- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 59291 -> 66341 bytes 5 files changed, 196 insertions(+), 82 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index 5b67149b32a449e4d703768bf8d5603198bc4a95..b41b0c9387d86f4f4a4f9ecd804430784738d416 100644 GIT binary patch delta 3933 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 diff --git a/pyfpdb/locale/fpdb-de_DE.po b/pyfpdb/locale/fpdb-de_DE.po index 622557bc..47bacde7 100644 --- a/pyfpdb/locale/fpdb-de_DE.po +++ b/pyfpdb/locale/fpdb-de_DE.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" -"PO-Revision-Date: 2010-08-29 20:45+0200\n" +"POT-Creation-Date: 2010-08-30 01:19+CEST\n" +"PO-Revision-Date: 2010-08-30 00:57+0200\n" "Last-Translator: Steffen Schaumburg \n" "Language-Team: Fpdb\n" "Language: de\n" @@ -18,21 +18,21 @@ msgstr "" #: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 #: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 msgid "Didn't match re_HandInfo" -msgstr "" +msgstr "Keine Treffer für re_HandInfo" #: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 #: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 #: Win2dayToFpdb.py:197 msgid "reading antes" -msgstr "" +msgstr "Lese Antes" #: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 msgid "No bringin found." -msgstr "" +msgstr "Kein Bringin gefunden." #: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 msgid "No small blind" -msgstr "" +msgstr "Keine Small Blind" #: AbsoluteToFpdb.py:270 msgid "Absolute readStudPlayerCards is only a stub." @@ -935,11 +935,11 @@ msgstr "Name" msgid "Description" msgstr "Beschreibung" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "Benutzername" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "Passwort" @@ -1017,62 +1017,100 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" #: GuiDatabase.py:406 -msgid "db connection to " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +#, fuzzy +msgid "AddDB starting" +msgstr "fpdb startet ..." + +#: GuiDatabase.py:423 +#, fuzzy +msgid "Add New Database" +msgstr "_Datenbank" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +msgid "start creating new db" +msgstr "" + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "Datenbank erstellt" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "Datenbankerstellung fehlgeschlagen" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +msgid "check_fields: starting" +msgstr "" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "Kein Datenbankname eingegeben" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "Keine Datenbankbeschreibung eingegeben" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "Kein Benutzername eingegeben" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "Kein Passwort eingegeben" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "Kein Host eingegeben" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +msgid "Unknown Database Type selected" +msgstr "" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "Wollen Sie es nochmal versuchen?" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1996,9 +2034,7 @@ msgid "Error finding actual seat.\n" msgstr "" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" #: Hud.py:638 diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index 71ec500e..89cd55e6 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" +"POT-Creation-Date: 2010-08-30 01:30+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -910,11 +910,11 @@ msgstr "" msgid "Description" msgstr "" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "" @@ -987,62 +987,98 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "" #: GuiDatabase.py:406 -msgid "db connection to " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +msgid "AddDB starting" +msgstr "" + +#: GuiDatabase.py:423 +msgid "Add New Database" +msgstr "" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +msgid "start creating new db" +msgstr "" + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +msgid "check_fields: starting" +msgstr "" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +msgid "Unknown Database Type selected" +msgstr "" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1959,9 +1995,7 @@ msgid "" msgstr "" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" #: Hud.py:638 diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index b33e9e57..f7532086 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" +"POT-Creation-Date: 2010-08-30 01:30+CEST\n" "PO-Revision-Date: 2010-08-30 01:20+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -949,8 +949,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" -"s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " +"%s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" @@ -972,11 +972,11 @@ msgstr "Név" msgid "Description" msgstr "Leírás" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "Felhasználónév" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "Jelszó" @@ -1057,62 +1057,103 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 -msgid "db connection to " -msgstr "kapcsolódás az adatbázishoz " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" +msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +#, fuzzy +msgid "AddDB starting" +msgstr "readBlinds indítása" + +#: GuiDatabase.py:423 +#, fuzzy +msgid "Add New Database" +msgstr "A_datbázis" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "Adatbázis típus" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "Adatbázis név" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "Adatbázis leírás" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "Kiszolgáló" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +#, fuzzy +msgid "start creating new db" +msgstr "Hiba az indexek létrehozása közben: " + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "Adatbázis létrehozva" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "Adatbázis létrehozása nem sikerült" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +#, fuzzy +msgid "check_fields: starting" +msgstr "readBlinds indítása" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "Nem lett adatbázis név megadva" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "Nem lett adatbázis leírás megadva" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "Nem lett felhasználónév megadva" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "Nem lett jelszó megadva" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "Nem lett kiszolgáló megadva" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +#, fuzzy +msgid "Unknown Database Type selected" +msgstr "Ismeretlen játéktípus: '%s'" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "Meg akarod próbálni újból?" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "Napló böngésző (teszt)" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "Napló böngésző" @@ -1463,11 +1504,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2079,12 +2120,8 @@ msgid "Error finding actual seat.\n" msgstr "Hiba az aktuális szék keresése közben.\n" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" -"------------------------------------------------------------\n" -"HUD készítése ebből a leosztásból: %s\n" #: Hud.py:638 msgid "" @@ -3228,8 +3265,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" -"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " +"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help" @@ -3411,6 +3448,16 @@ msgstr "" "Nem találhatóak a GTK könyvtárak az útvonaladban - telepítsd a GTK-t, vagy " "állítsd be kézzel az útvonalat\n" +#~ msgid "db connection to " +#~ msgstr "kapcsolódás az adatbázishoz " + +#~ msgid "" +#~ "------------------------------------------------------------\n" +#~ "Creating hud from hand %s\n" +#~ msgstr "" +#~ "------------------------------------------------------------\n" +#~ "HUD készítése ebből a leosztásból: %s\n" + #~ msgid "Fatal Error - Config File Missing" #~ msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" @@ -3474,9 +3521,6 @@ msgstr "" #~ msgid "Table not found." #~ msgstr "Az asztal nem található." -#~ msgid "readBlinds starting" -#~ msgstr "readBlinds indítása" - #~ msgid "re_postSB failed, hand=" #~ msgstr "re_postSB nem sikerült, leosztás=" diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index 2c4ea94ad6821a6a58ae76a1be9d08ba23e49357..37b38b530f781da5a262306de61cd16951374215 100644 GIT binary patch delta 18081 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 Date: Mon, 30 Aug 2010 01:33:44 +0200 Subject: [PATCH 041/217] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 45 +++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index f7532086..edd2a8f5 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-30 01:30+CEST\n" -"PO-Revision-Date: 2010-08-30 01:20+0200\n" +"PO-Revision-Date: 2010-08-30 01:33+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -949,8 +949,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" @@ -1058,17 +1058,15 @@ msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 msgid "db connection to %s, %s, %s, %s, %s failed: %s" -msgstr "" +msgstr "adatbázis kapcsolódás sikertelen: %s, %s, %s, %s, %s hibaüzenet: %s" #: GuiDatabase.py:414 -#, fuzzy msgid "AddDB starting" -msgstr "readBlinds indítása" +msgstr "AddDB indítása" #: GuiDatabase.py:423 -#, fuzzy msgid "Add New Database" -msgstr "A_datbázis" +msgstr "Új adatbázis hozzáadása" #: GuiDatabase.py:433 msgid "DB Type" @@ -1087,13 +1085,12 @@ msgid "Host Computer" msgstr "Kiszolgáló" #: GuiDatabase.py:505 -#, fuzzy msgid "start creating new db" -msgstr "Hiba az indexek létrehozása közben: " +msgstr "új adatbázis létrehozásának indítása" #: GuiDatabase.py:524 msgid "tested new db, result=%s" -msgstr "" +msgstr "új adatbázis tesztelve, eredmény=%s" #: GuiDatabase.py:527 msgid "Database created" @@ -1104,9 +1101,8 @@ msgid "Database creation failed" msgstr "Adatbázis létrehozása nem sikerült" #: GuiDatabase.py:543 -#, fuzzy msgid "check_fields: starting" -msgstr "readBlinds indítása" +msgstr "check_fields: indítás" #: GuiDatabase.py:549 msgid "No Database Name given" @@ -1129,13 +1125,12 @@ msgid "No Host given" msgstr "Nem lett kiszolgáló megadva" #: GuiDatabase.py:575 -#, fuzzy msgid "Unknown Database Type selected" -msgstr "Ismeretlen játéktípus: '%s'" +msgstr "Ismeretlen adatbázis típus lett kiválasztva" #: GuiDatabase.py:579 msgid "check_fields: open dialog" -msgstr "" +msgstr "check_fields: párbeszéd nyitása" #: GuiDatabase.py:588 msgid "Do you want to try again?" @@ -1143,11 +1138,11 @@ msgstr "Meg akarod próbálni újból?" #: GuiDatabase.py:595 msgid "check_fields: destroy dialog" -msgstr "" +msgstr "check_fields: párbeszéd lezárása" #: GuiDatabase.py:599 msgid "check_fields: returning ok as %s, try_again as %s" -msgstr "" +msgstr "check_fields: OK visszaadása, mint %s, újrapróbálás, mint %s" #: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" @@ -1504,11 +1499,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2121,7 +2116,7 @@ msgstr "Hiba az aktuális szék keresése közben.\n" #: Hud.py:589 msgid "Creating hud from hand " -msgstr "" +msgstr "HUD készítése ebből a leosztásból: " #: Hud.py:638 msgid "" @@ -3265,8 +3260,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help" From 65642e37df572d8c78085b4a54d4ed27c99a2f1c Mon Sep 17 00:00:00 2001 From: Eric Blade Date: Sun, 29 Aug 2010 22:56:00 -0400 Subject: [PATCH 042/217] cherry picking around a patch that didn't work for me --- pyfpdb/Stats.py | 211 ++++++++++++++++++++++++------------------------ 1 file changed, 105 insertions(+), 106 deletions(-) mode change 100755 => 100644 pyfpdb/Stats.py diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py old mode 100755 new mode 100644 index ffb1e47e..7c6a11f9 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -154,10 +154,10 @@ def vpip(stat_dict, player): _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, - '%3.1f' % (0) + '%', - 'v=%3.1f' % (0) + '%', - 'vpip=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'v=NA', + 'vpip=NA', + '(0/0)', _('Voluntarily Put In Pot Pre-Flop%') ) @@ -175,10 +175,10 @@ def pfr(stat_dict, player): ) except: return (stat, - '%3.1f' % (0) + '%', - 'p=%3.1f' % (0) + '%', - 'pfr=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'pfr=NA', + '(0/0)', _('Pre-Flop Raise %') ) @@ -196,10 +196,10 @@ def wtsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wtsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wtsd=NA', + '(0/0)', _('% went to showdown') ) @@ -217,10 +217,10 @@ def wmsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wmsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wmsd=NA', + '(0/0)', _('% won money at showdown') ) @@ -239,10 +239,10 @@ def profit100(stat_dict, player): except: print _("exception calcing p/100: 100 * %d / %d") % (stat_dict[player]['net'], stat_dict[player]['n']) return (stat, - '%.0f' % (0.0), - 'p=%.0f' % (0.0), - 'p/100=%.0f' % (0.0), - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'p/100=NA', + '(0/0)', _('profit/100hands') ) @@ -261,10 +261,10 @@ def bbper100(stat_dict, player): except: log.info("exception calcing bb/100: "+str(stat_dict[player])) return (stat, - '%.0f' % (0), - 'bb100=%.0f' % (0), - 'bb100=%.0f' % (0), - '(%f)' % (0), + 'NA', + 'bb100=NA', + 'bb100=NA', + '(--)', _('big blinds/100 hands') ) @@ -283,10 +283,10 @@ def BBper100(stat_dict, player): except: log.info(_("exception calcing BB/100: ")+str(stat_dict[player])) return (stat, - '%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - '(%f)' % (0.0), + 'NA', + 'BB100=NA', + 'BB100=NA', + '(--)', _('Big Bets/100 hands') ) @@ -305,13 +305,11 @@ def saw_f(stat_dict, player): ) except: stat = 0.0 - num = 0 - den = 0 return (stat, - '%3.1f' % (stat) + '%', - 'sf=%3.1f' % (stat) + '%', - 'saw_f=%3.1f' % (stat) + '%', - '(%d/%d)' % (num, den), + 'NA', + 'sf=NA', + 'saw_f=NA', + '(0/0)', _('Flop Seen %') ) @@ -338,6 +336,7 @@ def n(stat_dict, player): _('number hands seen') ) except: + # Number of hands shouldn't ever be "NA"; zeroes are better here return (0, '%d' % (0), 'n=%d' % (0), @@ -360,10 +359,10 @@ def fold_f(stat_dict, player): ) except: return (stat, - '%3.1f' % (0) + '%', - 'ff=%3.1f' % (0) + '%', - 'fold_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'ff=NA', + 'fold_f=NA', + '(0/0)', _('folded flop/4th') ) @@ -455,10 +454,10 @@ def three_B(stat_dict, player): _('% 3/4 Bet preflop/3rd')) except: return (stat, - '%3.1f' % (0) + '%', - '3B=%3.1f' % (0) + '%', - '3B_pf=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + '3B=NA', + '3B_pf=NA', + '(0/0)', _('% 3/4 Bet preflop/3rd')) def WMsF(stat_dict, player): @@ -474,10 +473,10 @@ def WMsF(stat_dict, player): _('% won$/saw flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'wf=%3.1f' % (0) + '%', - 'w_w_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'wf=NA', + 'w_w_f=NA', + '(0/0)', _('% won$/saw flop/4th')) def a_freq1(stat_dict, player): @@ -493,10 +492,10 @@ def a_freq1(stat_dict, player): _('Aggression Freq flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a1=%3.1f' % (0) + '%', - 'a_fq_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'a1=NA', + 'a_fq_1=NA', + '(0/0)', _('Aggression Freq flop/4th')) def a_freq2(stat_dict, player): @@ -512,10 +511,10 @@ def a_freq2(stat_dict, player): _('Aggression Freq turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a2=%3.1f' % (0) + '%', - 'a_fq_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'a2=NA', + 'a_fq_2=NA', + '(0/0)', _('Aggression Freq turn/5th')) def a_freq3(stat_dict, player): @@ -531,10 +530,10 @@ def a_freq3(stat_dict, player): _('Aggression Freq river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a3=%3.1f' % (0) + '%', - 'a_fq_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Aggression Freq river/6th')) def a_freq4(stat_dict, player): @@ -550,10 +549,10 @@ def a_freq4(stat_dict, player): _('Aggression Freq 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a4=%3.1f' % (0) + '%', - 'a_fq_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'a4=NA', + 'a_fq_4=NA', + '(0/0)', _('Aggression Freq 7th')) def a_freq_123(stat_dict, player): @@ -576,10 +575,10 @@ def a_freq_123(stat_dict, player): _('Post-Flop Aggression Freq')) except: return (stat, - '%2.0f' % (0) + '%', - 'a3=%2.0f' % (0) + '%', - 'a_fq_3=%2.0f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Post-Flop Aggression Freq')) def agg_freq(stat_dict, player): @@ -604,10 +603,10 @@ def agg_freq(stat_dict, player): _('Aggression Freq')) except: return (stat, - '%2.1f' % (0) + '%', - 'af=%3.1f' % (0) + '%', - 'agg_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'af=NA', + 'agg_f=NA', + '(0/0)', _('Aggression Freq')) def agg_fact(stat_dict, player): @@ -630,10 +629,10 @@ def agg_fact(stat_dict, player): _('Aggression Factor')) except: return (stat, - '%2.2f' % (0) , - 'afa=%2.2f' % (0) , - 'agg_fa=%2.2f' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'afa=NA', + 'agg_fa=NA', + '(0/0)', _('Aggression Factor')) def cbet(stat_dict, player): @@ -654,10 +653,10 @@ def cbet(stat_dict, player): _('% continuation bet ')) except: return (stat, - '%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'cbet=NA', + 'cbet=NA', + '(0/0)', _('% continuation bet ')) def cb1(stat_dict, player): @@ -673,10 +672,10 @@ def cb1(stat_dict, player): _('% continuation bet flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb1=%3.1f' % (0) + '%', - 'cb_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'cb1=NA', + 'cb_1=NA', + '(0/0)', _('% continuation bet flop/4th')) def cb2(stat_dict, player): @@ -692,10 +691,10 @@ def cb2(stat_dict, player): _('% continuation bet turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb2=%3.1f' % (0) + '%', - 'cb_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'cb2=NA', + 'cb_2=NA', + '(0/0)', _('% continuation bet turn/5th')) def cb3(stat_dict, player): @@ -711,10 +710,10 @@ def cb3(stat_dict, player): _('% continuation bet river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb3=%3.1f' % (0) + '%', - 'cb_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'cb3=NA', + 'cb_3=NA', + '(0/0)', _('% continuation bet river/6th')) def cb4(stat_dict, player): @@ -730,10 +729,10 @@ def cb4(stat_dict, player): _('% continuation bet 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb4=%3.1f' % (0) + '%', - 'cb_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'cb4=NA', + 'cb_4=NA', + '(0/0)', _('% continuation bet 7th')) def ffreq1(stat_dict, player): @@ -768,10 +767,10 @@ def ffreq2(stat_dict, player): _('% fold frequency turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff2=%3.1f' % (0) + '%', - 'ff_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'ff2=NA', + 'ff_2=NA', + '(0/0)', _('% fold frequency turn/5th')) def ffreq3(stat_dict, player): @@ -787,10 +786,10 @@ def ffreq3(stat_dict, player): _('% fold frequency river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff3=%3.1f' % (0) + '%', - 'ff_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'ff3=NA', + 'ff_3=NA', + '(0/0)', _('% fold frequency river/6th')) def ffreq4(stat_dict, player): @@ -806,10 +805,10 @@ def ffreq4(stat_dict, player): _('% fold frequency 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff4=%3.1f' % (0) + '%', - 'ff_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + 'NA', + 'ff4=NA', + 'ff_4=NA', + '(0/0)', _('% fold frequency 7th')) if __name__== "__main__": From 54279cafefb1848b23807a419830ceb0cf76881e Mon Sep 17 00:00:00 2001 From: Eric Blade Date: Sun, 29 Aug 2010 23:05:05 -0400 Subject: [PATCH 043/217] Revert "Remove trailing percent symbols from HUD values" This reverts commit b4a08af2b1ec56be83280ad12d4359c645b3d0b3. Conflicts: pyfpdb/Stats.py --- pyfpdb/Stats.py | 262 +++++++++++++++++++++++++----------------------- 1 file changed, 136 insertions(+), 126 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index 285a45ea..7c6a11f9 100644 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -78,6 +78,7 @@ log = logging.getLogger("db") re_Places = re.compile("_[0-9]$") +re_Percent = re.compile("%$") # String manipulation import codecs @@ -87,26 +88,35 @@ def do_tip(widget, tip): _tip = Charset.to_utf8(tip) widget.set_tooltip_text(_tip) - def do_stat(stat_dict, player = 24, stat = 'vpip'): match = re_Places.search(stat) - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) - - # If decimal places have been defined, override result[1] - # NOTE: decimal place override ALWAYS assumes the raw result is a - # fraction (x/100); manual decimal places really only make sense for - # percentage values. Also, profit/100 hands (bb/BB) already default - # to three decimal places anyhow, so they are unlikely override - # candidates. - if match: + if match is None: + result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) + else: base = stat[0:-2] places = int(stat[-1:]) - result[1] = '%.*f' % (places, 100.0*result[0]) + result = (0.0, '0.0', 'notset=0', 'notset=0', '0', 'not set') + try: + result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': base, 'player': player}) + except: + pass # + log.info(_("exception getting stat %s for player %s %s") % (base, str(player), str(sys.exc_info()))) + log.debug(_("Stats.do_stat result = %s") % str(result) ) + + match = re_Percent.search(result[1]) + try: + if match is None: + result = (result[0], "%.*f" % (places, result[0]), result[2], result[3], result[4], result[5]) + else: + result = (result[0], "%.*f%%" % (places, 100*result[0]), result[2], result[3], result[4], result[5]) + except: + log.info(_("error: %s") % str(sys.exc_info())) + raise return result # OK, for reference the tuple returned by the stat is: # 0 - The stat, raw, no formating, eg 0.33333333 -# 1 - formatted stat with appropriate precision, eg. 33; shown in HUD +# 1 - formatted stat with appropriate precision and punctuation, eg 33% # 2 - formatted stat with appropriate precision, punctuation and a hint, eg v=33% # 3 - same as #2 except name of stat instead of hint, eg vpip=33% # 4 - the calculation that got the stat, eg 9/27 @@ -137,10 +147,10 @@ def vpip(stat_dict, player): try: stat = float(stat_dict[player]['vpip'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100.0*stat), - 'v=%3.1f%%' % (100.0*stat), - 'vpip=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), + '%3.1f' % (100*stat) + '%', + 'v=%3.1f' % (100*stat) + '%', + 'vpip=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, @@ -157,9 +167,9 @@ def pfr(stat_dict, player): try: stat = float(stat_dict[player]['pfr'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100.0*stat), - 'p=%3.1f%%' % (100.0*stat), - 'pfr=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'p=%3.1f' % (100*stat) + '%', + 'pfr=%3.1f' % (100*stat) + '%', '(%d/%d)' % (stat_dict[player]['pfr'], stat_dict[player]['n']), _('Pre-Flop Raise %') ) @@ -178,10 +188,10 @@ def wtsd(stat_dict, player): try: stat = float(stat_dict[player]['sd'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100.0*stat), - 'w=%3.1f%%' % (100.0*stat), - 'wtsd=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), + '%3.1f' % (100*stat) + '%', + 'w=%3.1f' % (100*stat) + '%', + 'wtsd=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), _('% went to showdown') ) except: @@ -199,9 +209,9 @@ def wmsd(stat_dict, player): try: stat = float(stat_dict[player]['wmsd'])/float(stat_dict[player]['sd']) return (stat, - '%3.1f' % (100.0*stat), - 'w=%3.1f%%' % (100.0*stat), - 'wmsd=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'w=%3.1f' % (100*stat) + '%', + 'wmsd=%3.1f' % (100*stat) + '%', '(%5.1f/%d)' % (float(stat_dict[player]['wmsd']), stat_dict[player]['sd']), _('% won money at showdown') ) @@ -220,9 +230,9 @@ def profit100(stat_dict, player): try: stat = float(stat_dict[player]['net'])/float(stat_dict[player]['n']) return (stat, - '%.0f' % (100.0*stat), - 'p=%.0f' % (100.0*stat), - 'p/100=%.0f' % (100.0*stat), + '%.0f' % (100.0*stat), + 'p=%.0f' % (100.0*stat), + 'p/100=%.0f' % (100.0*stat), '%d/%d' % (stat_dict[player]['net'], stat_dict[player]['n']), _('profit/100hands') ) @@ -242,10 +252,10 @@ def bbper100(stat_dict, player): try: stat = 100.0 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), _('big blinds/100 hands') ) except: @@ -264,10 +274,10 @@ def BBper100(stat_dict, player): try: stat = 50 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), _('Big Bets/100 hands') ) except: @@ -287,10 +297,10 @@ def saw_f(stat_dict, player): den = float(stat_dict[player]['n']) stat = num/den return (stat, - '%3.1f' % (100.0*stat), - 'sf=%3.1f%%' % (100.0*stat), - 'saw_f=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), + '%3.1f' % (100*stat) + '%', + 'sf=%3.1f' % (100*stat) + '%', + 'saw_f=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), _('Flop Seen %') ) except: @@ -341,10 +351,10 @@ def fold_f(stat_dict, player): try: stat = float(stat_dict[player]['fold_2'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100.0*stat), - 'ff=%3.1f%%' % (100.0*stat), - 'fold_f=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), + '%3.1f' % (100*stat) + '%', + 'ff=%3.1f' % (100*stat) + '%', + 'fold_f=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), _('folded flop/4th') ) except: @@ -362,10 +372,10 @@ def steal(stat_dict, player): try: stat = float(stat_dict[player]['steal'])/float(stat_dict[player]['steal_opp']) return (stat, - '%3.1f' % (100.0*stat), - 'st=%3.1f%%' % (100.0*stat), - 'steal=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), + '%3.1f' % (100*stat) + '%', + 'st=%3.1f' % (100*stat) + '%', + 'steal=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), _('% steal attempted') ) except: @@ -377,10 +387,10 @@ def f_SB_steal(stat_dict, player): try: stat = float(stat_dict[player]['sbnotdef'])/float(stat_dict[player]['sbstolen']) return (stat, - '%3.1f' % (100.0*stat), - 'fSB=%3.1f%%' % (100.0*stat), - 'fSB_s=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), + '%3.1f' % (100*stat) + '%', + 'fSB=%3.1f' % (100*stat) + '%', + 'fSB_s=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), _('% folded SB to steal')) except: return (stat, @@ -396,10 +406,10 @@ def f_BB_steal(stat_dict, player): try: stat = float(stat_dict[player]['bbnotdef'])/float(stat_dict[player]['bbstolen']) return (stat, - '%3.1f' % (100.0*stat), - 'fBB=%3.1f%%' % (100.0*stat), - 'fBB_s=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), + '%3.1f' % (100*stat) + '%', + 'fBB=%3.1f' % (100*stat) + '%', + 'fBB_s=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), _('% folded BB to steal')) except: return (stat, @@ -418,10 +428,10 @@ def f_steal(stat_dict, player): stat = float(folded_blind)/float(blind_stolen) return (stat, - '%3.1f' % (100.0*stat), - 'fB=%3.1f%%' % (100.0*stat), - 'fB_s=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (folded_blind, blind_stolen), + '%3.1f' % (100*stat) + '%', + 'fB=%3.1f' % (100*stat) + '%', + 'fB_s=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (folded_blind, blind_stolen), _('% folded blind to steal')) except: return (stat, @@ -437,10 +447,10 @@ def three_B(stat_dict, player): try: stat = float(stat_dict[player]['tb_0'])/float(stat_dict[player]['tb_opp_0']) return (stat, - '%3.1f' % (100.0*stat), - '3B=%3.1f%%' % (100.0*stat), - '3B_pf=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), + '%3.1f' % (100*stat) + '%', + '3B=%3.1f' % (100*stat) + '%', + '3B_pf=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), _('% 3/4 Bet preflop/3rd')) except: return (stat, @@ -456,10 +466,10 @@ def WMsF(stat_dict, player): try: stat = float(stat_dict[player]['w_w_s_1'])/float(stat_dict[player]['saw_1']) return (stat, - '%3.1f' % (100.0*stat), - 'wf=%3.1f%%' % (100.0*stat), - 'w_w_f=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), + '%3.1f' % (100*stat) + '%', + 'wf=%3.1f' % (100*stat) + '%', + 'w_w_f=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), _('% won$/saw flop/4th')) except: return (stat, @@ -475,9 +485,9 @@ def a_freq1(stat_dict, player): try: stat = float(stat_dict[player]['aggr_1'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100.0*stat), - 'a1=%3.1f%%' % (100.0*stat), - 'a_fq_1=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'a1=%3.1f' % (100*stat) + '%', + 'a_fq_1=%3.1f' % (100*stat) + '%', '(%d/%d)' % (stat_dict[player]['aggr_1'], stat_dict[player]['saw_f']), _('Aggression Freq flop/4th')) except: @@ -494,10 +504,10 @@ def a_freq2(stat_dict, player): try: stat = float(stat_dict[player]['aggr_2'])/float(stat_dict[player]['saw_2']) return (stat, - '%3.1f' % (100.0*stat), - 'a2=%3.1f%%' % (100.0*stat), - 'a_fq_2=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), + '%3.1f' % (100*stat) + '%', + 'a2=%3.1f' % (100*stat) + '%', + 'a_fq_2=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), _('Aggression Freq turn/5th')) except: return (stat, @@ -513,9 +523,9 @@ def a_freq3(stat_dict, player): try: stat = float(stat_dict[player]['aggr_3'])/float(stat_dict[player]['saw_3']) return (stat, - '%3.1f' % (100.0*stat), - 'a3=%3.1f%%' % (100.0*stat), - 'a_fq_3=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'a3=%3.1f' % (100*stat) + '%', + 'a_fq_3=%3.1f' % (100*stat) + '%', '(%d/%d)' % (stat_dict[player]['aggr_3'], stat_dict[player]['saw_3']), _('Aggression Freq river/6th')) except: @@ -532,10 +542,10 @@ def a_freq4(stat_dict, player): try: stat = float(stat_dict[player]['aggr_4'])/float(stat_dict[player]['saw_4']) return (stat, - '%3.1f' % (100.0*stat), - 'a4=%3.1f%%' % (100.0*stat), - 'a_fq_4=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), + '%3.1f' % (100*stat) + '%', + 'a4=%3.1f' % (100*stat) + '%', + 'a_fq_4=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), _('Aggression Freq 7th')) except: return (stat, @@ -552,9 +562,9 @@ def a_freq_123(stat_dict, player): stat = float( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] ) / float( stat_dict[player]['saw_1'] + stat_dict[player]['saw_2'] + stat_dict[player]['saw_3']); return (stat, - '%3.1f' % (100.0*stat), - 'afq=%3.1f%%' % (100.0*stat), - 'postf_aggfq=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'afq=%3.1f' % (100*stat) + '%', + 'postf_aggfq=%3.1f' % (100*stat) + '%', '(%d/%d)' % ( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] @@ -586,10 +596,10 @@ def agg_freq(stat_dict, player): stat = float (bet_raise) / float(post_call + post_fold + bet_raise) return (stat, - '%3.1f' % (100.0*stat), - 'afr=%3.1f%%' % (100.0*stat), - 'agg_fr=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), + '%3.1f' % (100*stat) + '%', + 'afr=%3.1f' % (100*stat) + '%', + 'agg_fr=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), _('Aggression Freq')) except: return (stat, @@ -636,10 +646,10 @@ def cbet(stat_dict, player): oppt = stat_dict[player]['cb_opp_1']+stat_dict[player]['cb_opp_2']+stat_dict[player]['cb_opp_3']+stat_dict[player]['cb_opp_4'] stat = float(cbets)/float(oppt) return (stat, - '%3.1f' % (100.0*stat), - 'cbet=%3.1f%%' % (100.0*stat), - 'cbet=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (cbets, oppt), + '%3.1f' % (100*stat) + '%', + 'cbet=%3.1f' % (100*stat) + '%', + 'cbet=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (cbets, oppt), _('% continuation bet ')) except: return (stat, @@ -655,10 +665,10 @@ def cb1(stat_dict, player): try: stat = float(stat_dict[player]['cb_1'])/float(stat_dict[player]['cb_opp_1']) return (stat, - '%3.1f' % (100.0*stat), - 'cb1=%3.1f%%' % (100.0*stat), - 'cb_1=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), + '%3.1f' % (100*stat) + '%', + 'cb1=%3.1f' % (100*stat) + '%', + 'cb_1=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), _('% continuation bet flop/4th')) except: return (stat, @@ -674,10 +684,10 @@ def cb2(stat_dict, player): try: stat = float(stat_dict[player]['cb_2'])/float(stat_dict[player]['cb_opp_2']) return (stat, - '%3.1f' % (100.0*stat), - 'cb2=%3.1f%%' % (100.0*stat), - 'cb_2=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), + '%3.1f' % (100*stat) + '%', + 'cb2=%3.1f' % (100*stat) + '%', + 'cb_2=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), _('% continuation bet turn/5th')) except: return (stat, @@ -693,10 +703,10 @@ def cb3(stat_dict, player): try: stat = float(stat_dict[player]['cb_3'])/float(stat_dict[player]['cb_opp_3']) return (stat, - '%3.1f' % (100.0*stat), - 'cb3=%3.1f%%' % (100.0*stat), - 'cb_3=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), + '%3.1f' % (100*stat) + '%', + 'cb3=%3.1f' % (100*stat) + '%', + 'cb_3=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), _('% continuation bet river/6th')) except: return (stat, @@ -712,9 +722,9 @@ def cb4(stat_dict, player): try: stat = float(stat_dict[player]['cb_4'])/float(stat_dict[player]['cb_opp_4']) return (stat, - '%3.1f' % (100.0*stat), - 'cb4=%3.1f%%' % (100.0*stat), - 'cb_4=%3.1f%%' % (100.0*stat), + '%3.1f' % (100*stat) + '%', + 'cb4=%3.1f' % (100*stat) + '%', + 'cb_4=%3.1f' % (100*stat) + '%', '(%d/%d)' % (stat_dict[player]['cb_4'], stat_dict[player]['cb_opp_4']), _('% continuation bet 7th')) except: @@ -731,10 +741,10 @@ def ffreq1(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_1'])/float(stat_dict[player]['was_raised_1']) return (stat, - '%3.1f' % (100.0*stat), - 'ff1=%3.1f%%' % (100.0*stat), - 'ff_1=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), + '%3.1f' % (100*stat) + '%', + 'ff1=%3.1f' % (100*stat) + '%', + 'ff_1=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), _('% fold frequency flop/4th')) except: return (stat, @@ -750,10 +760,10 @@ def ffreq2(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_2'])/float(stat_dict[player]['was_raised_2']) return (stat, - '%3.1f' % (100.0*stat), - 'ff2=%3.1f%%' % (100.0*stat), - 'ff_2=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), + '%3.1f' % (100*stat) + '%', + 'ff2=%3.1f' % (100*stat) + '%', + 'ff_2=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), _('% fold frequency turn/5th')) except: return (stat, @@ -769,10 +779,10 @@ def ffreq3(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_3'])/float(stat_dict[player]['was_raised_3']) return (stat, - '%3.1f' % (100.0*stat), - 'ff3=%3.1f%%' % (100.0*stat), - 'ff_3=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), + '%3.1f' % (100*stat) + '%', + 'ff3=%3.1f' % (100*stat) + '%', + 'ff_3=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), _('% fold frequency river/6th')) except: return (stat, @@ -788,10 +798,10 @@ def ffreq4(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_4'])/float(stat_dict[player]['was_raised_4']) return (stat, - '%3.1f' % (100.0*stat), - 'ff4=%3.1f%%' % (100.0*stat), - 'ff_4=%3.1f%%' % (100.0*stat), - '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), + '%3.1f' % (100*stat) + '%', + 'ff4=%3.1f' % (100*stat) + '%', + 'ff_4=%3.1f' % (100*stat) + '%', + '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), _('% fold frequency 7th')) except: return (stat, @@ -805,7 +815,7 @@ if __name__== "__main__": statlist = dir() misslist = [ "Configuration", "Database", "Charset", "codecs", "encoder" , "do_stat", "do_tip", "GInitiallyUnowned", "gtk", "pygtk" - , "re", "re_Places" + , "re", "re_Percent", "re_Places" ] statlist = [ x for x in statlist if x not in dir(sys) ] statlist = [ x for x in statlist if x not in dir(codecs) ] From 2b97d938f1f549bfb7eb69ca7b364766892b7f0e Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Mon, 30 Aug 2010 12:35:49 +0300 Subject: [PATCH 044/217] Fix HUD bug with specified decimals If any stat in HUD had manually specified number of decimal places, the entire hand processing stopped when the first such stat was encountered. Now really do the decimal place formatting as it was supposed to work. Also, for future reference: tuples are immutable - you can't overwrite any tuple member. Hence the need for new routine, __stat_override() --- pyfpdb/Stats.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index 285a45ea..3616fa87 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -83,14 +83,29 @@ re_Places = re.compile("_[0-9]$") import codecs encoder = codecs.lookup(Configuration.LOCALE_ENCODING) + +# Since tuples are immutable, we have to create a new one when +# overriding any decimal placements. Copy old ones and recreate the +# second value in tuple to specified format- +def __stat_override(decimals, stat_vals): + s = '%.*f' % (decimals, 100.0*stat_vals[0]) + res = (stat_vals[0], s, stat_vals[2], + stat_vals[3], stat_vals[4], stat_vals[5]) + return res + + def do_tip(widget, tip): _tip = Charset.to_utf8(tip) widget.set_tooltip_text(_tip) def do_stat(stat_dict, player = 24, stat = 'vpip'): + statname = stat match = re_Places.search(stat) - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) + if match: # override if necessary + statname = stat[0:-2] + + result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': statname, 'player': player}) # If decimal places have been defined, override result[1] # NOTE: decimal place override ALWAYS assumes the raw result is a @@ -99,9 +114,8 @@ def do_stat(stat_dict, player = 24, stat = 'vpip'): # to three decimal places anyhow, so they are unlikely override # candidates. if match: - base = stat[0:-2] places = int(stat[-1:]) - result[1] = '%.*f' % (places, 100.0*result[0]) + result = __stat_override(places, result) return result # OK, for reference the tuple returned by the stat is: From 099db5e7d0a64175aff1ad3a69eb20da083884e9 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 30 Aug 2010 17:24:28 +0200 Subject: [PATCH 045/217] THP: add header --- pyfpdb/TestHandsPlayers.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) mode change 100644 => 100755 pyfpdb/TestHandsPlayers.py diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py old mode 100644 new mode 100755 index ae521f71..f1039115 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -1,4 +1,23 @@ +#!/usr/bin/env python # -*- coding: utf-8 -*- +# +# Copyright 2010, Carl Gherardi +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +######################################################################## + import sys import os import codecs From dadeb82b4b7376c01b65d9d95f8eca4aa7ed0380 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 30 Aug 2010 17:25:08 +0200 Subject: [PATCH 046/217] l10n: add french to localise script --- pyfpdb/locale/localise.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pyfpdb/locale/localise.sh b/pyfpdb/locale/localise.sh index 7f214c38..b9d57292 100755 --- a/pyfpdb/locale/localise.sh +++ b/pyfpdb/locale/localise.sh @@ -5,11 +5,12 @@ echo "creating template po file" python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.pot *.py* echo "merging template with existing translations" -msgmerge --update locale/fpdb-hu_HU.po locale/fpdb-en_GB.pot msgmerge --update locale/fpdb-de_DE.po locale/fpdb-en_GB.pot +msgmerge --update locale/fpdb-fr_FR.po locale/fpdb-en_GB.pot +msgmerge --update locale/fpdb-hu_HU.po locale/fpdb-en_GB.pot echo "compiling mo files" -python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/de/LC_MESSAGES/fpdb.mo locale/fpdb-de_DE.po +python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po pocount locale/*.po From cc4f8e2beaf42753036101d9b41e4dfbfd688dc5 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Mon, 30 Aug 2010 11:55:34 -0400 Subject: [PATCH 047/217] added some intermediate output. --- pyfpdb/XTables.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyfpdb/XTables.py b/pyfpdb/XTables.py index 6b06eb0f..03b18073 100644 --- a/pyfpdb/XTables.py +++ b/pyfpdb/XTables.py @@ -29,6 +29,7 @@ import gtk # Other Library modules import Xlib.display +from Xlib import Xatom # FreePokerTools modules from TableWindow import Table_Window @@ -37,6 +38,7 @@ from TableWindow import Table_Window disp = Xlib.display.Display() root = disp.screen().root name_atom = disp.get_atom("WM_NAME", 1) +icon_atom = disp.get_atom("WM_ICON_NAME", 1) class Table(Table_Window): @@ -46,7 +48,12 @@ class Table(Table_Window): for outside in root.query_tree().children: for inside in outside.query_tree().children: if done_looping: break - if inside.get_wm_name() and re.search(search_string, inside.get_wm_name()): +# if inside.get_wm_name() and re.search(search_string, inside.get_wm_name()): + if inside.get_wm_name() and re.search(search_string, inside.get_wm_icon_name()): + print "inside = ", inside + print "\n".join(dir(inside)) + for atom in inside.list_properties(): print atom, disp.get_atom_name(atom), inside.get_full_property(atom, Xatom.STRING).value + if hasattr(inside, "window"): print "window = ", str(inside.window) if self.check_bad_words(inside.get_wm_name()): continue self.window = inside self.parent = outside From e38edced85a18e431d977fb26be333c2a9759e96 Mon Sep 17 00:00:00 2001 From: Eric Blade Date: Mon, 30 Aug 2010 15:54:26 -0400 Subject: [PATCH 048/217] Add FTP Summary for a complete tournament, freeroll satellite, with multiple winners. --- ...roll-Satellite-MultipleWinners-20100830.txt | Bin 0 -> 270068 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pyfpdb/regression-test-files/tour/FTP/Summary/Freeroll-Satellite-MultipleWinners-20100830.txt diff --git a/pyfpdb/regression-test-files/tour/FTP/Summary/Freeroll-Satellite-MultipleWinners-20100830.txt b/pyfpdb/regression-test-files/tour/FTP/Summary/Freeroll-Satellite-MultipleWinners-20100830.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ba648fd33daea7d95dd789eed9b1b775d0240ff GIT binary patch literal 270068 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%0D}TY&*GeFQ-(@t~$rll?F5+f8>u7`~Lmt#Ezi; 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 Date: Tue, 31 Aug 2010 15:16:37 +0800 Subject: [PATCH 049/217] THP: Add NLHE FTP.fr .hp file --- ...1-0.02.201008.Weird.table.character.txt.hp | 564 ++++++++++++++++++ 1 file changed, 564 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-6max-EUR-0.01-0.02.201008.Weird.table.character.txt.hp diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-6max-EUR-0.01-0.02.201008.Weird.table.character.txt.hp b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-6max-EUR-0.01-0.02.201008.Weird.table.character.txt.hp new file mode 100644 index 00000000..85683ac1 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-6max-EUR-0.01-0.02.201008.Weird.table.character.txt.hp @@ -0,0 +1,564 @@ +{ u'Player1': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 129, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player2': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 1, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 2, + 'sitout': False, + 'startCards': 0, + 'startCash': 170, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player3': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': True, + 'raisedFirstIn': True, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 3, + 'sitout': False, + 'startCards': 0, + 'startCash': 163, + 'street0Aggr': True, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 3, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 5, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player4': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': True, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': True, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 4, + 'sitout': False, + 'startCards': 0, + 'startCash': 227, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': True, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -1, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player5': { 'card1': 1, + 'card2': 34, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': True, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': True, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 5, + 'sitout': False, + 'startCards': 8, + 'startCash': 200, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': True, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player6': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 3, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 6, + 'sitout': False, + 'startCards': 0, + 'startCash': 330, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}} From 87b6f834c3776e7bf14b18fdd3fa9db8274b58a8 Mon Sep 17 00:00:00 2001 From: Worros Date: Tue, 31 Aug 2010 15:43:31 +0800 Subject: [PATCH 050/217] FTP: Rename test file --- ...02-0.05.201007.Short.lived.date.format.txt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt new file mode 100644 index 00000000..ca823407 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt @@ -0,0 +1,39 @@ +Full Tilt Poker Game #22488827305: Table Flash - $0.02/$0.05 - No Limit Hold'em - 15:13 ET - Wed, July 21, 2010 +Seat 1: ronaldd1969 ($2.70) +Seat 2: stark00 ($4.41) +Seat 3: T0r3x ($12.97) +Seat 4: yrthligar ($15) +Seat 5: MANUTD ($8.56) +Seat 6: gimick ($2) +Seat 7: vision ($2.97) +Seat 8: shleekom ($2) +Seat 9: proud2Bwhack ($8.77) +MANUTD posts the small blind of $0.02 +gimick posts the big blind of $0.05 +The button is in seat #4 +*** HOLE CARDS *** +Dealt to gimick [Qs 4d] +vision folds +shleekom folds +proud2Bwhack folds +ronaldd1969 folds +stark00 folds +T0r3x folds +yrthligar has 8 seconds left to act +yrthligar has timed out +yrthligar folds +MANUTD folds +Uncalled bet of $0.03 returned to gimick +gimick mucks +gimick wins the pot ($0.04) +*** SUMMARY *** +Total pot $0.04 | Rake $0 +Seat 1: ronaldd1969 didn't bet (folded) +Seat 2: stark00 didn't bet (folded) +Seat 3: T0r3x didn't bet (folded) +Seat 4: yrthligar (button) didn't bet (folded) +Seat 5: MANUTD (small blind) folded before the Flop +Seat 6: gimick (big blind) collected ($0.04), mucked +Seat 7: vision didn't bet (folded) +Seat 8: shleekom didn't bet (folded) +Seat 9: proud2Bwhack didn't bet (folded) From bb41c2906b5155318ba1afc6bbe8ed16c3c770c3 Mon Sep 17 00:00:00 2001 From: Worros Date: Tue, 31 Aug 2010 15:46:11 +0800 Subject: [PATCH 051/217] THP: Add .hp file for FTP wierd date format --- ...0.05.201007.Short.lived.date.format.txt.hp | 846 ++++++++++++++++++ 1 file changed, 846 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt.hp diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt.hp b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt.hp new file mode 100644 index 00000000..01ff416e --- /dev/null +++ b/pyfpdb/regression-test-files/cash/FTP/Flop/NLHE-9max-USD-0.02-0.05.201007.Short.lived.date.format.txt.hp @@ -0,0 +1,846 @@ +{ u'MANUTD': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 5, + 'sitout': False, + 'startCards': 0, + 'startCash': 856, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'T0r3x': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 1, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 3, + 'sitout': False, + 'startCards': 0, + 'startCash': 1297, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'gimick': { 'card1': 50, + 'card2': 16, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 6, + 'sitout': False, + 'startCards': 37, + 'startCash': 200, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 4, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'proud2Bwhack': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 4, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 9, + 'sitout': False, + 'startCards': 0, + 'startCash': 877, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'ronaldd1969': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 3, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 270, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'shleekom': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 5, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 8, + 'sitout': False, + 'startCards': 0, + 'startCash': 200, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'stark00': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 2, + 'sitout': False, + 'startCards': 0, + 'startCash': 441, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'vision': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 6, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 7, + 'sitout': False, + 'startCards': 0, + 'startCash': 297, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'yrthligar': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 4, + 'sitout': False, + 'startCards': 0, + 'startCash': 1500, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}} From 1a515534b42ae426027399764bf155e0f71acc0e Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Tue, 31 Aug 2010 11:40:21 +0300 Subject: [PATCH 052/217] Try to fix profit/100 --- pyfpdb/Stats.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index 3616fa87..a9dd137f 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -228,15 +228,17 @@ def wmsd(stat_dict, player): _('% won money at showdown') ) +# Money is stored as pennies, so there is an implicit 100-multiplier +# already in place def profit100(stat_dict, player): """ Profit won per 100 hands.""" stat = 0.0 try: stat = float(stat_dict[player]['net'])/float(stat_dict[player]['n']) return (stat, - '%.0f' % (100.0*stat), - 'p=%.0f' % (100.0*stat), - 'p/100=%.0f' % (100.0*stat), + '%.2f' % (stat), + 'p=%.2f' % (stat), + 'p/100=%.2f' % (stat), '%d/%d' % (stat_dict[player]['net'], stat_dict[player]['n']), _('profit/100hands') ) From 2ab01fa9d9dba42471361fc65e050338778e6937 Mon Sep 17 00:00:00 2001 From: Eric Blade Date: Tue, 31 Aug 2010 04:56:28 -0400 Subject: [PATCH 053/217] some code and comment cleanups and clarifications, mo betta fasta. --- pyfpdb/Hud.py | 58 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py index 8454f433..49dc91cc 100644 --- a/pyfpdb/Hud.py +++ b/pyfpdb/Hud.py @@ -43,8 +43,8 @@ if os.name == 'nt': import win32api import locale -lang=locale.getdefaultlocale()[0][0:2] -if lang=="en": +lang = locale.getdefaultlocale()[0][0:2] +if lang == "en": def _(string): return string else: import gettext @@ -78,7 +78,8 @@ class Hud: # cannot touch the gui if parent is None: # running from cli .. self.parent = self - self.parent = parent + else: + self.parent = parent self.table = table self.config = config self.poker_game = poker_game @@ -95,6 +96,7 @@ class Hud: self.popup_windows = {} self.aux_windows = [] + # configure default font and colors from the configuration (font, font_size) = config.get_default_font(self.table.site) self.colors = config.get_default_colors(self.table.site) self.hud_ui = config.get_hud_ui_parameters() @@ -107,6 +109,7 @@ class Hud: # do we need to add some sort of condition here for dealing with a request for a font that doesn't exist? game_params = config.get_game_parameters(self.poker_game) + # if there are AUX windows configured, set them up (Ray knows how this works, if anyone needs info) if not game_params['aux'] == [""]: for aux in game_params['aux']: aux_params = config.get_aux_parameters(aux) @@ -118,14 +121,16 @@ class Hud: self.creation_attrs = None def create_mw(self): - # Set up a main window for this this instance of the HUD win = gtk.Window() + win.set_skip_taskbar_hint(True) # invisible to taskbar win.set_gravity(gtk.gdk.GRAVITY_STATIC) - win.set_title("%s FPDBHUD" % (self.table.name)) - win.set_skip_taskbar_hint(True) - win.set_decorated(False) - win.set_opacity(self.colors["hudopacity"]) + win.set_title("%s FPDBHUD" % (self.table.name)) # give it a title that we can easily filter out in the window list when Table search code is looking + win.set_decorated(False) # kill titlebars + win.set_opacity(self.colors["hudopacity"]) # set it to configured hud opacity + win.set_focus(None) + win.set_focus_on_map(False) + win.set_accept_focus(False) eventbox = gtk.EventBox() label = gtk.Label(self.hud_ui['label']) @@ -133,6 +138,7 @@ class Hud: win.add(eventbox) eventbox.add(label) + # set it to the desired color of the HUD for this site label.modify_bg(gtk.STATE_NORMAL, self.backgroundcolor) label.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor) @@ -140,9 +146,11 @@ class Hud: eventbox.modify_fg(gtk.STATE_NORMAL, self.foregroundcolor) self.main_window = win + # move it to the table window's X/Y position (0,0 on the table window usually) self.main_window.move(self.table.x, self.table.y) # A popup menu for the main window +# This menu code has become extremely long - is there a better way to do this? menu = gtk.Menu() killitem = gtk.MenuItem(_('Kill This HUD')) @@ -457,6 +465,13 @@ class Hud: log.debug("setting self.hud_params[%s] = %s" % (param, style)) def update_table_position(self): + # get table's X/Y position on the desktop, and relocate all of our child windows to accomodate + # In Windows, we can verify the existence of a Window, with win32gui.IsWindow(). In Linux, there doesn't seem to be a + # way to verify the existence of a Window, without trying to access it, which if it doesn't exist anymore, results in a + # big giant X trap and crash. + # People tell me this is a bad idea, because theoretically, IsWindow() could return true now, but not be true when we actually + # use it, but accessing a dead window doesn't result in a complete windowing system shutdown in Windows, whereas it does + # in X. - Eric if os.name == 'nt': if not win32gui.IsWindow(self.table.number): self.parent.kill_hud(self, self.table.name) @@ -465,8 +480,8 @@ class Hud: return False # anyone know how to do this in unix, or better yet, trap the X11 error that is triggered when executing the get_origin() for a closed window? if self.table.gdkhandle is not None: - (x, y) = self.table.gdkhandle.get_origin() - if self.table.x != x or self.table.y != y: + (x, y) = self.table.gdkhandle.get_origin() # In Windows, this call returns (0,0) if it's an invalid window. In X, the X server is immediately killed. + if self.table.x != x or self.table.y != y: # If the current position does not equal the stored position, save the new position, and then move all the sub windows. self.table.x = x self.table.y = y self.main_window.move(x + self.site_params['xshift'], y + self.site_params['yshift']) @@ -487,10 +502,10 @@ class Hud: return True def on_button_press(self, widget, event): - if event.button == 1: + if event.button == 1: # if primary button, start movement self.main_window.begin_move_drag(event.button, int(event.x_root), int(event.y_root), event.time) return True - if event.button == 3: + if event.button == 3: # if secondary button, popup our main popup window widget.popup(None, None, None, event.button, event.time) return True return False @@ -543,7 +558,7 @@ class Hud: self.config.save() def adj_seats(self, hand, config): - + # determine how to adjust seating arrangements, if a "preferred seat" is set in the hud layout configuration # Need range here, not xrange -> need the actual list adj = range(0, self.max + 1) # default seat adjustments = no adjustment # does the user have a fav_seat? @@ -621,7 +636,7 @@ class Hud: [config.supported_games[self.poker_game].stats[stat].col] = \ config.supported_games[self.poker_game].stats[stat].stat_name - if os.name == "nt": + if os.name == "nt": # we call update_table_position() regularly in Windows to see if we're moving around. See comments on that function for why this isn't done in X. gobject.timeout_add(500, self.update_table_position) def update(self, hand, config): @@ -656,8 +671,8 @@ class Hud: if this_stat.hudcolor != "": window.label[r][c].modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(this_stat.hudcolor)) else: - window.label[r][c].modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudfgcolor'])) - + window.label[r][c].modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.colors['hudfgcolor'])) + if this_stat.stat_loth != "": if number[0] < (float(this_stat.stat_loth)/100): window.label[r][c].modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(this_stat.stat_locolor)) @@ -668,9 +683,12 @@ class Hud: window.label[r][c].set_text(statstring) if statstring != "xxx": # is there a way to tell if this particular stat window is visible already, or no? - window.window.show_all() + unhidewindow = True tip = "%s\n%s\n%s, %s" % (statd['screen_name'], number[5], number[3], number[4]) Stats.do_tip(window.e_box[r][c], tip) + if unhidewindow: #and not window.window.visible: # there is no "visible" attribute in gtk.Window, although the docs seem to indicate there should be + window.window.show_all() + unhidewindow = False def topify_window(self, window): window.set_focus_on_map(False) @@ -686,7 +704,7 @@ class Stat_Window: # This handles all callbacks from button presses on the event boxes in # the stat windows. There is a bit of an ugly kludge to separate single- # and double-clicks. - self.window.show_all() + self.window.show() #_all() if event.button == 3: # right button event newpopup = Popup_window(self.window, self) @@ -745,11 +763,13 @@ class Stat_Window: self.window = gtk.Window() self.window.set_decorated(0) + self.window.set_property("skip-taskbar-hint", True) self.window.set_gravity(gtk.gdk.GRAVITY_STATIC) self.window.set_title("%s" % seat) - self.window.set_property("skip-taskbar-hint", True) + self.window.set_focus(None) # set gtk default focus widget for this window to None self.window.set_focus_on_map(False) + self.window.set_accept_focus(False) grid = gtk.Table(rows = game.rows, columns = game.cols, homogeneous = False) self.grid = grid From 9704cd7fe5a88d1e3a91749ed04280a33f423021 Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Tue, 31 Aug 2010 22:34:48 +0100 Subject: [PATCH 054/217] routines to store site list in config --- pyfpdb/Configuration.py | 9 ++++++++- pyfpdb/Database.py | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index e9f1521c..8c5b4650 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -697,10 +697,11 @@ class Config: self.aux_windows = {} self.hhcs = {} self.popup_windows = {} - self.db_selected = None # database the user would like to use + self.db_selected = None # database the user would like to use self.general = General() self.emails = {} self.gui_cash_stats = GUICashStats() + self.site_ids = {} # site ID list from the database added,n = 1,0 # use n to prevent infinite loop if add_missing_elements() fails somehow while added > 0 and n < 2: @@ -1390,6 +1391,12 @@ class Config: if font_size is not None: site_node.setAttribute("font_size", font_size) return + def set_site_ids(self, sites): + self.site_ids = dict(sites) + + def get_site_id(self, site): + return( self.site_ids[site] ) + def get_aux_windows(self): """Gets the list of mucked window formats in the configuration.""" return self.aux_windows.keys() diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index f1b8dd72..f8119404 100644 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -302,6 +302,7 @@ class Database: self.saveActions = False if self.import_options['saveActions'] == False else True if self.is_connected(): + self.get_sites() self.connection.rollback() # make sure any locks taken so far are released #end def __init__ @@ -466,6 +467,15 @@ class Database: self.cursor.execute(self.sql.query['set tx level']) self.check_version(database=database, create=create) + def get_sites(self): + self.cursor.execute("SELECT name,id FROM Sites") + sites = self.cursor.fetchall() + self.config.set_site_ids(sites) + + def add_site(self, site, site_code): + self.cursor.execute("INSERT INTO Sites " + "SELECT max(id)+1, '%s', '%s' " + "FROM Sites " % (site, site_code) ) def check_version(self, database, create): self.wrongDbVersion = False From 06b34e86487d6b6498c977f0e766f1345c86eb7e Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Tue, 31 Aug 2010 22:44:41 +0100 Subject: [PATCH 055/217] clarify difference between site and filter to allow 2 sites from same network, prompt to add site to db if missing --- pyfpdb/Hand.py | 3 +-- pyfpdb/HandHistoryConverter.py | 13 +++++++--- pyfpdb/OnGameToFpdb.py | 2 +- pyfpdb/fpdb.pyw | 45 ++++++++++++++++++++++++++++++++++ pyfpdb/fpdb_import.py | 5 ++-- 5 files changed, 60 insertions(+), 8 deletions(-) diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index 7ae5f044..b56002c3 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -58,7 +58,6 @@ class Hand(object): LCS = {'H':'h', 'D':'d', 'C':'c', 'S':'s'} SYMBOL = {'USD': '$', 'EUR': u'$', 'T$': '', 'play': ''} MS = {'horse' : 'HORSE', '8game' : '8-Game', 'hose' : 'HOSE', 'ha': 'HA'} - SITEIDS = {'Fulltilt':1, 'PokerStars':2, 'Everleaf':3, 'Win2day':4, 'OnGame':5, 'UltimateBet':6, 'Betfair':7, 'Absolute':8, 'PartyPoker':9, 'Partouche':10, 'Carbon':11, 'PKR':12 } def __init__(self, config, sitename, gametype, handText, builtFrom = "HHC"): @@ -66,7 +65,7 @@ class Hand(object): self.config = config #log = Configuration.get_logger("logging.conf", "db", log_dir=self.config.dir_log) self.sitename = sitename - self.siteId = self.SITEIDS[sitename] + self.siteId = self.config.get_site_id(sitename) self.stats = DerivedStats.DerivedStats(self) self.gametype = gametype self.startTime = 0 diff --git a/pyfpdb/HandHistoryConverter.py b/pyfpdb/HandHistoryConverter.py index 860d05e1..6506afca 100644 --- a/pyfpdb/HandHistoryConverter.py +++ b/pyfpdb/HandHistoryConverter.py @@ -72,7 +72,9 @@ class HandHistoryConverter(): re_tzOffset = re.compile('^\w+[+-]\d{4}$') - def __init__(self, config, in_path = '-', out_path = '-', follow=False, index=0, autostart=True, starsArchive=False, ftpArchive=False): + # maybe archive params should be one archive param, then call method in specific converter. if archive: convert_archive() + def __init__( self, config, in_path = '-', out_path = '-', follow=False, index=0 + , autostart=True, starsArchive=False, ftpArchive=False, sitename="PokerStars" ): """\ in_path (default '-' = sys.stdin) out_path (default '-' = sys.stdout) @@ -80,8 +82,10 @@ follow : whether to tail -f the input""" self.config = config self.import_parameters = self.config.get_import_parameters() + self.sitename = sitename #log = Configuration.get_logger("logging.conf", "parser", log_dir=self.config.dir_log) - log.info("HandHistory init - %s subclass, in_path '%s'; out_path '%s'" % (self.sitename, in_path, out_path) ) + log.info("HandHistory init - %s site, %s subclass, in_path '%s'; out_path '%s'" + % (self.sitename, self.__class__, in_path, out_path) ) # should use self.filter, not self.sitename self.index = index self.starsArchive = starsArchive @@ -114,7 +118,7 @@ follow : whether to tail -f the input""" def __str__(self): return """ -HandHistoryConverter: '%(sitename)s' +HandHistoryConverter: '%(sitename)s' filetype '%(filetype)s' in_path '%(in_path)s' out_path '%(out_path)s' @@ -252,6 +256,9 @@ which it expects to find at self.re_TailSplitHands -- see for e.g. Everleaf.py. self.readFile() self.obs = self.obs.strip() self.obs = self.obs.replace('\r\n', '\n') + # maybe archive params should be one archive param, then call method in specific converter? + # if self.archive: + # self.obs = self.convert_archive(self.obs) if self.starsArchive == True: log.debug(_("Converting starsArchive format to readable")) m = re.compile('^Hand #\d+', re.MULTILINE) diff --git a/pyfpdb/OnGameToFpdb.py b/pyfpdb/OnGameToFpdb.py index 8ba8f9b4..d54972ac 100755 --- a/pyfpdb/OnGameToFpdb.py +++ b/pyfpdb/OnGameToFpdb.py @@ -45,7 +45,7 @@ else: # OnGame HH Format class OnGame(HandHistoryConverter): - sitename = "OnGame" + filter = "OnGame" filetype = "text" codepage = ("utf8", "cp1252") siteId = 5 # Needs to match id entry in Sites database diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index adeb34c7..b067073a 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -1232,6 +1232,7 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an return response def validate_config(self): + # can this be removed now? if self.config.get_import_parameters().get('saveStarsHH'): hhbase = self.config.get_import_parameters().get("hhArchiveBase") hhbase = os.path.expanduser(hhbase) @@ -1251,6 +1252,50 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an elif response == gtk.RESPONSE_NO: self.select_hhArchiveBase() + # check if sites in config file are in DB + for site in self.config.get_supported_sites(True): # get site names from config file + try: + self.config.get_site_id(site) # and check against list from db + except KeyError as exc: + log.warning("site %s missing from db" % site) + dia = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format="Unknown Site") + diastring = _("WARNING: Unable to find site '%s'\n\nPress YES to add this site to the database.") % site + dia.format_secondary_text(diastring) + response = dia.run() + dia.destroy() + if response == gtk.RESPONSE_YES: + self.add_site(site) + + def add_site(self, site): + dia = gtk.Dialog( title="Add Site", parent=self.window + , flags=gtk.DIALOG_DESTROY_WITH_PARENT + , buttons=(gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT + ,gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT) + ) + + h = gtk.HBox() + dia.vbox.pack_start(h, padding=5) # sets horizontal padding + label = gtk.Label( _("\nEnter short code for %s\n(up to 3 characters):\n") % site ) + h.pack_start(label, padding=20) # sets horizontal padding + #label.set_alignment(1.0, 0.5) + + h = gtk.HBox() + dia.vbox.add(h) + e_code = gtk.Entry(max=3) + e_code.set_width_chars(5) + h.pack_start(e_code, True, False, padding=5) + + label = gtk.Label( "" ) + dia.vbox.add(label) # create space below entry, maybe padding arg above makes this redundant? + + dia.show_all() + response = dia.run() + site_code = e_code.get_text() + if response == gtk.RESPONSE_ACCEPT and site_code is not None and site_code != "": + self.db.add_site(site, site_code) + self.db.commit() + dia.destroy() + def main(self): gtk.main() return 0 diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index 8ff2ba86..5fcbd1b0 100755 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -384,7 +384,7 @@ class Importer: #rulog.writelines("path exists ") if file in self.updatedsize: # we should be able to assume that if we're in size, we're in time as well if stat_info.st_size > self.updatedsize[file] or stat_info.st_mtime > self.updatedtime[file]: -# print "file",counter," updated", os.path.basename(file), stat_info.st_size, self.updatedsize[file], stat_info.st_mtime, self.updatedtime[file] +# print "file",file," updated", os.path.basename(file), stat_info.st_size, self.updatedsize[file], stat_info.st_mtime, self.updatedtime[file] try: if not os.path.isdir(file): self.caller.addText("\n"+os.path.basename(file)) @@ -457,7 +457,8 @@ class Importer: idx = self.pos_in_file[file] else: self.pos_in_file[file] = 0 - hhc = obj(self.config, in_path = file, out_path = out_path, index = idx, starsArchive = self.settings['starsArchive']) + hhc = obj( self.config, in_path = file, out_path = out_path, index = idx + , starsArchive = self.settings['starsArchive'], sitename = site ) if hhc.getStatus(): handlist = hhc.getProcessedHands() self.pos_in_file[file] = hhc.getLastCharacterRead() From a03e83604435bcac4849569b3b163f2d583c686f Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 10:38:54 +0800 Subject: [PATCH 056/217] DerivedStats: Stub in HandsActions calculation --- pyfpdb/DerivedStats.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py index d79d49bf..56222e18 100644 --- a/pyfpdb/DerivedStats.py +++ b/pyfpdb/DerivedStats.py @@ -92,6 +92,8 @@ class DerivedStats(): self.assembleHands(self.hand) self.assembleHandsPlayers(self.hand) + if DEBUG: + self.assembleHandsActions(self.hand) if DEBUG: print "Hands:" @@ -207,6 +209,8 @@ class DerivedStats(): # 3betSB, 3betBB # Squeeze, Ratchet? + def assembleHandsActions(self, hand): + pass def setPositions(self, hand): """Sets the position for each player in HandsPlayers From 9a3d60e0b3f8f5fbd4958b054948655643902199 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 10:47:13 +0800 Subject: [PATCH 057/217] HandsActions: Stub in the remaining calls for HandsActions --- pyfpdb/Database.py | 24 ++++++++++++++++++++++++ pyfpdb/DerivedStats.py | 6 +++++- pyfpdb/Hand.py | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index f1b8dd72..9037e082 100644 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -1756,6 +1756,30 @@ class Database: c = self.get_cursor() c.executemany(q, inserts) + def storeHandsPlayers(self, hid, pids, adata, printdata = False): + #print "DEBUG: %s %s %s" %(hid, pids, adata) + if printdata: + import pprint + pp = pprint.PrettyPrinter(indent=4) + pp.pprint(adata) + + #inserts = [] + #for p in pdata: + # inserts.append( (hid, + # pids[p], + # adata[p]['startCash'], + # adata[p]['seatNo'], + # adata[p]['sitout'], + # adata[p]['card1'], + + #q = self.sql.query['store_hands_actions'] + #q = q.replace('%s', self.sql.query['placeholder']) + + #print "DEBUG: inserts: %s" %inserts + #print "DEBUG: q: %s" % q + #c = self.get_cursor() + #c.executemany(q, inserts) + def storeHudCache(self, gid, pids, starttime, pdata): """Update cached statistics. If update fails because no record exists, do an insert.""" diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py index 56222e18..40646342 100644 --- a/pyfpdb/DerivedStats.py +++ b/pyfpdb/DerivedStats.py @@ -34,8 +34,9 @@ class DerivedStats(): def __init__(self, hand): self.hand = hand - self.hands = {} + self.hands = {} self.handsplayers = {} + self.handsactions = {} def getStats(self, hand): @@ -107,6 +108,9 @@ class DerivedStats(): def getHandsPlayers(self): return self.handsplayers + def getHandsActions(self): + return self.handsactions + def assembleHands(self, hand): self.hands['tableName'] = hand.tablename self.hands['siteHandNo'] = hand.handid diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index 7ae5f044..d653af3b 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -275,6 +275,7 @@ db: a connected Database object""" db.storeHandsPlayers(self.dbid_hands, self.dbid_pids, self.stats.getHandsPlayers(), printdata = printtest) # TODO HandsActions - all actions for all players for all streets - self.actions # HudCache data can be generated from HandsActions (HandsPlayers?) + #db.storeHandsActions(self.dbid_hands, self.dbid_pids, self.stats.getHandsActions(), printdata = printtest) else: log.info(_("Hand.insert(): hid #: %s is a duplicate") % hh['siteHandNo']) self.is_duplicate = True # i.e. don't update hudcache From f993fb05b20ce3db7458c3cb5bab2567abfb8b84 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 13:53:48 +0800 Subject: [PATCH 058/217] Regression: Add FTP PLO cash game HH --- .../FTP/Flop/PLO-6max-USD-0.01-0.02.201003.txt | Bin 0 -> 2840 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.txt diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.txt b/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.txt new file mode 100644 index 0000000000000000000000000000000000000000..d295294b8f906952ec10a08463ad383b68a7caf4 GIT binary patch literal 2840 zcmcgu+iuf95S?cv{=pKJD2Pj(Hfho~N?Jf%0!fMl6+*eEA|c2zZISqP;GCIkosHK< z^Z{AkY}Pxsb7p7u_pcNAE^|DQ^yD1BDQ0hFDPLqP3FgnFFAK~gxg)VOq$zt+#oLgY z&Kq*5vV9pqn)@hmE?+TU;oq**F)pxnCHF9Uh<8US@(6D%kFV#|^*7q453itOftT~P z%Fm!9lIK`6EivQ|;mIDxSPrmyj2P@&Rkc^3zk=^J-j-X^g;#ymN!bYhmxwaKcqtP_ zf*$W6Li$&O$G%imrHy?1go__8fWA8Cy-v=G6?dVdT%b=lAD-`D;0 zYX~NYW?#|0^5pV%YAQEHBnv!0R5HbAyk;IYau(|<*+NVoVJiVfv^qtE%mPZ%*CxER z*uofmgU2h#lKB+TG9OmTp5+*GgnCC7F7Ui4o(7k)amHP~)RqqiO3`1_WiG1@%eEm_T&`jTRxY(xvZ}ah&YH~H!j8Z$UdL!1!7(Ep!!JE$zYdt{x#&_9AK`_f4JRQ`+_vm7&4U41X> z^_%^H_mdGK9s$3*8l}T}7rn|VGjZMS?&Y_FaQ~yNO`Ys$V_o5`BE$OxXf1)3@#Z25 z-zW0Dkyh9n*nL^8QjF|FK6?+a;eOqOBk(;1Zen;^!v99fMFN{U`&819V2V7qO LkwhbA)b9NQdyB1e literal 0 HcmV?d00001 From 3f2edd2c6d6322c09ec2211462d53fa227f94d82 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 14:05:59 +0800 Subject: [PATCH 059/217] Regression: FTP PLO additional hand with showdown cards for multiple players --- ...ax-USD-0.01-0.02.201003.River.Showdown.txt | Bin 0 -> 3254 bytes ...USD-0.01-0.02.201003.River.Showdown.txt.hp | 564 ++++++++++++++++++ 2 files changed, 564 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt create mode 100644 pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt.hp diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt b/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt new file mode 100644 index 0000000000000000000000000000000000000000..9add8f14a06826893d5869095ecfe653fc0e6946 GIT binary patch literal 3254 zcmb_eX>Sry6uqBK{121Z#3e2;Ws!cXQmUZ6S1hg`@6>tkul2b9i=ZOTz&AXivV@$Zoo@EqaYTpnZf4ELU7uFyjZNm=o@`AhIg;JlLn${t4-<#_&-LL6FhIFuShWB zJ!HoCN{BeA6{^-N`6h3X-9)VoAa3EkGJ57wSkz!LkKLHOYt{JC zNMjeG?up%QSUBlq9?5!eI5l+dI|l+~bm)1E@%3CyffT1Ed#{Dvj=u%%=Aw4wT!dg8yY_ncRmN!6olCr<)MCPiM2yE*H vI|VTVo|xhlwY^i8*{(nBrDIv&J8huKcyA+o|7Wc)Bi($$+`XpAw!8lV-g4t7 literal 0 HcmV?d00001 diff --git a/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt.hp b/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt.hp new file mode 100644 index 00000000..c719e569 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/FTP/Flop/PLO-6max-USD-0.01-0.02.201003.River.Showdown.txt.hp @@ -0,0 +1,564 @@ +{ u'B_Isreal22': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': True, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 2, + 'sitout': False, + 'startCards': 0, + 'startCash': 241, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': True, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'DrZartinger': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 1, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 6, + 'sitout': False, + 'startCards': 0, + 'startCash': 155, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'ShaDiv': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': True, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': True, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 3, + 'sitout': False, + 'startCards': 0, + 'startCash': 277, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 1, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': True, + 'street2Bets': 1, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': True, + 'street2CheckCallRaiseDone': True, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': True, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': True, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -16, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Sorrowful': { 'card1': 15, + 'card2': 10, + 'card3': 42, + 'card4': 25, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 209, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Timoha777': { 'card1': 24, + 'card2': 23, + 'card3': 16, + 'card4': 50, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': True, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 6, + 'sawShowdown': True, + 'seatNo': 5, + 'sitout': False, + 'startCards': 0, + 'startCash': 98, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 1, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 1, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 1, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': True, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 53, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 94, + 'wonAtSD': 1.0, + 'wonWhenSeenStreet1': 1.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'rockinalex': { 'card1': 49, + 'card2': 31, + 'card3': 19, + 'card4': 39, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 3, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': True, + 'seatNo': 4, + 'sitout': False, + 'startCards': 0, + 'startCash': 200, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': True, + 'street1Bets': 1, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 1, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': True, + 'street3Bets': 1, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': True, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -41, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}} From 188201025f35d22bf165c28f9d4c74486e1581f9 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 20:51:23 +0800 Subject: [PATCH 060/217] Database: rename storeHandsPlayers to storeHandsActions As the stub function was supposed to be called --- pyfpdb/Database.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index 9420a05c..c9591889 100644 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -1766,7 +1766,7 @@ class Database: c = self.get_cursor() c.executemany(q, inserts) - def storeHandsPlayers(self, hid, pids, adata, printdata = False): + def storeHandsActions(self, hid, pids, adata, printdata = False): #print "DEBUG: %s %s %s" %(hid, pids, adata) if printdata: import pprint From dd469e9ca3cc999e55829a5d7d31bf6b60f91f7a Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 21:58:58 +0800 Subject: [PATCH 061/217] Regression: Stars: NL Single Draw --- ...Draw-USD-0.25-0.50-201009.Mucked.cards.txt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/Stars/Draw/NLSDraw-USD-0.25-0.50-201009.Mucked.cards.txt diff --git a/pyfpdb/regression-test-files/cash/Stars/Draw/NLSDraw-USD-0.25-0.50-201009.Mucked.cards.txt b/pyfpdb/regression-test-files/cash/Stars/Draw/NLSDraw-USD-0.25-0.50-201009.Mucked.cards.txt new file mode 100644 index 00000000..ce82e9be --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Stars/Draw/NLSDraw-USD-0.25-0.50-201009.Mucked.cards.txt @@ -0,0 +1,40 @@ +PokerStars Game #48974407184: Single Draw 2-7 Lowball No Limit ($0.25/$0.50 USD) - 2010/09/01 9:49:52 ET +Table 'Eucharis II' 7-max Seat #4 is the button +Seat 1: Philippus40 ($60.90 in chips) +Seat 2: barbus533 ($21.15 in chips) +Seat 3: @sker86 ($82.60 in chips) +Seat 4: nl pokerr ($49.15 in chips) +Seat 5: heliodorus ($73.45 in chips) +Seat 6: s0rrow ($20 in chips) +Seat 7: KBH7 ($14 in chips) +heliodorus: posts small blind $0.25 +s0rrow: posts big blind $0.50 +*** DEALING HANDS *** +Dealt to s0rrow [2s 7d 4d 6d 8s] +KBH7: folds +Philippus40: folds +barbus533: folds +@sker86: raises $1.50 to $2 +nl pokerr: folds +heliodorus: folds +s0rrow: calls $1.50 +s0rrow: stands pat on [2s 7d 4d 6d 8s] +@sker86: discards 1 card +s0rrow: checks +@sker86: checks +*** SHOW DOWN *** +s0rrow: shows [2s 7d 4d 6d 8s] (Lo: 8,7,6,4,2) +@sker86: mucks hand +s0rrow collected $4.05 from pot +*** SUMMARY *** +Total pot $4.25 | Rake $0.20 +Seat 1: Philippus40 folded before Flop (didn't bet) +Seat 2: barbus533 folded before Flop (didn't bet) +Seat 3: @sker86 mucked [2h 8d 7h 7s 4s] +Seat 4: nl pokerr (button) folded before Flop (didn't bet) +Seat 5: heliodorus (small blind) folded before Flop +Seat 6: s0rrow (big blind) showed [2s 7d 4d 6d 8s] and won ($4.05) with Lo: 8,7,6,4,2 +Seat 7: KBH7 folded before Flop (didn't bet) + + + From b8a8a7217c47ff18454eceefc93492fbe3771589 Mon Sep 17 00:00:00 2001 From: Worros Date: Wed, 1 Sep 2010 23:43:23 +0800 Subject: [PATCH 062/217] Regression: OnGame hand history --- ...9max-USD-0.05-0.10-201008.Betfair.Skin.txt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/OnGame/NLHE-9max-USD-0.05-0.10-201008.Betfair.Skin.txt diff --git a/pyfpdb/regression-test-files/cash/OnGame/NLHE-9max-USD-0.05-0.10-201008.Betfair.Skin.txt b/pyfpdb/regression-test-files/cash/OnGame/NLHE-9max-USD-0.05-0.10-201008.Betfair.Skin.txt new file mode 100644 index 00000000..c7de95c3 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/OnGame/NLHE-9max-USD-0.05-0.10-201008.Betfair.Skin.txt @@ -0,0 +1,41 @@ +***** History for hand R5-70000684-006 ***** +Start hand: Wed Aug 11 03:21:00 GMT+0100 2010 +Table: Kassel [73910684] (NO_LIMIT TEXAS_HOLDEM 0.05/0.10, Real money) +User: Player3 +Button: seat 8 +Players in round: 5 +Seat 9: Player1 (4.35) +Seat 3: Player0 (10.90) +Seat 5: Player2 (12.88) +Seat 6: Player3 (14.18) +Seat 8: Player4 (9) +Player1 posts small blind (0.05) +Player0 posts big blind (0.10) +--- +Dealing pocket cards +Dealing to Player3: [6s, 7h] +Player2 folds +Player3 folds +Player4 raises 0.30 to 0.30 +Player1 calls 0.25 +Player0 folds +--- Dealing flop [8c, Ts, 4d] +Player1 checks +Player4 checks +--- Dealing turn [Ac] +Player1 bets 0.10 +Player4 calls 0.10 +--- Dealing river [5d] +Player1 bets 0.10 +Player4 folds +--- +Summary: +Main pot: 0.90 won by Player1 (0.86) +Rake taken: $0.04 +Seat 9: Player1 (4.81), net: +0.46 +Seat 3: Player0 (10.80), net: -0.10 +Seat 5: Player2 (12.88) +Seat 6: Player3 (14.18) +Seat 8: Player4 (8.60), net: -0.40 +***** End of hand R5-73910684-276 ***** + From 26eca40b31269714c1cf17f843fede688267e50c Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 00:19:31 +0800 Subject: [PATCH 063/217] More HandsActions stubbing --- pyfpdb/Database.py | 10 +++++++++- pyfpdb/DerivedStats.py | 12 ++++++++---- pyfpdb/SQL.py | 13 +++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py index c9591889..88678136 100644 --- a/pyfpdb/Database.py +++ b/pyfpdb/Database.py @@ -1782,7 +1782,15 @@ class Database: # adata[p]['sitout'], # adata[p]['card1'], - #q = self.sql.query['store_hands_actions'] + #handsPlayerId BIGINT UNSIGNED NOT NULL, FOREIGN KEY (handsPlayerId) REFERENCES HandsPlayers(id), + #street SMALLINT NOT NULL, + #actionNo SMALLINT NOT NULL, + #action CHAR(5) NOT NULL, + #allIn BOOLEAN NOT NULL, + #amount INT NOT NULL, + + + q = self.sql.query['store_hands_actions'] #q = q.replace('%s', self.sql.query['placeholder']) #print "DEBUG: inserts: %s" %inserts diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py index 40646342..1172d1f0 100644 --- a/pyfpdb/DerivedStats.py +++ b/pyfpdb/DerivedStats.py @@ -97,10 +97,12 @@ class DerivedStats(): self.assembleHandsActions(self.hand) if DEBUG: - print "Hands:" - pp.pprint(self.hands) - print "HandsPlayers:" - pp.pprint(self.handsplayers) + #print "Hands:" + #pp.pprint(self.hands) + #print "HandsPlayers:" + #pp.pprint(self.handsplayers) + print "HandsActions:" + pp.pprint(self.handsactions) def getHands(self): return self.hands @@ -214,6 +216,8 @@ class DerivedStats(): # Squeeze, Ratchet? def assembleHandsActions(self, hand): + print "DEBUG: hand.actions" + pp.pprint(hand.actions) pass def setPositions(self, hand): diff --git a/pyfpdb/SQL.py b/pyfpdb/SQL.py index 57eb8c35..abc812a8 100644 --- a/pyfpdb/SQL.py +++ b/pyfpdb/SQL.py @@ -4221,6 +4221,19 @@ class Sql: %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )""" + + self.query['store_hands_actions'] = """INSERT INTO HandsActions ( + handsPlayerId, + street, + actionNo, + action, + allIn, + amount + ) + VALUES ( + %s, %s, %s, %s, %s, + %s + )""" ################################ # Counts for DB stats window From d4400b9f48acc83b231229ee976af95256cef617 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 00:40:36 +0800 Subject: [PATCH 064/217] Stars: add part support for NL Single Draw --- pyfpdb/PokerStarsToFpdb.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/pyfpdb/PokerStarsToFpdb.py b/pyfpdb/PokerStarsToFpdb.py index 4fbe9dfd..98abcaf0 100644 --- a/pyfpdb/PokerStarsToFpdb.py +++ b/pyfpdb/PokerStarsToFpdb.py @@ -83,6 +83,7 @@ class PokerStars(HandHistoryConverter): '7 Card Stud Hi/Lo' : ('stud','studhilo'), 'Badugi' : ('draw','badugi'), 'Triple Draw 2-7 Lowball' : ('draw','27_3draw'), + 'Single Draw 2-7 Lowball' : ('draw','27_1draw'), '5 Card Draw' : ('draw','fivedraw') } currencies = { u'€':'EUR', '$':'USD', '':'T$' } @@ -96,7 +97,7 @@ class PokerStars(HandHistoryConverter): (?P(?P[%(LS)s\d\.]+)?\+?(?P[%(LS)s\d\.]+)?\+?(?P[%(LS)s\d\.]+)?\s?(?P%(LEGAL_ISO)s)?|Freeroll)\s+)? # close paren of tournament info (?PHORSE|8\-Game|HOSE|Mixed PLH/PLO)?\s?\(? - (?PHold\'em|Razz|RAZZ|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball|5\sCard\sDraw)\s + (?PHold\'em|Razz|RAZZ|7\sCard\sStud|7\sCard\sStud\sHi/Lo|Omaha|Omaha\sHi/Lo|Badugi|Triple\sDraw\s2\-7\sLowball|Single\sDraw\s2\-7\sLowball|5\sCard\sDraw)\s (?PNo\sLimit|Limit|LIMIT|Pot\sLimit)\)?,?\s (-\s)? (Match.*)? #TODO: waiting for reply from user as to what this means @@ -169,6 +170,7 @@ class PokerStars(HandHistoryConverter): ["ring", "stud", "fl"], ["ring", "draw", "fl"], + ["ring", "draw", "nl"], ["tour", "hold", "nl"], ["tour", "hold", "pl"], @@ -178,10 +180,6 @@ class PokerStars(HandHistoryConverter): ] def determineGameType(self, handText): -# inspect the handText and return the gametype dict -# gametype dict is: -# {'limitType': xxx, 'base': xxx, 'category': xxx} - info = {} m = self.re_GameInfo.search(handText) if not m: @@ -191,10 +189,6 @@ class PokerStars(HandHistoryConverter): raise FpdbParseError(_("Unable to recognise gametype from: '%s'") % tmp) mg = m.groupdict() -# I don't think this is doing what we think. mg will always have all -# the expected keys, but the ones that didn't match in the regex will -# have a value of None. It is OK if it throws an exception when it -# runs across an unknown game or limit or whatever. if 'LIMIT' in mg: info['limitType'] = self.limits[mg['LIMIT']] if 'GAME' in mg: From 25cbc0da3071416e4e74f29da6930325f5d0f521 Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Wed, 1 Sep 2010 21:08:13 +0100 Subject: [PATCH 065/217] add logging --- pyfpdb/GuiAutoImport.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py index c386f475..23d96c58 100755 --- a/pyfpdb/GuiAutoImport.py +++ b/pyfpdb/GuiAutoImport.py @@ -26,6 +26,12 @@ import gobject import os import sys import time + +import logging +# logging has been set up in fpdb.py or HUD_main.py, use their settings: +log = logging.getLogger("importer") + + import fpdb_import from optparse import OptionParser import Configuration @@ -296,6 +302,7 @@ class GuiAutoImport (threading.Thread): def addSites(self, vbox1, vbox2): the_sites = self.config.get_supported_sites() + #log.debug("addSites: the_sites="+str(the_sites)) for site in the_sites: pathHBox1 = gtk.HBox(False, 0) vbox1.pack_start(pathHBox1, False, True, 0) @@ -306,6 +313,7 @@ class GuiAutoImport (threading.Thread): paths = self.config.get_default_paths(site) self.createSiteLine(pathHBox1, pathHBox2, site, False, paths['hud-defaultPath'], params['converter'], params['enabled']) self.input_settings[site] = [paths['hud-defaultPath']] + [params['converter']] + #log.debug("addSites: input_settings="+str(self.input_settings)) if __name__== "__main__": def destroy(*args): # call back for terminating the main eventloop From e02f2e61ef51d5d24e541096959b3f3950304353 Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Wed, 1 Sep 2010 21:20:22 +0100 Subject: [PATCH 066/217] make sure new variables are set --- pyfpdb/Configuration.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index 5701b11f..91a16cca 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -680,6 +680,7 @@ class Config: sys.stderr.write(_("Configuration file %s not found. Using defaults.") % (file)) file = None + self.example_copy,example_file = True,None if file is None: (file,self.example_copy,example_file) = get_config("HUD_config.xml", True) self.file = file From 64cbfb4e4b49eefcc49b498c2c3418dc36aa9a98 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 09:12:12 +0800 Subject: [PATCH 067/217] Regression: New test file --- ...1-0.02-20100829.No.VPIP.from.posted.bb.txt | 64 ++ ....02-20100829.No.VPIP.from.posted.bb.txt.hp | 846 ++++++++++++++++++ 2 files changed, 910 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt create mode 100644 pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt.hp diff --git a/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt b/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt new file mode 100644 index 00000000..2b93f9b1 --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt @@ -0,0 +1,64 @@ +PokerStars Game #48850962136: Omaha Hi/Lo Pot Limit ($0.01/$0.02 USD) - 2010/08/29 13:22:48 PT [2010/08/29 16:22:48 ET] +Table 'Jiangxi IV' 9-max Seat #6 is the button +Seat 1: 2TONTOM ($0.94 in chips) +Seat 2: RadRandyF ($2.48 in chips) +Seat 3: 1meandog4u ($5 in chips) +Seat 4: Mr NoNo! Srb ($5.31 in chips) +Seat 5: toxic7 ($4.84 in chips) +Seat 6: jthegreat ($5.57 in chips) +Seat 7: CoinJock ($2.80 in chips) +Seat 8: ros-r-reed ($1.52 in chips) +Seat 9: skinner1947 ($1.82 in chips) +CoinJock: posts small blind $0.01 +ros-r-reed: posts big blind $0.02 +1meandog4u: posts big blind $0.02 +*** HOLE CARDS *** +Dealt to 1meandog4u [Qs Th 3c 3h] +skinner1947: folds +2TONTOM: folds +RadRandyF: calls $0.02 +1meandog4u: checks +Mr NoNo! Srb: calls $0.02 +toxic7: calls $0.02 +jthegreat: calls $0.02 +CoinJock: calls $0.01 +ros-r-reed: checks +*** FLOP *** [4d 9c Ts] +CoinJock: checks +ros-r-reed: checks +RadRandyF: checks +1meandog4u: checks +Mr NoNo! Srb: checks +toxic7: checks +jthegreat: checks +*** TURN *** [4d 9c Ts] [Kd] +CoinJock: checks +ros-r-reed: checks +RadRandyF: checks +1meandog4u: checks +Mr NoNo! Srb: checks +toxic7: bets $0.14 +jthegreat: folds +CoinJock: folds +ros-r-reed: folds +RadRandyF: folds +1meandog4u: folds +Mr NoNo! Srb: folds +Uncalled bet ($0.14) returned to toxic7 +toxic7 collected $0.14 from pot +toxic7: doesn't show hand +*** SUMMARY *** +Total pot $0.14 | Rake $0 +Board [4d 9c Ts Kd] +Seat 1: 2TONTOM folded before Flop (didn't bet) +Seat 2: RadRandyF folded on the Turn +Seat 3: 1meandog4u folded on the Turn +Seat 4: Mr NoNo! Srb folded on the Turn +Seat 5: toxic7 collected ($0.14) +Seat 6: jthegreat (button) folded on the Turn +Seat 7: CoinJock (small blind) folded on the Turn +Seat 8: ros-r-reed (big blind) folded on the Turn +Seat 9: skinner1947 folded before Flop (didn't bet) + + + diff --git a/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt.hp b/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt.hp new file mode 100644 index 00000000..ee7f1afd --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Stars/Flop/PLO8-9max-USD-0.01-0.02-20100829.No.VPIP.from.posted.bb.txt.hp @@ -0,0 +1,846 @@ +{ u'1meandog4u': { 'card1': 50, + 'card2': 9, + 'card3': 28, + 'card4': 2, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 3, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 3, + 'sitout': False, + 'startCards': 0, + 'startCash': 500, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': True, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'2TONTOM': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 5, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 94, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'CoinJock': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 7, + 'sitout': False, + 'startCards': 0, + 'startCash': 280, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': True, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Mr NoNo! Srb': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 4, + 'sitout': False, + 'startCards': 0, + 'startCash': 531, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': True, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'RadRandyF': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 4, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 2, + 'sitout': False, + 'startCards': 0, + 'startCash': 248, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': True, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'jthegreat': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 6, + 'sitout': False, + 'startCards': 0, + 'startCash': 557, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'ros-r-reed': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 8, + 'sitout': False, + 'startCards': 0, + 'startCash': 152, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': True, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -2, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'skinner1947': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 6, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 9, + 'sitout': False, + 'startCards': 0, + 'startCash': 182, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'toxic7': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 1, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 5, + 'sitout': False, + 'startCards': 0, + 'startCash': 484, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': True, + 'street2Bets': 1, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 12, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 14, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 1.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}} From 72e386738338e25b709ed78006782bc8f3ca897c Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 13:42:40 +0800 Subject: [PATCH 068/217] THP: Report parse errors properly --- pyfpdb/TestHandsPlayers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py index 7be168a7..cbb3f811 100755 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -62,7 +62,8 @@ def compare(leaf, importer, errors, site): # test if there is a .hp version of the file importer.addBulkImportImportFileOrDir(filename, site=site) (stored, dups, partial, errs, ttime) = importer.runImport() - if os.path.isfile(filename + '.hp'): + + if os.path.isfile(filename + '.hp') and errs < 1: # Compare them hashfilename = filename + '.hp' @@ -90,6 +91,8 @@ def compare(leaf, importer, errors, site): else: # Stats don't match - Doh! errors.error_report(filename, hand, stat, ghash, testhash, p) + if errs > 0: + errors.error_report(filename, False, "Parse", False, False, False) importer.clearFileList() From bd6e22766209750a228f91bdc78e42019d531ffb Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 13:52:18 +0800 Subject: [PATCH 069/217] Test Config: Add OnGame to parser list --- pyfpdb/HUD_config.test.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyfpdb/HUD_config.test.xml b/pyfpdb/HUD_config.test.xml index a70d2b67..38d808c0 100644 --- a/pyfpdb/HUD_config.test.xml +++ b/pyfpdb/HUD_config.test.xml @@ -573,6 +573,7 @@ Left-Drag to Move" + From 376894bba3d9d7023a5228b4d9ec5f07b46e6fd1 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 13:52:54 +0800 Subject: [PATCH 070/217] THP: Add remaining directories for test coverage --- pyfpdb/TestHandsPlayers.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py index cbb3f811..ab924637 100755 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -131,11 +131,16 @@ def main(argv=None): FTPErrors = FpdbError('Full Tilt Poker') PartyPokerErrors = FpdbError('Party Poker') BetfairErrors = FpdbError('Betfair') + OnGameErrors = FpdbError('Betfair') walk_testfiles("regression-test-files/cash/Stars/", compare, importer, PokerStarsErrors, "PokerStars") + walk_testfiles("regression-test-files/tour/Stars/", compare, importer, PokerStarsErrors, "PokerStars") walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") + walk_testfiles("regression-test-files/tour/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") #walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") + walk_testfiles("regression-test-files/tour/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors, "Betfair") + walk_testfiles("regression-test-files/cash/OnGame/", compare, importer, OnGameErrors, "OnGame") totalerrors = PokerStarsErrors.errorcount + FTPErrors.errorcount + PartyPokerErrors.errorcount + BetfairErrors.errorcount From 304c9e71a26f0264bfd0b588e150bc6bf6461643 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 14:02:19 +0800 Subject: [PATCH 071/217] Hand: Wrap Pot.end() section in exception handler If Hand.end() fails in that section, then something is seriously wrong with either action parsing or stack parsing. Throw a parse error in the hopes we can continue on. --- pyfpdb/Hand.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index ac8fc1f2..9f9d009d 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -1514,11 +1514,15 @@ class Pot(object): commitsall = sorted([(v,k) for (k,v) in self.committed.items() if v >0]) self.pots = [] - while len(commitsall) > 0: - commitslive = [(v,k) for (v,k) in commitsall if k in self.contenders] - v1 = commitslive[0][0] - self.pots += [sum([min(v,v1) for (v,k) in commitsall])] - commitsall = [((v-v1),k) for (v,k) in commitsall if v-v1 >0] + try: + while len(commitsall) > 0: + commitslive = [(v,k) for (v,k) in commitsall if k in self.contenders] + v1 = commitslive[0][0] + self.pots += [sum([min(v,v1) for (v,k) in commitsall])] + commitsall = [((v-v1),k) for (v,k) in commitsall if v-v1 >0] + except IndexError, e: + log.error(_("Pot.end(): Major failure while calculating pot: '%s'" % e)) + raise FpdbParseError(_("Pot.end(): Major failure while calculating pot: '%s'" % e)) # TODO: I think rake gets taken out of the pots. # so it goes: From 742dec8b158548e3538130d3fe5cb29034e541b1 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 14:04:34 +0800 Subject: [PATCH 072/217] THP: Re-enable Party cash parsing --- pyfpdb/TestHandsPlayers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py index ab924637..3c5ecfe6 100755 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -137,7 +137,7 @@ def main(argv=None): walk_testfiles("regression-test-files/tour/Stars/", compare, importer, PokerStarsErrors, "PokerStars") walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") walk_testfiles("regression-test-files/tour/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") - #walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") + walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") walk_testfiles("regression-test-files/tour/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors, "Betfair") walk_testfiles("regression-test-files/cash/OnGame/", compare, importer, OnGameErrors, "OnGame") From cc3197b5d1938b0cef4d7ff70e05c9fccda12009 Mon Sep 17 00:00:00 2001 From: Worros Date: Thu, 2 Sep 2010 15:24:30 +0800 Subject: [PATCH 073/217] Grapher: commit patch to allow showdown lines to be removed But only in source for the moment. Need to add a Filter for the different graph types --- pyfpdb/GuiGraphViewer.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/pyfpdb/GuiGraphViewer.py b/pyfpdb/GuiGraphViewer.py index 09acb483..2b985f41 100644 --- a/pyfpdb/GuiGraphViewer.py +++ b/pyfpdb/GuiGraphViewer.py @@ -153,6 +153,11 @@ class GuiGraphViewer (threading.Thread): siteids = self.filters.getSiteIds() limits = self.filters.getLimits() games = self.filters.getGames() + graphs = { + "profit" : True, + "sawShowdown" : True, + "nonShowdown" : True + } for i in ('show', 'none'): if i in limits: @@ -230,17 +235,14 @@ class GuiGraphViewer (threading.Thread): #print "No hands returned by graph query" else: self.ax.set_title(_("Profit graph for ring games")) - #text = "Profit: $%.2f\nTotal Hands: %d" %(green[-1], len(green)) - #self.ax.annotate(text, - # xy=(10, -10), - # xycoords='axes points', - # horizontalalignment='left', verticalalignment='top', - # fontsize=10) #Draw plot - self.ax.plot(green, color='green', label=_('Hands: %d\nProfit: $%.2f') %(len(green), green[-1])) - self.ax.plot(blue, color='blue', label=_('Showdown: $%.2f') %(blue[-1])) - self.ax.plot(red, color='red', label=_('Non-showdown: $%.2f') %(red[-1])) + if graphs['profit'] == True: + self.ax.plot(green, color='green', label=_('Hands: %d\nProfit: $%.2f') %(len(green), green[-1])) + if graphs['sawShowdown'] == True: + self.ax.plot(blue, color='blue', label=_('Showdown: $%.2f') %(blue[-1])) + if graphs['nonShowdown'] == True: + self.ax.plot(red, color='red', label=_('Non-showdown: $%.2f') %(red[-1])) if sys.version[0:3] == '2.5': self.ax.legend(loc='upper left', shadow=True, prop=FontProperties(size='smaller')) else: From 3f0cdfbaa5687e7cea68e4854ceb6cb723a244a9 Mon Sep 17 00:00:00 2001 From: Worros Date: Fri, 3 Sep 2010 02:29:34 +0800 Subject: [PATCH 074/217] Regression: Add Absolute Stud Hi/Lo hand --- ...USD-0.02-0.04-200903.River.with.mucked.txt | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 pyfpdb/regression-test-files/cash/Absolute/Stud/7-StudHL-USD-0.02-0.04-200903.River.with.mucked.txt diff --git a/pyfpdb/regression-test-files/cash/Absolute/Stud/7-StudHL-USD-0.02-0.04-200903.River.with.mucked.txt b/pyfpdb/regression-test-files/cash/Absolute/Stud/7-StudHL-USD-0.02-0.04-200903.River.with.mucked.txt new file mode 100644 index 00000000..f91ed38c --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Absolute/Stud/7-StudHL-USD-0.02-0.04-200903.River.with.mucked.txt @@ -0,0 +1,91 @@ +Stage #1300000000: Seven Card Hi/Lo Normal $0.02/$0.04 - 2009-03-18 19:10:00 (ET) +Seat 1 - PLAYER1 ($0.17 in chips) +Seat 2 - PLAYER2 ($0.36 in chips) +Seat 3 - PLAYER3 ($3.46 in chips) +Seat 5 - PLAYER4 ($1 in chips) +Seat 6 - PLAYER5 ($1.07 in chips) +Seat 7 - PLAYER6 ($2.31 in chips) +Seat 8 - PLAYER7 ($0.93 in chips) +Player1 - Ante $0.01 +PLAYER5 - Ante $0.01 +PLAYER6 - Ante $0.01 +PLAYER3 - Ante $0.01 +PLAYER7 - Ante $0.01 +PLAYER2 - Ante $0.01 +PLAYER4 - Ante $0.01 +*** 3rd STREET *** +Player1 - Pocket [H H Js] +PLAYER2 - Pocket [H H 7h] +PLAYER3 - Pocket [H H 6s] +PLAYER4 - Pocket [10c 5c 7s] +PLAYER5 - Pocket [H H Qh] +PLAYER6 - Pocket [H H 9c] +PLAYER7 - Pocket [H H 3s] +PLAYER7 - Bring-In $0.01 +Player1 - Calls $0.01 +PLAYER2 - Folds +PLAYER3 - Calls $0.01 +PLAYER4 - Folds +PLAYER5 - Folds +PLAYER6 - Calls $0.01 +*** 4TH STREET *** +Player1 - Pocket [H H Js 10d] +PLAYER3 - Pocket [H H 6s Ah] +PLAYER4 - Pocket [10c 5c 7s] +PLAYER6 - Pocket [H H 9c Ks] +PLAYER7 - Pocket [H H 3s Qc] +PLAYER3 - Checks +PLAYER6 - Checks +PLAYER7 - Checks +Player1 - Checks +*** 5TH STREET *** +Player1 - Pocket [H H Js 10d Kh] +PLAYER3 - Pocket [H H 6s Ah 8c] +PLAYER4 - Pocket [10c 5c 7s] +PLAYER6 - Pocket [H H 9c Ks 10s] +PLAYER7 - Pocket [H H 3s Qc 6c] +PLAYER3 - Bets $0.04 +PLAYER6 - Calls $0.04 +PLAYER7 - Calls $0.04 +Player1 - Calls $0.04 +*** 6TH STREET *** +Player1 - Pocket [H H Js 10d Kh 2c] +PLAYER3 - Pocket [H H 6s Ah 8c Jc] +PLAYER4 - Pocket [10c 5c 7s] +PLAYER6 - Pocket [H H 9c Ks 10s 8h] +PLAYER7 - Pocket [H H 3s Qc 6c Qs] +PLAYER7 - Checks +Player1 - Checks +PLAYER3 - Bets $0.04 +PLAYER6 - Calls $0.04 +PLAYER7 - Calls $0.04 +Player1 - Calls $0.04 +*** RIVER *** +Player1 - Pocket [H H Js 10d Kh 2c H] +PLAYER3 - Pocket [H H 6s Ah 8c Jc H] +PLAYER4 - Pocket [10c 5c 7s] +PLAYER6 - Pocket [H H 9c Ks 10s 8h H] +PLAYER7 - Pocket [H H 3s Qc 6c Qs H] +PLAYER7 - Checks +Player1 - Checks +PLAYER3 - Checks +PLAYER6 - Checks +*** SHOW DOWN *** +PLAYER7 - Shows [5s 8d 3s Qc 6c Qs 9s] (One pair, queens) +Player1 - Shows [Jh 3h Js 10d Kh 2c 2h] (Two Pair, jacks and twos) +PLAYER3 - Shows [3d 5d 6s Ah 8c Jc As] (One pair, aces) +PLAYER6 - Shows [Kc 10h 9c Ks 10s 8h 2s] (Two Pair, kings and tens) +PLAYER3 Collects $0.19 from main pot +PLAYER6 Collects $0.20 from main pot +*** SUMMARY *** +Total Pot($0.43) | Rake ($0.04) +Seat 1: Player1 HI:lost with Two Pair, jacks and twos [Jh 3h Js 10d Kh 2c 2h - B:Js,P:Jh,P:2h,B:2c,B:Kh] +Seat 2: PLAYER2 Folded on the 3rd STREET +Seat 3: PLAYER3 won Total ($0.19) HI:with One pair, aces [3d 5d 6s Ah 8c Jc As - P:As,B:Ah,B:Jc,B:8c,B:6s] LO:($0.19) [B:Ah,P:3d,P:5d,B:6s,B:8c] +Seat 5: PLAYER4 Folded on the 3rd STREET +Seat 6: PLAYER5 Folded on the 3rd STREET +Seat 7: PLAYER6 won Total ($0.20) HI:($0.20) with Two Pair, kings and tens [Kc 10h 9c Ks 10s 8h 2s - B:Ks,P:Kc,B:10s,P:10h,B:9c] +Seat 8: PLAYER7 HI:lost with One pair, queens [5s 8d 3s Qc 6c Qs 9s - B:Qs,B:Qc,P:9s,P:8d,B:6c] + + + From d5f230e4e8ad896f0bc36000dbf06327cb726b5c Mon Sep 17 00:00:00 2001 From: Worros Date: Fri, 3 Sep 2010 11:49:41 +0800 Subject: [PATCH 075/217] Absolute: a couple of cleanups and some prep work for AP I've changed re_GameInfo to be a verbose regex, so I may have broken working hand histories. No test files at the moment so it is hard to tell. --- pyfpdb/AbsoluteToFpdb.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/pyfpdb/AbsoluteToFpdb.py b/pyfpdb/AbsoluteToFpdb.py index 7cef8c68..145a0971 100755 --- a/pyfpdb/AbsoluteToFpdb.py +++ b/pyfpdb/AbsoluteToFpdb.py @@ -23,6 +23,18 @@ import sys import logging from HandHistoryConverter import * +import locale +lang=locale.getdefaultlocale()[0][0:2] +if lang=="en": + def _(string): return string +else: + import gettext + try: + trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) + trans.install() + except IOError: + def _(string): return string + # Class for converting Absolute HH format. class Absolute(HandHistoryConverter): @@ -42,7 +54,13 @@ class Absolute(HandHistoryConverter): #Seat 6 - FETS63 ($0.75 in chips) #Board [10s 5d Kh Qh 8c] - re_GameInfo = re.compile(ur"^Stage #(C?[0-9]+): (?PHoldem|HORSE)(?: \(1 on 1\)|)? ?(?PNo Limit|Pot Limit|Normal|)? ?(?P\$| €|)(?P[.0-9]+)/?(?:\$| €|)(?P[.0-9]+)?", re.MULTILINE) + re_GameInfo = re.compile(ur"""^Stage #(C?[0-9]+):\s+ + (?PHoldem|Seven\sCard\sHi\/L|HORSE) + (?:\s\(1\son\s1\)|)?\s+? + (?PNo Limit|Pot\sLimit|Normal|)?\s? + (?P\$|\s€|) + (?P[.0-9]+)/?(?:\$|\s€|)(?P[.0-9]+)? + """, re.MULTILINE|re.VERBOSE) re_HorseGameInfo = re.compile(ur"^Game Type: (?PLimit) (?PHoldem)", re.MULTILINE) # TODO: can set max seats via (1 on 1) to a known 2 .. re_HandInfo = re.compile(ur"^Stage #C?(?P[0-9]+): .*(?P\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d).*\n(Table: (?P.*) \(Real Money\))?", re.MULTILINE) @@ -50,12 +68,6 @@ class Absolute(HandHistoryConverter): re_Button = re.compile(ur"Seat #(?P
.+$)", re.MULTILINE) -# re_Button = re.compile(ur"^Seat (?P
[ a-zA-Z0-9]+) \d-max \(Real Money\)\nSeat (?P