Beispiel #1
0
def pack(x, forcetype=None):
    """Pack a python object into an AE descriptor"""

    if forcetype:
        if type(x) is StringType:
            return AE.AECreateDesc(forcetype, x)
        else:
            return pack(x).AECoerceDesc(forcetype)

    if x is None:
        return AE.AECreateDesc('null', '')

    if isinstance(x, AEDescType):
        return x
    if isinstance(x, FSSType):
        return AE.AECreateDesc('fss ', x.data)
    if isinstance(x, FSRefType):
        return AE.AECreateDesc('fsrf', x.data)
    if isinstance(x, AliasType):
        return AE.AECreateDesc('alis', x.data)
    if isinstance(x, IntType):
        return AE.AECreateDesc('long', struct.pack('l', x))
    if isinstance(x, FloatType):
        return AE.AECreateDesc('doub', struct.pack('d', x))
    if isinstance(x, StringType):
        return AE.AECreateDesc('TEXT', x)
    if isinstance(x, UnicodeType):
        data = x.encode('utf16')
        if data[:2] == '\xfe\xff':
            data = data[2:]
        return AE.AECreateDesc('utxt', data)
    if isinstance(x, ListType):
        list = AE.AECreateList('', 0)
        for item in x:
            list.AEPutDesc(0, pack(item))
        return list
    if isinstance(x, DictionaryType):
        record = AE.AECreateList('', 1)
        for key, value in x.items():
            packkey(record, key, value)
            #record.AEPutParamDesc(key, pack(value))
        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__'):
        return x.__aepack__()
    if hasattr(x, 'which'):
        return AE.AECreateDesc('TEXT', x.which)
    if hasattr(x, 'want'):
        return AE.AECreateDesc('TEXT', x.want)
    return AE.AECreateDesc('TEXT', repr(x))  # Copout
def pack(x, forcetype=None):
    if forcetype:
        if type(x) is StringType:
            return AE.AECreateDesc(forcetype, x)
        else:
            return pack(x).AECoerceDesc(forcetype)
    if x is None:
        return AE.AECreateDesc('null', '')
    elif isinstance(x, AEDescType):
        return x
    elif isinstance(x, FSSType):
        return AE.AECreateDesc('fss ', x.data)
    elif isinstance(x, FSRefType):
        return AE.AECreateDesc('fsrf', x.data)
    elif isinstance(x, AliasType):
        return AE.AECreateDesc('alis', x.data)
    elif isinstance(x, IntType):
        return AE.AECreateDesc('long', struct.pack('l', x))
    elif isinstance(x, FloatType):
        return AE.AECreateDesc('doub', struct.pack('d', x))
    elif isinstance(x, StringType):
        return AE.AECreateDesc('TEXT', x)
    elif isinstance(x, UnicodeType):
        data = x.encode('utf16')
        if data[:2] == '\xfe\xff':
            data = data[2:]
        return AE.AECreateDesc('utxt', data)
    elif isinstance(x, ListType):
        list = AE.AECreateList('', 0)
        for item in x:
            list.AEPutDesc(0, pack(item))

        return list
    elif isinstance(x, DictionaryType):
        record = AE.AECreateList('', 1)
        for key, value in x.items():
            packkey(record, key, value)

        return record
    elif type(x) == types.ClassType and issubclass(x, ObjectSpecifier):
        return AE.AECreateDesc('type', x.want)
    elif hasattr(x, '__aepack__'):
        return x.__aepack__()
    elif hasattr(x, 'which'):
        return AE.AECreateDesc('TEXT', x.which)
    else:
        return AE.AECreateDesc('TEXT', x.want) if hasattr(
            x, 'want') else AE.AECreateDesc('TEXT', repr(x))
Beispiel #3
0
"""Tools for use in AppleEvent clients and servers: