diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index d0f81a1b..ee957e2d 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -412,6 +412,7 @@ class Import: self.interval = node.getAttribute("interval") self.callFpdbHud = node.getAttribute("callFpdbHud") self.hhArchiveBase = node.getAttribute("hhArchiveBase") + self.hhBulkPath = node.getAttribute("hhBulkPath") self.saveActions = string_to_bool(node.getAttribute("saveActions"), default=True) self.fastStoreHudCache = string_to_bool(node.getAttribute("fastStoreHudCache"), default=False) self.saveStarsHH = string_to_bool(node.getAttribute("saveStarsHH"), default=False) @@ -452,6 +453,24 @@ class Tv: return (" combinedStealFold = %s\n combined2B3B = %s\n combinedPostflop = %s\n" % (self.combinedStealFold, self.combined2B3B, self.combinedPostflop) ) +class General(dict): + def __init__(self): + super(General, self).__init__() + + def add_elements(self, node): + # day_start - number n where 0.0 <= n < 24.0 representing start of day for user + # e.g. user could set to 4.0 for day to start at 4am local time + # [ HH_bulk_path was here - now moved to import section ] + for (name, value) in node.attributes.items(): + log.debug("config.general: adding %s = %s" % (name,value)) + self[name] = value + + def __str__(self): + s = "" + for k in self: + s = s + " %s = %s\n" % (k, self[k]) + return(s) + class Config: def __init__(self, file = None, dbname = ''): # "file" is a path to an xml file with the fpdb/HUD configuration @@ -506,7 +525,10 @@ class Config: self.popup_windows = {} self.db_selected = None # database the user would like to use self.tv = None + self.general = General() + for gen_node in doc.getElementsByTagName("general"): + self.general.add_elements(node=gen_node) # add/overwrite elements in self.general # s_sites = doc.getElementsByTagName("supported_sites") for site_node in doc.getElementsByTagName("site"): @@ -818,9 +840,14 @@ class Config: try: imp['interval'] = self.imp.interval except: imp['interval'] = 10 + # hhArchiveBase is the temp store for part-processed hand histories - should be redundant eventually try: imp['hhArchiveBase'] = self.imp.hhArchiveBase except: imp['hhArchiveBase'] = "~/.fpdb/HandHistories/" + # hhBulkPath is the default location for bulk imports (if set) + try: imp['hhBulkPath'] = self.imp.hhBulkPath + except: imp['hhBulkPath'] = "" + try: imp['saveActions'] = self.imp.saveActions except: imp['saveActions'] = True @@ -839,6 +866,8 @@ class Config: path = os.path.expanduser(self.supported_sites[site].HH_path) assert(os.path.isdir(path) or os.path.isfile(path)) # maybe it should try another site? paths['hud-defaultPath'] = paths['bulkImport-defaultPath'] = path + if self.imp.hhBulkPath: + paths['bulkImport-defaultPath'] = self.imp.hhBulkPath except AssertionError: paths['hud-defaultPath'] = paths['bulkImport-defaultPath'] = "** ERROR DEFAULT PATH IN CONFIG DOES NOT EXIST **" return paths @@ -987,6 +1016,9 @@ class Config: """Join the fpdb path to filename.""" return os.path.join(os.path.dirname(inspect.getfile(sys._getframe(0))), filename) + def get_general_params(self): + return( self.general ) + if __name__== "__main__": c = Config() diff --git a/pyfpdb/Filters.py b/pyfpdb/Filters.py index c8e8e219..15fccd1c 100644 --- a/pyfpdb/Filters.py +++ b/pyfpdb/Filters.py @@ -58,6 +58,11 @@ class Filters(threading.Thread): ,'limitsFL':'FL', 'limitsNL':'NL', 'limitsPL':'PL', 'ring':'Ring', 'tour':'Tourney' } + gen = self.conf.get_general_params() + self.day_start = 0 + if 'day_start' in gen: + self.day_start = float(gen['day_start']) + # Outer Packing box self.mainVBox = gtk.VBox(False, 0) @@ -864,6 +869,9 @@ class Filters(threading.Thread): self.end_date.set_text('') def __get_dates(self): + # self.day_start gives user's start of day in hours + offset = int(self.day_start * 3600) # calc day_start in seconds + t1 = self.start_date.get_text() t2 = self.end_date.get_text() @@ -872,10 +880,20 @@ class Filters(threading.Thread): if t2 == '': t2 = '2020-12-12' - return (t1, t2) + s1 = strptime(t1, "%Y-%m-%d") # make time_struct + s2 = strptime(t2, "%Y-%m-%d") + e1 = mktime(s1) + offset # s1 is localtime, but returned time since epoch is UTC, then add the + e2 = mktime(s2) + offset # s2 is localtime, but returned time since epoch is UTC + e2 = e2 + 24 * 3600 - 1 # date test is inclusive, so add 23h 59m 59s to e2 + + adj_t1 = strftime("%Y-%m-%d %H:%M:%S", gmtime(e1)) # make adjusted string including time + adj_t2 = strftime("%Y-%m-%d %H:%M:%S", gmtime(e2)) + log.info("t1="+t1+" adj_t1="+adj_t1+'.') + + return (adj_t1, adj_t2) def __get_date(self, widget, calendar, entry, win): -# year and day are correct, month is 0..11 + # year and day are correct, month is 0..11 (year, month, day) = calendar.get_date() month += 1 ds = '%04d-%02d-%02d' % (year, month, day) diff --git a/pyfpdb/GuiPlayerStats.py b/pyfpdb/GuiPlayerStats.py index 17419fd8..41e82ed8 100644 --- a/pyfpdb/GuiPlayerStats.py +++ b/pyfpdb/GuiPlayerStats.py @@ -81,7 +81,7 @@ class GuiPlayerStats (threading.Thread): self.filters = Filters.Filters(self.db, self.conf, self.sql, display = filters_display) self.filters.registerButton1Name("_Filters") self.filters.registerButton1Callback(self.showDetailFilter) - self.filters.registerButton2Name("_Refresh") + self.filters.registerButton2Name("_Refresh Stats") self.filters.registerButton2Callback(self.refreshStats) # ToDo: store in config @@ -567,7 +567,7 @@ class GuiPlayerStats (threading.Thread): query = query.replace("", "") groupLevels = "show" not in str(limits) if groupLevels: - query = query.replace("", "-1") + query = query.replace("", "p.name") # need to use p.name for sqlite posn stats to work else: query = query.replace("", "h.gameTypeId") diff --git a/pyfpdb/PokerStarsToFpdb.py b/pyfpdb/PokerStarsToFpdb.py index c964faa5..79bef1ea 100644 --- a/pyfpdb/PokerStarsToFpdb.py +++ b/pyfpdb/PokerStarsToFpdb.py @@ -82,6 +82,8 @@ class PokerStars(HandHistoryConverter): # self.re_setHandInfoRegex('.*#(?P[0-9]+): Table (?P[ a-zA-Z]+) - \$?(?P[.0-9]+)/\$?(?P[.0-9]+) - (?P.*) - (?P
[0-9]+):(?P[0-9]+) ET - (?P[0-9]+)/(?P[0-9]+)/(?P[0-9]+)Table (?P
[ a-zA-Z]+)\nSeat (?P