Merge branch 'master' of git://git.assembla.com/free_poker_tools

Conflicts:

	pyfpdb/fpdb_import.py
This commit is contained in:
Worros 2009-02-11 16:40:33 +09:00
commit dcee1c6d28
15 changed files with 287 additions and 265 deletions

View File

@ -1,3 +1,7 @@
This file is badly out of date, but I'm going to leave it here for now. :)
More up-to-date information is on the wiki: http://fpdb.wiki.sourceforge.net/
REB 30-Jan-2009
Everything is subject to change and the order does not indicate priority. Patches for any of these or other features are very welcome, see readme-overview.txt for contacts.
Please also see db-todo.txt

View File

@ -1,3 +1,7 @@
This file is badly out of date, but I'm going to leave it here for now. :)
More up-to-date information is on the wiki: http://fpdb.wiki.sourceforge.net/
REB 30-Jan-2009
Hi,
This document is to serve as a little overview (later: full technical doc) for current and prospective developers with:
a) introduction into the code structure

View File

@ -1,3 +1,8 @@
This file is badly out of date, but I'm going to leave it here for now. :)
More up-to-date information is on the wiki: http://fpdb.wiki.sourceforge.net/
REB 30-Jan-2009
Summary
=======
A database program to track your online poker games, the behaviour of the other players and your winnings/losses. Supports Holdem, Omaha, Stud and Razz for cash games as well as SnG and MTT tournaments with more possibly coming in the future. Some of this is not yet working though, please see status.txt and known-bugs-and-planned-features.txt

View File

@ -1,3 +1,7 @@
This file is badly out of date, but I'm going to leave it here for now. :)
More up-to-date information is on the wiki: http://fpdb.wiki.sourceforge.net/
REB 30-Jan-2009
Before you do this make sure you setup the dependencies, the database, user, tables and config file.
Running it

View File

@ -1,3 +1,7 @@
This file is badly out of date, but I'm going to leave it here for now. :)
More up-to-date information is on the wiki: http://fpdb.wiki.sourceforge.net/
REB 30-Jan-2009
For all support please note that the tables WILL be changed, almost certainly without keeping backwards compatibility. Therefore you should keep your history files after import so you can re-import when necessary. Should you lose history files and need a "database updater" let me know.
If support for another site/game would encourage you to help with this software please let me know at steffen@sycamoretest.info.

View File

@ -1,7 +1,7 @@
# Copyright 1999-2008 Gentoo Foundation
# Gentoo had nothing to do with the production of this ebuild, but I'm pre-emptively transferring all copyrights (as far as legally possible under my local jurisdiction) to them.
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-1.0_alpha8_p137.ebuild,v 1.0 2008/10/17 steffen@sycamoretest.info Exp $
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-0.10.ebuild,v 1.0 2009/1/30 steffen@sycamoretest.info Exp $
NEED_PYTHON=2.3

View File

@ -1,62 +0,0 @@
# Copyright 1999-2008 Gentoo Foundation
# Gentoo had nothing to do with the production of this ebuild, but I'm pre-emptively transferring all copyrights (as far as legally possible under my local jurisdiction) to them.
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/games-util/fpdb/fpdb-1.0_alpha8_p137.ebuild,v 1.0 2008/10/17 steffen@sycamoretest.info Exp $
NEED_PYTHON=2.3
#inherit distutils
MY_P="fpdb-${PV}"
DESCRIPTION="A database program to track your online poker games"
HOMEPAGE="https://sourceforge.net/projects/fpdb/"
SRC_URI="mirror://sourceforge/fpdb/${MY_P}.tar.bz2"
LICENSE="AGPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
#note: this should work on other architectures too, please send me your experiences
IUSE=""
RDEPEND="virtual/mysql
dev-python/mysql-python
>=x11-libs/gtk+-2.10
dev-python/pygtk
dev-python/numpy
dev-python/matplotlib"
DEPEND="${RDEPEND}"
src_install() {
DIRINST="${D}usr/share/games/fpdb/"
mkdir -p "${DIRINST}"
cp -R * "${DIRINST}" || die
DIRBIN="${D}usr/games/bin/"
mkdir -p "${DIRBIN}"
#echo "pathes"
#echo "${DIRINST}pyfpdb/fpdb.py"
#echo "${DIRBIN}fpdb.py"
#echo
echo "cd /usr/share/games/fpdb/pyfpdb/ && python fpdb.py" > "${DIRBIN}fpdb" || die
chmod 755 "${DIRBIN}fpdb" || die
}
#src_test() {
#}
pkg_postinst() {
elog "Fpdb has been installed and can be called by executing /usr/games/bin/fpdb"
elog "You need to perform a couple more steps manually."
elog "Please also make sure you followed instructions from previous emerges, in particular make sure you configured mysql and set a root pw for it"
elog "Now run this command to connect to MySQL: mysql --user=root --password=yourPassword"
elog "In the mysql command line interface you need to type these two lines (make sure you get the ; at the end)"
elog "In the second line replace \"newPassword\" with a password of your choice"
elog "CREATE DATABASE fpdb;"
elog "GRANT ALL PRIVILEGES ON fpdb.* TO 'fpdb'@'localhost' IDENTIFIED BY 'newPassword' WITH GRANT OPTION;"
elog "Finally copy the default config file from ${DIRINST}docs/default.conf to ~/.fpdb/ for every user that is to use fpdb."
elog "You will need to edit the default.conf, in particular you need to replace the password with what you entered in the \"GRANT ALL...\""
elog "Finally run the GUI and click the menu database -> recreate tables"
elog "That's it! See our webpage at http://fpdb.sourceforge.net for more documentation"
elog " "
}

