# HG changeset patch # User paulb # Date 1094406259 0 # Node ID 1f45c2c8ccc4a89c254405eb6e9130f77f4934cd # Parent 145d48a9e514240cfe502ca44644a81847bad116 [project @ 2004-09-05 17:44:19 by paulb] Added alternative cookie support using the standard library Cookie module. diff -r 145d48a9e514 -r 1f45c2c8ccc4 WebStack/ModPython.py --- a/WebStack/ModPython.py Sun Sep 05 17:43:56 2004 +0000 +++ b/WebStack/ModPython.py Sun Sep 05 17:44:19 2004 +0000 @@ -10,11 +10,14 @@ from mod_python.util import parse_qs, FieldStorage from mod_python import apache -# NOTE: Provide an alternative implementation for the cookie support. -# NOTE: The alternative session support requires cookie support. +# Provide alternative implementations. +# The alternative session support requires cookie support of some kind. -try: from mod_python import Cookie -except ImportError: Cookie = None +try: + from mod_python import Cookie +except ImportError: + from Cookie import SimpleCookie + Cookie = None try: from mod_python import Session except ImportError: @@ -37,6 +40,14 @@ self.user = None self.content_type = None + # Support non-framework cookies. + + if Cookie is None: + + # Define the incoming cookies. + + self.cookies_in = SimpleCookie(self.get_headers().get("cookie")) + # Cached information. self.storage_body = None @@ -232,7 +243,7 @@ if Cookie: return Cookie.get_cookies(self.trans) else: - return None + return self.cookies_in def get_cookie(self, cookie_name): @@ -309,8 +320,12 @@ if Cookie: Cookie.add_cookie(self.trans, cookie) else: - # NOTE: Should raise an exception or provide an implementation. - pass + # NOTE: If multiple cookies of the same name could be specified, this + # NOTE: could need changing. + + cookie_out = SimpleCookie() + cookie_out[cookie.name] = cookie.value + self._write_cookie(cookie_out) def set_cookie_value(self, name, value, path=None, expires=None): @@ -332,8 +347,13 @@ cookie.path = path Cookie.add_cookie(self.trans, cookie) else: - # NOTE: Should raise an exception or provide an implementation. - pass + cookie_out = SimpleCookie() + cookie_out[name] = value + if path is not None: + cookie_out[name]["path"] = path + if expires is not None: + cookie_out[name]["expires"] = expires + self._write_cookie(cookie_out) def delete_cookie(self, cookie_name): @@ -353,8 +373,21 @@ cookie.max_age = 0 Cookie.add_cookie(self.trans, cookie) else: - # NOTE: Should raise an exception or provide an implementation. - pass + cookie_out = SimpleCookie() + cookie_out[cookie_name] = "" + cookie_out[cookie_name]["path"] = "/" + cookie_out[cookie_name]["expires"] = 0 + cookie_out[cookie_name]["max-age"] = 0 + self._write_cookie(cookie_out) + + def _write_cookie(self, cookie): + + "An internal method adding the given 'cookie' to the headers." + + # NOTE: May not be using the appropriate method. + + for morsel in cookie.values(): + self.set_header_value("Set-Cookie", morsel.OutputString()) # Session-related methods.