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()