'''a module to define a cache class for emoticons
import Cache
import os
import time
import shutil
import urllib
class EmoticonCache(Cache.Cache):
    '''a class to maintain a cache of an user emoticons
    def __init__(self, config_path, user):
        config_path -- the path where the base configuration is located
        user -- the user account or identifier
        Cache.Cache.__init__(self, os.path.join(config_path,
            user.strip()), 'emoticons', True)
    def parse(self):
        '''parse the file that contains the dir information
        return a dictionary with the emoticon as key and the hash as value
        if an emoticon is more than once on the file the last will be returned
        emotes = {}
        with file(self.info_path) as handle:
            for line in handle.readlines():
                shortcut, hash_ = line.split(' ', 1)
                shortcut = urllib.unquote(shortcut)
                emotes[shortcut] = hash_.strip()
        return emotes
    def list(self):
        '''return a list of the elements on the cache directory as tuples
        (emoticon, hash), duplicated shortcuts will be removed and the last
        appearance of the shortcut will be returned
        return self.parse().items()
    def insert(self, item):
        '''insert a new item into the cache
        return the shortcut and the hash on success None otherwise
        item -- a tuple containing the shortcut and the path to an image
        shortcut, path = item
        hash_ = Cache.get_file_path_hash(path)
        if hash_ is None:
            return None
        new_path = os.path.join(self.path, hash_)
        shutil.copy2(path, new_path)
        return self.__add_entry(shortcut, hash_)
    def insert_raw(self, item):
        '''insert a new item into the cache
        return the information (stamp, hash) on success None otherwise
        item -- a tuple containing the shortcut and a file like object with the image
        shortcut, image = item
        position = image.tell()
        hash_ = Cache.get_file_hash(image)
        if hash_ is None:
            return None
        path = os.path.join(self.path, hash_)
        handle = file(path, 'w')
        return self.__add_entry(shortcut, hash_)
    def __add_entry(self, shortcut, hash_):
        '''add an entry to the information file with the current timestamp
        and the hash_ of the file that was saved
        time_info = int(time.time())
        handle = file(self.info_path, 'a')
        handle.write('%s %s\n' % (urllib.quote(shortcut), hash_))
        return shortcut, hash_
    def __remove_entry(self, hash_to_remove):
        '''remove an entry from the information file
        since self.list() removes duplicated shortcuts this will purge
        duplicated shortcuts.
        entries = self.list()
        handle = file(self.info_path, 'w')
        for stamp, hash_ in entries:
            if hash_ != hash_to_remove:
                handle.write('%s %s\n' % (str(stamp), hash_))
    def remove(self, item):
        '''remove an item from cache
        return True on success False otherwise
        item -- the name of the image to remove
        if item not in self:
            return False
        os.remove(os.path.join(self.path, item))
        return True
    def __contains__(self, name):
        '''return True if name is in cache, False otherwise
        this method is used to do something like
        if 'lolw00t' in cache: asd()
        return os.path.isfile(os.path.join(self.path, name))