I tried via the import and it converts my main app to bytecode (see post on 
bottom). THANKS FOR THE HELP.
However, now I face a strange problem even before I build an app bundle. the 
mainfile.py runs perfect when launched alone.
But when run via main.py it hangs when Upload button is presses.
I susspect either wx.callback or the thread- but right now I am lost.
NOTE: I use a patched ftplib, so I get a callback from an upload proces, which 
ftplib by default only supports for download. I include the extra lines I added 
to ftplib.py.

my main.py looks like this:

# /usr/bin/pythonw
import mainfile


mainfile.py is a small ftp upload app which uses wx.Miniframe and thread



================================================================
# /usr/bin/pythonw

#gui elements
import wx
#os and sys interaction elements
import os
import sys
#ftp elements
from ftplib import FTP
# Apple XML propertylist parser
import plist
#str
import string
# make it threading capable 
import thread
pdffile = None
xmlfile = None
pofile = "P0.dtreq"
#preset to Fo39
fo_choice = "F39"

# define where to fnd the necessary config files
f = open(os.getcwd() + "/pdffile.txt",'r')
for line in f:
     line = line.rstrip()
     pdffile = line
f.close()

xmlfile = os.getcwd() + "/POReq.dtreq"

#abort without the necessary files
if pdffile is None or xmlfile is None:
     print "Sorry. Cannot go ahead without PDF-file and XML-file"
     sys.exit(0)

# import and parse the XML property list
xmldata = plist.parse_plist(xmlfile)
#assign XML values to variables
dealer = xmldata['CMS_licDealer']
customer_lastname = xmldata['K_nachname']
customer_firstname = xmldata['K_vorname']
customer_city = xmldata['K_ort']
customer_postal = xmldata['K_plz']
customer_street = xmldata['K_strasse']
customer_email = xmldata['CMS_licName']
serial = xmldata['CMS_licSerial']


dec_email ="[EMAIL PROTECTED]"
dec_serial ="123456"

# create the GUI Window
class Window ( wx.MiniFrame ):
        def __init__ ( self ):
                #define default values for upload bar
                statinfo = os.stat(pdffile)
                self.filesize = statinfo.st_size
                self.so_far = 0
                #define 4 Fo profiles to choose from
                fogra_list = ['Fo39','Fo28','Fo29','Fo30']
                # No suprises here
                # We only use a different cl
                wx.MiniFrame.__init__ ( self, None, -1, 'ftp TEST 
Transfer',style=wx.DEFAULT_FRAME_STYLE | wx.TINY_CAPTION_HORIZ)
                # Create a panel
                self.panel = wx.Panel ( self, -1)
                self.t1 = wx.StaticText(self.panel,-1," Username:",pos = 
(10,10))
                self.t2 = wx.TextCtrl(self.panel,-1,dec_email,pos = 
(100,10),size=(135, 15),style=wx.TE_READONLY)
                self.t3 = wx.StaticText(self.panel,-1," Password:",pos = 
(10,35))
                self.t4 = wx.TextCtrl(self.panel,-1,dec_serial,pos = 
(100,35),size=(135, 15),style=wx.TE_PASSWORD | wx.TE_READONLY )
                self.t5 = wx.StaticText(self.panel,-1," File:",pos = (10,60))
                self.t6 = wx.StaticText(self.panel,-1,tail1,pos = (100,60))
                self.t7 = wx.StaticText(self.panel,-1," FO:",pos = (10,85))
                self.ch = wx.Choice(self.panel, -1, (100, 80), choices = 
fogra_list)
                self.panel.Bind(wx.EVT_CHOICE, self.EvtChoice, self.ch)
                
                #contruct the gauge for progress display
                self.g1 = wx.Gauge(self.panel, -1, 100, (10, 110), (230, 25))
                self.t9 = wx.StaticText(self.panel, -1, "Kb:", pos = (15,135))
                self.t8 = wx.StaticText(self.panel, -1, "Percentt:", pos = 
(165,135))
                
                #set the go button
                self.start_upload_button = wx.Button(self.panel, -1, "Upload")
                self.start_upload_button.SetPosition((15, 165))
                self.panel.Bind(wx.EVT_BUTTON, self.OnStartUpload, 
self.start_upload_button)
                #set the close button
                self.close_window_button = wx.Button(self.panel, -1, "Fertig")
                self.close_window_button.SetPosition((165, 165))
                self.panel.Bind(wx.EVT_BUTTON, self.OnCloseMe, 
self.close_window_button)
                self.close_window_button.Enable(False)
        
                #set fonts - this time individually for later playing
                self.t1.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t2.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t3.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t4.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t5.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t6.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t7.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.ch.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t8.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))
                self.t9.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL))

                #Set Miniframe properties and launch it
                self.SetSize((250,220))
                self.CenterOnParent(wx.BOTH)
                self.Show(True) 
        def wxcallback(self, buffer):
             self.so_far = self.so_far+len(buffer)-1
             #self.g1.SetValue(self.so_far)
             #self.g1.Update(self.so_far)
             pct = float(self.so_far)/self.filesize*100
             self.g1.SetValue(pct)
             pct2 = round(pct, 2)
             self.t8.SetLabel("Prozent: " + str(pct2))
             self.t9.SetLabel("Kb: " + str(self.so_far) + " von " + 
str(self.filesize))
             
             #print "so far:", self.so_far, pct
             return

        def EvtChoice(self,event):
                global fo_choice
                fo_choice=event.GetString()
                
        def OnCloseMe(self,evt):
                self.Close(True)
        
        def OnStartUpload(self,evt):
                thread.start_new(self.FtpUp,())

        def FtpUp(self):
                #start pulsing the gauge
                self.g1.Pulse()
                #disable the Upload button
                self.start_upload_button.Enable(False)
                #the progress dialog
                #connect to the ftp server
                ftp = FTP("192.168.0.1")
                ftp.login("username", "password")
                trans_file = open(pdffile)
                print trans_file
                #FTPprogress = FTPProgressDialog(filename)
                ftp.newstorbinary("STOR " + serial + "_" + fo_choice + "_" + 
tail1, trans_file, callback=self.wxcallback)
                
                trans_file.close()
                ftp.close()

                #set gauge to 100% caus it hangs at 99.9% although 100%
                self.g1.SetValue(230)
                self.t8.SetLabel("Percent: 100.00")
                self.t9.SetLabel("Kb: " + str(self.filesize) + " of " + 
str(self.filesize))
                #let the user press Finish to close the window
                self.close_window_button.SetForegroundColour("green")
                self.close_window_button.Enable()
