\chapter{MacPython OSA Modules \label{scripting}}

This chapter describes the current implementation of the Open Scripting
Architecure (OSA, also commonly referred to as AppleScript) for Python, allowing
you to control scriptable applications from your Python program,
and with a fairly pythonic interface. Development on this set of modules
has stopped, and a replacement is expected for Python 2.5.

For a description of the various components of AppleScript and OSA, and
to get an understanding of the architecture and terminology, you should
read Apple's documentation. The "Applescript Language Guide" explains
the conceptual model and the terminology, and documents the standard
suite. The "Open Scripting Architecture" document explains how to use
OSA from an application programmers point of view. In the Apple Help
Viewer these book sare located in the Developer Documentation, Core
Technologies section.


As an example of scripting an application, the following piece of
AppleScript will get the name of the frontmost \program{Finder} window
and print it:
	
\begin{verbatim}
tell application "Finder"
    get name of window 1
end tell
\end{verbatim}

In Python, the following code fragment will do the same:

\begin{verbatim}
import Finder

f = Finder.Finder()
print f.get(f.window(1).name)
\end{verbatim}

As distributed the Python library includes packages that implement the
standard suites, plus packages that interface to a small number of
common applications.

To send AppleEvents to an application you must first create the Python
package interfacing to the terminology of the application (what
\program{Script Editor} calls the "Dictionary"). This can be done from
within the \program{PythonIDE} or by running the
\file{gensuitemodule.py} module as a standalone program from the command
line.

The generated output is a package with a number of modules, one for
every suite used in the program plus an \module{__init__} module to glue
it all together. The Python inheritance graph follows the AppleScript
inheritance graph, so if a programs dictionary specifies that it
includes support for the Standard Suite, but extends one or two verbs
with extra arguments then the output suite will contain a module
\module{Standard_Suite} that imports and re-exports everything from
\module{StdSuites.Standard_Suite} but overrides the methods that have
extra functionality. The output of \module{gensuitemodule} is pretty
readable, and contains the documentation that was in the original
AppleScript dictionary in Python docstrings, so reading it is a good
source of documentation.

The output package implements a main class with the same name as the
package which contains all the AppleScript verbs as methods, with the
direct object as the first argument and all optional parameters as
keyword arguments. AppleScript classes are also implemented as Python
classes, as are comparisons and all the other thingies.

The main
Python class implementing the verbs also allows access to the properties
and elements declared in the AppleScript class "application". In the
current release that is as far as the object orientation goes, so
in the example above we need to use
\code{f.get(f.window(1).name)} instead of the more Pythonic
\code{f.window(1).name.get()}.


If an AppleScript identifier is not a Python identifier the name is
mangled according to a small number of rules:
\begin{itemize}
    \item spaces are replaced with underscores
    \item other non-alphanumeric characters are replaced with
    \code{_xx_} where \code{xx} is the hexadecimal character value
    \item any Python reserved word gets an underscore appended
\end{itemize}

Python also has support for creating scriptable applications
in Python, but
The following modules are relevant to MacPython AppleScript support:

\localmoduletable

In addition, support modules have been pre-generated for
\module{Finder}, \module{Terminal}, \module{Explorer},
\module{Netscape}, \module{CodeWarrior}, \module{SystemEvents} and
\module{StdSuites}.

\input{libgensuitemodule}
\input{libaetools}
\input{libaepack}
\input{libaetypes}
\input{libminiae}
