[Pythonmac-SIG] [patch] GetURL argv emulation for py2app 0.5.2
Brendan Simon (eTRIX)
brendan.simon at etrix.com.au
Fri Mar 11 00:04:08 CET 2011
Below is my patch to get URLs/URIs to be added to sys.argv when an app
is opened via the Launcher.
It should be applied to:
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/py2app/bootstrap/argv_emulation.py
Can this patch *please* be integrated (please modify if necessary) in to
0.5.3 release !!
eg. You can test with "open myapp myurl:test"
The sys.argv attribute should include "myurl:test" :)
NOTE: for some reason the AppleEvent constants kAEInternetSuite and
kAEISGetURL does not work as they are set to 'gurl' (lowercase).
However using 'GURL' does work :)
Cheers, Brendan.
--- argv_emulation_orig.py 2011-03-11 08:49:13.000000000 +1100
+++ argv_emulation.py 2011-03-11 09:47:00.000000000 +1100
@@ -7,7 +7,8 @@
import traceback
from Carbon import AE
from Carbon.AppleEvents import kCoreEventClass, kAEOpenApplication, \
- kAEOpenDocuments, keyDirectObject, typeAEList, typeAlias
+ kAEOpenDocuments, keyDirectObject, typeAEList, typeAlias, \
+ kAEInternetSuite, kAEISGetURL, typeChar
from Carbon import Evt
from Carbon import File
from Carbon.Events import highLevelEventMask, kHighLevelEvent
@@ -23,10 +24,14 @@
self.__runapp)
AE.AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
self.__openfiles)
+ #AE.AEInstallEventHandler(kAEInternetSuite, kAEISGetURL,
self.__geturl)
+ AE.AEInstallEventHandler('GURL', 'GURL', self.__geturl)
def close(self):
AE.AERemoveEventHandler(kCoreEventClass, kAEOpenApplication)
AE.AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments)
+ #AE.AERemoveEventHandler(kAEInternetSuite, kAEISGetURL)
+ AE.AERemoveEventHandler('GURL', 'GURL')
def mainloop(self, mask = highLevelEventMask, timeout = 1*60):
# Note: this is not the right way to run an event loop in
OSX or
@@ -91,6 +96,20 @@
self._quit()
+ def __geturl(self, requestevent, replyevent):
+ try:
+ listdesc = requestevent.AEGetParamDesc(keyDirectObject,
typeAEList)
+ for i in range(listdesc.AECountItems()):
+ desc = listdesc.AEGetNthDesc(i+1, typeChar)[1]
+ url = desc.data.decode('utf8')
+ sys.argv.append(url)
+ except Exception, e:
+ print "argvemulator.py warning: can't unpack a GetURL
event"
+ import traceback
+ traceback.print_exc()
+
+ self._quit()
+
return ArgvCollector()
def _argv_emulation():
More information about the Pythonmac-SIG
mailing list