application = wx.PySimpleApp()
Window()
application.MainLoop()
================================================================

patch for ftplib.py to support a callback for uploads:
Append to your ftplib.py:
===========================================================
    def newstorbinary(self, cmd, fp, blocksize=8192, callback = None):#this 
version includeds a callback
        '''Store a file in binary mode.'''
        #CRLF = ftplib.CRLF
        self.voidcmd('TYPE I')
        conn = self.transfercmd(cmd)
        while 1:
            buf = fp.read(blocksize)
            if not buf: break
            conn.sendall(buf)
            if callback: callback(buf)
        conn.close()
        return self.voidresp()




================================================

--- On Tue, 8/5/08, Mike Covill <[EMAIL PROTECTED]> wrote:

> From: Mike Covill <[EMAIL PROTECTED]>
> Subject: Re: [Pythonmac-SIG] py2app- python code packed in clear ascii
> To: [EMAIL PROTECTED]
> Cc: pythonmac-sig@python.org
> Date: Tuesday, August 5, 2008, 2:08 PM
> the shelter,
> 
> The last time I built an app bundle, the only source file
> from my code in plain ascii was my main.py file.  Everything
> else was precompiled and zipped up in a sub-folder.  So the
> strategy to hide all source code was to create a main.py
> file which simply imports another file containing what used
> to be in the main.py file, and run it from there.
> 
> Here are some py2app resources I found useful:
> 
> http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html
> http://undefined.org/python/py2app.html
> 
> Mike
> 
> 
> On 4-Aug-08, at 12:45 PM, the Shelter wrote:
> 
> > Hi,
> > 
> > after a lot of python programming on linux and windows
> I have now taken up the task of converting/ adapting my apps
> (python/wxPython) to the mac.
> > I tried to bundle my apps w/ py2app but had to find
> out that it seems like it packs my sources in clear ascii
> and not in binary form- somewhat unusual after having worked
> w/ py2exe ...
> > 
> > Am I missing something?
> > 
> > Right now I am on 10.4 w/ latest python and py2app-
> all from python.org- not the Apple versions.
> > 
> > thanX
> > 
> > 
> > 
> > _______________________________________________
> > Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
> > http://mail.python.org/mailman/listinfo/pythonmac-sig


      
_______________________________________________
Pythonmac-SIG maillist  -  Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig

Reply via email to