|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: special_method
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cimport cython
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
text = u'ab jd sdflk as sa sadas asdas fsdf '
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists(
|
|
Packit |
562c7a |
"//CoerceFromPyTypeNode")
|
|
Packit |
562c7a |
@cython.test_assert_path_exists(
|
|
Packit |
562c7a |
"//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//AttributeNode",
|
|
Packit |
562c7a |
"//AttributeNode[@entry.cname = 'PyUnicode_Contains']")
|
|
Packit |
562c7a |
def unicode_contains(unicode s, substring):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unicode_contains(text, 'fl')
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> unicode_contains(text, 'XYZ')
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> unicode_contains(None, 'XYZ')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
AttributeError: 'NoneType' object has no attribute '__contains__'
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return s.__contains__(substring)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists(
|
|
Packit |
562c7a |
"//CoerceFromPyTypeNode")
|
|
Packit |
562c7a |
@cython.test_assert_path_exists(
|
|
Packit |
562c7a |
# "//CoerceToPyTypeNode",
|
|
Packit |
562c7a |
"//NameNode[@entry.cname = 'PyUnicode_Contains']")
|
|
Packit |
562c7a |
def unicode_contains_unbound(unicode s, substring):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> unicode_contains_unbound(text, 'fl')
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> unicode_contains_unbound(text, 'XYZ')
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> unicode_contains_unbound(None, 'XYZ') # doctest: +ELLIPSIS
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
TypeError: descriptor '__contains__' requires a '...' object but received a 'NoneType'
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return unicode.__contains__(s, substring)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef class UnicodeSubclass(unicode):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> u = UnicodeSubclass(text)
|
|
Packit |
562c7a |
>>> 'fl' in u
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> 'XYZ' in u
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> u.method('fl')
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> u.method('XYZ')
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> u.operator('fl')
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> u.operator('XYZ')
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
def __contains__(self, substring):
|
|
Packit |
562c7a |
return substring not in (self + u'x')
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def method(self, other):
|
|
Packit |
562c7a |
return self.__contains__(other)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def operator(self, other):
|
|
Packit |
562c7a |
return other in self
|