Author: mtredinnick
Date: 2007-07-15 22:50:22 -0500 (Sun, 15 Jul 2007)
New Revision: 5712

Modified:
   django/trunk/AUTHORS
   django/trunk/django/contrib/sessions/middleware.py
   django/trunk/django/core/servers/basehttp.py
   django/trunk/django/middleware/http.py
   django/trunk/django/utils/cache.py
Log:
Fixed #4199 -- Changed date formatting in HTTP expires header to be spec
compliant. Thanks, Chris Bennett.


Modified: django/trunk/AUTHORS
===================================================================
--- django/trunk/AUTHORS        2007-07-16 03:48:03 UTC (rev 5711)
+++ django/trunk/AUTHORS        2007-07-16 03:50:22 UTC (rev 5712)
@@ -57,6 +57,7 @@
     Ned Batchelder <http://www.nedbatchelder.com/>
     Shannon -jj Behrens <http://jjinux.blogspot.com/>
     Esdras Beleza <[EMAIL PROTECTED]>
+    Chris Bennett <[EMAIL PROTECTED]>
     James Bennett
     Ben <[EMAIL PROTECTED]>
     Paul Bissex <http://e-scribe.com/>

Modified: django/trunk/django/contrib/sessions/middleware.py
===================================================================
--- django/trunk/django/contrib/sessions/middleware.py  2007-07-16 03:48:03 UTC 
(rev 5711)
+++ django/trunk/django/contrib/sessions/middleware.py  2007-07-16 03:50:22 UTC 
(rev 5712)
@@ -2,7 +2,9 @@
 from django.contrib.sessions.models import Session
 from django.core.exceptions import SuspiciousOperation
 from django.utils.cache import patch_vary_headers
+from email.Utils import formatdate
 import datetime
+import time
 
 TEST_COOKIE_NAME = 'testcookie'
 TEST_COOKIE_VALUE = 'worked'
@@ -37,7 +39,7 @@
         return self._session.get(key, default)
 
     def pop(self, key, *args):
-        self.modified = self.modified or key in self._session 
+        self.modified = self.modified or key in self._session
         return self._session.pop(key, *args)
 
     def set_test_cookie(self):
@@ -98,7 +100,11 @@
                     expires = None
                 else:
                     max_age = settings.SESSION_COOKIE_AGE
-                    expires = 
datetime.datetime.strftime(datetime.datetime.utcnow() + 
datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE), "%a, %d-%b-%Y %H:%M:%S 
GMT")
+                    rfcdate = formatdate(time.time() + 
settings.SESSION_COOKIE_AGE)
+                    # Fixed length date must have '-' separation in the format
+                    # DD-MMM-YYYY for compliance with Netscape cookie standard
+                    expires = (rfcdate[:7] + "-" + rfcdate[8:11]
+                               + "-" + rfcdate[12:26] + "GMT")
                 new_session = Session.objects.save(session_key, 
request.session._session,
                     datetime.datetime.now() + 
datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE))
                 response.set_cookie(settings.SESSION_COOKIE_NAME, session_key,

Modified: django/trunk/django/core/servers/basehttp.py
===================================================================
--- django/trunk/django/core/servers/basehttp.py        2007-07-16 03:48:03 UTC 
(rev 5711)
+++ django/trunk/django/core/servers/basehttp.py        2007-07-16 03:50:22 UTC 
(rev 5712)
@@ -9,7 +9,13 @@
 
 from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
 from types import ListType, StringType
-import os, re, sys, time, urllib, mimetypes
+from email.Utils import formatdate
+import mimetypes
+import os
+import re
+import sys
+import time
+import urllib
 
 __version__ = "0.1"
 __all__ = ['WSGIServer','WSGIRequestHandler','demo_app']
@@ -370,7 +376,7 @@
                 self._write('HTTP/%s %s\r\n' % (self.http_version,self.status))
                 if 'Date' not in self.headers:
                     self._write(
-                        'Date: %s\r\n' % time.asctime(time.gmtime(time.time()))
+                        'Date: %s\r\n' % formatdate()[:26] + "GMT"
                     )
                 if self.server_software and 'Server' not in self.headers:
                     self._write('Server: %s\r\n' % self.server_software)

Modified: django/trunk/django/middleware/http.py
===================================================================
--- django/trunk/django/middleware/http.py      2007-07-16 03:48:03 UTC (rev 
5711)
+++ django/trunk/django/middleware/http.py      2007-07-16 03:50:22 UTC (rev 
5712)
@@ -1,4 +1,4 @@
-import datetime
+from email.Utils import formatdate
 
 class ConditionalGetMiddleware(object):
     """
@@ -11,8 +11,7 @@
     Also sets the Date and Content-Length response-headers.
     """
     def process_response(self, request, response):
-        now = datetime.datetime.utcnow()
-        response['Date'] = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
+        response['Date'] = formatdate()[:26] + "GMT"
         if not response.has_header('Content-Length'):
             response['Content-Length'] = str(len(response.content))
 

Modified: django/trunk/django/utils/cache.py
===================================================================
--- django/trunk/django/utils/cache.py  2007-07-16 03:48:03 UTC (rev 5711)
+++ django/trunk/django/utils/cache.py  2007-07-16 03:50:22 UTC (rev 5712)
@@ -17,7 +17,10 @@
 "Accept-language" header.
 """
 
-import datetime, md5, re
+import md5
+import re
+import time
+from email.Utils import formatdate
 from django.conf import settings
 from django.core.cache import cache
 from django.utils.encoding import smart_str
@@ -44,7 +47,7 @@
             return (t[0].lower().replace('-', '_'), True)
 
     def dictvalue(t):
-        if t[1] == True:
+        if t[1] is True:
             return t[0]
         else:
             return t[0] + '=' + smart_str(t[1])
@@ -73,16 +76,14 @@
     """
     if cache_timeout is None:
         cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
-    now = datetime.datetime.utcnow()
+    if cache_timeout < 0:
+        cache_timeout = 0 # Can't have max-age negative
     if not response.has_header('ETag'):
         response['ETag'] = md5.new(response.content).hexdigest()
     if not response.has_header('Last-Modified'):
-        response['Last-Modified'] = now.strftime('%a, %d %b %Y %H:%M:%S GMT')
+        response['Last-Modified'] = formatdate()[:26] + "GMT"
     if not response.has_header('Expires'):
-        expires = now + datetime.timedelta(0, cache_timeout)
-        response['Expires'] = expires.strftime('%a, %d %b %Y %H:%M:%S GMT')
-    if cache_timeout < 0:
-        cache_timeout = 0 # Can't have max-age negative
+        response['Expires'] = formatdate(time.time() + cache_timeout)[:26] + 
"GMT"
     patch_cache_control(response, max_age=cache_timeout)
 
 def add_never_cache_headers(response):


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to