def callback_wrapper(self, _request, _reply): _parameters, _attributes = aetools.unpackevent(_request) _class = _attributes['evcl'].type _type = _attributes['evid'].type if (_class, _type) in self.ae_handlers: _function = self.ae_handlers[(_class, _type)] elif (_class, '****') in self.ae_handlers: _function = self.ae_handlers[(_class, '****')] elif ('****', '****') in self.ae_handlers: _function = self.ae_handlers[('****', '****')] else: raise 'Cannot happen: AE callback without handler', (_class, _type) # XXXX Do key-to-name mapping here _parameters['_attributes'] = _attributes _parameters['_class'] = _class _parameters['_type'] = _type if '----' in _parameters: _object = _parameters['----'] del _parameters['----'] # The try/except that used to be here can mask programmer errors. # Let the program crash, the programmer can always add a **args # to the formal parameter list. rv = _function(_object, **_parameters) else: #Same try/except comment as above rv = _function(**_parameters) if rv is None: aetools.packevent(_reply, {}) else: aetools.packevent(_reply, {'----': rv})
def callback_wrapper(self, _request, _reply): _parameters, _attributes = aetools.unpackevent(_request) _class = _attributes["evcl"].type _type = _attributes["evid"].type if (_class, _type) in self.ae_handlers: _function = self.ae_handlers[_class, _type] elif (_class, "****") in self.ae_handlers: _function = self.ae_handlers[_class, "****"] elif ("****", "****") in self.ae_handlers: _function = self.ae_handlers[("****", "****")] else: raise "Cannot happen: AE callback without handler", (_class, _type) _parameters["_attributes"] = _attributes _parameters["_class"] = _class _parameters["_type"] = _type if "----" in _parameters: _object = _parameters["----"] del _parameters["----"] rv = _function(_object, **_parameters) else: rv = _function(**_parameters) if rv is None: aetools.packevent(_reply, {}) else: aetools.packevent(_reply, {"----": rv}) return
def callback_wrapper(self, _request, _reply): _parameters, _attributes = aetools.unpackevent(_request) _class = _attributes['evcl'].type _type = _attributes['evid'].type if self.ae_handlers.has_key((_class, _type)): _function = self.ae_handlers[(_class, _type)] elif self.ae_handlers.has_key((_class, '****')): _function = self.ae_handlers[(_class, '****')] elif self.ae_handlers.has_key(('****', '****')): _function = self.ae_handlers[('****', '****')] else: raise 'Cannot happen: AE callback without handler', (_class, _type) # XXXX Do key-to-name mapping here _parameters['_attributes'] = _attributes _parameters['_class'] = _class _parameters['_type'] = _type if _parameters.has_key('----'): _object = _parameters['----'] del _parameters['----'] # The try/except that used to be here can mask programmer errors. # Let the program crash, the programmer can always add a **args # to the formal parameter list. rv = _function(_object, **_parameters) else: #Same try/except comment as above rv = _function(**_parameters) if rv == None: aetools.packevent(_reply, {}) else: aetools.packevent(_reply, {'----':rv})
def callback_wrapper(self, _request, _reply): _parameters, _attributes = aetools.unpackevent(_request) _class = _attributes['evcl'].type _type = _attributes['evid'].type if (_class, _type) in self.ae_handlers: _function = self.ae_handlers[_class, _type] elif (_class, '****') in self.ae_handlers: _function = self.ae_handlers[_class, '****'] elif ('****', '****') in self.ae_handlers: _function = self.ae_handlers[('****', '****')] else: raise 'Cannot happen: AE callback without handler', (_class, _type) _parameters['_attributes'] = _attributes _parameters['_class'] = _class _parameters['_type'] = _type if '----' in _parameters: _object = _parameters['----'] del _parameters['----'] rv = _function(_object, **_parameters) else: rv = _function(**_parameters) if rv is None: aetools.packevent(_reply, {}) else: aetools.packevent(_reply, {'----': rv}) return
def callback_wrapper(self, _request, _reply): _parameters, _attributes = aetools.unpackevent(_request) _class = _attributes["evcl"].type _type = _attributes["evid"].type if (_class, _type) in self.ae_handlers: _function = self.ae_handlers[(_class, _type)] elif (_class, "****") in self.ae_handlers: _function = self.ae_handlers[(_class, "****")] elif ("****", "****") in self.ae_handlers: _function = self.ae_handlers[("****", "****")] else: raise "Cannot happen: AE callback without handler", (_class, _type) # XXXX Do key-to-name mapping here _parameters["_attributes"] = _attributes _parameters["_class"] = _class _parameters["_type"] = _type if "----" in _parameters: _object = _parameters["----"] del _parameters["----"] # The try/except that used to be here can mask programmer errors. # Let the program crash, the programmer can always add a **args # to the formal parameter list. rv = _function(_object, **_parameters) else: # Same try/except comment as above rv = _function(**_parameters) if rv is None: aetools.packevent(_reply, {}) else: aetools.packevent(_reply, {"----": rv})
def corehandler(req, rep): print 'core event!' parameters, attributes = aetools.unpackevent(req) print "event class =", attributes['evcl'] print "event id =", attributes['evid'] print 'parameters:', parameters # echo the arguments, to see how Script Editor formats them aetools.packevent(rep, parameters)
def opendocsevent(self, theAppleEvent, theReply): W.SetCursor('watch') import aetools parameters, args = aetools.unpackevent(theAppleEvent) docs = parameters['----'] if type(docs) <> type([]): docs = [docs] for doc in docs: fsr, a = doc.FSResolveAlias(None) path = fsr.as_pathname() self.opendoc(path)
def aehandler(self, request, reply): print "Apple Event", parameters, attributes = aetools.unpackevent(request) print "class =", `attributes['evcl'].type`, print "id =", `attributes['evid'].type` print "Parameters:" keys = parameters.keys() keys.sort() for key in keys: print "%s: %.150s" % (`key`, `parameters[key]`) print " :", str(parameters[key]) print "Attributes:" keys = attributes.keys() keys.sort() for key in keys: print "%s: %.150s" % (`key`, `attributes[key]`) aetools.packevent(reply, parameters)
def aehandler(request, reply): tosend = [] print 'request:', aetools.unpackevent(request) param = request.AEGetParamDesc(keyDirectObject, typeWildCard) if param.type == typeAEList: n = param.AECountItems() print 'List has', n, 'items' for i in range(1, 1+n): type, item = param.AEGetNthDesc(i, typeFSS) data = item.data print 'item', i, ':', type, item.type, len(data), 'bytes' vol, dir, fnlen = struct.unpack('hlb', data[:7]) filename = data[7:7+fnlen] print 'vol:', vol, '; dir:', dir, '; filename:', `filename` print 'full path:', macfs.FSSpec((vol,dir,filename)).as_pathname() tosend.append(item) else: pass print 'param:', (param.type, param.data[:20]), param.data[20:] and '...' if tosend: passtothink(tosend)
def _executePython(theAppleEvent, theReply): import aetools import cStringIO import traceback import sys parms, attrs = aetools.unpackevent(theAppleEvent) source = parms.get("----") if source is None: return stdout = cStringIO.StringIO() #print "<executing remote command>" save = sys.stdout, sys.stderr sys.stdout = sys.stderr = stdout namespace = {} try: try: exec source in namespace except: traceback.print_exc() finally: sys.stdout, sys.stderr = save output = stdout.getvalue() aetools.packevent(theReply, {"----": output})
"""PythonSlave.py
def wildhandler(req, rep): print 'wildcard event!' parameters, attributes = aetools.unpackevent(req) print "event class =", attributes['evcl'] print "event id =", attributes['evid'] print 'parameters:', parameters
"""MiniAEFrame - A minimal AppleEvent Application framework.
"""AEservertest - Test AppleEvent server interface
# (Slightly less) primitive operations for sending Apple Events to applications.
"""'echo' -- an AppleEvent handler which handles all events the same.
def sendevent(self, event): reply = event.AESend(self.send_flags, self.send_priority, self.send_timeout) parameters, attributes = aetools.unpackevent(reply) return reply, parameters, attributes