|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: dict, getitem
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cimport cython
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test(dict d, index):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = { 1: 10 }
|
|
Packit |
562c7a |
>>> test(d, 1)
|
|
Packit |
562c7a |
10
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test(d, 2)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
KeyError: 2
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test(d, (1,2))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
KeyError: (1, 2)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> import sys
|
|
Packit |
562c7a |
>>> try: d[(1,)]
|
|
Packit |
562c7a |
... except KeyError:
|
|
Packit |
562c7a |
... args = sys.exc_info()[1].args
|
|
Packit |
562c7a |
... if sys.version_info >= (2,5): print(args)
|
|
Packit |
562c7a |
... else: print((args,)) # fake it for older CPython versions
|
|
Packit |
562c7a |
((1,),)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> import sys
|
|
Packit |
562c7a |
>>> try: test(d, (1,))
|
|
Packit |
562c7a |
... except KeyError:
|
|
Packit |
562c7a |
... args = sys.exc_info()[1].args
|
|
Packit |
562c7a |
... if sys.version_info >= (2,5): print(args)
|
|
Packit |
562c7a |
... else: print((args,)) # fake it for older CPython versions
|
|
Packit |
562c7a |
((1,),)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> class Unhashable:
|
|
Packit |
562c7a |
... def __hash__(self):
|
|
Packit |
562c7a |
... raise ValueError
|
|
Packit |
562c7a |
>>> test(d, Unhashable())
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test(None, 1) # doctest: +ELLIPSIS
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
TypeError: ...object...
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[index]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def getitem_str(dict d, obj, str index):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = {'abc': 1, 'xyz': 2, None: 3}
|
|
Packit |
562c7a |
>>> getitem_str(d, d, 'abc')
|
|
Packit |
562c7a |
(1, 1)
|
|
Packit |
562c7a |
>>> getitem_str(d, d, 'xyz')
|
|
Packit |
562c7a |
(2, 2)
|
|
Packit |
562c7a |
>>> getitem_str(d, d, None)
|
|
Packit |
562c7a |
(3, 3)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> class GetItem(object):
|
|
Packit |
562c7a |
... def __getitem__(self, name): return d[name]
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItem(), 'abc')
|
|
Packit |
562c7a |
(1, 1)
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItem(), 'xyz')
|
|
Packit |
562c7a |
(2, 2)
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItem(), None)
|
|
Packit |
562c7a |
(3, 3)
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItem(), 'no')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
KeyError: 'no'
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> class GetItemFail(object):
|
|
Packit |
562c7a |
... def __getitem__(self, name): raise ValueError("failed")
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItemFail(), 'abc')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: failed
|
|
Packit |
562c7a |
>>> getitem_str(d, GetItemFail(), None)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: failed
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[index], obj[index]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def getitem_unicode(dict d, obj, unicode index):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = {'abc': 1, 'xyz': 2, None: 3}
|
|
Packit |
562c7a |
>>> getitem_unicode(d, d, u'abc')
|
|
Packit |
562c7a |
(1, 1)
|
|
Packit |
562c7a |
>>> getitem_unicode(d, d, u'xyz')
|
|
Packit |
562c7a |
(2, 2)
|
|
Packit |
562c7a |
>>> getitem_unicode(d, d, None)
|
|
Packit |
562c7a |
(3, 3)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> class GetItem(object):
|
|
Packit |
562c7a |
... def __getitem__(self, name): return d[name]
|
|
Packit |
562c7a |
>>> getitem_unicode(d, GetItem(), u'abc')
|
|
Packit |
562c7a |
(1, 1)
|
|
Packit |
562c7a |
>>> getitem_unicode(d, GetItem(), u'xyz')
|
|
Packit |
562c7a |
(2, 2)
|
|
Packit |
562c7a |
>>> getitem_unicode(d, GetItem(), None)
|
|
Packit |
562c7a |
(3, 3)
|
|
Packit |
562c7a |
>>> try: getitem_unicode(d, GetItem(), u'no')
|
|
Packit |
562c7a |
... except KeyError as exc: assert exc.args[0] == u'no', str(exc)
|
|
Packit |
562c7a |
... else: assert False, "KeyError not raised"
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> class GetItemFail(object):
|
|
Packit |
562c7a |
... def __getitem__(self, name): raise ValueError("failed")
|
|
Packit |
562c7a |
>>> getitem_unicode(d, GetItemFail(), u'abc')
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
ValueError: failed
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[index], obj[index]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def getitem_tuple(dict d, index):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = {1: 1, (1,): 2}
|
|
Packit |
562c7a |
>>> getitem_tuple(d, 1)
|
|
Packit |
562c7a |
(1, 2)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[index], d[index,]
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def getitem_in_condition(dict d, key, expected_result):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = dict(a=1, b=2)
|
|
Packit |
562c7a |
>>> getitem_in_condition(d, 'a', 1)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[key] is expected_result or d[key] == expected_result
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
@cython.test_fail_if_path_exists('//NoneCheckNode')
|
|
Packit |
562c7a |
def getitem_not_none(dict d not None, key):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> d = { 1: 10 }
|
|
Packit |
562c7a |
>>> test(d, 1)
|
|
Packit |
562c7a |
10
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test(d, 2)
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
KeyError: 2
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test(d, (1,2))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
KeyError: (1, 2)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return d[key]
|