traversalkit.cache

Cache

class traversalkit.cache.Cache(*args, **kw)

Resource cache.

Provides regular mutable mapping interface with additional readonly method. The readonly returns a context manager, that can be used to temporary freeze cache state.

>>> cache = Cache()
>>> cache['x'] = 1
>>> cache['y'] = 2
>>> cache == {'x': 1, 'y': 2}
True

>>> with cache.readonly():
...     cache['x'] = 3
...     del cache['y']

>>> cache == {'x': 1, 'y': 2}
True

It is useful when you do not want to cache child resources:

>>> from traversalkit import Resource, DEC_ID

>>> class Users(Resource):
...     ''' Collection of users '''

>>> @Users.mount_set(DEC_ID, metaname='user_id')
... class User(Resource):
...     ''' User resource '''

>>> users = Users()
>>> with users.__cache__.readonly():
...     user_1 = users['1']

>>> user_2 = users['2']
>>> users['2'] is user_2
True
>>> users['1'] is user_1
False