message_cache.py
98 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
Brian E Granger
|
r1234 | # encoding: utf-8 | ||
"""Storage for the responses from the interpreter.""" | ||||
__docformat__ = "restructuredtext en" | ||||
#------------------------------------------------------------------------------- | ||||
# Copyright (C) 2008 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#------------------------------------------------------------------------------- | ||||
#------------------------------------------------------------------------------- | ||||
# Imports | ||||
#------------------------------------------------------------------------------- | ||||
class IMessageCache(object): | ||||
""" Storage for the response from the interpreter. | ||||
""" | ||||
def add_message(self, i, message): | ||||
""" Add a message dictionary to the cache. | ||||
Parameters | ||||
---------- | ||||
i : int | ||||
message : dict | ||||
""" | ||||
def get_message(self, i=None): | ||||
""" Get the message from the cache. | ||||
Parameters | ||||
---------- | ||||
i : int, optional | ||||
The number of the message. If not provided, return the | ||||
highest-numbered message. | ||||
Returns | ||||
------- | ||||
message : dict | ||||
Raises | ||||
------ | ||||
IndexError if the message does not exist in the cache. | ||||
""" | ||||
class SimpleMessageCache(object): | ||||
""" Simple dictionary-based, in-memory storage of the responses from the | ||||
interpreter. | ||||
""" | ||||
def __init__(self): | ||||
self.cache = {} | ||||
def add_message(self, i, message): | ||||
""" Add a message dictionary to the cache. | ||||
Parameters | ||||
---------- | ||||
i : int | ||||
message : dict | ||||
""" | ||||
self.cache[i] = message | ||||
def get_message(self, i=None): | ||||
""" Get the message from the cache. | ||||
Parameters | ||||
---------- | ||||
i : int, optional | ||||
The number of the message. If not provided, return the | ||||
highest-numbered message. | ||||
Returns | ||||
------- | ||||
message : dict | ||||
Raises | ||||
------ | ||||
IndexError if the message does not exist in the cache. | ||||
""" | ||||
if i is None: | ||||
keys = self.cache.keys() | ||||
if len(keys) == 0: | ||||
raise IndexError("index %r out of range" % i) | ||||
else: | ||||
i = max(self.cache.keys()) | ||||
try: | ||||
return self.cache[i] | ||||
except KeyError: | ||||
# IndexError is more appropriate, here. | ||||
raise IndexError("index %r out of range" % i) | ||||