Esempio n. 1
0
def addConvenienceForBasicSequence(classname, readonly=True):
    addConvenienceForClass(
        classname,
        (("__len__", seq_len), ("__getitem__", seq_getitem),
         ("__iter__", seq_iter)),
    )

    if not readonly:
        addConvenienceForClass(classname, (("__setitem__", seq_setitem), ))
def addConvenienceForBasicSequence(classname, readonly=True):
    addConvenienceForClass(classname, (
        ('__len__',  seq_len),
        ('__getitem__', seq_getitem),
        ('__iter__', seq_iter),
    ))

    if not readonly:
        addConvenienceForClass(classname, (
            ('__setitem__', seq_setitem),
        ))
def addConvenienceForBasicMapping(classname, readonly=True):
    """
    Add the convience methods for a Cocoa mapping type

    Used to add the basic collections.Mapping or collections.MutableMapping
    APIs to a Cocoa class that has an API simular to NSDictionary.
    """
    addConvenienceForClass(classname,
        _CONVENIENCES_MAPPING_RO if readonly else _CONVENIENCES_MAPPING_RW)

    try:
        lst = CLASS_ABC[classname]
    except KeyError:
        lst = CLASS_ABC[classname] = []

    lst.append(collections.Mapping if readonly else collections.MutableMapping)
    return self.copy()


def nsarray__iter__(self):
    return iter(self.objectEnumerator())


addConvenienceForClass(
    "NSArray",
    (
        ("__new__", staticmethod(nsarray_new)),
        ("__add__", nsarray_add),
        ("__radd__", nsarray_radd),
        ("__mul__", nsarray_mul),
        ("__rmul__", nsarray_mul),
        ("__len__", nsarray__len__),
        ("__contains__", nsarray__contains__),
        ("__getitem__", nsarray__getitem__),
        ("__copy__", nsarray__copy__),
        ("__iter__", nsarray__iter__),
        ("index", nsarray_index),
        ("remove", nsarray_remove),
        ("pop", nsarray_pop),
    ),
)


def nsmutablearray__copy__(self):
    return self.mutableCopy()


