'Set an C{entity tag} for the outgoing response.
That\'s "entity tag" as in the HTTP/1.1 C{ETag} header, "used
for comparing two or more entities from the same requested
resource."
If I am a conditional request, I may modify my response code
to L{NOT_MODIFIED} or L{PRECONDITION_FAILED}, if appropriate
for the tag given.
@param etag: The entity tag for the resource being returned.
@type etag: string
@return: If I am a C{If-None-Match} conditional request and
the tag matches one in the request, I return
L{http.CACHED<CACHED>} to indicate that you should write
no body.  Otherwise, I return a false value.'

def setETag(self, etag):

    if etag:
        self.etag = etag
    tags = self.getHeader('if-none-match')
    if tags:
        tags = tags.split()
        if ((etag in tags) or ('*' in tags)):
            self.setResponseCode((((self.method in ('HEAD', 'GET')) and NOT_MODIFIED) or PRECONDITION_FAILED))
            return CACHED
    return None
