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)), ))
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__),
# 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', (
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)), ), )
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__), ), )
""" 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)), ), )
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__), ))
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)),
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)), ))