[AG-TECH] Shared app Gotchas
Jennifer Teig von Hoffman
jtvh at bu.edu
Wed Jun 23 12:54:43 CDT 2004
Cool!
I'm adding a link to that page to my "developers link" page in the revised version of the users' guide to 2.2 shared apps.
- Jennifer
Rob King wrote:
> Thank you very much!
>
> That cleared things right up!
>
> Since I seem to be running into all the problems I can, I've started
> a page on the Access Grid Wiki devoted to shared app 'gotchas'. I'll try to
> put up situations that I encounter that have been hard to debug and might be
> common there. It would be great if any other shared app developers out
> there could put up some of their experiences too
>
> The page is at:
>
>
> http://www-unix.mcs.anl.gov/fl/research/accessgrid/wiki/moin.cgi/SharedAppGo
> tchas?action=show
>
> Hopefully we can grow this, and make life easier for those who come
> after us.
>
> Cheers,
>
> Rob King
>
>
> -----Original Message-----
> From: owner-ag-tech at mcs.anl.gov [mailto:owner-ag-tech at mcs.anl.gov] On Behalf
> Of Susanne Lefvert
> Sent: June 22, 2004 5:54 PM
> To: Rob King
> Cc: ag-tech at mcs.anl.gov
> Subject: ***SPAM*** Re: [AG-TECH] Shared app callback problem
>
>
> Rob,
>
> You seem to have a newer version of wxPython installed so I have not
> actually tried running the code. However, when calling ui components
> outside of the main ui thread (as you do from your ag event callback) you
> should use wxPostEvent or wxCallAfter to make sure things are working
> properly. You can find a good example of wxPostEvent here:
> http://wiki.wxpython.org/index.cgi/LongRunningTasks. I have been
> using wxCallAfter so examples of that are in existing shared apps.
>
> Regards,
>
> Susanne
>
>
> On Tue, 22 Jun 2004, Rob King wrote:
>
>
>> Thanks again Susanne,
>>
>> After looking at the shared question tool code it made much more
>>sense. I finally got the console apps up and running and it has been a
>>great help in debugging so far.
>> I've finally narrowed down the problem I've been having. It would
>>seem as though there is some problem with creating an instance of a
>
> wxPython
>
>>widget from within a shared app event call-back. Even when using the same
>>code for object creation, when instantiated from within a call-back the
>>object locks up (even though traces in the __init__ seem to indicate it
>>initializes fine). I think it might be some sort of funky threading
>>conflict between AGTK, and wxPython...
>>
>> Below I have included the code of a really small shared app that
>>exhibits this behaviour. To try it, simply paste the code into a .py
>
> file,
>
>>replace appUrl with an application session (though I'll keep the current
>
> one
>
>>up, so it *should* work as is), and run it from the command line.
>> If running one instance, pressing the new note button should pop up
>>a yellow tooltip that can be moved with the mouse. To see the problem run
>>two instances (on the same or different computers...shouldn't matter).
>>Pressing the new note button will work as it should in the app where the
>>button was pressed. A yellow tooltip will also pop up on the receiving
>
> end,
>
>>but the widget will lock up, so when mousing over you get an hour glass,
>
> and
>
>>you cannot move the tooltip anymore.
>>
>> Hopefully someone will be able to help me figure this one out, as
>>this same problem has been plaguing me over the past month+.
>>
>> Thanks in advance!
>>
>> -rob king
>>
>>
>>
>>
>>###########################Start code##################################
>>
>>
>>from wxPython.wx import *
>>import AccessGrid.SharedAppClient
>>from AccessGrid.Toolkit import CmdlineApplication
>>
>>class StickyBoard(wxApp):
>> def __init__( self, appUrl, debugMode = 1, logFile = None):
>> self.appURL = appUrl
>>
>>
>> # Create shared application client
>> self.sharedAppClient =
>>AccessGrid.SharedAppClient.SharedAppClient("StickyBoard")
>> self.log = self.sharedAppClient.InitLogging(debugMode, logFile)
>>
>> self.app = CmdlineApplication.instance()
>> self.app.Initialize("Sticky Board")
>>
>> # Connect to shared application service.
>> self.sharedAppClient.Join(appUrl)
>>
>> wxApp.__init__(self, False)
>>
>>
>> def OnInit(self):
>> self.Control = StickyBoardControl(self)
>> self.SetTopWindow(self.Control)
>> self.Control.Show(1)
>> self.sharedAppClient.RegisterEventCallback("note",
>>self.Control.noteCB )
>> return 1
>>
>>
>>
>>class StickyBoardControl(wxFrame):
>> def __init__(self, parent):
>> kwds =
>>
>
> {"style":wxCAPTION|wxMINIMIZE_BOX|wxCLOSE_BOX|wxSYSTEM_MENU|wxRESIZE_BORDER,
>
>>"size":(120, 120), "pos":(0,0)}
>>
>> wxFrame.__init__(self, *(None, -1, ""), **kwds)
>>
>> self.parent = parent
>> self.notes = []
>>
>> self.button = wxButton(self, -1, "New Note")
>> self.Bind(EVT_BUTTON, self.newSticky, self.button)
>>
>> box = wxBoxSizer(wxVERTICAL)
>> box.Add((0, 0))
>> box.Add(self.button, 0, wxALIGN_CENTER|wxALL, 15)
>> self.SetAutoLayout(True)
>> self.SetSizer(box)
>>
>> def noteCB(self, event):
>> senderId = event.data
>> if senderId == self.parent.sharedAppClient.GetPublicId():
>> self.parent.log.debug("Ignoring edit message from myself ")
>> else:
>> self.parent.log.debug( "adding note" )
>> self.note = Note(self, wxSIMPLE_BORDER)
>>
>> def newSticky(self, event=None):
>> self.note = Note(self, wxSIMPLE_BORDER)
>> publicID = self.parent.sharedAppClient.GetPublicId()
>> self.parent.sharedAppClient.SendEvent("note", (publicID))
>>
>>
>>
>>
>>class Note(wxPopupWindow):
>> def __init__(self, parent, style, text = None, pos = None):
>>
>> self.parent = parent
>>
>> wxPopupWindow.__init__(self, parent, style)
>>
>> self.SetBackgroundColour("GOLDENROD")
>>
>> self.SetSize((50,50))
>>
>> self.Bind(EVT_LEFT_DOWN, self.OnMouseLeftDown)
>> self.Bind(EVT_MOTION, self.OnMouseMotion)
>> self.Bind(EVT_LEFT_UP, self.OnMouseLeftUp)
>>
>> self.Show(1)
>>
>> def OnMouseLeftDown(self, evt):
>> self.ldPos =
>
> evt.GetEventObject().ClientToScreen(evt.GetPosition())
>
>> self.wPos = self.ClientToScreen((0,0))
>> self.CaptureMouse()
>>
>> def OnMouseMotion(self, evt):
>> if evt.Dragging() and evt.LeftIsDown():
>> dPos = evt.GetEventObject().ClientToScreen(evt.GetPosition())
>> nPos = (self.wPos.x + (dPos.x - self.ldPos.x),
>> self.wPos.y + (dPos.y - self.ldPos.y))
>> self.Move(nPos)
>>
>> def OnMouseLeftUp(self, evt):
>> self.ReleaseMouse()
>>
>>
>>
>>if __name__ == "__main__":
>>
>> from AccessGrid.Toolkit import CmdlineApplication
>> app = CmdlineApplication.instance()
>> app.Initialize("Sticky Board")
>>
>> # Url from app properties dialog in venue client. Change these!
>> appUrl = 'https://vv2.mcs.anl.gov:9000/119'
>> debugMode = 1
>>
>> stickyBoard = StickyBoard(appUrl, debugMode, None)
>> stickyBoard.MainLoop()
>>
>>
>>#############################end code####################################
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>-----Original Message-----
>>From: Susanne Lefvert [mailto:lefvert at mcs.anl.gov]
>>Sent: June 21, 2004 3:12 PM
>>To: Rob King
>>Subject: RE: [AG-TECH] Errors silenced?
>>
>>
>>Hello Rob,
>>
>>I have tried to answer your questions below.
>>
>>Regards,
>>
>>Susanne
>>
>>On Mon, 21 Jun 2004, Rob King wrote:
>>
>>
>>> Hmmm... I think I must be missing something here...
>>>
>>> I tried putting this in a file (test.py):
>>>
>>>from AccessGrid.Toolkit import CmdlineApplication
>>>app = CmdlineApplication.instance()
>>>app.Initialize("Sticky Board")
>>>appUrl = 'https://vv2.mcs.anl.gov:9000/208'
>>>
>>>And ran it, but nothing happened. It just ran through and ended.
>>>I also tried with app.Initialize("StickyBoard.py"), and that did nothing
>>
>>as
>>
>>>well.
>>>
>>>So a few questions:
>>>Should <appName> be the name registered in the venue client, or the
>>>filename?
>>
>>
>>You can set <appName> to whatever you want, I used "SharedQuestionTool".
>>
>>
>>
>>>Should the code above be a standalone app run from a command prompt, or
>>>should the code be incorporated into my shared app code somehow?
>>>I looked in the toolkit.py sourcecode, and I can't find where it
>
> actually
>
>>>runs the app, or takes in the appURL... am I looking at this wrong?
>>
>>
>>You can see an example of how I am using the code in
>>/AccessGrid/sharedapps/SharedQuestionTool/SharedQuestionTool.py
>>
>>
>>
>>>I also took a look at the AccessGrid/tools/VenueApp.py file, and from
>
> what
>
>>I
>>
>>>could interpret, it seems to create an application session on the server
>>
>>but
>>
>>>doesn't run the application locally. Again I may be mistaken though.
>>
>>
>>That's correct. You can use that code if you want to get access to an
>>application url without having to open the application session properties
>>dialog in the Venue Client.
>>
>>
>>
>>> Hopefully you can help me with this!
>>>
>>> Thanks a lot,
>>>
>>> Rob king
>>>
>>>-----Original Message-----
>>>From: owner-ag-tech at mcs.anl.gov [mailto:owner-ag-tech at mcs.anl.gov] On
>>
>>Behalf
>>
>>>Of Susanne Lefvert
>>>Sent: June 17, 2004 4:06 PM
>>>To: Rob King
>>>Cc: ag-tech at mcs.anl.gov
>>>Subject: Re: [AG-TECH] Errors silenced?
>>>
>>>
>>>Hello Rob,
>>>
>>>I am glad to hear that you are working on a shared application for the
>
> AG
>
>>>and would like to help you with your logging issue. Apparently, log
>
> files
>
>>>for shared apps are not created properly and we are working to get that
>>>fixed. In the mean time, you can use following code to test your app
>>>outside of the venue client:
>>>
>>>from AccessGrid.Toolkit import CmdlineApplication
>>>app = CmdlineApplication.instance()
>>>app.Initialize("<appName>")
>>>
>>># Url from app properties dialog in venue client (the 'Location
>>># URL' field in the dialog that shows up when you right click the
>>># application session you want to use and select 'Properties').
>>>appUrl = 'https://<host>:<port>/....'
>>>
>>>This will print errors to the console and create a log <appName>.log
>
> file
>
>>>where you are running your application. Also,
>>>AccessGrid/tools/VenueApp.py in cvs shows you how to create an
>>>application session in the venue without using the venue client.
>
>
>>>Hope this helps,
>>>
>>>Susanne
>>>
>>>
>>>
>>>
>>>
>>>On Thu, 17 Jun 2004, Rob King wrote:
>>>
>>>
>>>> Hello Everyone,
>>>>
>>>>
>>>>
>>>> I am working on developing a shared application right now,
>>
>>but
>>
>>>>have been having some problems. I could probably figure them out, but
>>
>>it
>>
>>>>seems as though the errors are being suppressed somewhere. It's
>>
>>happened
>>
>>>in
>>>
>>>>a couple of places so far, and problems become difficult to debug. I
>>
>>have
>>
>>>>debug logging mode on, but when it gets to an error, it doesn't log
>
> it,
>
>>it
>>
>>>>just stops. Is there some way to coax the error messages into a log
>
> or
>
>>>even
>>>
>>>>the debug console? My current method of putting a debug log statement
>>>
>>>every
>>>
>>>>couple lines of code has only met with limited success ;)
>>>>
>>>> Hope someone can help!
>>>>
>>>>
>>>>
>>>> -rob king
>>>>
>>>>
>>>
>>>
>>>__________ NOD32 1.772 (20040524) Information __________
>>>
>>>This message was checked by NOD32 Antivirus System.
>>>http://www.nod32.com
>>>
>>>
>>>
>>
>>__________ NOD32 1.772 (20040524) Information __________
>>
>>This message was checked by NOD32 Antivirus System.
>>http://www.nod32.com
>>
>>
>>
>
>
>
> __________ NOD32 1.772 (20040524) Information __________
>
> This message was checked by NOD32 Antivirus System.
> http://www.nod32.com
>
More information about the ag-tech
mailing list