[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - catch DateTimeErrors
Yvo Schubbe
y.2011 at wcm-solutions.de
Wed Mar 2 11:47:20 EST 2011
Log message for revision 120681:
- catch DateTimeErrors
Changed:
U Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
U Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py
U Products.CMFCore/trunk/Products/CMFCore/utils.py
-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2011-03-02 16:41:13 UTC (rev 120680)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2011-03-02 16:47:19 UTC (rev 120681)
@@ -4,6 +4,9 @@
2.3.0-alpha (unreleased)
------------------------
+- utils: Fixed '_OldCacheHeaders' and '_FSCacheHeaders' methods.
+ DateTimeErrors caused by invalid HTTP headers were not caught.
+
- setup handlers: Added export/import support for member data tool settings.
- MemberDataTool: Fixed tool initialization.
Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py 2011-03-02 16:41:13 UTC (rev 120680)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_utils.py 2011-03-02 16:47:19 UTC (rev 120681)
@@ -16,7 +16,11 @@
import unittest
import Testing
+from Acquisition import Implicit
+from App.Common import rfc1123_date
+from DateTime.DateTime import DateTime
from Products.CMFCore.tests.base.testcase import SecurityTest
+from Testing.makerequest import makerequest
class CoreUtilsTests(unittest.TestCase):
@@ -93,7 +97,66 @@
self.assertEqual(getContainingPackage('zope.interface.verify'),
'zope.interface')
+ def test__OldCacheHeaders(self):
+ from Products.CMFCore.utils import _OldCacheHeaders
+ _FILE_MOD_TIME = 1000000000
+ _FILE_RFC_DATE = rfc1123_date(_FILE_MOD_TIME)
+
+ class Obj(Implicit):
+ def modified(self):
+ return DateTime(_FILE_MOD_TIME)
+
+ # date < _file_mod_time
+ env = {'HTTP_IF_MODIFIED_SINCE': rfc1123_date(_FILE_MOD_TIME - 1)}
+ obj = makerequest(Obj(), environ=env)
+ _OldCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'),
+ _FILE_RFC_DATE)
+
+ # date > _file_mod_time
+ env = {'HTTP_IF_MODIFIED_SINCE': rfc1123_date(_FILE_MOD_TIME + 1)}
+ obj = makerequest(Obj(), environ=env)
+ _OldCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'), None)
+
+ # invalid date
+ env = {'HTTP_IF_MODIFIED_SINCE': 'Fri, 37 Feb 3121 29:64:46'}
+ obj = makerequest(Obj(), environ=env)
+ _OldCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'),
+ _FILE_RFC_DATE)
+
+ def test__FSCacheHeaders(self):
+ from Products.CMFCore.utils import _FSCacheHeaders
+
+ _FILE_MOD_TIME = 1000000000
+ _FILE_RFC_DATE = rfc1123_date(_FILE_MOD_TIME)
+
+ class Obj(Implicit):
+ _file_mod_time = _FILE_MOD_TIME
+
+ # date < _file_mod_time
+ env = {'HTTP_IF_MODIFIED_SINCE': rfc1123_date(_FILE_MOD_TIME - 1)}
+ obj = makerequest(Obj(), environ=env)
+ _FSCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'),
+ _FILE_RFC_DATE)
+
+ # date > _file_mod_time
+ env = {'HTTP_IF_MODIFIED_SINCE': rfc1123_date(_FILE_MOD_TIME + 1)}
+ obj = makerequest(Obj(), environ=env)
+ _FSCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'), None)
+
+ # invalid date
+ env = {'HTTP_IF_MODIFIED_SINCE': 'Fri, 37 Feb 3121 29:64:46'}
+ obj = makerequest(Obj(), environ=env)
+ _FSCacheHeaders(obj)
+ self.assertEqual(obj.REQUEST.RESPONSE.getHeader('Last-Modified'),
+ _FILE_RFC_DATE)
+
+
class CoreUtilsSecurityTests(SecurityTest):
def _makeSite(self):
Modified: Products.CMFCore/trunk/Products/CMFCore/utils.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/utils.py 2011-03-02 16:41:13 UTC (rev 120680)
+++ Products.CMFCore/trunk/Products/CMFCore/utils.py 2011-03-02 16:47:19 UTC (rev 120681)
@@ -26,16 +26,18 @@
from AccessControl.SecurityInfo import ClassSecurityInfo
from AccessControl.SecurityInfo import ModuleSecurityInfo
from AccessControl.SecurityManagement import getSecurityManager
-from Acquisition.interfaces import IAcquirer
from Acquisition import aq_get
from Acquisition import aq_parent
from Acquisition import Implicit
+from Acquisition.interfaces import IAcquirer
from App.class_init import InitializeClass
from App.Common import package_home
+from App.Common import rfc1123_date
from App.Dialogs import MessageDialog
from App.ImageFile import ImageFile
from App.special_dtml import HTMLFile
from DateTime.DateTime import DateTime
+from DateTime.interfaces import DateTimeError
from ExtensionClass import Base
from OFS.misc_ import misc_ as misc_images
from OFS.misc_ import Misc_ as MiscImage
@@ -43,7 +45,6 @@
from OFS.PropertyManager import PropertyManager
from OFS.SimpleItem import SimpleItem
from thread import allocate_lock
-from webdav.common import rfc1123_date
from zope.component import getUtility
from zope.component.interfaces import ComponentLookupError
from zope.dottedname.resolve import resolve as resolve_dotted_name
@@ -370,8 +371,8 @@
if call_count != 0:
return False
- if_modified_since = REQUEST.get_header('If-Modified-Since', None)
- if_none_match = REQUEST.get_header('If-None-Match', None)
+ if_modified_since = REQUEST.getHeader('If-Modified-Since', None)
+ if_none_match = REQUEST.getHeader('If-None-Match', None)
if if_modified_since is None and if_none_match is None:
# not a conditional GET
@@ -800,7 +801,7 @@
return False
RESPONSE = REQUEST.RESPONSE
- header = REQUEST.get_header('If-Modified-Since', None)
+ header = REQUEST.getHeader('If-Modified-Since', None)
last_mod = long(obj.modified().timeTime())
if header is not None:
@@ -814,7 +815,7 @@
try:
mod_since=DateTime(header)
mod_since=long(mod_since.timeTime())
- except TypeError:
+ except (TypeError, DateTimeError):
mod_since=None
if mod_since is not None:
@@ -834,7 +835,7 @@
return False
RESPONSE = REQUEST.RESPONSE
- header = REQUEST.get_header('If-Modified-Since', None)
+ header = REQUEST.getHeader('If-Modified-Since', None)
last_mod = obj._file_mod_time
if header is not None:
@@ -848,7 +849,7 @@
try:
mod_since=DateTime(header)
mod_since=long(mod_since.timeTime())
- except TypeError:
+ except (TypeError, DateTimeError):
mod_since=None
if mod_since is not None:
More information about the checkins
mailing list