addConvenienceForClass(
if sys.version_info[0] == 3:  # pragma: no 2.x cover
    def nsdict__lt__(self, other):
        return NotImplemented

    def nsdict__le__(self, other):
        return NotImplemented

    def nsdict__ge__(self, other):
        return NotImplemented

    def nsdict__gt__(self, other):
        return NotImplemented

    addConvenienceForClass('NSDictionary', (
        ('keys', lambda self: nsdict_keys(self)),
        ('values', lambda self: nsdict_values(self)),
        ('items', lambda self: nsdict_items(self)),
    ))

else:  # pragma: no 3.x cover
    def nsdict__cmp__(self, other):
        if not isinstance(other, collections.Mapping):
            return NotImplemented

        if len(self) < len(other):
            return -1

        elif len(self) > len(other):
            return 1

        sentinel = object()
# NOTE: 'no cover' because call of the system array
# classes are subclasses of NSMutableArray.
def nsarray__copy__(self):  # pragma: no cover
    return self.copy()

def nsarray__index__(self):
    return iter(self.objectEnumerator())

addConvenienceForClass('NSArray', (
    ('__new__', staticmethod(nsarray_new)),
    ('__add__', nsarray_add),
    ('__radd__', nsarray_radd),
    ('__mul__', nsarray_mul),
    ('__rmul__', nsarray_mul),
    ('__len__', nsarray__len__),
    ('__contains__', nsarray__contains__),
    ('__getitem__', nsarray__getitem__),
    ('__copy__', nsarray__copy__),
    ('__iter__', nsarray__index__),
    ('index', nsarray_index),
    ('remove', nsarray_remove),
    ('pop', nsarray_pop),
))

def nsmutablearray__copy__(self):
    return self.mutableCopy()

addConvenienceForClass('NSMutableArray', (
    ('__new__', staticmethod(nsmutablearray_new)),
    ('__copy__', nsmutablearray__copy__),
    ('__setitem__', nsarray__setitem__),
"""
Convenience interface for NSString
"""
from objc._convenience import addConvenienceForClass

__all__ = ()

_no_value = object()

def nsstring_new(cls, value=_no_value):
    if value is _no_value:
        return cls.alloc().init()
    else:
        return cls.alloc().initWithString_(value)

addConvenienceForClass('NSString', (
    ('__len__',     lambda self: self.length() ),
    ('endswith',    lambda self, pfx: self.hasSuffix_(pfx)),
    ('startswith',  lambda self, pfx: self.hasPrefix_(pfx)),
    ('__new__',     staticmethod(nsstring_new)),
))
Esempio n. 8
0
        return self.__object.valueForKey_(key)

    def __setitem__(self, key, value):
        if not isinstance(key, STR_TYPES):
            raise TypeError("Key must be string")

        return self.__object.setValue_forKey_(value, key)


addConvenienceForClass(
    "NSObject",
    (
        ("__hash__", nsobject_hash),
        ("__eq__", nsobject__eq__),
        ("__ne__", nsobject__ne__),
        ("__gt__", nsobject__gt__),
        ("__ge__", nsobject__ge__),
        ("__lt__", nsobject__lt__),
        ("__le__", nsobject__le__),
        ("_", property(kvc)),
    ),
)

if sys.version_info[0] == 2:  # pragma: no 3.x cover; pragma: no branch

    def nsobject__cmp__(self, other):
        try:
            func = self.compare_

        except AttributeError:
            return NotImplemented
def nsdict__le__(self, other):
    return NotImplemented


def nsdict__ge__(self, other):
    return NotImplemented


def nsdict__gt__(self, other):
    return NotImplemented


addConvenienceForClass(
    "NSDictionary",
    (
        ("keys", lambda self: nsdict_keys(self)),
        ("values", lambda self: nsdict_values(self)),
        ("items", lambda self: nsdict_items(self)),
    ),
)

addConvenienceForClass(
    "NSDictionary",
    (
        ("__new__", staticmethod(nsdict_new)),
        ("fromkeys", classmethod(nsdict_fromkeys)),
        ("__eq__", nsdict__eq__),
        ("__ne__", nsdict__ne__),
        ("__lt__", nsdict__lt__),
        ("__le__", nsdict__le__),
        ("__gt__", nsdict__gt__),
        ("__ge__", nsdict__ge__),
Esempio n. 10
0
# XXX: These NSData helpers should use Cocoa method calls,
#      instead of creating a memoryview/buffer object.
def nsdata__getitem__(self, item):
    buff = self.bytes()
    try:
        return buff[item]
    except TypeError:
        return buff[:][item]

def nsmutabledata__setitem__(self, item, value):
    self.mutableBytes()[item] = value

addConvenienceForClass('NSData', (
    ('__new__', staticmethod(nsdata__new__)),
    ('__len__', lambda self: self.length()),
    ('__str__', nsdata__str__),
    ('__getitem__', nsdata__getitem__),
))
addConvenienceForClass('NSMutableData', (
    ('__setitem__', nsmutabledata__setitem__),
))

if sys.version_info[0] == 2:
    def nsdata__getslice__(self, i, j):
        return self.bytes()[i:j]

    def nsmutabledata__setslice__(self, i, j, sequence):
        # XXX - could use replaceBytes:inRange:, etc.
        self.mutableBytes()[i:j] = sequence

    addConvenienceForClass('NSData', (
Esempio n. 11
0


addConvenienceForClass('NSSet', (
    ('__len__', lambda self: self.count()),
    ('__iter__', lambda self: nsset__iter__(self)),
    ('__contains__',  nsset__contains__),
    ('isdisjoint',  nsset_isdisjoint),
    ('union',  nsset_union),
    ('intersection',  nsset_intersection),
    ('difference',  nsset_difference),
    ('symmetric_difference',  nsset_symmetric_difference),
    ('issubset', nsset_issubset),
    ('__eq__', nsset__eq__),
    ('__ne__', nsset__ne__),
    ('__le__', nsset__le__),
    ('__lt__', nsset__lt__),
    ('issuperset', nsset_issuperset),
    ('__ge__', nsset__ge__),
    ('__gt__', nsset__gt__),
    ('__or__', nsset__or__),
    ('__ror__', nsset__ror__),
    ('__and__', nsset__and__),
    ('__rand__', nsset__rand__),
    ('__xor__', nsset__xor__),
    ('__rxor__', nsset__xor__),
    ('__sub__', nsset__sub__),
    ('__rsub__', nsset__rsub__),
))

if sys.version_info[0] == 2:  # pragma: no 3.x cover; pragma: no branch
    addConvenienceForClass('NSSet', (
            return self.__object.setValue_forKey_(value, key)
        else:
            super(kvc, self).__setattr__(key, value)

    def __getitem__(self, key):
        if not isinstance(key, str):
            raise TypeError("Key must be string")

        return self.__object.valueForKey_(key)

    def __setitem__(self, key, value):
        if not isinstance(key, str):
            raise TypeError("Key must be string")

        return self.__object.setValue_forKey_(value, key)


addConvenienceForClass(
    "NSObject",
    (
        ("__hash__", nsobject_hash),
        ("__eq__", nsobject__eq__),
        ("__ne__", nsobject__ne__),
        ("__gt__", nsobject__gt__),
        ("__ge__", nsobject__ge__),
        ("__lt__", nsobject__lt__),
        ("__le__", nsobject__le__),
        ("_", property(kvc)),
    ),
)
Esempio n. 13
0
addConvenienceForClass(
    "NSSet",
    (
        ("__len__", lambda self: self.count()),
        ("__iter__", lambda self: nsset__iter__(self)),
        ("__contains__", nsset__contains__),
        ("isdisjoint", nsset_isdisjoint),
        ("union", nsset_union),
        ("intersection", nsset_intersection),
        ("difference", nsset_difference),
        ("symmetric_difference", nsset_symmetric_difference),
        ("issubset", nsset_issubset),
        ("__eq__", nsset__eq__),
        ("__ne__", nsset__ne__),
        ("__le__", nsset__le__),
        ("__lt__", nsset__lt__),
        ("issuperset", nsset_issuperset),
        ("__ge__", nsset__ge__),
        ("__gt__", nsset__gt__),
        ("__or__", nsset__or__),
        ("__ror__", nsset__ror__),
        ("__and__", nsset__and__),
        ("__rand__", nsset__rand__),
        ("__xor__", nsset__xor__),
        ("__rxor__", nsset__xor__),
        ("__sub__", nsset__sub__),
        ("__rsub__", nsset__rsub__),
    ),
)
Esempio n. 14
0
"""
Convenience interface for NSString
"""
from objc._convenience import addConvenienceForClass

__all__ = ()

_no_value = object()


def nsstring_new(cls, value=_no_value):
    if value is _no_value:
        return cls.alloc().init()
    else:
        return cls.alloc().initWithString_(value)


addConvenienceForClass(
    "NSString",
    (
        ("__len__", lambda self: self.length()),
        ("endswith", lambda self, pfx: self.hasSuffix_(pfx)),
        ("startswith", lambda self, pfx: self.hasPrefix_(pfx)),
        ("__new__", staticmethod(nsstring_new)),
    ),
)
if sys.version_info[0] == 3:  # pragma: no 2.x cover
    def nsdict__lt__(self, other):
        return NotImplemented

    def nsdict__le__(self, other):
        return NotImplemented

    def nsdict__ge__(self, other):
        return NotImplemented

    def nsdict__gt__(self, other):
        return NotImplemented

    addConvenienceForClass('NSDictionary', (
        ('keys', lambda self: nsdict_keys(self)),
        ('values', lambda self: nsdict_values(self)),
        ('items', lambda self: nsdict_items(self)),
    ))

else:  # pragma: no 3.x cover
    def nsdict__cmp__(self, other):
        if not isinstance(other, collections.Mapping):
            return NotImplemented

        if len(self) < len(other):
            return -1

        elif len(self) > len(other):
            return 1

        sentinel = object()
Esempio n. 16
0
            except ValueError:
                raise TypeError("Value is not a number")

addConvenienceForClass('NSDecimalNumber', (
    ('__new__',         staticmethod(decimal_new)),
    ('__add__',         lambda self, other: NSDecimalNumber(operator.add(NSDecimal(self), other))),
    ('__radd__',        lambda self, other: NSDecimalNumber(operator.add(other, NSDecimal(self)))),
    ('__sub__',         lambda self, other: NSDecimalNumber(operator.sub(NSDecimal(self), other))),
    ('__rsub__',        lambda self, other: NSDecimalNumber(operator.sub(other, NSDecimal(self)))),
    ('__mul__',         lambda self, other: NSDecimalNumber(operator.mul(NSDecimal(self), other))),
    ('__rmul__',        lambda self, other: NSDecimalNumber(operator.mul(other, NSDecimal(self)))),
    ('__truediv__',     lambda self, other: NSDecimalNumber(operator.truediv(NSDecimal(self), other))),
    ('__rtruediv__',    lambda self, other: NSDecimalNumber(operator.truediv(other, NSDecimal(self)))),
    ('__floordiv__',    lambda self, other: NSDecimalNumber(operator.floordiv(NSDecimal(self), other))),
    ('__rfloordiv__',   lambda self, other: NSDecimalNumber(operator.floordiv(other, NSDecimal(self)))),
    ('__mod__',         lambda self, other: NSDecimalNumber(operator.mod(NSDecimal(self), other))),
    ('__rmod__',        lambda self, other: NSDecimalNumber(operator.mod(other, NSDecimal(self)))),
    ('__neg__',         lambda self: NSDecimalNumber(operator.neg(NSDecimal(self)))),
    ('__pos__',         lambda self: NSDecimalNumber(operator.pos(NSDecimal(self)))),
    ('__abs__',         lambda self: NSDecimalNumber(abs(NSDecimal(self)))),
    ('__lt__',         lambda self, other: (NSDecimal(self) < other)),
    ('__gt__',         lambda self, other: (NSDecimal(self) > other)),
    ('__le__',         lambda self, other: (NSDecimal(self) <= other)),
    ('__ge__',         lambda self, other: (NSDecimal(self) >= other)),
    ('__eq__',         lambda self, other: (NSDecimal(self) == other)),
    ('__ne__',         lambda self, other: (NSDecimal(self) != other)),
))

if sys.version_info[0] == 2:  # pragma: no 3.x cover
    addConvenienceForClass('NSDecimalNumber', (
        ('__div__',         lambda self, other: NSDecimalNumber(operator.div(NSDecimal(self), other))),
    next = __next__


addConvenienceForClass('NSSet', (
    ('__len__', lambda self: self.count()),
    ('__iter__', lambda self: nsset__iter__(self)),
    ('__contains__', nsset__contains__),
    ('isdisjoint', nsset_isdisjoint),
    ('union', nsset_union),
    ('intersection', nsset_intersection),
    ('difference', nsset_difference),
    ('symmetric_difference', nsset_symmetric_difference),
    ('issubset', nsset_issubset),
    ('__eq__', nsset__eq__),
    ('__ne__', nsset__ne__),
    ('__le__', nsset__le__),
    ('__lt__', nsset__lt__),
    ('issuperset', nsset_issuperset),
    ('__ge__', nsset__ge__),
    ('__gt__', nsset__gt__),
    ('__or__', nsset__or__),
    ('__ror__', nsset__ror__),
    ('__and__', nsset__and__),
    ('__rand__', nsset__rand__),
    ('__xor__', nsset__xor__),
    ('__rxor__', nsset__xor__),
    ('__sub__', nsset__sub__),
    ('__rsub__', nsset__rsub__),
))

if sys.version_info[0] == 2:  # pragma: no 3.x cover; pragma: no branch
    addConvenienceForClass('NSSet', (('__cmp__', nsset__cmp__), ))
Esempio n. 18
0
# XXX: These NSData helpers should use Cocoa method calls,
#      instead of creating a memoryview/buffer object.
def nsdata__getitem__(self, item):
    buff = self.bytes()
    try:
        return buff[item]
    except TypeError:
        return buff[:][item]

def nsmutabledata__setitem__(self, item, value):
    self.mutableBytes()[item] = value

addConvenienceForClass('NSData', (
    ('__new__', staticmethod(nsdata__new__)),
    ('__len__', lambda self: self.length()),
    ('__str__', nsdata__str__),
    ('__getitem__', nsdata__getitem__),
))
addConvenienceForClass('NSMutableData', (
    ('__setitem__', nsmutabledata__setitem__),
))

if sys.version_info[0] == 2:
    def nsdata__getslice__(self, i, j):
        return self.bytes()[i:j]

    def nsmutabledata__setslice__(self, i, j, sequence):
        # XXX - could use replaceBytes:inRange:, etc.
        self.mutableBytes()[i:j] = sequence

    addConvenienceForClass('NSData', (
def nsarray__copy__(self):  # pragma: no cover
    return self.copy()


def nsarray__iter__(self):
    return iter(self.objectEnumerator())


addConvenienceForClass('NSArray', (
    ('__new__', staticmethod(nsarray_new)),
    ('__add__', nsarray_add),
    ('__radd__', nsarray_radd),
    ('__mul__', nsarray_mul),
    ('__rmul__', nsarray_mul),
    ('__len__', nsarray__len__),
    ('__contains__', nsarray__contains__),
    ('__getitem__', nsarray__getitem__),
    ('__copy__', nsarray__copy__),
    ('__iter__', nsarray__iter__),
    ('index', nsarray_index),
    ('remove', nsarray_remove),
    ('pop', nsarray_pop),
))


def nsmutablearray__copy__(self):
    return self.mutableCopy()


addConvenienceForClass('NSMutableArray', (
    ('__new__', staticmethod(nsmutablearray_new)),
Esempio n. 20
0
def nsdata__bytes__(self):
    return bytes(self.bytes())


# XXX: These NSData helpers should use Cocoa method calls,
#      instead of creating a memoryview/buffer object.
def nsdata__getitem__(self, item):
    buff = self.bytes()
    try:
        return buff[item]
    except TypeError:
        return buff[:][item]


def nsmutabledata__setitem__(self, item, value):
    self.mutableBytes()[item] = value


addConvenienceForClass(
    "NSData",
    (
        ("__new__", staticmethod(nsdata__new__)),
        ("__len__", lambda self: self.length()),
        ("__str__", nsdata__str__),
        ("__getitem__", nsdata__getitem__),
    ),
)
addConvenienceForClass("NSMutableData",
                       (("__setitem__", nsmutabledata__setitem__), ))
addConvenienceForClass("NSData", (("__bytes__", nsdata__bytes__), ))
"""
Convenience interface for NSString
"""
from objc._convenience import addConvenienceForClass

__all__ = ()

_no_value = object()


def nsstring_new(cls, value=_no_value):
    if value is _no_value:
        return cls.alloc().init()
    else:
        return cls.alloc().initWithString_(value)


addConvenienceForClass('NSString', (
    ('__len__', lambda self: self.length()),
    ('endswith', lambda self, pfx: self.hasSuffix_(pfx)),
    ('startswith', lambda self, pfx: self.hasPrefix_(pfx)),
    ('__new__', staticmethod(nsstring_new)),
))