[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py Add tests for 'Products.SiteAccess.AccessRule.manage_addAccessRule'.

2010-05-21 Thread Tres Seaver
Log message for revision 112607:
  Add tests for 'Products.SiteAccess.AccessRule.manage_addAccessRule'.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 12:12:55 UTC (rev 112606)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 13:16:37 UTC (rev 112607)
@@ -63,18 +63,138 @@
 self.assertEqual(request._virtual_root, None)
 
 
+class Test_manage_addAccessRule(unittest.TestCase):
+
+def _callFUT(self, container, method_id, REQUEST):
+from Products.SiteAccess.AccessRule import manage_addAccessRule
+return manage_addAccessRule(container, method_id, REQUEST)
+
+def test_no_method_id_no_existing_rules_no_request(self):
+container = DummyContainer()
+result = self._callFUT(container, None, None)
+self.failUnless(result is None)
+self.failIf(container.__dict__)
+
+def test_no_method_id_no_existing_rules_w_request(self):
+container = DummyContainer()
+result = self._callFUT(container, None, {'URL1': 
'http://example.com/'})
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLENo Access Rule/TITLE' in result)
+self.failIf(container.__dict__)
+
+def test_no_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, None, None)
+self.failUnless(result is None)
+self.failIf(container.__before_traverse__)
+self.failIf('icon' in old_rule.__dict__)
+
+def test_w_method_id_w_existing_rules_w_request_none(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+request = DummyRequest(URL1 = 'http://example.com/')
+request.form = {'none': '1'}
+result = self._callFUT(container, None, request)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLENo Access Rule/TITLE' in result)
+self.failIf(container.__before_traverse__)
+self.failIf('icon' in old_rule.__dict__)
+
+def test_w_invalid_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, 'nonesuch', None)
+self.failUnless(result is None)
+self.failUnless((99, 'AccessRule') in container.__before_traverse__)
+rule = container.__before_traverse__[(99, 'AccessRule')]
+self.assertEqual(rule.name, 'old_rule')
+self.assertEqual(old_rule.icon, 'rule_icon.jpg')
+
+def test_w_invalid_method_id_w_existing_rules_w_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+request = DummyRequest(URL1 = 'http://example.com/')
+request.form = {}
+result = self._callFUT(container, 'nonesuch', request)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEInvalid Method Id/TITLE' in result)
+self.failUnless((99, 'AccessRule') in container.__before_traverse__)
+rule = container.__before_traverse__[(99, 'AccessRule')]
+self.assertEqual(rule.name, 'old_rule')
+self.assertEqual(old_rule.icon, 'rule_icon.jpg')
+
+def test_w_valid_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+new_rule = container.new_rule = DummyObject(name='new_rule')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, 'new_rule', None)
+

