:mod:`MiniAEFrame` --- Open Scripting Architecture server support
=================================================================

.. module:: MiniAEFrame
   :platform: Mac
   :synopsis: Support to act as an Open Scripting Architecture (OSA) server ("Apple Events").


.. index::
   single: Open Scripting Architecture
   single: AppleEvents
   module: FrameWork

The module :mod:`MiniAEFrame` provides a framework for an application that can
function as an Open Scripting Architecture  (OSA) server, i.e. receive and
process AppleEvents. It can be used in conjunction with :mod:`FrameWork` or
standalone. As an example, it is used in :program:`PythonCGISlave`.

The :mod:`MiniAEFrame` module defines the following classes:


.. class:: AEServer()

   A class that handles AppleEvent dispatch. Your application should subclass this
   class together with either :class:`MiniApplication` or
   :class:`FrameWork.Application`. Your :meth:`__init__` method should call the
   :meth:`__init__` method for both classes.


.. class:: MiniApplication()

   A class that is more or less compatible with :class:`FrameWork.Application` but
   with less functionality. Its event loop supports the apple menu, command-dot and
   AppleEvents; other events are passed on to the Python interpreter and/or Sioux.
   Useful if your application wants to use :class:`AEServer` but does not provide
   its own windows, etc.


.. _aeserver-objects:

AEServer Objects
----------------


.. method:: AEServer.installaehandler(classe, type, callback)

   Installs an AppleEvent handler. *classe* and *type* are the four-character OSA
   Class and Type designators, ``'****'`` wildcards are allowed. When a matching
   AppleEvent is received the parameters are decoded and your callback is invoked.


.. method:: AEServer.callback(_object, **kwargs)

   Your callback is called with the OSA Direct Object as first positional
   parameter. The other parameters are passed as keyword arguments, with the
   4-character designator as name. Three extra keyword parameters are passed:
   ``_class`` and ``_type`` are the Class and Type designators and ``_attributes``
   is a dictionary with the AppleEvent attributes.

   The return value of your method is packed with :func:`aetools.packevent` and
   sent as reply.

Note that there are some serious problems with the current design. AppleEvents
which have non-identifier 4-character designators for arguments are not
implementable, and it is not possible to return an error to the originator. This
will be addressed in a future release.