# 3.3 `aepack` -- Python変数とAppleEventデータコンテナ間の変換

利用可能な条件: Macintosh.

`aepack` モジュールは、Python 変数から AppleEvent ディスクリプ タへの変換(パック)と、その逆に変換(アンパック)する関数を定義しています。 Python 内では AppleEvent ディスクリプタは、組み込み型である AEDesc の Python オブジェクトとして扱われます。`AEDesc` は `Carbon.AE` モジュールで定義されています。

`aepack` モジュールは次の関数を定義しています。

`pack`( | x[, forcetype])

  Python 値 x を変換した値を保持する `AEDesc` オブジェクトを返しま す。forcetype が与えることで、結果のディスクリプタ型を指定できま す。それ以外では、Python 型から Apple Eventディスクリプタ型へのデフォ ルトのマッピングが使われます。マッピングは次の通りとなります。

  Python type | descriptor type
  --- | ---
  `FSSpec` | typeFSS
  `FSRef` | typeFSRef
  `Alias` | typeAlias
  integer | typeLong (32 bit integer)
  float | typeFloat (64 bit floating point)
  string | typeText
  unicode | typeUnicodeText
  list | typeAEList
  dictionary | typeAERecord
  instance | see below

  x がPythonインスタンスなら、この関数は `__aepack__()` メ ソッドを呼びだそうとします。このメソッドは `AEDesc` オブジェ クトを返します。

  x の変換が上で定義されていない場合は、この関数は、テキストディス クリプタとしてエンコードされた、値の(repr()関数による)Python文字列表現 が返されます。

`unpack`( | x[, formodulename])

  x は `AEDesc` タイプのオブジェクトでなければいけません。 この関数は、Apple Eventディスクリプタ x のデータのPythonオブジェ クト表現を返します。単純なAppleEventデータ型(整数、テキスト、浮動少 数点数)の、対応するPython型が返されます。Apple EventリストはPythonリ ストとして返され、リストの要素は再帰的にアンパックされます。 `formodulename` の指定がない場合、オブジェクト参照 (例：`line 3 of document 1`)が、`aetypes.ObjectSpecifier` のインスタ ンスとして返されます。ディスクリプタ型がtypeFSSであるAppleEventディ スクリプタが、`FSSpec` オブジェクトとして返されます。 AppleEventレコードディスクリプタが、再帰的にアンパックされた、型の4 文字キーと要素を持つPython辞書として返されます。

  オプションの `formodulename` 引数は `gensuitemodule` よ り作成されるスタブパッケージにより利用され、オブジェクト指定子のため の OSA クラスをモジュールの中で見つけられることを保証します。これは、 例えば、ファインダがウィンドウに対してオブジェクト指定子を返す場合、 `Finder.Window` のインスタンスが得られ、`aetypes.Window` が得られないことを保証します。前者は、ファインダ上のウィンドウが持っ ている、すべての特性および要素のことを知っています。一方、後者のもの はそれらのことを知りません。

参考資料:

`Carbon.AE`モジュール:
  Apple Eventマネージャルーチンへの組み込みアクセス.

`aetypes`モジュール:
  Apple Eventディスクリプタ型としてコードされたPython定義.

Inside Macintosh: Interapplication Communication
  Macintosh上でのプロセス間通信に関する情報