View File

@ -1,22 +0,0 @@
#!/bin/sh
#Copyright 2008 Steffen Jobbagy-Felso
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU Affero General Public License as published by
#the Free Software Foundation, version 3 of the License.
#
#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 Affero General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#In the "official" distribution you can find the license in
#agpl-3.0.txt in the docs folder of the package.
rm regression-test/*.found.txt
rm regression-test/*.pyc
rm pyfpdb/*.pyc
git-add--interactive

View File

@ -1,156 +1,212 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Copyright 2008 Steffen Jobbagy-Felso
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU Affero General Public License as published by
#the Free Software Foundation, version 3 of the License.
# Copyright 2008 Steffen Jobbagy-Felso
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
#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.
# 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 Affero General Public License
#along with this program. If not, see <http://www.gnu.org/licenses/>.
#In the "official" distribution you can find the license in
#agpl-3.0.txt in the docs folder of the package.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# In the "official" distribution you can find the license in
# agpl-3.0.txt in the docs folder of the package.
import threading
import fpdb_simple
import fpdb_import
# Standard Library modules
import os
from time import time
# pyGTK modules
import pygtk
pygtk.require('2.0')
import gtk
import os #todo: remove this once import_dir is in fpdb_import
from time import time
class GuiBulkImport (threading.Thread):
def import_dir(self):
"""imports a directory, non-recursive. todo: move this to fpdb_import so CLI can use it"""
self.path=self.inputFile
self.importer.addImportDirectory(self.path)
self.importer.setCallHud(False)
starttime = time()
(stored, dups, partial, errs, ttime) = self.importer.runImport()
print "GuiBulkImport.import_dir done: Stored: %d Dupllicates: %d Partial: %d Errors: %d in %s seconds - %d/sec" %(stored, dups, partial, errs, ttime, (stored/ttime))
# fpdb/FreePokerTools modules
import fpdb_simple
import fpdb_import
import fpdb_db
import Configuration
def load_clicked(self, widget, data=None):
self.inputFile=self.chooser.get_filename()
class GuiBulkImport():
self.handCount=self.hand_count_tbuffer.get_text(self.hand_count_tbuffer.get_start_iter(), self.hand_count_tbuffer.get_end_iter())
if (self.handCount=="unlimited" or self.handCount=="Unlimited"):
self.importer.setHandCount(0)
else:
self.importer.setHandCount(int(self.handCount))
def import_dir(self):
"""imports a directory, non-recursive. todo: move this to fpdb_import so CLI can use it"""
self.errorFile="failed.txt"
self.path = self.inputFile
self.importer.addImportDirectory(self.path)
self.importer.setCallHud(False)
starttime = time()
(stored, dups, partial, errs, ttime) = self.importer.runImport()
print 'GuiBulkImport.import_dir done: Stored: %d Duplicates: %d Partial: %d Errors: %d in %s seconds - %d/sec'\
% (stored, dups, partial, errs, ttime, stored / ttime)
self.minPrint=self.min_print_tbuffer.get_text(self.min_print_tbuffer.get_start_iter(), self.min_print_tbuffer.get_end_iter())
if (self.minPrint=="never" or self.minPrint=="Never"):
self.importer.setMinPrint(0)
else:
self.importer.setMinPrint=int(self.minPrint)
def load_clicked(self, widget, data=None):
# get the dir to import from the chooser
self.inputFile = self.chooser.get_filename()
self.quiet=self.info_tbuffer.get_text(self.info_tbuffer.get_start_iter(), self.info_tbuffer.get_end_iter())
if (self.quiet=="yes"):
self.importer.setQuiet(False)
else:
self.importer.setQuiet(True)
# get the import settings from the gui and save in the importer
self.importer.setHandCount(int(self.spin_hands.get_text()))
self.importer.setMinPrint(int(self.spin_hands.get_text()))
self.importer.setQuiet(self.chk_st_st.get_active())
self.importer.setFailOnError(self.chk_fail.get_active())
self.importer.setThreads(int(self.spin_threads.get_text()))
self.importer.setHandsInDB(self.n_hands_in_db)
cb_model = self.cb.get_model()
cb_index = self.cb.get_active()
if cb_index:
self.importer.setDropIndexes(cb_model[cb_index][0])
else:
self.importer.setDropIndexes("auto")
self.failOnError=self.fail_error_tbuffer.get_text(self.fail_error_tbuffer.get_start_iter(), self.fail_error_tbuffer.get_end_iter())
if (self.failOnError=="no"):
self.importer.setFailOnError(False)
else:
self.importer.setFailOnError(True)
self.lab_info.set_text("Importing")
if os.path.isdir(self.inputFile):
self.import_dir()
else:
self.importer.addImportFile(self.inputFile)
self.importer.setCallHud(False)
self.importer.runImport()
self.importer.clearFileList()
if os.path.isdir(self.inputFile):
self.import_dir()
else:
self.importer.addImportFile(self.inputFile)
self.importer.setCallHud(False)
self.importer.runImport()
self.importer.clearFileList()
self.lab_info.set_text("Import finished")
def get_vbox(self):
"""returns the vbox of this thread"""
return self.vbox
#end def get_vbox
def __init__(self, db, settings, config):
self.db = db # this is an instance of fpdb_db
self.settings = settings
self.config = config
self.importer = fpdb_import.Importer(self, self.settings,
config)
def run (self):
print "todo: implement bulk import thread"
#end def run
self.vbox = gtk.VBox(False, 0)
self.vbox.show()
def __init__(self, db, settings, config):
self.db=db
self.settings=settings
self.config=config
self.importer = fpdb_import.Importer(self,self.settings, config)
self.chooser = gtk.FileChooserWidget()
self.chooser.set_filename(self.settings['bulkImport-defaultPath'])
self.vbox.add(self.chooser)
self.chooser.show()
self.vbox=gtk.VBox(False,1)
self.vbox.show()
# Table widget to hold the settings
self.table = gtk.Table(rows = 3, columns = 5, homogeneous = False)
self.vbox.add(self.table)
self.table.show()
self.chooser = gtk.FileChooserWidget()
self.chooser.set_filename(self.settings['bulkImport-defaultPath'])
#chooser.set_default_response(gtk.RESPONSE_OK)
#self.filesel.ok_button.connect_object("clicked", gtk.Widget.destroy, self.filesel)
self.vbox.add(self.chooser)
self.chooser.show()
# checkbox - print start/stop?
self.chk_st_st = gtk.CheckButton('Print Start/Stop Info')
self.table.attach(self.chk_st_st, 0, 1, 0, 1, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
self.chk_st_st.show()
self.chk_st_st.set_active(True)
# label - status
self.lab_status = gtk.Label("Hands/status print:")
self.table.attach(self.lab_status, 1, 2, 0, 1, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.lab_status.show()
self.lab_status.set_justify(gtk.JUSTIFY_RIGHT)
# spin button - status
status_adj = gtk.Adjustment(value=100, lower=0, upper=300, step_incr=10, page_incr=1, page_size=0) #not sure what upper value should be!
self.spin_status = gtk.SpinButton(adjustment=status_adj, climb_rate=0.0, digits=0)
self.table.attach(self.spin_status, 2, 3, 0, 1, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
self.spin_status.show()
# label - threads
self.lab_threads = gtk.Label("Number of threads:")
self.table.attach(self.lab_threads, 3, 4, 0, 1, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.lab_threads.show()
self.lab_threads.set_sensitive(False)
self.lab_threads.set_justify(gtk.JUSTIFY_RIGHT)
# spin button - threads
threads_adj = gtk.Adjustment(value=0, lower=0, upper=10, step_incr=1, page_incr=1, page_size=0) #not sure what upper value should be!
self.spin_threads = gtk.SpinButton(adjustment=threads_adj, climb_rate=0.0, digits=0)
self.table.attach(self.spin_threads, 4, 5, 0, 1, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.spin_threads.show()
self.spin_threads.set_sensitive(False)
# checkbox - fail on error?
self.chk_fail = gtk.CheckButton('Fail on error')
self.table.attach(self.chk_fail, 0, 1, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
self.chk_fail.show()
# label - hands
self.lab_hands = gtk.Label("Hands/file:")
self.table.attach(self.lab_hands, 1, 2, 1, 2, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.lab_hands.show()
self.lab_hands.set_justify(gtk.JUSTIFY_RIGHT)
# spin button - hands to import
hands_adj = gtk.Adjustment(value=0, lower=0, upper=10, step_incr=1, page_incr=1, page_size=0) #not sure what upper value should be!
self.spin_hands = gtk.SpinButton(adjustment=hands_adj, climb_rate=0.0, digits=0)
self.table.attach(self.spin_hands, 2, 3, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
self.spin_hands.show()
# label - drop indexes
self.lab_drop = gtk.Label("Drop indexes:")
self.table.attach(self.lab_drop, 3, 4, 1, 2, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.lab_drop.show()
self.lab_drop.set_justify(gtk.JUSTIFY_RIGHT)
# ComboBox - drop indexes
self.cb = gtk.combo_box_new_text()
self.cb.append_text('auto')
self.cb.append_text("don't drop")
self.cb.append_text('drop')
self.cb.set_active(0)
self.table.attach(self.cb, 4, 5, 1, 2, xpadding = 10, ypadding = 0, yoptions=gtk.SHRINK)
self.cb.show()
# label - info
self.lab_info = gtk.Label()
self.table.attach(self.lab_info, 0, 4, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.lab_info.show()
# button - Import
self.load_button = gtk.Button('Import') # todo: rename variables to import too
self.load_button.connect('clicked', self.load_clicked,
'Import clicked')
self.table.attach(self.load_button, 4, 5, 2, 3, xpadding = 0, ypadding = 0, yoptions=gtk.SHRINK)
self.load_button.show()
# see how many hands are in the db and adjust accordingly
db_parms = config.get_db_parameters('fpdb')
db.connect(db_parms['db-backend'],
db_parms['db-host'],
db_parms['db-databaseName'],
db_parms['db-user'],
db_parms['db-password'])
cursor = db.db.cursor()
cursor.execute("Select max(id) from Hands;")
row = cursor.fetchone()
db.disconnect() # that's all we need this for
self.n_hands_in_db = row[0]
if self.n_hands_in_db == 0:
self.cb.set_active(2)
self.cb.set_sensitive(False)
self.lab_drop.set_sensitive(False)
if __name__ == '__main__':
self.settings_hbox = gtk.HBox(False, 0)
self.vbox.pack_end(self.settings_hbox, False, True, 0)
self.settings_hbox.show()
def destroy(*args): # call back for terminating the main eventloop
gtk.main_quit()
self.hand_count_label = gtk.Label("Hands to import per file")
self.settings_hbox.add(self.hand_count_label)
self.hand_count_label.show()
config = Configuration.Config()
db = fpdb_db.fpdb_db()
self.hand_count_tbuffer=gtk.TextBuffer()
self.hand_count_tbuffer.set_text("unlimited")
self.hand_count_tview=gtk.TextView(self.hand_count_tbuffer)
self.settings_hbox.add(self.hand_count_tview)
self.hand_count_tview.show()
settings = {}
if os.name == 'nt': settings['os'] = 'windows'
else: settings['os'] = 'linuxmac'
self.min_hands_label = gtk.Label("Status every")
self.settings_hbox.add(self.min_hands_label)
self.min_hands_label.show()
settings.update(config.get_db_parameters('fpdb'))
settings.update(config.get_tv_parameters())
settings.update(config.get_import_parameters())
settings.update(config.get_default_paths())
self.min_print_tbuffer=gtk.TextBuffer()
self.min_print_tbuffer.set_text("never")
self.min_print_tview=gtk.TextView(self.min_print_tbuffer)
self.settings_hbox.add(self.min_print_tview)
self.min_print_tview.show()
self.toggles_hbox = gtk.HBox(False, 0)
self.vbox.pack_end(self.toggles_hbox, False, True, 0)
self.toggles_hbox.show()
self.info_label = gtk.Label("Print start/end info:")
self.toggles_hbox.add(self.info_label)
self.info_label.show()
self.info_tbuffer=gtk.TextBuffer()
self.info_tbuffer.set_text("yes")
self.info_tview=gtk.TextView(self.info_tbuffer)
self.toggles_hbox.add(self.info_tview)
self.info_tview.show()
self.fail_error_label = gtk.Label("Fail on error:")
self.toggles_hbox.add(self.fail_error_label)
self.fail_error_label.show()
self.fail_error_tbuffer=gtk.TextBuffer()
self.fail_error_tbuffer.set_text("no")
self.fail_error_tview=gtk.TextView(self.fail_error_tbuffer)
self.toggles_hbox.add(self.fail_error_tview)
self.fail_error_tview.show()
self.load_button = gtk.Button("Import") #todo: rename variables to import too
self.load_button.connect("clicked", self.load_clicked, "Import clicked")
self.toggles_hbox.add(self.load_button)
self.load_button.show()
threading.Thread.__init__ ( self )
print "initialised new bulk import thread (not actually a thread yet)"
#end class import_threaded
i = GuiBulkImport(db, settings, config)
main_window = gtk.Window()
main_window.connect('destroy', destroy)
main_window.add(i.vbox)
main_window.show()
gtk.main()

View File

@ -121,11 +121,6 @@ def read_stdin(): # This is the thread function
destroy()
break # this thread is not always killed immediately with gtk.main_quit()
# delete hud_dict entries for any HUD destroyed since last iteration
# for h in hud_dict:
# HUD_removed(h)
# removing this function, we shouldn't need it anymore, since the hud should notify us anyway, right?
# get basic info about the new hand from the db
(table_name, max, poker_game) = db_connection.get_table_name(new_hand_id)

View File

@ -361,7 +361,7 @@ def clean_title(name):
' \(deep hu\)', ' \(deep 6\)', ' \(2\)',
' \(edu\)', ' \(edu, 6 max\)', ' \(6\)',
' \(speed\)',
' no all-in', ' fast', ',', ' 50BB min', '\s+$']:
' no all-in', ' fast', ',', ' 50BB min', '50bb min', '\s+$']:
name = re.sub(pattern, '', name)
name = name.rstrip()
return name

View File

@ -44,6 +44,8 @@ import GuiGraphViewer
import FpdbSQLQueries
import Configuration
VERSION = "0.10"
class fpdb:
def tab_clicked(self, widget, tab_name):
"""called when a tab button is clicked to activate that tab"""
@ -114,7 +116,8 @@ class fpdb:
#end def destroy
def dia_about(self, widget, data):
print "todo: implement dia_about"
print "todo: implement dia_about",
print " version = %s, requires database version %s" % (VERSION, "118")
#end def dia_about
def dia_create_del_database(self, widget, data):
@ -376,7 +379,7 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_title("Free Poker DB - version: alpha9+, p143 or higher")
self.window.set_title("Free Poker DB - v%s or higher" % (VERSION, ))
self.window.set_border_width(1)
self.window.set_size_request(1020,400)
self.window.set_resizable(True)

View File

@ -17,8 +17,25 @@
#see status.txt for site/games support info
import sys
# Standard Library modules
import os # todo: remove this once import_dir is in fpdb_import
import sys
from time import time
import traceback
import math
import datetime
import re
# fpdb/FreePokerTools modules
import fpdb_simple
import fpdb_db
import fpdb_parse_logic
import Configuration
import EverleafToFpdb
# database interface modules
try:
import MySQLdb
mysqlLibFound=True
@ -31,17 +48,6 @@ try:
except:
pass
import traceback
import math
import os
import datetime
import re
import fpdb_db
import fpdb_simple
import fpdb_parse_logic
import EverleafToFpdb
from time import time
class Importer:
def __init__(self, caller, settings, config):
@ -85,6 +91,15 @@ class Importer:
def setFailOnError(self, value):
self.settings['failOnError'] = value
def setHandsInDB(self, value):
self.settings['handsInDB'] = value
def setThreads(self, value):
self.settings['threads'] = value
def setDropIndexes(self, value):
self.settings['dropIndexes'] = value
# def setWatchTime(self):
# self.updated = time()
@ -93,7 +108,7 @@ class Importer:
#Add an individual file to filelist
def addImportFile(self, filename, site = "default", filter = "passthrough"):
#TODO: test it is a valid file
#TODO: test it is a valid file -> put that in config!!
self.filelist[filename] = [site] + [filter]
#Add a directory of files to filelist
@ -111,14 +126,20 @@ class Importer:
else:
print "Warning: Attempted to add non-directory: '" + str(dir) + "' as an import directory"
#Run full import on filelist
def runImport(self):
fpdb_simple.prepareBulkImport(self.fdb)
""""Run full import on self.filelist."""
start = datetime.datetime.now()
print "started at", start, "--", len(self.filelist), "files to import.", self.settings['dropIndexes']
if self.settings['dropIndexes'] == 'auto':
self.settings['dropIndexes'] = self.calculate_auto()
if self.settings['dropIndexes'] == 'drop':
fpdb_simple.prepareBulkImport(self.fdb)
totstored = 0
totdups = 0
totpartial = 0
toterrors = 0
tottime = 0
# if threads <= 1: do this bit
for file in self.filelist:
(stored, duplicates, partial, errors, ttime) = self.import_file_dict(file, self.filelist[file][0], self.filelist[file][1])
totstored += stored
@ -126,9 +147,19 @@ class Importer:
totpartial += partial
toterrors += errors
tottime += ttime
fpdb_simple.afterBulkImport(self.fdb)
if self.settings['dropIndexes'] == 'drop':
fpdb_simple.afterBulkImport(self.fdb)
fpdb_simple.analyzeDB(self.fdb)
return (totstored, totdups, totpartial, toterrors, tottime)
# else: import threaded
def calculate_auto(self):
"""An heuristic to determine a reasonable value of drop/don't drop"""
if len(self.filelist) == 1: return "don't drop"
if self.settings['handsInDB'] < 5000: return "drop"
if len(self.filelist) < 50: return "don't drop"
if self.settings['handsInDB'] > 50000: return "don't drop"
return "drop"
#Run import on updated files, then store latest update time.
def runUpdated(self):

View File

View File

@ -15,23 +15,23 @@
#In the "official" distribution you can find the license in
#agpl-3.0.txt in the docs folder of the package.
#get rid of extraneous stuff
rm regression-test/*.found.txt
rm regression-test/*.pyc
rm pyfpdb/*.pyc
mkdir fpdb-$1
cp -R docs fpdb-$1/
cp -R packaging fpdb-$1/
cp -R pyfpdb fpdb-$1/
rm fpdb-$1/pyfpdb/HUD_config.*
cp pyfpdb/HUD_config.xml.example fpdb-$1/pyfpdb/HUD_config.xml
cp -R regression-test fpdb-$1/
cp -R utils fpdb-$1/
# make the fpdb_$1.zip file for windows
echo "*** making zip file"
zip -r ../fpdb_$1.zip docs
zip -r ../fpdb_$1.zip ignore-me_perl6
zip -r ../fpdb_$1.zip packaging
zip -r ../fpdb_$1.zip pyfpdb
zip -r ../fpdb_$1.zip regression-test
zip -r ../fpdb_$1.zip utils
zip -r ../fpdb_$1.zip website
# now make the fpdb_$1.tar.bz2 file for linux
echo "*** making tar.bz2 file"
tar --recursion -cjf ../fpdb_$1.tar.bz2 *
cd fpdb-$1
zip -r releases/fpdb-1.0_$1.zip *
tar -cf - * | bzip2 >> releases/fpdb-1.0_$1.tar.bz2
cd ..
rm -r fpdb-$1
echo "Please ensure the files are named fpdb-1.0_alpha*_p*.*"