\section{\module{MiniAEFrame} ---
         Open Scripting Architecture server support}

\declaremodule{standard}{MiniAEFrame}
  \platform{Mac}
\modulesynopsis{Support to act as an Open Scripting Architecture (OSA) server
(``Apple Events'').}


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


The \module{MiniAEFrame} module defines the following classes:


\begin{classdesc}{AEServer}{}
A class that handles AppleEvent dispatch. Your application should
subclass this class together with either
\class{MiniApplication} or
\class{FrameWork.Application}. Your \method{__init__()} method should
call the \method{__init__()} method for both classes.
\end{classdesc}

\begin{classdesc}{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.
\end{classdesc}


\subsection{AEServer Objects \label{aeserver-objects}}

\begin{methoddesc}[AEServer]{installaehandler}{classe, type, callback}
Installs an AppleEvent handler. \var{classe} and \var{type} are the
four-character OSA Class and Type designators, \code{'****'} wildcards
are allowed. When a matching AppleEvent is received the parameters are
decoded and your callback is invoked.
\end{methoddesc}

\begin{methoddesc}[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: \code{_class} and \code{_type} are the Class and Type
designators and \code{_attributes} is a dictionary with the AppleEvent
attributes.

The return value of your method is packed with
\function{aetools.packevent()} and sent as reply.
\end{methoddesc}

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.
