# This could much more completely be done as a subclass of dict, but for
# brevity we'll just define it like this for now.
class FifoCache:
    '''
    A mapping(ish) object that remembers the past <entries> items set.
    '''
    def __init__(self, entries):
        self.entries = entries
        self.dct = {}
        self.lst = []
        self.__repr__ = self.dct.__repr__
        self.__contains__ = self.dct.__contains__
        self.__getitem__ = self.dct.__getitem__
    def __setitem__(self, key, value):
        dct = self.dct
        lst = self.lst
        if key in self:
            del self[key]
        lst.append(key)
        dct[key] = value
        if len(lst) > self.entries:
            del dct[lst.pop(0)]
    def __delitem__(self, key):
        if not self.dct.has_key(key):
            raise KeyError, key
        self.lst.remove(key)
        self.dct.pop(key)
# f = FifoCache(entries = 3)
# f["fly"] = "foo"
# f["moo"] = "two"
# f["bar"] = "baz"
# f["dave"] = "wilson"
# f["age"] = 20
# f now has keys 'bar', 'dave', and 'age'.