Subclasses of ObjectSpecifier can now be packed and unpacked. This allows
you to say something like "talker.count(want=Address_Book.people)" in stead of having to manually create the aetypes.Type(Address_Book.people.want) OSA type.
This commit is contained in:
parent
397e914209
commit
fc71026c8a
|
@ -23,7 +23,7 @@ import MacOS
|
||||||
import Carbon.File
|
import Carbon.File
|
||||||
import StringIO
|
import StringIO
|
||||||
import aetypes
|
import aetypes
|
||||||
from aetypes import mkenum, mktype
|
from aetypes import mkenum, ObjectSpecifier
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# These ones seem to be missing from AppleEvents
|
# These ones seem to be missing from AppleEvents
|
||||||
|
@ -99,7 +99,7 @@ def pack(x, forcetype = None):
|
||||||
if isinstance(x, StringType):
|
if isinstance(x, StringType):
|
||||||
return AE.AECreateDesc('TEXT', x)
|
return AE.AECreateDesc('TEXT', x)
|
||||||
if isinstance(x, UnicodeType):
|
if isinstance(x, UnicodeType):
|
||||||
data = t.encode('utf16')
|
data = x.encode('utf16')
|
||||||
if data[:2] == '\xfe\xff':
|
if data[:2] == '\xfe\xff':
|
||||||
data = data[2:]
|
data = data[2:]
|
||||||
return AE.AECreateDesc('utxt', data)
|
return AE.AECreateDesc('utxt', data)
|
||||||
|
@ -114,6 +114,9 @@ def pack(x, forcetype = None):
|
||||||
packkey(record, key, value)
|
packkey(record, key, value)
|
||||||
#record.AEPutParamDesc(key, pack(value))
|
#record.AEPutParamDesc(key, pack(value))
|
||||||
return record
|
return record
|
||||||
|
if type(x) == types.ClassType and issubclass(x, ObjectSpecifier):
|
||||||
|
# Note: we are getting a class object here, not an instance
|
||||||
|
return AE.AECreateDesc('type', x.want)
|
||||||
if hasattr(x, '__aepack__'):
|
if hasattr(x, '__aepack__'):
|
||||||
return x.__aepack__()
|
return x.__aepack__()
|
||||||
if hasattr(x, 'which'):
|
if hasattr(x, 'which'):
|
||||||
|
@ -231,7 +234,7 @@ def unpack(desc, formodulename=""):
|
||||||
if t == typeTrue:
|
if t == typeTrue:
|
||||||
return 1
|
return 1
|
||||||
if t == typeType:
|
if t == typeType:
|
||||||
return mktype(desc.data)
|
return mktype(desc.data, formodulename)
|
||||||
#
|
#
|
||||||
# The following are special
|
# The following are special
|
||||||
#
|
#
|
||||||
|
@ -339,11 +342,25 @@ def mkobject(dict):
|
||||||
# to __class__ is safe. Moreover, shouldn't there be a better
|
# to __class__ is safe. Moreover, shouldn't there be a better
|
||||||
# initializer for the classes in the suites?
|
# initializer for the classes in the suites?
|
||||||
def mkobjectfrommodule(dict, modulename):
|
def mkobjectfrommodule(dict, modulename):
|
||||||
|
if type(dict['want']) == types.ClassType and issubclass(dict['want'], ObjectSpecifier):
|
||||||
|
# The type has already been converted to Python. Convert back:-(
|
||||||
|
classtype = dict['want']
|
||||||
|
dict['want'] = aetypes.mktype(classtype.want)
|
||||||
want = dict['want'].type
|
want = dict['want'].type
|
||||||
module = __import__(modulename)
|
module = __import__(modulename)
|
||||||
codenamemapper = module._classdeclarations
|
codenamemapper = module._classdeclarations
|
||||||
classtype = codenamemapper.get(want, None)
|
classtype = codenamemapper.get(want, None)
|
||||||
newobj = mkobject(dict)
|
newobj = mkobject(dict)
|
||||||
if classtype:
|
if classtype:
|
||||||
|
assert issubclass(classtype, ObjectSpecifier)
|
||||||
newobj.__class__ = classtype
|
newobj.__class__ = classtype
|
||||||
return newobj
|
return newobj
|
||||||
|
|
||||||
|
def mktype(typecode, modulename=None):
|
||||||
|
if modulename:
|
||||||
|
module = __import__(modulename)
|
||||||
|
codenamemapper = module._classdeclarations
|
||||||
|
classtype = codenamemapper.get(typecode, None)
|
||||||
|
if classtype:
|
||||||
|
return classtype
|
||||||
|
return aetypes.mktype(typecode)
|
||||||
|
|
Loading…
Reference in New Issue