import gzip
import StringIO

IDENTITY = 0
GZIP = 1

all = [IDENTITY, GZIP]


class UnknownEncodingError(Exception):
    """Exception which is raised when an unknown encoding has been requested"""
    pass

def get(encoding):
    if encoding in all:
        return encoding
    elif encoding.lower() == 'identity':
        return IDENTITY
    elif encoding.lower() == 'gzip':
        return GZIP
    else:
        raise UnknownEncodingError

def str(encoding):
    encoding = get(encoding)
    if encoding == IDENTITY:
        return 'identity'
    elif encoding == GZIP:
        return 'gzip'
    else:
        raise UnknownEncodingError

def encode(encoding, data):
    encoding = get(encoding)
    if encoding == IDENTITY:
        return data
    elif encoding == GZIP:
        zbuf = StringIO.StringIO()
        zfile = gzip.GzipFile(None, 'wb', 9, zbuf)
        zfile.write(data)
        zfile.close()
        return zbuf.getvalue()
    else:
        raise UnknownEncodingError

def decode(encoding, data):
    encoding = get(encoding)
    if encoding == IDENTITY:
        return data
    elif encoding == GZIP:
        zbuf = StringIO.StringIO(data)
        zfile = gzip.GzipFile(None, 'r', 9, zbuf)
        data = zfile.read()
        zfile.close()
        return data
    else:
        raise UnknownEncodingError