Merge branch 'master' of git://git.assembla.com/fpdb-sql.git
This commit is contained in:
		
						commit
						f117b62f2d
					
				| 
						 | 
				
			
			@ -41,12 +41,11 @@ def to_utf8(s):
 | 
			
		|||
        return _out
 | 
			
		||||
    except UnicodeDecodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
        raise
 | 
			
		||||
    except UnicodeEncodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
    except TypeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        sys.stderr.write('Could not encode: "%s"\n' % s)
 | 
			
		||||
        raise
 | 
			
		||||
    except TypeError: # TypeError is raised when we give unicode() an already encoded string
 | 
			
		||||
        return s
 | 
			
		||||
 | 
			
		||||
def to_db_utf8(s):
 | 
			
		||||
| 
						 | 
				
			
			@ -57,27 +56,22 @@ def to_db_utf8(s):
 | 
			
		|||
        return _out
 | 
			
		||||
    except UnicodeDecodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
        raise
 | 
			
		||||
    except UnicodeEncodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
    except TypeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
        sys.stderr.write('Could not encode: "%s"\n' % s)
 | 
			
		||||
        raise
 | 
			
		||||
 | 
			
		||||
def to_gui(s):
 | 
			
		||||
    if not_needed3: return s
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        (_out, _len) = encoder_to_sys.encode(s)
 | 
			
		||||
        # we usually don't want to use 'replace' but this is only for displaying
 | 
			
		||||
        # in the gui so it doesn't matter if names are missing an accent or two
 | 
			
		||||
        (_out, _len) = encoder_to_sys.encode(s, 'replace')
 | 
			
		||||
        return _out
 | 
			
		||||
    except UnicodeDecodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
        raise
 | 
			
		||||
    except UnicodeEncodeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
    except TypeError:
 | 
			
		||||
        sys.stderr.write('Could not convert: "%s"\n' % s)
 | 
			
		||||
        return s
 | 
			
		||||
 | 
			
		||||
        sys.stderr.write('Could not encode: "%s"\n' % s)
 | 
			
		||||
        raise
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -380,8 +380,8 @@ class Database:
 | 
			
		|||
            import sqlite3
 | 
			
		||||
            if use_pool:
 | 
			
		||||
                sqlite3 = pool.manage(sqlite3, pool_size=1)
 | 
			
		||||
            else:
 | 
			
		||||
                log.warning("SQLite won't work well without 'sqlalchemy' installed.")
 | 
			
		||||
            #else:
 | 
			
		||||
            #    log.warning("SQLite won't work well without 'sqlalchemy' installed.")
 | 
			
		||||
 | 
			
		||||
            if database != ":memory:":
 | 
			
		||||
                if not os.path.isdir(self.config.dir_database):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -194,8 +194,11 @@ class GuiAutoImport (threading.Thread):
 | 
			
		|||
                widget.set_label(u'  _Stop Autoimport  ')
 | 
			
		||||
                if self.pipe_to_hud is None:
 | 
			
		||||
                    if os.name == 'nt':
 | 
			
		||||
                        path = sys.path[0].replace('\\','\\\\')
 | 
			
		||||
                        command = 'python "'+path+'\\HUD_main.py" ' + self.settings['cl_options']
 | 
			
		||||
                        if sys.argv[0] == 'fpdb.exe':
 | 
			
		||||
                            command = 'HUD_main.exe'
 | 
			
		||||
                        else:
 | 
			
		||||
                            path = sys.path[0].replace('\\','\\\\')
 | 
			
		||||
                            command = 'python "'+path+'\\HUD_main.py" ' + self.settings['cl_options']
 | 
			
		||||
                        bs = 0
 | 
			
		||||
                    else:
 | 
			
		||||
                        command = os.path.join(sys.path[0], 'HUD_main.py')
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +211,8 @@ class GuiAutoImport (threading.Thread):
 | 
			
		|||
                                                            universal_newlines=True)
 | 
			
		||||
                    except:
 | 
			
		||||
                        err = traceback.extract_tb(sys.exc_info()[2])[-1]
 | 
			
		||||
                        self.addText( "\n*** GuiAutoImport Error opening pipe: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]))
 | 
			
		||||
                        #self.addText( "\n*** GuiAutoImport Error opening pipe: " + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]))
 | 
			
		||||
                        self.addText( "\n*** GuiAutoImport Error opening pipe: " + traceback.format_exc() )
 | 
			
		||||
                    else:
 | 
			
		||||
                        for site in self.input_settings:
 | 
			
		||||
                            self.importer.addImportDirectory(self.input_settings[site][0], True, site, self.input_settings[site][1])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,16 +70,15 @@ class HUD_main(object):
 | 
			
		|||
 | 
			
		||||
    def __init__(self, db_name = 'fpdb'):
 | 
			
		||||
        try:
 | 
			
		||||
            print "HUD_main: starting ..."
 | 
			
		||||
            print "\nHUD_main: starting ..."
 | 
			
		||||
            self.db_name = db_name
 | 
			
		||||
            self.config = Configuration.Config(file=options.config, dbname=db_name)
 | 
			
		||||
            log = Configuration.get_logger("logging.conf", "hud", log_dir=self.config.dir_log)
 | 
			
		||||
            log.info("HUD_main starting")
 | 
			
		||||
            log.info("Using db name = %s" % (db_name))
 | 
			
		||||
            log.info("HUD_main starting: using db name = %s" % (db_name))
 | 
			
		||||
 | 
			
		||||
            if not options.errorsToConsole:
 | 
			
		||||
                 fileName = os.path.join(self.config.dir_log, 'HUD-errors.txt')
 | 
			
		||||
                 print "Note: error output is being diverted to\n"+fileName \
 | 
			
		||||
                 print "Note: error output is being diverted to:\n"+fileName \
 | 
			
		||||
                       + "\nAny major error will be reported there _only_.\n" 
 | 
			
		||||
                 errorFile = open(fileName, 'w', 0)
 | 
			
		||||
                 sys.stderr = errorFile
 | 
			
		||||
| 
						 | 
				
			
			@ -139,8 +138,8 @@ class HUD_main(object):
 | 
			
		|||
                self.hud_dict[table_name].update(new_hand_id, self.config)
 | 
			
		||||
                self.hud_dict[table_name].reposition_windows()
 | 
			
		||||
            except:
 | 
			
		||||
                print "*** Exception in HUD_main::idle_func() *** "
 | 
			
		||||
                traceback.print_stack()
 | 
			
		||||
                log.error( "*** Exception in HUD_main::idle_func() *** " )
 | 
			
		||||
                log.error( traceback.format_stack() )
 | 
			
		||||
            finally:
 | 
			
		||||
                gtk.gdk.threads_leave()
 | 
			
		||||
                return False
 | 
			
		||||
| 
						 | 
				
			
			@ -247,8 +246,8 @@ class HUD_main(object):
 | 
			
		|||
                try:
 | 
			
		||||
                    self.hud_dict[temp_key].stat_dict = stat_dict
 | 
			
		||||
                except KeyError:    # HUD instance has been killed off, key is stale
 | 
			
		||||
                    sys.stderr.write('hud_dict[%s] was not found\n' % temp_key)
 | 
			
		||||
                    sys.stderr.write('will not send hand\n')
 | 
			
		||||
                    log.error('hud_dict[%s] was not found\n' % temp_key)
 | 
			
		||||
                    log.error('will not send hand\n')
 | 
			
		||||
                    # Unlocks table, copied from end of function
 | 
			
		||||
                    self.db_connection.connection.rollback()
 | 
			
		||||
                    return
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +281,7 @@ class HUD_main(object):
 | 
			
		|||
#        If no client window is found on the screen, complain and continue
 | 
			
		||||
                    if type == "tour":
 | 
			
		||||
                        table_name = "%s %s" % (tour_number, tab_number)
 | 
			
		||||
#                    sys.stderr.write("HUD create: table name "+table_name+" not found, skipping.\n")
 | 
			
		||||
#                    log.error("HUD create: table name "+table_name+" not found, skipping.\n")
 | 
			
		||||
                    log.error("HUD create: table name %s not found, skipping." % table_name)
 | 
			
		||||
                else:
 | 
			
		||||
                    tablewindow.max = max
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +290,7 @@ class HUD_main(object):
 | 
			
		|||
                    if hasattr(tablewindow, 'number'):
 | 
			
		||||
                        self.create_HUD(new_hand_id, tablewindow, temp_key, max, poker_game, type, stat_dict, cards)
 | 
			
		||||
                    else:
 | 
			
		||||
                        sys.stderr.write('Table "%s" no longer exists\n' % table_name)
 | 
			
		||||
                        log.error('Table "%s" no longer exists\n' % table_name)
 | 
			
		||||
 | 
			
		||||
            t6 = time.time()
 | 
			
		||||
            log.info("HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%4.3f,%4.3f)"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,10 @@ Create and manage the hud overlays.
 | 
			
		|||
import os
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
# logging has been set up in fpdb.py or HUD_main.py, use their settings:
 | 
			
		||||
log = logging.getLogger("hud")
 | 
			
		||||
 | 
			
		||||
#    pyGTK modules
 | 
			
		||||
import pygtk
 | 
			
		||||
import gtk
 | 
			
		||||
| 
						 | 
				
			
			@ -365,7 +369,7 @@ class Hud:
 | 
			
		|||
                self.create(*self.creation_attrs)
 | 
			
		||||
                self.update(self.hand, self.config)
 | 
			
		||||
            except Exception, e:
 | 
			
		||||
                print "Exception:",str(e)
 | 
			
		||||
                log.error("Exception:",str(e))
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
    def set_aggregation(self, widget, val):
 | 
			
		||||
| 
						 | 
				
			
			@ -377,7 +381,7 @@ class Hud:
 | 
			
		|||
 | 
			
		||||
            if     self.hud_params['h_agg_bb_mult'] != num \
 | 
			
		||||
               and getattr(self, 'h_aggBBmultItem'+str(num)).get_active():
 | 
			
		||||
                print 'set_player_aggregation', num
 | 
			
		||||
                log.debug('set_player_aggregation', num)
 | 
			
		||||
                self.hud_params['h_agg_bb_mult'] = num
 | 
			
		||||
                for mult in ('1', '2', '3', '10', '10000'):
 | 
			
		||||
                    if mult != str(num):
 | 
			
		||||
| 
						 | 
				
			
			@ -388,7 +392,7 @@ class Hud:
 | 
			
		|||
 | 
			
		||||
            if     self.hud_params['agg_bb_mult'] != num \
 | 
			
		||||
               and getattr(self, 'aggBBmultItem'+str(num)).get_active():
 | 
			
		||||
                print 'set_opponent_aggregation', num
 | 
			
		||||
                log.debug('set_opponent_aggregation', num)
 | 
			
		||||
                self.hud_params['agg_bb_mult'] = num
 | 
			
		||||
                for mult in ('1', '2', '3', '10', '10000'):
 | 
			
		||||
                    if mult != str(num):
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +419,7 @@ class Hud:
 | 
			
		|||
            self.hud_params[param] = 'E'
 | 
			
		||||
            getattr(self, prefix+'seatsStyleOptionA').set_active(False)
 | 
			
		||||
            getattr(self, prefix+'seatsStyleOptionC').set_active(False)
 | 
			
		||||
        print "setting self.hud_params[%s] = %s" % (param, style)
 | 
			
		||||
        log.debug("setting self.hud_params[%s] = %s" % (param, style))
 | 
			
		||||
 | 
			
		||||
    def set_hud_style(self, widget, val):
 | 
			
		||||
        (player_opp, style) = val
 | 
			
		||||
| 
						 | 
				
			
			@ -438,7 +442,7 @@ class Hud:
 | 
			
		|||
            self.hud_params[param] = 'T'
 | 
			
		||||
            getattr(self, prefix+'hudStyleOptionA').set_active(False)
 | 
			
		||||
            getattr(self, prefix+'hudStyleOptionS').set_active(False)
 | 
			
		||||
        print "setting self.hud_params[%s] = %s" % (param, style)
 | 
			
		||||
        log.debug("setting self.hud_params[%s] = %s" % (param, style))
 | 
			
		||||
 | 
			
		||||
    def update_table_position(self):
 | 
			
		||||
        if os.name == 'nt':
 | 
			
		||||
| 
						 | 
				
			
			@ -515,7 +519,7 @@ class Hud:
 | 
			
		|||
#    ask each aux to save its layout back to the config object
 | 
			
		||||
        [aux.save_layout() for aux in self.aux_windows]
 | 
			
		||||
#    save the config object back to the file
 | 
			
		||||
        print "saving new xml file"
 | 
			
		||||
        print "Updating config file"
 | 
			
		||||
        self.config.save()
 | 
			
		||||
 | 
			
		||||
    def adj_seats(self, hand, config):
 | 
			
		||||
| 
						 | 
				
			
			@ -611,8 +615,8 @@ class Hud:
 | 
			
		|||
            try:
 | 
			
		||||
                statd = self.stat_dict[s]
 | 
			
		||||
            except KeyError:
 | 
			
		||||
                print "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"
 | 
			
		||||
                print "(btw, the key was ", s, " and statd is...", statd
 | 
			
		||||
                log.error("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")
 | 
			
		||||
                log.error("(btw, the key was ", s, " and statd is...", statd)
 | 
			
		||||
                continue
 | 
			
		||||
            try:
 | 
			
		||||
                self.stat_windows[statd['seat']].player_id = statd['player_id']
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,10 @@ Routines for detecting and handling poker client windows for MS Windows.
 | 
			
		|||
#    Standard Library modules
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
import logging
 | 
			
		||||
# logging has been set up in fpdb.py or HUD_main.py, use their settings:
 | 
			
		||||
log = logging.getLogger("hud")
 | 
			
		||||
 | 
			
		||||
#    pyGTK modules
 | 
			
		||||
import pygtk
 | 
			
		||||
import gtk
 | 
			
		||||
| 
						 | 
				
			
			@ -62,19 +66,19 @@ class Table(Table_Window):
 | 
			
		|||
 | 
			
		||||
        try:
 | 
			
		||||
            if self.window == None:
 | 
			
		||||
                print "Window %s not found. Skipping." % search_string
 | 
			
		||||
                log.error( "Window %s not found. Skipping." % search_string )
 | 
			
		||||
                return None
 | 
			
		||||
        except AttributeError:
 | 
			
		||||
            print "self.window doesn't exist? why?"
 | 
			
		||||
            log.error( "self.window doesn't exist? why?" )
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        (x, y, width, height) = win32gui.GetWindowRect(hwnd)
 | 
			
		||||
        print "x = %s y = %s width = %s height = %s" % (x, y, width, height)
 | 
			
		||||
        log.debug("x = %s y = %s width = %s height = %s" % (x, y, width, height))
 | 
			
		||||
        self.x      = int(x) + b_width
 | 
			
		||||
        self.y      = int(y) + tb_height
 | 
			
		||||
        self.width  = width - x
 | 
			
		||||
        self.height = height - y
 | 
			
		||||
        print "x = %s y = %s width = %s height = %s" % (self.x, self.y, self.width, self.height)
 | 
			
		||||
        log.debug("x = %s y = %s width = %s height = %s" % (self.x, self.y, self.width, self.height))
 | 
			
		||||
        #self.height = int(height) - b_width - tb_height
 | 
			
		||||
        #self.width  = int(width) - 2*b_width
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -906,14 +906,16 @@ This program is licensed under the AGPL3, see docs"""+os.sep+"agpl-3.0.txt")
 | 
			
		|||
 | 
			
		||||
        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 + "Any major error will be reported there _only_.\n"
 | 
			
		||||
            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"
 | 
			
		||||
            errorFile = open(fileName, 'w', 0)
 | 
			
		||||
            sys.stderr = errorFile
 | 
			
		||||
 | 
			
		||||
        self.statusIcon = gtk.StatusIcon()
 | 
			
		||||
        if os.path.exists(os.path.join(sys.path[0], '../gfx/fpdb-cards.png')):
 | 
			
		||||
            self.statusIcon.set_from_file(os.path.join(sys.path[0], '../gfx/fpdb-cards.png'))
 | 
			
		||||
        # use getcwd() here instead of sys.path[0] so that py2exe works:
 | 
			
		||||
        cards = os.path.join(os.getcwd(), '..','gfx','fpdb-cards.png')
 | 
			
		||||
        if os.path.exists(cards):
 | 
			
		||||
            self.statusIcon.set_from_file(cards)
 | 
			
		||||
        elif os.path.exists('/usr/share/pixmaps/fpdb-cards.png'):
 | 
			
		||||
            self.statusIcon.set_from_file('/usr/share/pixmaps/fpdb-cards.png')
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,29 +22,78 @@ Py2exe script for fpdb.
 | 
			
		|||
 | 
			
		||||
########################################################################
 | 
			
		||||
 | 
			
		||||
#TODO:   change GuiAutoImport so that it knows to start HUD_main.exe, when appropriate
 | 
			
		||||
#TODO:   
 | 
			
		||||
#        include the lib needed to handle png files in mucked
 | 
			
		||||
#        get rid of all the uneeded libraries (e.g., pyQT)
 | 
			
		||||
#        think about an installer
 | 
			
		||||
 | 
			
		||||
# done: change GuiAutoImport so that it knows to start HUD_main.exe, when appropriate
 | 
			
		||||
 | 
			
		||||
#HOW TO USE this script:
 | 
			
		||||
#
 | 
			
		||||
#  cd to the folder where this script is stored, usually .../pyfpdb.
 | 
			
		||||
#  If there are build and dist subfolders present , delete them to get
 | 
			
		||||
#  rid of earlier builds.
 | 
			
		||||
#  Run the script with "py2exe_setup.py py2exe"
 | 
			
		||||
#  You will frequently get messages about missing .dll files. E. g., 
 | 
			
		||||
#- cd to the folder where this script is stored, usually .../pyfpdb.
 | 
			
		||||
#  [If there are build and dist subfolders present , delete them to get
 | 
			
		||||
#   rid of earlier builds. Update: script now does this for you]
 | 
			
		||||
#- Run the script with "py2exe_setup.py py2exe"
 | 
			
		||||
#- You will frequently get messages about missing .dll files. E. g., 
 | 
			
		||||
#  MSVCP90.dll. These are somewhere in your windows install, so you 
 | 
			
		||||
#  can just copy them to your working folder.
 | 
			
		||||
#  If it works, you'll have 2 new folders, build and dist. Build is 
 | 
			
		||||
#  working space and should be deleted. Dist contains the files to be
 | 
			
		||||
#  distributed. Last, you must copy the etc/, lib/ and share/ folders 
 | 
			
		||||
# from your gtk/bin/ folder to the dist folder. (the whole folders, not 
 | 
			
		||||
# just the contents) You can (should) then prune the etc/, lib/ and 
 | 
			
		||||
# share/ folders to remove components we don't need. 
 | 
			
		||||
#  can just copy them to your working folder. (or just assume other
 | 
			
		||||
#  person will have them? any copyright issues with including them?)
 | 
			
		||||
#- If it works, you'll have 3 new folders, build and dist and gfx. Build is 
 | 
			
		||||
#  working space and should be deleted. Dist and gfx contain the files to be
 | 
			
		||||
#  distributed. 
 | 
			
		||||
#- Last, you must copy the etc/, lib/ and share/ folders from your
 | 
			
		||||
#  gtk/bin/ (just /gtk/?) folder to the dist folder. (the whole folders, 
 | 
			
		||||
#  not just the contents) 
 | 
			
		||||
#- You can (should) then prune the etc/, lib/ and share/ folders to 
 | 
			
		||||
#  remove components we don't need. 
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
from distutils.core import setup
 | 
			
		||||
import py2exe
 | 
			
		||||
import glob
 | 
			
		||||
import matplotlib
 | 
			
		||||
from datetime import date
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def remove_tree(top):
 | 
			
		||||
    # Delete everything reachable from the directory named in 'top',
 | 
			
		||||
    # assuming there are no symbolic links.
 | 
			
		||||
    # CAUTION:  This is dangerous!  For example, if top == '/', it
 | 
			
		||||
    # could delete all your disk files.
 | 
			
		||||
    # sc: Nicked this from somewhere, added the if statement to try 
 | 
			
		||||
    #     make it a bit safer
 | 
			
		||||
    if top in ('build','dist','gfx') and os.path.basename(os.getcwd()) == 'pyfpdb':
 | 
			
		||||
        #print "removing directory '"+top+"' ..."
 | 
			
		||||
        for root, dirs, files in os.walk(top, topdown=False):
 | 
			
		||||
            for name in files:
 | 
			
		||||
                os.remove(os.path.join(root, name))
 | 
			
		||||
            for name in dirs:
 | 
			
		||||
                os.rmdir(os.path.join(root, name))
 | 
			
		||||
        os.rmdir(top)
 | 
			
		||||
 | 
			
		||||
def test_and_remove(top):
 | 
			
		||||
    if os.path.exists(top):
 | 
			
		||||
        if os.path.isdir(top):
 | 
			
		||||
            remove_tree(top)
 | 
			
		||||
        else:
 | 
			
		||||
            print "Unexpected file '"+top+"' found. Exiting."
 | 
			
		||||
            exit()
 | 
			
		||||
 | 
			
		||||
# remove build and dist dirs if they exist
 | 
			
		||||
test_and_remove('dist')
 | 
			
		||||
test_and_remove('build')
 | 
			
		||||
test_and_remove('gfx')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
today = date.today().strftime('%Y%m%d')
 | 
			
		||||
print "\n" + r"Output will be created in \dist\ and \fpdb_XXX_"+today+'\\'
 | 
			
		||||
print "Enter value for XXX (any length): ",     # the comma means no newline
 | 
			
		||||
xxx = sys.stdin.readline().rstrip()
 | 
			
		||||
dist_dir = r'..\fpdb-' + xxx + '-' + today + '-exe'
 | 
			
		||||
print
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
setup(
 | 
			
		||||
    name        = 'fpdb',
 | 
			
		||||
| 
						 | 
				
			
			@ -57,17 +106,26 @@ setup(
 | 
			
		|||
              ],
 | 
			
		||||
 | 
			
		||||
    options = {'py2exe': {
 | 
			
		||||
                      'packages'    :'encodings',
 | 
			
		||||
                      'includes'    : 'cairo, pango, pangocairo, atk, gobject, PokerStarsToFpdb',
 | 
			
		||||
		              'excludes'    : '_tkagg, _agg2, cocoaagg, fltkagg',
 | 
			
		||||
                      'dll_excludes': 'libglade-2.0-0.dll',
 | 
			
		||||
                      'packages'    : ['encodings', 'matplotlib'],
 | 
			
		||||
                      'includes'    : ['cairo', 'pango', 'pangocairo', 'atk', 'gobject'
 | 
			
		||||
                                      ,'PokerStarsToFpdb', 'matplotlib.numerix.random_array'],
 | 
			
		||||
                      'excludes'    : ['_gtkagg', '_tkagg', '_agg2', 'cocoaagg', 'fltkagg'],
 | 
			
		||||
                      'dll_excludes': ['libglade-2.0-0.dll', 'libgdk-win32-2.0-0.dll'
 | 
			
		||||
                                      ,'libgobject-2.0-0.dll'],
 | 
			
		||||
                  }
 | 
			
		||||
              },
 | 
			
		||||
 | 
			
		||||
    data_files = ['HUD_config.xml.example',
 | 
			
		||||
                  'Cards01.png',
 | 
			
		||||
                  'logging.conf',
 | 
			
		||||
                  (r'matplotlibdata', glob.glob(r'c:\python26\Lib\site-packages\matplotlib\mpl-data\*'))
 | 
			
		||||
                 ]
 | 
			
		||||
    # files in 2nd value in tuple are moved to dir named in 1st value
 | 
			
		||||
    data_files = [('', ['HUD_config.xml.example', 'Cards01.png', 'logging.conf'])
 | 
			
		||||
                 ,(dist_dir, [r'..\run_fpdb.bat'])
 | 
			
		||||
                 ,( dist_dir + r'\gfx', glob.glob(r'..\gfx\*.*') )
 | 
			
		||||
                 # line below has problem with fonts subdir ('not a regular file')
 | 
			
		||||
                 #,(r'matplotlibdata', glob.glob(r'c:\python25\Lib\site-packages\matplotlib\mpl-data\*'))
 | 
			
		||||
                 ] + matplotlib.get_py2exe_datafiles()
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
print '\n' + r'If py2exe was successful move the \dist\ directory '
 | 
			
		||||
print 'into \\'+dist_dir+'\\ and rename it as \\pyfpdb\\'
 | 
			
		||||
print "Don't forget to add the \\etc \\lib and \\share dirs from your gtk dir\n"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										7
									
								
								run_fpdb.bat
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								run_fpdb.bat
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
 | 
			
		||||
rem  .bat script to run fpdb
 | 
			
		||||
 | 
			
		||||
cd pyfpdb
 | 
			
		||||
 | 
			
		||||
fpdb.exe
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user