[Erp5-report] r17522 - in /erp5/trunk/products/ERP5Type: Tool/ tests/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Nov 12 08:32:41 CET 2007


Author: jerome
Date: Mon Nov 12 08:32:41 2007
New Revision: 17522

URL: http://svn.erp5.org?rev=17522&view=rev
Log:
session instance should raise AttributeError / KeyError when accessing non
existant attribute / item

Modified:
    erp5/trunk/products/ERP5Type/Tool/SessionTool.py
    erp5/trunk/products/ERP5Type/tests/testSessionTool.py

Modified: erp5/trunk/products/ERP5Type/Tool/SessionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Tool/SessionTool.py?rev=17522&r1=17521&r2=17522&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Tool/SessionTool.py (original)
+++ erp5/trunk/products/ERP5Type/Tool/SessionTool.py Mon Nov 12 08:32:41 2007
@@ -57,14 +57,20 @@
     """ Update current aquisition context. """
     self._aq_context = aq_context
   
-  def __getattr__(self, key):
-    return self.__getitem__(key)
+  def __getattr__(self, key, default=_marker):
+    if key in self.data:
+      return self.__getitem__(key)
+    if default is not _marker:
+      return default
+    raise AttributeError, key
   
   def __getitem__(self, key):
-    value = self.data.get(key, None)
-    if key is not None and hasattr(value, '__of__'):
-      value = value.__of__(self._aq_context)
-    return value
+    if key in self.data:
+      value = self.data[key]
+      if hasattr(value, '__of__'):
+        value = value.__of__(self._aq_context)
+      return value
+    raise KeyError, key
     
   def __setitem__(self, key, item):
     self.data[key] = aq_base(item)

Modified: erp5/trunk/products/ERP5Type/tests/testSessionTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/testSessionTool.py?rev=17522&r1=17521&r2=17522&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/testSessionTool.py (original)
+++ erp5/trunk/products/ERP5Type/tests/testSessionTool.py Mon Nov 12 08:32:41 2007
@@ -145,7 +145,24 @@
       portal_sessions.manage_delObjects(self.session_id)
       session = portal_sessions[self.session_id]
       self.assert_(0 == len(session.keys()))
-      
+
+  def test_session_dict_interface(self):
+    session = self.portal.portal_sessions[self.session_id]
+    session['foo'] = 'Bar'
+    self.assertTrue('foo' in session)
+    self.assertEquals('Bar', session['foo'])
+    self.assertEquals('Bar', session.get('foo'))
+    self.assertFalse('bar' in session)
+    self.assertEquals('Default', session.get('bar', 'Default'))
+    self.assertRaises(KeyError, session.__getitem__, 'bar')
+
+  def test_session_getattr(self):
+    session = self.portal.portal_sessions[self.session_id]
+    session['foo'] = 'Bar'
+    self.assertEquals('Bar', session.foo)
+    self.assertEquals('Default', getattr(session, 'bar', 'Default'))
+    self.assertRaises(AttributeError, getattr, session, 'bar')
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestSessionTool))




More information about the Erp5-report mailing list