[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py Add tests for 'Products.SiteAccess.AccessRule.getAccessRule'.

2010-05-21 Thread Tres Seaver
Log message for revision 112608:
  Add tests for 'Products.SiteAccess.AccessRule.getAccessRule'.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 13:16:37 UTC (rev 112607)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 13:16:39 UTC (rev 112608)
@@ -172,6 +172,30 @@
 self.assertEqual(new_rule.icon, 'misc_/SiteAccess/AccessRule.gif')
 
 
+class Test_getAccessRule(unittest.TestCase):
+
+def _callFUT(self, container, REQUEST=None):
+from Products.SiteAccess.AccessRule import getAccessRule
+return getAccessRule(container, REQUEST)
+
+def test_no_rules(self):
+container = DummyContainer()
+self.assertEqual(self._callFUT(container), '')
+
+def test_w_rule_invalid(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+registerBeforeTraverse(container, DummyObject(), 'AccessRule')
+self.failUnless(self._callFUT(container).startswith(
+'Invalid BeforeTraverse data: '))
+
+def test_w_rule_valid(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+registerBeforeTraverse(container, DummyObject(name='foo'), 
'AccessRule')
+self.assertEqual(self._callFUT(container), 'foo')
+
+
 class DummyRequest(dict):
 _virtual_root = None
 def setVirtualRoot(self, root):
@@ -196,5 +220,6 @@
 return unittest.TestSuite((
 unittest.makeSuite(AccessRuleTests),
 unittest.makeSuite(Test_manage_addAccessRule),
+unittest.makeSuite(Test_getAccessRule),
 ))
 

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py Merge new coverage tests from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112609:
  Merge new coverage tests from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py  2010-05-21 
13:16:39 UTC (rev 112608)
+++ Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py  2010-05-21 
13:16:40 UTC (rev 112609)
@@ -63,18 +63,163 @@
 self.assertEqual(request._virtual_root, None)
 
 
+class Test_manage_addAccessRule(unittest.TestCase):
+
+def _callFUT(self, container, method_id, REQUEST):
+from Products.SiteAccess.AccessRule import manage_addAccessRule
+return manage_addAccessRule(container, method_id, REQUEST)
+
+def test_no_method_id_no_existing_rules_no_request(self):
+container = DummyContainer()
+result = self._callFUT(container, None, None)
+self.failUnless(result is None)
+self.failIf(container.__dict__)
+
+def test_no_method_id_no_existing_rules_w_request(self):
+container = DummyContainer()
+result = self._callFUT(container, None, {'URL1': 
'http://example.com/'})
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLENo Access Rule/TITLE' in result)
+self.failIf(container.__dict__)
+
+def test_no_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, None, None)
+self.failUnless(result is None)
+self.failIf(container.__before_traverse__)
+self.failIf('icon' in old_rule.__dict__)
+
+def test_w_method_id_w_existing_rules_w_request_none(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+request = DummyRequest(URL1 = 'http://example.com/')
+request.form = {'none': '1'}
+result = self._callFUT(container, None, request)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLENo Access Rule/TITLE' in result)
+self.failIf(container.__before_traverse__)
+self.failIf('icon' in old_rule.__dict__)
+
+def test_w_invalid_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, 'nonesuch', None)
+self.failUnless(result is None)
+self.failUnless((99, 'AccessRule') in container.__before_traverse__)
+rule = container.__before_traverse__[(99, 'AccessRule')]
+self.assertEqual(rule.name, 'old_rule')
+self.assertEqual(old_rule.icon, 'rule_icon.jpg')
+
+def test_w_invalid_method_id_w_existing_rules_w_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+request = DummyRequest(URL1 = 'http://example.com/')
+request.form = {}
+result = self._callFUT(container, 'nonesuch', request)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEInvalid Method Id/TITLE' in result)
+self.failUnless((99, 'AccessRule') in container.__before_traverse__)
+rule = container.__before_traverse__[(99, 'AccessRule')]
+self.assertEqual(rule.name, 'old_rule')
+self.assertEqual(old_rule.icon, 'rule_icon.jpg')
+
+def test_w_valid_method_id_w_existing_rules_no_request(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+container = DummyContainer()
+old_rule = container.old_rule = DummyObject(name='old_rule',
+icon='rule_icon.jpg')
+new_rule = container.new_rule = DummyObject(name='new_rule')
+registerBeforeTraverse(container, old_rule, 'AccessRule')
+result = self._callFUT(container, 'new_rule', None)
+self.failUnless(result is None)
+self.failIf((99, 

[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py Readability.

2010-05-21 Thread Tres Seaver
Log message for revision 112610:
  Readability.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py2010-05-21 
13:16:40 UTC (rev 112609)
+++ Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py2010-05-21 
13:58:20 UTC (rev 112610)
@@ -18,7 +18,8 @@
 meta_type = 'Set Access Rule'
 
 def __call__(self, container, request):
-if SUPPRESS_ACCESSRULE: return
+if SUPPRESS_ACCESSRULE:
+return
 if '_SUPPRESS_ACCESSRULE' in _swallow(request, '_SUPPRESS'):
 request.setVirtualRoot(request.steps)
 return
@@ -44,8 +45,10 @@
 if method_id is None or (REQUEST and REQUEST.form.has_key('none')):
 rules = unregisterBeforeTraverse(self, 'AccessRule')
 if rules:
-try: del getattr(self, rules[0].name).icon
-except: pass
+try:
+del getattr(self, rules[0].name).icon
+except:
+pass
 if REQUEST:
 return MessageDialog(title='No Access Rule',
   message='This object now has no Access Rule',
@@ -53,13 +56,16 @@
 elif method_id and hasattr(self, method_id):
 rules = unregisterBeforeTraverse(self, 'AccessRule')
 if rules:
-try: del getattr(self, rules[0].name).icon
-except: pass
+try:
+del getattr(self, rules[0].name).icon
+except:
+pass
 hook = AccessRule(method_id)
 registerBeforeTraverse(self, hook, 'AccessRule', 1)
 try:
 getattr(self, method_id).icon = 'misc_/SiteAccess/AccessRule.gif'
-except: pass
+except:
+pass
 if REQUEST:
 return MessageDialog(title='Access Rule Set',
   message='%s is now the Access Rule for this object'

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/ Remove string exception.

2010-05-21 Thread Tres Seaver
Log message for revision 112611:
  Remove string exception.
  
  Coverage for 'Products.SiteAccess.SiteRoot.Traverser'.
  

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
13:58:20 UTC (rev 112610)
+++ Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
13:58:21 UTC (rev 112611)
@@ -62,10 +62,8 @@
   self.priority)
 def _setId(self, id):
 if id != self.id:
-raise MessageDialog(
-title='Invalid Id',
-message='Cannot change the id of a %s' % 
escape(self.meta_type),
-action ='./manage_main',)
+raise ValueError('Cannot change the id of a %s'
+% escape(self.meta_type))
 
 class SiteRoot(Traverser, Implicit):
 SiteAccess.SiteRoot object

Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 13:58:20 UTC (rev 112610)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 13:58:21 UTC (rev 112611)
@@ -7,6 +7,116 @@
 
 import unittest
 
+
+class TraverserTests(unittest.TestCase):
+
+def _getTargetClass(self):
+from Products.SiteAccess.SiteRoot import Traverser
+return Traverser
+
+def _makeOne(self):
+traverser = self._getTargetClass()()
+traverser.id = 'testing'
+return traverser
+
+def test_addToContainer(self):
+traverser = self._makeOne()
+container = DummyContainer()
+traverser.addToContainer(container)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_addToContainer_no_nextUrl(self):
+traverser = self._makeOne()
+container = DummyContainer()
+result = traverser.manage_addToContainer(container)
+self.failUnless(result is None)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_addToContainer_w_nextUrl_w_name_collision(self):
+NEXTURL='http://example.com/manage_main'
+traverser = self._makeOne()
+container = DummyContainer()
+container.testing = object()
+result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEItem Exists/TITLE' in result)
+self.failIf(container.testing is traverser)
+
+def test_manage_addToContainer_w_nextUrl_wo_name_collision(self):
+NEXTURL='http://example.com/manage_main'
+traverser = self._makeOne()
+container = DummyContainer()
+result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEItem Added/TITLE' in result)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_beforeDelete_item_is_not_self(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+traverser = self._makeOne()
+container = DummyContainer()
+other = container.other = DummyObject(name='other')
+registerBeforeTraverse(container, other, 'Traverser', 100)
+item = object()
+traverser.manage_beforeDelete(item, container)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'other')
+
+def test_manage_beforeDelete_item_is_self(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+traverser = self._makeOne()
+container = DummyContainer()
+other = container.other = DummyObject(name='other')
+registerBeforeTraverse(container, other, 'Traverser', 100)
+traverser.manage_beforeDelete(traverser, container)
+self.failIf(container.__before_traverse__)
+
+def test_manage_afterAdd_item_not_self(self):
+traverser = self._makeOne()
+container = DummyContainer()
+item = object()
+traverser.manage_afterAdd(item, container)
+self.failIf('__before_traverse__' in container.__dict__)
+
+def test_manage_afterAdd_item_is_self(self):
+traverser = self._makeOne()
+container = DummyContainer()
+

[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/AccessRule.py Merge readability fix from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112612:
  Merge readability fix from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/AccessRule.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/AccessRule.py
===
--- Zope/trunk/src/Products/SiteAccess/AccessRule.py2010-05-21 13:58:21 UTC 
(rev 112611)
+++ Zope/trunk/src/Products/SiteAccess/AccessRule.py2010-05-21 13:58:42 UTC 
(rev 112612)
@@ -18,7 +18,8 @@
 meta_type = 'Set Access Rule'
 
 def __call__(self, container, request):
-if SUPPRESS_ACCESSRULE: return
+if SUPPRESS_ACCESSRULE:
+return
 if '_SUPPRESS_ACCESSRULE' in _swallow(request, '_SUPPRESS'):
 request.setVirtualRoot(request.steps)
 return
@@ -44,8 +45,10 @@
 if method_id is None or (REQUEST and REQUEST.form.has_key('none')):
 rules = unregisterBeforeTraverse(self, 'AccessRule')
 if rules:
-try: del getattr(self, rules[0].name).icon
-except: pass
+try:
+del getattr(self, rules[0].name).icon
+except:
+pass
 if REQUEST:
 return MessageDialog(title='No Access Rule',
   message='This object now has no Access Rule',
@@ -53,13 +56,16 @@
 elif method_id and hasattr(self, method_id):
 rules = unregisterBeforeTraverse(self, 'AccessRule')
 if rules:
-try: del getattr(self, rules[0].name).icon
-except: pass
+try:
+del getattr(self, rules[0].name).icon
+except:
+pass
 hook = AccessRule(method_id)
 registerBeforeTraverse(self, hook, 'AccessRule', 1)
 try:
 getattr(self, method_id).icon = 'misc_/SiteAccess/AccessRule.gif'
-except: pass
+except:
+pass
 if REQUEST:
 return MessageDialog(title='Access Rule Set',
   message='%s is now the Access Rule for this object'

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/ Merge string exception removal, coverage from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112613:
  Merge string exception removal, coverage from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/SiteRoot.py
  U   Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 13:58:42 UTC 
(rev 112612)
+++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 13:58:43 UTC 
(rev 112613)
@@ -62,10 +62,8 @@
   self.priority)
 def _setId(self, id):
 if id != self.id:
-raise MessageDialog(
-title='Invalid Id',
-message='Cannot change the id of a %s' % 
escape(self.meta_type),
-action ='./manage_main',)
+raise ValueError('Cannot change the id of a %s'
+% escape(self.meta_type))
 
 class SiteRoot(Traverser, Implicit):
 SiteAccess.SiteRoot object

Modified: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
13:58:42 UTC (rev 112612)
+++ Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
13:58:43 UTC (rev 112613)
@@ -7,6 +7,116 @@
 
 import unittest
 
+
+class TraverserTests(unittest.TestCase):
+
+def _getTargetClass(self):
+from Products.SiteAccess.SiteRoot import Traverser
+return Traverser
+
+def _makeOne(self):
+traverser = self._getTargetClass()()
+traverser.id = 'testing'
+return traverser
+
+def test_addToContainer(self):
+traverser = self._makeOne()
+container = DummyContainer()
+traverser.addToContainer(container)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_addToContainer_no_nextUrl(self):
+traverser = self._makeOne()
+container = DummyContainer()
+result = traverser.manage_addToContainer(container)
+self.failUnless(result is None)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_addToContainer_w_nextUrl_w_name_collision(self):
+NEXTURL='http://example.com/manage_main'
+traverser = self._makeOne()
+container = DummyContainer()
+container.testing = object()
+result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEItem Exists/TITLE' in result)
+self.failIf(container.testing is traverser)
+
+def test_manage_addToContainer_w_nextUrl_wo_name_collision(self):
+NEXTURL='http://example.com/manage_main'
+traverser = self._makeOne()
+container = DummyContainer()
+result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
+self.failUnless(isinstance(result, str))
+self.failUnless('TITLEItem Added/TITLE' in result)
+self.failUnless(container.testing is traverser)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'testing')
+
+def test_manage_beforeDelete_item_is_not_self(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+traverser = self._makeOne()
+container = DummyContainer()
+other = container.other = DummyObject(name='other')
+registerBeforeTraverse(container, other, 'Traverser', 100)
+item = object()
+traverser.manage_beforeDelete(item, container)
+hook = container.__before_traverse__[(100, 'Traverser')]
+self.assertEqual(hook.name, 'other')
+
+def test_manage_beforeDelete_item_is_self(self):
+from ZPublisher.BeforeTraverse import registerBeforeTraverse
+traverser = self._makeOne()
+container = DummyContainer()
+other = container.other = DummyObject(name='other')
+registerBeforeTraverse(container, other, 'Traverser', 100)
+traverser.manage_beforeDelete(traverser, container)
+self.failIf(container.__before_traverse__)
+
+def test_manage_afterAdd_item_not_self(self):
+traverser = self._makeOne()
+container = DummyContainer()
+item = object()
+traverser.manage_afterAdd(item, container)
+self.failIf('__before_traverse__' in container.__dict__)
+
+def test_manage_afterAdd_item_is_self(self):
+traverser = self._makeOne()
+container = DummyContainer()
+traverser.manage_afterAdd(traverser, container)
+hook = container.__before_traverse__[(100, 

[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py Formatting.

2010-05-21 Thread Tres Seaver
Log message for revision 112614:
  Formatting.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
13:58:43 UTC (rev 112613)
+++ Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
14:52:37 UTC (rev 112614)
@@ -19,12 +19,12 @@
 SUPPRESS_SITEROOT = os.environ.has_key('SUPPRESS_SITEROOT')
 
 class Traverser(Persistent, Item):
-Class for overriding container's __before_traverse__
+ Class for overriding container's __before_traverse__
 
 Containers are expected to have at most one instance of any particular
-subclass, with Id equal to the meta_type of the subclass.
-
-meta_type='Traverser'
+subclass, with Id equal to the meta_type of the subclass.
+
+meta_type = 'Traverser'
 priority = 100
 
 __ac_permissions__=()
@@ -66,22 +66,24 @@
 % escape(self.meta_type))
 
 class SiteRoot(Traverser, Implicit):
-SiteAccess.SiteRoot object
+ SiteAccess.SiteRoot object
 
 A SiteRoot causes traversal of its container to replace the part
-of the Request path traversed so far with the request's SiteRootURL.
-
+of the Request path traversed so far with the request's SiteRootURL.
+
 id = meta_type = 'SiteRoot'
 title = ''
 priority = 50
 
-manage_options=({'label':'Edit', 'action':'manage_main', 'help': 
('SiteAccess', 'SiteRoot_Edit.stx')},)
+manage_options=({'label':'Edit',
+ 'action':'manage_main',
+ 'help': ('SiteAccess', 'SiteRoot_Edit.stx'),
+},)
 
 manage = manage_main = DTMLFile('www/SiteRootEdit', globals())
 manage_main._setName('manage_main')
 
 def __init__(self, title, base, path):
-'''Title'''
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
@@ -95,7 +97,8 @@
 except: pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
-'''Set the title, base, and path'''
+ Set the title, base, and path.
+
 self.__init__(title, base, path)
 if REQUEST:
 return MessageDialog(title='SiteRoot changed.',
@@ -103,8 +106,10 @@
   action='%s/manage_main' % REQUEST['URL1'])
 
 def __call__(self, client, request, response=None):
-'''Traversing'''
-if SUPPRESS_SITEROOT: return
+ Traversing.
+
+if SUPPRESS_SITEROOT:
+return
 if '_SUPPRESS_SITEROOT' in _swallow(request, '_SUPPRESS'):
 request.setVirtualRoot(request.steps)
 return
@@ -118,22 +123,26 @@
 if srd[i] is None:
 srd[i] = request.environ.get(srp, None)
 if srd[0] is not None:
-request['ACTUAL_URL'] = 
request['ACTUAL_URL'].replace(request['SERVER_URL'], srd[0])
+request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
+request['SERVER_URL'], srd[0])
 request['SERVER_URL'] = srd[0]
 request._resetURLS()
 if srd[1] is not None:
 old = request['URL']
 request.setVirtualRoot(srd[1])
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(old, 
request['URL'])
+request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
+old, request['URL'])
 
 def get_size(self):
-'''Make FTP happy'''
+ Make FTP happy
+
 return 0
 
 def manage_addSiteRoot(self, title='', base='', path='', REQUEST=None,
**ignored):
- 
-sr=SiteRoot(title, base, path)
+ Add a SiteRoot to a container.
+
+sr = SiteRoot(title, base, path)
 if REQUEST:
 return sr.manage_addToContainer(self.this(),
 '%s/manage_main' % REQUEST['URL1'])

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py More readability.

2010-05-21 Thread Tres Seaver
Log message for revision 112615:
  More readability.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
14:52:37 UTC (rev 112614)
+++ Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
14:52:38 UTC (rev 112615)
@@ -87,14 +87,20 @@
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
-if base: self.SiteRootBASE = base
+if base:
+self.SiteRootBASE = base
 else:
-try: del self.SiteRootBASE
-except: pass
-if path: self.SiteRootPATH = path
+try:
+del self.SiteRootBASE
+except:
+pass
+if path:
+self.SiteRootPATH = path
 else:
-try: del self.SiteRootPATH
-except: pass
+try:
+del self.SiteRootPATH
+except:
+pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
  Set the title, base, and path.

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py Coveraage for 'Products.SiteAccess.SiteRoot.SiteRoot'.

2010-05-21 Thread Tres Seaver
Log message for revision 112616:
  Coveraage for 'Products.SiteAccess.SiteRoot.SiteRoot'.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 14:52:38 UTC (rev 112615)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 14:52:40 UTC (rev 112616)
@@ -42,7 +42,6 @@
 container = DummyContainer()
 container.testing = object()
 result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
-self.failUnless(isinstance(result, str))
 self.failUnless('TITLEItem Exists/TITLE' in result)
 self.failIf(container.testing is traverser)
 
@@ -51,7 +50,6 @@
 traverser = self._makeOne()
 container = DummyContainer()
 result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
-self.failUnless(isinstance(result, str))
 self.failUnless('TITLEItem Added/TITLE' in result)
 self.failUnless(container.testing is traverser)
 hook = container.__before_traverse__[(100, 'Traverser')]
@@ -100,11 +98,159 @@
 self.assertRaises(ValueError, traverser._setId, 'other')
 
 
+class SiteRootTests(unittest.TestCase):
+
+_old_SSR = None
+
+def setUp(self):
+from Testing.ZopeTestCase import ZopeLite
+ZopeLite.startup()
+
+def tearDown(self):
+if self._old_SSR is not None:
+self._set_SUPPRESS_SITEROOT(self._old_SSR)
+
+def _set_SUPPRESS_SITEROOT(self, value):
+from Products.SiteAccess import SiteRoot as SR
+(self._old_SSR,
+ SR.SUPPRESS_SITEROOT) = (SR.SUPPRESS_SITEROOT, value)
+
+def _getTargetClass(self):
+from Products.SiteAccess.SiteRoot import SiteRoot
+return SiteRoot
+
+def _makeOne(self, title='TITLE', base='', path=''):
+return self._getTargetClass()(title, base, path)
+
+def test___init___strips_base_and_path(self):
+siteroot = self._makeOne(base=' ', path=' ')
+self.assertEqual(siteroot.title, 'TITLE')
+self.assertEqual(siteroot.base, '')
+self.assertEqual(siteroot.path, '')
+# XXX Why aren't these defaulted to None at class scope?
+# Even better:  why do they exist at all?
+self.failUnless(getattr(siteroot, 'SiteRootBase', self) is self)
+self.failUnless(getattr(siteroot, 'SiteRootPath', self) is self)
+
+def test___init___w_base_and_path(self):
+siteroot = self._makeOne(base='http://example.com', path='/path')
+self.assertEqual(siteroot.title, 'TITLE')
+self.assertEqual(siteroot.base, 'http://example.com')
+self.assertEqual(siteroot.path, '/path')
+self.assertEqual(siteroot.SiteRootBASE, 'http://example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/path')
+
+def test_manage_edit_no_REQUEST(self):
+siteroot = self._makeOne(title='Before',
+ base='http://before.example.com',
+ path='/before')
+result = siteroot.manage_edit('After', 'http://after.example.com ',
+  '/after ')
+self.failUnless(result is None)
+self.assertEqual(siteroot.title, 'After')
+self.assertEqual(siteroot.base, 'http://after.example.com')
+self.assertEqual(siteroot.path, '/after')
+self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/after')
+
+def test_manage_edit_w_REQUEST(self):
+siteroot = self._makeOne(title='Before',
+ base='http://before.example.com',
+ path='/before')
+result = siteroot.manage_edit('After', 'http://after.example.com ',
+  '/after ',
+  REQUEST = {'URL1':
+'http://localhost:8080/manage_main'})
+self.failUnless('TITLESiteRoot changed./TITLE' in result)
+self.assertEqual(siteroot.title, 'After')
+self.assertEqual(siteroot.base, 'http://after.example.com')
+self.assertEqual(siteroot.path, '/after')
+self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/after')
+
+def test___call___w_SUPPRESS_SITEROOT_set(self):
+self._set_SUPPRESS_SITEROOT(1)
+siteroot = self._makeOne(base='http://example.com', path='/path')
+request = {}
+siteroot(None, request)
+self.assertEqual(request, {})
+
+def test___call___w_SUPPRESS_SITEROOT_in_URL(self):
+# This behavior will change once we land lp:142878.
+siteroot = 

[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/SiteRoot.py Merge formatting cleanups from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112617:
  Merge formatting cleanups from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/SiteRoot.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 14:52:40 UTC 
(rev 112616)
+++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 14:53:11 UTC 
(rev 112617)
@@ -19,12 +19,12 @@
 SUPPRESS_SITEROOT = os.environ.has_key('SUPPRESS_SITEROOT')
 
 class Traverser(Persistent, Item):
-Class for overriding container's __before_traverse__
+ Class for overriding container's __before_traverse__
 
 Containers are expected to have at most one instance of any particular
-subclass, with Id equal to the meta_type of the subclass.
-
-meta_type='Traverser'
+subclass, with Id equal to the meta_type of the subclass.
+
+meta_type = 'Traverser'
 priority = 100
 
 __ac_permissions__=()
@@ -66,22 +66,24 @@
 % escape(self.meta_type))
 
 class SiteRoot(Traverser, Implicit):
-SiteAccess.SiteRoot object
+ SiteAccess.SiteRoot object
 
 A SiteRoot causes traversal of its container to replace the part
-of the Request path traversed so far with the request's SiteRootURL.
-
+of the Request path traversed so far with the request's SiteRootURL.
+
 id = meta_type = 'SiteRoot'
 title = ''
 priority = 50
 
-manage_options=({'label':'Edit', 'action':'manage_main', 'help': 
('SiteAccess', 'SiteRoot_Edit.stx')},)
+manage_options=({'label':'Edit',
+ 'action':'manage_main',
+ 'help': ('SiteAccess', 'SiteRoot_Edit.stx'),
+},)
 
 manage = manage_main = DTMLFile('www/SiteRootEdit', globals())
 manage_main._setName('manage_main')
 
 def __init__(self, title, base, path):
-'''Title'''
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
@@ -95,7 +97,8 @@
 except: pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
-'''Set the title, base, and path'''
+ Set the title, base, and path.
+
 self.__init__(title, base, path)
 if REQUEST:
 return MessageDialog(title='SiteRoot changed.',
@@ -103,8 +106,10 @@
   action='%s/manage_main' % REQUEST['URL1'])
 
 def __call__(self, client, request, response=None):
-'''Traversing'''
-if SUPPRESS_SITEROOT: return
+ Traversing.
+
+if SUPPRESS_SITEROOT:
+return
 if '_SUPPRESS_SITEROOT' in _swallow(request, '_SUPPRESS'):
 request.setVirtualRoot(request.steps)
 return
@@ -118,22 +123,26 @@
 if srd[i] is None:
 srd[i] = request.environ.get(srp, None)
 if srd[0] is not None:
-request['ACTUAL_URL'] = 
request['ACTUAL_URL'].replace(request['SERVER_URL'], srd[0])
+request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
+request['SERVER_URL'], srd[0])
 request['SERVER_URL'] = srd[0]
 request._resetURLS()
 if srd[1] is not None:
 old = request['URL']
 request.setVirtualRoot(srd[1])
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(old, 
request['URL'])
+request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
+old, request['URL'])
 
 def get_size(self):
-'''Make FTP happy'''
+ Make FTP happy
+
 return 0
 
 def manage_addSiteRoot(self, title='', base='', path='', REQUEST=None,
**ignored):
- 
-sr=SiteRoot(title, base, path)
+ Add a SiteRoot to a container.
+
+sr = SiteRoot(title, base, path)
 if REQUEST:
 return sr.manage_addToContainer(self.this(),
 '%s/manage_main' % REQUEST['URL1'])

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/SiteRoot.py Merge more cleanups from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112618:
  Merge more cleanups from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/SiteRoot.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 14:53:11 UTC 
(rev 112617)
+++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 14:53:12 UTC 
(rev 112618)
@@ -87,14 +87,20 @@
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
-if base: self.SiteRootBASE = base
+if base:
+self.SiteRootBASE = base
 else:
-try: del self.SiteRootBASE
-except: pass
-if path: self.SiteRootPATH = path
+try:
+del self.SiteRootBASE
+except:
+pass
+if path:
+self.SiteRootPATH = path
 else:
-try: del self.SiteRootPATH
-except: pass
+try:
+del self.SiteRootPATH
+except:
+pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
  Set the title, base, and path.

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
https://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py Merge coverage from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112619:
  Merge coverage from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
14:53:12 UTC (rev 112618)
+++ Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
14:53:14 UTC (rev 112619)
@@ -42,7 +42,6 @@
 container = DummyContainer()
 container.testing = object()
 result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
-self.failUnless(isinstance(result, str))
 self.failUnless('TITLEItem Exists/TITLE' in result)
 self.failIf(container.testing is traverser)
 
@@ -51,7 +50,6 @@
 traverser = self._makeOne()
 container = DummyContainer()
 result = traverser.manage_addToContainer(container, nextURL=NEXTURL)
-self.failUnless(isinstance(result, str))
 self.failUnless('TITLEItem Added/TITLE' in result)
 self.failUnless(container.testing is traverser)
 hook = container.__before_traverse__[(100, 'Traverser')]
@@ -100,11 +98,159 @@
 self.assertRaises(ValueError, traverser._setId, 'other')
 
 
+class SiteRootTests(unittest.TestCase):
+
+_old_SSR = None
+
+def setUp(self):
+from Testing.ZopeTestCase import ZopeLite
+ZopeLite.startup()
+
+def tearDown(self):
+if self._old_SSR is not None:
+self._set_SUPPRESS_SITEROOT(self._old_SSR)
+
+def _set_SUPPRESS_SITEROOT(self, value):
+from Products.SiteAccess import SiteRoot as SR
+(self._old_SSR,
+ SR.SUPPRESS_SITEROOT) = (SR.SUPPRESS_SITEROOT, value)
+
+def _getTargetClass(self):
+from Products.SiteAccess.SiteRoot import SiteRoot
+return SiteRoot
+
+def _makeOne(self, title='TITLE', base='', path=''):
+return self._getTargetClass()(title, base, path)
+
+def test___init___strips_base_and_path(self):
+siteroot = self._makeOne(base=' ', path=' ')
+self.assertEqual(siteroot.title, 'TITLE')
+self.assertEqual(siteroot.base, '')
+self.assertEqual(siteroot.path, '')
+# XXX Why aren't these defaulted to None at class scope?
+# Even better:  why do they exist at all?
+self.failUnless(getattr(siteroot, 'SiteRootBase', self) is self)
+self.failUnless(getattr(siteroot, 'SiteRootPath', self) is self)
+
+def test___init___w_base_and_path(self):
+siteroot = self._makeOne(base='http://example.com', path='/path')
+self.assertEqual(siteroot.title, 'TITLE')
+self.assertEqual(siteroot.base, 'http://example.com')
+self.assertEqual(siteroot.path, '/path')
+self.assertEqual(siteroot.SiteRootBASE, 'http://example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/path')
+
+def test_manage_edit_no_REQUEST(self):
+siteroot = self._makeOne(title='Before',
+ base='http://before.example.com',
+ path='/before')
+result = siteroot.manage_edit('After', 'http://after.example.com ',
+  '/after ')
+self.failUnless(result is None)
+self.assertEqual(siteroot.title, 'After')
+self.assertEqual(siteroot.base, 'http://after.example.com')
+self.assertEqual(siteroot.path, '/after')
+self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/after')
+
+def test_manage_edit_w_REQUEST(self):
+siteroot = self._makeOne(title='Before',
+ base='http://before.example.com',
+ path='/before')
+result = siteroot.manage_edit('After', 'http://after.example.com ',
+  '/after ',
+  REQUEST = {'URL1':
+'http://localhost:8080/manage_main'})
+self.failUnless('TITLESiteRoot changed./TITLE' in result)
+self.assertEqual(siteroot.title, 'After')
+self.assertEqual(siteroot.base, 'http://after.example.com')
+self.assertEqual(siteroot.path, '/after')
+self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
+self.assertEqual(siteroot.SiteRootPATH, '/after')
+
+def test___call___w_SUPPRESS_SITEROOT_set(self):
+self._set_SUPPRESS_SITEROOT(1)
+siteroot = self._makeOne(base='http://example.com', path='/path')
+request = {}
+siteroot(None, request)
+self.assertEqual(request, {})
+
+def test___call___w_SUPPRESS_SITEROOT_in_URL(self):
+# This behavior will change once we land lp:142878.
+siteroot = self._makeOne(base='http://example.com', path='/path')
+request = 

[Zope-Checkins] SVN: Zope/branches/2.12/src/Products/SiteAccess/ Remove some insanity, now that we have coverage.

2010-05-21 Thread Tres Seaver
Log message for revision 112621:
  Remove some insanity, now that we have coverage.

Changed:
  U   Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
15:12:09 UTC (rev 112620)
+++ Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
15:20:02 UTC (rev 112621)
@@ -87,20 +87,6 @@
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
-if base:
-self.SiteRootBASE = base
-else:
-try:
-del self.SiteRootBASE
-except:
-pass
-if path:
-self.SiteRootPATH = path
-else:
-try:
-del self.SiteRootPATH
-except:
-pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
  Set the title, base, and path.
@@ -114,30 +100,26 @@
 def __call__(self, client, request, response=None):
  Traversing.
 
+rq = request
 if SUPPRESS_SITEROOT:
 return
-if '_SUPPRESS_SITEROOT' in _swallow(request, '_SUPPRESS'):
-request.setVirtualRoot(request.steps)
+if '_SUPPRESS_SITEROOT' in _swallow(rq, '_SUPPRESS'):
+rq.setVirtualRoot(rq.steps)
 return
-srd = [None, None]
-for i in (0, 1):
-srp = ('SiteRootBASE', 'SiteRootPATH')[i]
-try:
-srd[i] = getattr(self, srp)
-except AttributeError:
-srd[i] = request.get(srp, None)
-if srd[i] is None:
-srd[i] = request.environ.get(srp, None)
-if srd[0] is not None:
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
-request['SERVER_URL'], srd[0])
-request['SERVER_URL'] = srd[0]
-request._resetURLS()
-if srd[1] is not None:
-old = request['URL']
-request.setVirtualRoot(srd[1])
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
-old, request['URL'])
+base = (self.base or
+rq.get('SiteRootBASE') or
+rq.environ.get('SiteRootBASE'))
+path = (self.path or
+rq.get('SiteRootPATH') or
+rq.environ.get('SiteRootPATH'))
+if base is not None:
+rq['ACTUAL_URL'] = rq['ACTUAL_URL'].replace(rq['SERVER_URL'], base)
+rq['SERVER_URL'] = base
+rq._resetURLS()
+if path is not None:
+old = rq['URL']
+rq.setVirtualRoot(path)
+rq['ACTUAL_URL'] = rq['ACTUAL_URL'].replace(old, rq['URL'])
 
 def get_size(self):
  Make FTP happy

Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 15:12:09 UTC (rev 112620)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 15:20:02 UTC (rev 112621)
@@ -127,18 +127,12 @@
 self.assertEqual(siteroot.title, 'TITLE')
 self.assertEqual(siteroot.base, '')
 self.assertEqual(siteroot.path, '')
-# XXX Why aren't these defaulted to None at class scope?
-# Even better:  why do they exist at all?
-self.failUnless(getattr(siteroot, 'SiteRootBase', self) is self)
-self.failUnless(getattr(siteroot, 'SiteRootPath', self) is self)
 
 def test___init___w_base_and_path(self):
 siteroot = self._makeOne(base='http://example.com', path='/path')
 self.assertEqual(siteroot.title, 'TITLE')
 self.assertEqual(siteroot.base, 'http://example.com')
 self.assertEqual(siteroot.path, '/path')
-self.assertEqual(siteroot.SiteRootBASE, 'http://example.com')
-self.assertEqual(siteroot.SiteRootPATH, '/path')
 
 def test_manage_edit_no_REQUEST(self):
 siteroot = self._makeOne(title='Before',
@@ -150,8 +144,6 @@
 self.assertEqual(siteroot.title, 'After')
 self.assertEqual(siteroot.base, 'http://after.example.com')
 self.assertEqual(siteroot.path, '/after')
-self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
-self.assertEqual(siteroot.SiteRootPATH, '/after')
 
 def test_manage_edit_w_REQUEST(self):
 siteroot = self._makeOne(title='Before',
@@ -165,8 +157,6 @@
 self.assertEqual(siteroot.title, 'After')
 self.assertEqual(siteroot.base, 'http://after.example.com')
 self.assertEqual(siteroot.path, '/after')
- 

[Zope-Checkins] SVN: Zope/branches/2.12/ Remove URL-based suppression of access rules and site root objects.

2010-05-21 Thread Tres Seaver
Log message for revision 112622:
  Remove URL-based suppression of access rules and site root objects.
  
  Suppression using ``os.environ`` still works.
  
  Fixes LP #142878.
  

Changed:
  U   Zope/branches/2.12/doc/CHANGES.rst
  U   Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py
  U   Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py
  U   Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/branches/2.12/doc/CHANGES.rst
===
--- Zope/branches/2.12/doc/CHANGES.rst  2010-05-21 15:20:02 UTC (rev 112621)
+++ Zope/branches/2.12/doc/CHANGES.rst  2010-05-21 15:20:04 UTC (rev 112622)
@@ -11,6 +11,9 @@
 Bugs Fixed
 ++
 
+- LP #142878: Remove URL-based suppression of access rules and site root
+  objects.   Suppression using ``os.environ`` still works.
+
 - LP #143144: Fix documentation for the zope.conf ``mount-point``
   directive.
 

Modified: Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py2010-05-21 
15:20:02 UTC (rev 112621)
+++ Zope/branches/2.12/src/Products/SiteAccess/AccessRule.py2010-05-21 
15:20:04 UTC (rev 112622)
@@ -20,20 +20,8 @@
 def __call__(self, container, request):
 if SUPPRESS_ACCESSRULE:
 return
-if '_SUPPRESS_ACCESSRULE' in _swallow(request, '_SUPPRESS'):
-request.setVirtualRoot(request.steps)
-return
 NameCaller.__call__(self, container, request)
 
-def _swallow(request, prefix):
-path = request['TraversalRequestNameStack']
-steps = request.steps
-i = len(steps)
-while i  0 and steps[i - 1][:1] == '_':
-i = i - 1
-while path and path[-1][:len(prefix)] == prefix:
-steps.append(path.pop())
-return steps[i:]
 
 def manage_addAccessRule(self, method_id=None, REQUEST=None, **ignored):
 Point a __before_traverse__ entry at the specified method

Modified: Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
15:20:02 UTC (rev 112621)
+++ Zope/branches/2.12/src/Products/SiteAccess/SiteRoot.py  2010-05-21 
15:20:04 UTC (rev 112622)
@@ -14,8 +14,6 @@
 from ZPublisher.BeforeTraverse import registerBeforeTraverse
 from ZPublisher.BeforeTraverse import unregisterBeforeTraverse
 
-from Products.SiteAccess.AccessRule import _swallow
-
 SUPPRESS_SITEROOT = os.environ.has_key('SUPPRESS_SITEROOT')
 
 class Traverser(Persistent, Item):
@@ -103,9 +101,6 @@
 rq = request
 if SUPPRESS_SITEROOT:
 return
-if '_SUPPRESS_SITEROOT' in _swallow(rq, '_SUPPRESS'):
-rq.setVirtualRoot(rq.steps)
-return
 base = (self.base or
 rq.get('SiteRootBASE') or
 rq.environ.get('SiteRootBASE'))

Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 15:20:02 UTC (rev 112621)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testAccessRule.py  
2010-05-21 15:20:04 UTC (rev 112622)
@@ -37,7 +37,7 @@
 self.failIf(_called)
 
 def test___call___w_SUPPRESS_ACCESSRULE_in_URL(self):
-# This behavior will change once we land lp:142878.
+# This behavior changed in landing lp:142878.
 _called = []
 def _func(*args):
 _called.append(args)
@@ -47,8 +47,8 @@
 request.steps = []
 container = DummyContainer(testing=_func)
 rule(container, request)
-self.failIf(_called)
-self.assertEqual(request._virtual_root, ['_SUPPRESS_ACCESSRULE'])
+self.failUnless(_called)
+self.assertEqual(request._virtual_root, None)
 
 def test___call___wo_SUPPRESS_ACCESSRULE(self):
 _called = []

Modified: Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 15:20:02 UTC (rev 112621)
+++ Zope/branches/2.12/src/Products/SiteAccess/tests/testSiteRoot.py
2010-05-21 15:20:04 UTC (rev 112622)
@@ -166,16 +166,24 @@
 self.assertEqual(request, {})
 
 def test___call___w_SUPPRESS_SITEROOT_in_URL(self):
-# This behavior will change once we land lp:142878.
-siteroot = self._makeOne(base='http://example.com', path='/path')
+# This behavior changed in landing lp:142878.
+URL='http://localhost:8080/example/folder/'
+siteroot = self._makeOne(base='http://example.com', path='/example')
 

[Zope-Checkins] SVN: Zope/trunk/src/Products/SiteAccess/ Merge saner SiteRoot impl. from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112623:
  Merge saner SiteRoot impl. from 2.12 branch.

Changed:
  U   Zope/trunk/src/Products/SiteAccess/SiteRoot.py
  U   Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/trunk/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 15:20:04 UTC 
(rev 112622)
+++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 15:20:13 UTC 
(rev 112623)
@@ -87,20 +87,6 @@
 self.title = title.strip()
 self.base = base = base.strip()
 self.path = path = path.strip()
-if base:
-self.SiteRootBASE = base
-else:
-try:
-del self.SiteRootBASE
-except:
-pass
-if path:
-self.SiteRootPATH = path
-else:
-try:
-del self.SiteRootPATH
-except:
-pass
 
 def manage_edit(self, title, base, path, REQUEST=None):
  Set the title, base, and path.
@@ -114,30 +100,26 @@
 def __call__(self, client, request, response=None):
  Traversing.
 
+rq = request
 if SUPPRESS_SITEROOT:
 return
-if '_SUPPRESS_SITEROOT' in _swallow(request, '_SUPPRESS'):
-request.setVirtualRoot(request.steps)
+if '_SUPPRESS_SITEROOT' in _swallow(rq, '_SUPPRESS'):
+rq.setVirtualRoot(rq.steps)
 return
-srd = [None, None]
-for i in (0, 1):
-srp = ('SiteRootBASE', 'SiteRootPATH')[i]
-try:
-srd[i] = getattr(self, srp)
-except AttributeError:
-srd[i] = request.get(srp, None)
-if srd[i] is None:
-srd[i] = request.environ.get(srp, None)
-if srd[0] is not None:
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
-request['SERVER_URL'], srd[0])
-request['SERVER_URL'] = srd[0]
-request._resetURLS()
-if srd[1] is not None:
-old = request['URL']
-request.setVirtualRoot(srd[1])
-request['ACTUAL_URL'] = request['ACTUAL_URL'].replace(
-old, request['URL'])
+base = (self.base or
+rq.get('SiteRootBASE') or
+rq.environ.get('SiteRootBASE'))
+path = (self.path or
+rq.get('SiteRootPATH') or
+rq.environ.get('SiteRootPATH'))
+if base is not None:
+rq['ACTUAL_URL'] = rq['ACTUAL_URL'].replace(rq['SERVER_URL'], base)
+rq['SERVER_URL'] = base
+rq._resetURLS()
+if path is not None:
+old = rq['URL']
+rq.setVirtualRoot(path)
+rq['ACTUAL_URL'] = rq['ACTUAL_URL'].replace(old, rq['URL'])
 
 def get_size(self):
  Make FTP happy

Modified: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
15:20:04 UTC (rev 112622)
+++ Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
15:20:13 UTC (rev 112623)
@@ -127,18 +127,12 @@
 self.assertEqual(siteroot.title, 'TITLE')
 self.assertEqual(siteroot.base, '')
 self.assertEqual(siteroot.path, '')
-# XXX Why aren't these defaulted to None at class scope?
-# Even better:  why do they exist at all?
-self.failUnless(getattr(siteroot, 'SiteRootBase', self) is self)
-self.failUnless(getattr(siteroot, 'SiteRootPath', self) is self)
 
 def test___init___w_base_and_path(self):
 siteroot = self._makeOne(base='http://example.com', path='/path')
 self.assertEqual(siteroot.title, 'TITLE')
 self.assertEqual(siteroot.base, 'http://example.com')
 self.assertEqual(siteroot.path, '/path')
-self.assertEqual(siteroot.SiteRootBASE, 'http://example.com')
-self.assertEqual(siteroot.SiteRootPATH, '/path')
 
 def test_manage_edit_no_REQUEST(self):
 siteroot = self._makeOne(title='Before',
@@ -150,8 +144,6 @@
 self.assertEqual(siteroot.title, 'After')
 self.assertEqual(siteroot.base, 'http://after.example.com')
 self.assertEqual(siteroot.path, '/after')
-self.assertEqual(siteroot.SiteRootBASE, 'http://after.example.com')
-self.assertEqual(siteroot.SiteRootPATH, '/after')
 
 def test_manage_edit_w_REQUEST(self):
 siteroot = self._makeOne(title='Before',
@@ -165,8 +157,6 @@
 self.assertEqual(siteroot.title, 'After')
 self.assertEqual(siteroot.base, 'http://after.example.com')
 self.assertEqual(siteroot.path, '/after')
-self.assertEqual(siteroot.SiteRootBASE, 

[Zope-Checkins] SVN: Zope/trunk/ Merge fix for LP#142878 from 2.12 branch.

2010-05-21 Thread Tres Seaver
Log message for revision 112624:
  Merge fix for LP#142878 from 2.12 branch.

Changed:
  U   Zope/trunk/doc/CHANGES.rst
  U   Zope/trunk/src/Products/SiteAccess/AccessRule.py
  U   Zope/trunk/src/Products/SiteAccess/SiteRoot.py
  U   Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py
  U   Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py

-=-
Modified: Zope/trunk/doc/CHANGES.rst
===
--- Zope/trunk/doc/CHANGES.rst  2010-05-21 15:20:13 UTC (rev 112623)
+++ Zope/trunk/doc/CHANGES.rst  2010-05-21 15:20:15 UTC (rev 112624)
@@ -162,6 +162,9 @@
 Bugs Fixed
 ++
 
+- LP #142878: Remove URL-based suppression of access rules and site root
+  objects.   Suppression using ``os.environ`` still works.
+
 - LP #143144: Fix documentation for the zope.conf ``mount-point``
   directive.
 

Modified: Zope/trunk/src/Products/SiteAccess/AccessRule.py
===
--- Zope/trunk/src/Products/SiteAccess/AccessRule.py2010-05-21 15:20:13 UTC 
(rev 112623)
+++ Zope/trunk/src/Products/SiteAccess/AccessRule.py2010-05-21 15:20:15 UTC 
(rev 112624)
@@ -20,20 +20,8 @@
 def __call__(self, container, request):
 if SUPPRESS_ACCESSRULE:
 return
-if '_SUPPRESS_ACCESSRULE' in _swallow(request, '_SUPPRESS'):
-request.setVirtualRoot(request.steps)
-return
 NameCaller.__call__(self, container, request)
 
-def _swallow(request, prefix):
-path = request['TraversalRequestNameStack']
-steps = request.steps
-i = len(steps)
-while i  0 and steps[i - 1][:1] == '_':
-i = i - 1
-while path and path[-1][:len(prefix)] == prefix:
-steps.append(path.pop())
-return steps[i:]
 
 def manage_addAccessRule(self, method_id=None, REQUEST=None, **ignored):
 Point a __before_traverse__ entry at the specified method

Modified: Zope/trunk/src/Products/SiteAccess/SiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 15:20:13 UTC 
(rev 112623)
+++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py  2010-05-21 15:20:15 UTC 
(rev 112624)
@@ -14,8 +14,6 @@
 from ZPublisher.BeforeTraverse import registerBeforeTraverse
 from ZPublisher.BeforeTraverse import unregisterBeforeTraverse
 
-from Products.SiteAccess.AccessRule import _swallow
-
 SUPPRESS_SITEROOT = os.environ.has_key('SUPPRESS_SITEROOT')
 
 class Traverser(Persistent, Item):
@@ -103,9 +101,6 @@
 rq = request
 if SUPPRESS_SITEROOT:
 return
-if '_SUPPRESS_SITEROOT' in _swallow(rq, '_SUPPRESS'):
-rq.setVirtualRoot(rq.steps)
-return
 base = (self.base or
 rq.get('SiteRootBASE') or
 rq.environ.get('SiteRootBASE'))

Modified: Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py  2010-05-21 
15:20:13 UTC (rev 112623)
+++ Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py  2010-05-21 
15:20:15 UTC (rev 112624)
@@ -37,7 +37,7 @@
 self.failIf(_called)
 
 def test___call___w_SUPPRESS_ACCESSRULE_in_URL(self):
-# This behavior will change once we land lp:142878.
+# This behavior changed in landing lp:142878.
 _called = []
 def _func(*args):
 _called.append(args)
@@ -47,8 +47,8 @@
 request.steps = []
 container = DummyContainer(testing=_func)
 rule(container, request)
-self.failIf(_called)
-self.assertEqual(request._virtual_root, ['_SUPPRESS_ACCESSRULE'])
+self.failUnless(_called)
+self.assertEqual(request._virtual_root, None)
 
 def test___call___wo_SUPPRESS_ACCESSRULE(self):
 _called = []

Modified: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py
===
--- Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
15:20:13 UTC (rev 112623)
+++ Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py2010-05-21 
15:20:15 UTC (rev 112624)
@@ -166,16 +166,24 @@
 self.assertEqual(request, {})
 
 def test___call___w_SUPPRESS_SITEROOT_in_URL(self):
-# This behavior will change once we land lp:142878.
-siteroot = self._makeOne(base='http://example.com', path='/path')
+# This behavior changed in landing lp:142878.
+URL='http://localhost:8080/example/folder/'
+siteroot = self._makeOne(base='http://example.com', path='/example')
 request = DummyRequest(TraversalRequestNameStack=
-['_SUPPRESS_SITEROOT'])
-def _dont_go_here(key, value):
-raise NotImplementedError
-request.__setitem__ = _dont_go_here
+