0001from Cookie import SimpleCookie
0002import timeinterval
0003import time
0004
0005class Cookie(object):
0006
0007    """
0008    Object that represents a cookie meant to be set.  This is like the
0009    standard ``Cookie.SimpleCookie`` object, only slightly nicer --
0010    each cookie object is just one ``name=value`` setting, and dates
0011    can be given as a few special values (``'ONCLOSE'``, ``'NOW'``,
0012    ``'NEVER'``, and ``timeinterval`` strings like ``'1w'``).
0013    """
0014
0015    def __init__(self, name, value, path, expires=None, secure=False):
0016        self.name = name
0017        self.value = value
0018        self.path = path
0019        self.secure = secure
0020        if expires == 'ONCLOSE' or not expires:
0021            expires = None
0022        elif expires == 'NOW' or expires == 'NEVER':
0023            expires = time.gmtime(time.time())
0024            if expires == 'NEVER':
0025                expires = (expires[0] + 10,) + expires[1:]
0026            expires = time.strftime("%a, %d-%b-%Y %H:%M:%S GMT", expires)
0027        else:
0028            if isinstance(expires, (str, unicode)) and expires.startswith('+'):
0029                interval = timeinterval.time_decode(expires[1:])
0030                expires = time.time() + interval
0031            if isinstance(expires, (int, long, float)):
0032                expires = time.gmtime(expires)
0033            if isinstance(expires, (tuple, time.struct_time)):
0034                expires = time.strftime("%a, %d-%b-%Y %H:%M:%S GMT", expires)
0035        self.expires = expires
0036
0037    def __repr__(self):
0038        return '<%s %s=%r>' % (
0039            self.__class__.__name__, self.name, self.value)
0040
0041    def header(self):
0042        c = SimpleCookie()
0043        c[self.name] = self.value
0044        c[self.name]['path'] = self.path
0045        if self.expires is not None:
0046            c[self.name]['expires'] = self.expires
0047        if self.secure:
0048            c[self.name]['secure'] = True
0049        return str(c).split(':')[1].strip()