Log message for revision 122077: Removed `AccessRule` and `SiteRoot` from `Products.SiteAccess`.
Changed: U Zope/trunk/doc/CHANGES.rst U Zope/trunk/src/OFS/deprecated.zcml U Zope/trunk/src/Products/Five/component/__init__.py D Zope/trunk/src/Products/SiteAccess/AccessRule.py D Zope/trunk/src/Products/SiteAccess/CHANGES.txt D Zope/trunk/src/Products/SiteAccess/COPYRIGHT.txt D Zope/trunk/src/Products/SiteAccess/Extensions/ D Zope/trunk/src/Products/SiteAccess/README.txt D Zope/trunk/src/Products/SiteAccess/SiteRoot.py U Zope/trunk/src/Products/SiteAccess/__init__.py D Zope/trunk/src/Products/SiteAccess/doc/ U Zope/trunk/src/Products/SiteAccess/tests/__init__.py D Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py D Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py D Zope/trunk/src/Products/SiteAccess/version.txt D Zope/trunk/src/Products/SiteAccess/www/AccessRuleAdd.dtml D Zope/trunk/src/Products/SiteAccess/www/SiteRootAdd.dtml D Zope/trunk/src/Products/SiteAccess/www/SiteRootEdit.dtml U Zope/trunk/src/Zope2/Startup/handlers.py U Zope/trunk/src/Zope2/Startup/zopeschema.xml -=- Modified: Zope/trunk/doc/CHANGES.rst =================================================================== --- Zope/trunk/doc/CHANGES.rst 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/doc/CHANGES.rst 2011-07-03 13:43:05 UTC (rev 122077) @@ -41,6 +41,8 @@ Restructuring +++++++++++++ +- Removed `AccessRule` and `SiteRoot` from `Products.SiteAccess`. + - Removed `Products.ZReST` and the `reStructuredText` wrapper, you can use `docutils` directly to gain `reST` support. Modified: Zope/trunk/src/OFS/deprecated.zcml =================================================================== --- Zope/trunk/src/OFS/deprecated.zcml 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/OFS/deprecated.zcml 2011-07-03 13:43:05 UTC (rev 122077) @@ -14,8 +14,6 @@ <five:deprecatedManageAddDelete class="Products.SiteAccess.VirtualHostMonster.VirtualHostMonster"/> - <five:deprecatedManageAddDelete - class="Products.SiteAccess.SiteRoot.Traverser"/> <five:deprecatedManageAddDelete class="Products.SiteErrorLog.SiteErrorLog.SiteErrorLog"/> Modified: Zope/trunk/src/Products/Five/component/__init__.py =================================================================== --- Zope/trunk/src/Products/Five/component/__init__.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/Five/component/__init__.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -23,7 +23,7 @@ import ExtensionClass from Acquisition import aq_base, aq_inner, aq_parent -from Products.SiteAccess.AccessRule import AccessRule +from ZPublisher.BeforeTraverse import NameCaller from ZPublisher.BeforeTraverse import registerBeforeTraverse from ZPublisher.BeforeTraverse import unregisterBeforeTraverse @@ -64,7 +64,7 @@ obj = aq_base(obj) if not IPossibleSite.providedBy(obj): raise TypeError, 'Must provide IPossibleSite' - hook = AccessRule(HOOK_NAME) + hook = NameCaller(HOOK_NAME) registerBeforeTraverse(obj, hook, HOOK_NAME, 1) if not hasattr(obj, HOOK_NAME): Deleted: Zope/trunk/src/Products/SiteAccess/AccessRule.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/AccessRule.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/AccessRule.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,83 +0,0 @@ -"""AccessRule module - -Provide a simple method to set up Access Rules -""" -from cgi import escape -import os - -from App.Dialogs import MessageDialog -from App.special_dtml import DTMLFile -from ZPublisher.BeforeTraverse import NameCaller -from ZPublisher.BeforeTraverse import queryBeforeTraverse -from ZPublisher.BeforeTraverse import registerBeforeTraverse -from ZPublisher.BeforeTraverse import unregisterBeforeTraverse - -SUPPRESS_ACCESSRULE = os.environ.has_key('SUPPRESS_ACCESSRULE') - -class AccessRule(NameCaller): - meta_type = 'Set Access Rule' - - def __call__(self, container, request): - if SUPPRESS_ACCESSRULE: - return - NameCaller.__call__(self, container, request) - - -def manage_addAccessRule(self, method_id=None, REQUEST=None, **ignored): - """Point a __before_traverse__ entry at the specified method""" - # We want the original object, not stuff in between, and no acquisition - self = self.this() - self = getattr(self, 'aq_base', self) - - 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 - if REQUEST: - return MessageDialog(title='No Access Rule', - message='This object now has no Access Rule', - action='%s/manage_main' % REQUEST['URL1']) - elif method_id and hasattr(self, method_id): - rules = unregisterBeforeTraverse(self, 'AccessRule') - if rules: - 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 = 'accessrule.gif' - except: - pass - if REQUEST: - return MessageDialog(title='Access Rule Set', - message='"%s" is now the Access Rule for this object' - % escape(method_id), - action='%s/manage_main' % REQUEST['URL1']) - else: - if REQUEST: - return MessageDialog(title='Invalid Method Id', - message='"%s" is not the Id of a method of this object' - % escape(method_id), - action='%s/manage_main' % REQUEST['URL1']) - -def getAccessRule(self, REQUEST=None): - "Return the name of the current AccessRule, if any" - self = self.this() - rules = queryBeforeTraverse(self, 'AccessRule') - if rules: - try: - return rules[0][1].name - except: - return 'Invalid BeforeTraverse data: ' + `rules` - return '' - -constructors = ( - ('manage_addAccessRuleForm', DTMLFile('www/AccessRuleAdd', globals())), - ('manage_addAccessRule', manage_addAccessRule), - ('manage_getAccessRule', getAccessRule), -) Deleted: Zope/trunk/src/Products/SiteAccess/CHANGES.txt =================================================================== --- Zope/trunk/src/Products/SiteAccess/CHANGES.txt 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/CHANGES.txt 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,104 +0,0 @@ -2000-10-03 Evan Simpson <e...@digicool.com> - - * Final release - * Added VirtualHostMonster, to make common virtual hosting - cases easy. - -2000-07-20 Evan Simpson <e...@digicool.com> - - * Beta 3 - * Fixed bug with SiteRoot deletion - * Added ability to turn off SiteRoots and AccessRules on a case-by-case - basis, by adding _SUPPRESS_SITEROOT or _SUPPRESS_ACCESSRULE to a - URL just after the container name. - * Added crude beginnings of Help - -2000-06-19 Evan Simpson <e...@digicool.com> - - * Beta 2 - * Removed a chunk of code left from 1.0 which messed up SiteRoots - -2000-06-09 Evan Simpson <e...@digicool.com> - - * Version 2.0.0 - * Changed to use the new virtual hosting support in Zope 2.2 - * INCOMPATIBLE with Zope versions prior to 2.2b1 - * The tarball no longer includes 'lib/python/Products' in file - paths. It must be unpacked in the Products directory, for - better compatibility with INSTANCE_HOME installations. - -2000-03-21 Evan Simpson <e...@4-am.com> - - * Version 1.0.1 - * Fix for FTP incompatibility - * Match changes in Zope 2.1.5/6 - -2000-01-18 Evan Simpson <e...@4-am.com> - - * Version 1.0.0 - * Decided that it's been long enough to call it stable - * Eliminated stale _v_absolute_url attributes (thanks - to Wade Simmons) - * Killed peculiar and obscure interaction with ZCatalog - -1999-12-15 Evan Simpson <e...@4-am.com> - - * Version 0.2.0 - * Got absolute_url to do the right thing under both Zope 2.0 and 2.1. - Note that this will change 2.0's behavior to match 2.1 - -1999-11-19 Evan Simpson <e...@4-am.com> - - * Added COPYRIGHT.txt, making Wide Open Source licence (BSD-style) - explicit. (Mike Goldman provided the text, I provided the silly name). - -1999-11-18 Evan Simpson <e...@4-am.com> - - * Version 0.1.4 - * BASE tags generated for default pages should play nicely with - setURL(base=...) - * Setting the base but not the path works now. - * Added ./doc/ directory with copies of documentation from Zope.org - * SiteRoot* variables set in the environment are now seen. - -1999-10-29 Evan Simpson <e...@4-am.com> - - * Version 0.1.3 - * Using DTML Docs/Methods as Access Rules should work better, - and allow normal acquisition. You won't have permissions for - anything unless you give the rule a Proxy Role, though. - * __no_before_traverse__ at the start of a URL path now persists - in generated URLs, making debugging easier. - -1999-10-27 Evan Simpson <e...@4-am.com> - - * Version 0.1.2 - * Fixed absolute_url() of objects acquired from above the point - at which setURL was called (usually by a SiteRoot). (thanks again - to Bruce Perens and technocrat.net) - * Added Base and Path properties to SiteRoot, with Path defaulting - to '/', the most commonly used value. If these are blank, it - will search for SiteRootBASE and SiteRootPATH. - * REQUEST.setURL now accepts either a string or sequence of - strings for its path argument. - -1999-10-24 Evan Simpson <e...@4-am.com> - - * Version 0.1.1 - * Made Access Rules work on unadorned root path (thanks to - Bruce Perens) - * Reorganized REQUEST.traverse to better handle changes - to the path within the loop. - * Experimental change: Overrides icon of methods designated - as Access Rules to provide visual feedback. This is a - fragile hack, but relatively harmless if it fails. (suggested - by Evan Gibson) - * Fixed Acquisition of SiteRoot* values (thanks to Oleg Broytmann) - * Rationalized file permissions (thanks to Joshua Brauer) - -1999-10-19 Evan Simpson <e...@4-am.com> - - * Version 0.1.0 - * First (apparently) working version - * Implemented REQUEST.setURL(base, path) and made SiteRoot use it. - * Put a link to existing AccessRule on "Add AccessRule" page. Deleted: Zope/trunk/src/Products/SiteAccess/COPYRIGHT.txt =================================================================== --- Zope/trunk/src/Products/SiteAccess/COPYRIGHT.txt 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/COPYRIGHT.txt 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,28 +0,0 @@ -This software is released under the following Wide-Open Source licence: - -Copyright (c) 1999 Zope Foundation and Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the Author nor the names of other contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. Deleted: Zope/trunk/src/Products/SiteAccess/README.txt =================================================================== --- Zope/trunk/src/Products/SiteAccess/README.txt 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/README.txt 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,11 +0,0 @@ -SiteAccess - - - The SiteAccess product provides support for pluggable pre- - traversal methods, and supplies objects and methods which - can be used to rewrite access URLs at the start of resolution - and as folders are traversed. - - The main intent is to provide for multi-site hosting in Zope. - - More information is available at http://zope.org/Members/4am/SiteAccess Deleted: Zope/trunk/src/Products/SiteAccess/SiteRoot.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/SiteRoot.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/SiteRoot.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,138 +0,0 @@ -"""SiteRoot module - -Defines the Traverser base class and SiteRoot class -""" -from cgi import escape -import os - -from Acquisition import Implicit -from App.Dialogs import MessageDialog -from App.special_dtml import DTMLFile -from OFS.SimpleItem import Item -from Persistence import Persistent -from ZPublisher.BeforeTraverse import NameCaller -from ZPublisher.BeforeTraverse import registerBeforeTraverse -from ZPublisher.BeforeTraverse import unregisterBeforeTraverse - -SUPPRESS_SITEROOT = os.environ.has_key('SUPPRESS_SITEROOT') - -class Traverser(Persistent, Item): - """ 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' - priority = 100 - - __ac_permissions__=() - - def addToContainer(self, container): - container._setObject(self.id, self) - self.manage_afterAdd(self, container) - - def manage_addToContainer(self, container, nextURL=''): - if nextURL: - if hasattr(getattr(container, 'aq_base', container), self.id): - return MessageDialog(title='Item Exists', - message='This object already contains a %s' % self.meta_type, - action=nextURL) - self.addToContainer(container) - if nextURL: - return MessageDialog(title='Item Added', - message='This object now has a %s' % escape(self.meta_type), - action=nextURL) - - def manage_beforeDelete(self, item, container): - if item is self: - unregisterBeforeTraverse(container, self.meta_type) - - def manage_afterAdd(self, item, container): - if item is self: - id = self.id - if callable(id): id = id() - - # We want the original object, not stuff in between - container = container.this() - hook = NameCaller(id) - registerBeforeTraverse(container, hook, - self.meta_type, - self.priority) - def _setId(self, id): - if id != self.id: - raise ValueError('Cannot change the id of a %s' - % escape(self.meta_type)) - -class SiteRoot(Traverser, Implicit): - """ 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. - """ - id = meta_type = 'SiteRoot' - title = '' - priority = 50 - - 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): - self.title = title.strip() - self.base = base = base.strip() - self.path = path = path.strip() - - def manage_edit(self, title, base, path, REQUEST=None): - """ Set the title, base, and path. - """ - self.__init__(title, base, path) - if REQUEST: - return MessageDialog(title='SiteRoot changed.', - message='SiteRoot changed.', - action='%s/manage_main' % REQUEST['URL1']) - - def __call__(self, client, request, response=None): - """ Traversing. - """ - rq = request - if SUPPRESS_SITEROOT: - return - 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 - """ - return 0 - -def manage_addSiteRoot(self, title='', base='', path='', REQUEST=None, - **ignored): - """ Add a SiteRoot to a container. - """ - sr = SiteRoot(title, base, path) - if REQUEST: - return sr.manage_addToContainer(self.this(), - '%s/manage_main' % REQUEST['URL1']) - else: - sr.manage_addToContainer(self.this()) - -constructors = ( - ('manage_addSiteRootForm', DTMLFile('www/SiteRootAdd', globals())), - ('manage_addSiteRoot', manage_addSiteRoot), -) Modified: Zope/trunk/src/Products/SiteAccess/__init__.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/__init__.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/__init__.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,17 +1,8 @@ -"""SiteAccess product -""" + + def initialize(context): - import SiteRoot - import AccessRule import VirtualHostMonster - context.registerClass(instance_class=SiteRoot.SiteRoot, - permission='Add Site Roots', - constructors=SiteRoot.constructors, legacy=SiteRoot.constructors) - - context.registerClass(instance_class=AccessRule.AccessRule, - permission='Manage Access Rules', constructors=AccessRule.constructors) - context.registerClass(instance_class=VirtualHostMonster.VirtualHostMonster, permission='Add Virtual Host Monsters', constructors=VirtualHostMonster.constructors) Modified: Zope/trunk/src/Products/SiteAccess/tests/__init__.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/tests/__init__.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/tests/__init__.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1 +1 @@ -# SiteAccess test package +# \ No newline at end of file Deleted: Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/tests/testAccessRule.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,225 +0,0 @@ -import unittest - - -class AccessRuleTests(unittest.TestCase): - - _old_SAR = None - - def setUp(self): - from Testing.ZopeTestCase import ZopeLite - ZopeLite.startup() - - def tearDown(self): - if self._old_SAR is not None: - self._set_SUPPRESS_ACCESSRULE(self._old_SAR) - - def _set_SUPPRESS_ACCESSRULE(self, value): - from Products.SiteAccess import AccessRule as AR - (self._old_SAR, - AR.SUPPRESS_ACCESSRULE) = (AR.SUPPRESS_ACCESSRULE, value) - - def _getTargetClass(self): - from Products.SiteAccess.AccessRule import AccessRule - return AccessRule - - def _makeOne(self, method_id='testing'): - return self._getTargetClass()(method_id) - - def test___call___w_SUPPRESS_ACCESSRULE_set(self): - self._set_SUPPRESS_ACCESSRULE(1) - _called = [] - def _func(*args): - _called.append(args) - rule = self._makeOne() - request = DummyRequest(TraversalRequestNameStack=[]) - container = DummyContainer(testing=_func) - rule(container, request) - self.assertFalse(_called) - - def test___call___w_SUPPRESS_ACCESSRULE_in_URL(self): - # This behavior changed in landing lp:142878. - _called = [] - def _func(*args): - _called.append(args) - rule = self._makeOne() - request = DummyRequest(TraversalRequestNameStack= - ['_SUPPRESS_ACCESSRULE']) - request.steps = [] - container = DummyContainer(testing=_func) - rule(container, request) - self.assertTrue(_called) - self.assertEqual(request._virtual_root, None) - - def test___call___wo_SUPPRESS_ACCESSRULE(self): - _called = [] - def _func(*args): - _called.append(args) - rule = self._makeOne() - request = DummyRequest(TraversalRequestNameStack=[]) - request.steps = [] - container = DummyContainer(testing=_func) - rule(container, request) - self.assertTrue(_called) - 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.assertTrue(result is None) - self.assertFalse(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.assertTrue(isinstance(result, str)) - self.assertTrue('<TITLE>No Access Rule</TITLE>' in result) - self.assertFalse(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.assertTrue(result is None) - self.assertFalse(container.__before_traverse__) - self.assertFalse('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.assertTrue(isinstance(result, str)) - self.assertTrue('<TITLE>No Access Rule</TITLE>' in result) - self.assertFalse(container.__before_traverse__) - self.assertFalse('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.assertTrue(result is None) - self.assertTrue((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.assertTrue(isinstance(result, str)) - self.assertTrue('<TITLE>Invalid Method Id</TITLE>' in result) - self.assertTrue((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.assertTrue(result is None) - self.assertFalse((99, 'AccessRule') in container.__before_traverse__) - self.assertTrue((1, 'AccessRule') in container.__before_traverse__) - rule = container.__before_traverse__[(1, 'AccessRule')] - self.assertEqual(rule.name, 'new_rule') - self.assertFalse('icon' in old_rule.__dict__) - self.assertEqual(new_rule.icon, 'accessrule.gif') - - def test_w_valid_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') - new_rule = container.new_rule = DummyObject(name='new_rule') - registerBeforeTraverse(container, old_rule, 'AccessRule') - request = DummyRequest(URL1 = 'http://example.com/') - request.form = {} - result = self._callFUT(container, 'new_rule', request) - self.assertTrue(isinstance(result, str)) - self.assertTrue('<TITLE>Access Rule Set</TITLE>' in result) - self.assertFalse((99, 'AccessRule') in container.__before_traverse__) - self.assertTrue((1, 'AccessRule') in container.__before_traverse__) - rule = container.__before_traverse__[(1, 'AccessRule')] - self.assertEqual(rule.name, 'new_rule') - self.assertFalse('icon' in old_rule.__dict__) - self.assertEqual(new_rule.icon, '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.assertTrue(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): - self._virtual_root = root - - -class DummyObject(object): - - def __init__(self, **kw): - self.__dict__.update(kw) - - -class DummyContainer(object): - - def __init__(self, **kw): - self.__dict__.update(kw) - - def this(self): - return self - -def test_suite(): - return unittest.TestSuite(( - unittest.makeSuite(AccessRuleTests), - unittest.makeSuite(Test_manage_addAccessRule), - unittest.makeSuite(Test_getAccessRule), - )) - Deleted: Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/tests/testSiteRoot.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,310 +0,0 @@ -"""SiteRoot regression tests. - -These tests verify that the request URL headers, in particular ACTUAL_URL, are -set correctly when a SiteRoot is used. - -See http://www.zope.org/Collectors/Zope/2077 -""" -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.assertTrue(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.assertTrue(result is None) - self.assertTrue(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.assertTrue('<TITLE>Item Exists</TITLE>' in result) - self.assertFalse(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.assertTrue('<TITLE>Item Added</TITLE>' in result) - self.assertTrue(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.assertFalse(container.__before_traverse__) - - def test_manage_afterAdd_item_not_self(self): - traverser = self._makeOne() - container = DummyContainer() - item = object() - traverser.manage_afterAdd(item, container) - self.assertFalse('__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, 'Traverser')] - self.assertEqual(hook.name, 'testing') - - def test__setId_same(self): - traverser = self._makeOne() - traverser._setId('testing') # doesn't raise - - def test__setId_different(self): - traverser = self._makeOne() - 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, '') - - 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') - - 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.assertTrue(result is None) - self.assertEqual(siteroot.title, 'After') - self.assertEqual(siteroot.base, 'http://after.example.com') - self.assertEqual(siteroot.path, '/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.assertTrue('<TITLE>SiteRoot changed.</TITLE>' in result) - self.assertEqual(siteroot.title, 'After') - self.assertEqual(siteroot.base, 'http://after.example.com') - self.assertEqual(siteroot.path, '/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 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'], - URL=URL, - ACTUAL_URL=URL, - SERVER_URL='http://localhost:8080', - ) - request.steps = [] - request.environ = {} - siteroot(None, request) - self.assertEqual(request['URL'], URL) - self.assertEqual(request['SERVER_URL'], 'http://example.com') - self.assertEqual(request['ACTUAL_URL'], - 'http://example.com/example/folder/') - self.assertEqual(request._virtual_root, '/example') - self.assertTrue(request._urls_reset) - - def test___call___wo_SUPPRESS_SITEROOT_w_base_wo_path(self): - URL='http://localhost:8080/example/folder/' - siteroot = self._makeOne(base='http://example.com', path='') - request = DummyRequest(TraversalRequestNameStack=[], - URL=URL, - ACTUAL_URL=URL, - SERVER_URL='http://localhost:8080', - ) - request.steps = [] - request.environ = {} - siteroot(None, request) - self.assertEqual(request['URL'], URL) - self.assertEqual(request['SERVER_URL'], 'http://example.com') - self.assertEqual(request['ACTUAL_URL'], - 'http://example.com/example/folder/') - self.assertEqual(request._virtual_root, None) - self.assertTrue(request._urls_reset) - - def test___call___wo_SUPPRESS_SITEROOT_wo_base_w_path(self): - URL='http://localhost:8080/example/folder/' - siteroot = self._makeOne(base='', path='/example') - request = DummyRequest(TraversalRequestNameStack=[], - URL=URL, - ACTUAL_URL=URL, - SERVER_URL='http://localhost:8080', - ) - request.steps = [] - request.environ = {} - siteroot(None, request) - self.assertEqual(request['URL'], URL) - self.assertEqual(request['SERVER_URL'], 'http://localhost:8080') - self.assertEqual(request['ACTUAL_URL'], URL) - self.assertEqual(request._virtual_root, '/example') - self.assertFalse(request._urls_reset) - - def test___call___wo_SUPPRESS_SITEROOT_w_base_w_path(self): - URL='http://localhost:8080/example/folder/' - siteroot = self._makeOne(base='http://example.com', path='/example') - request = DummyRequest(TraversalRequestNameStack=[], - URL=URL, - ACTUAL_URL=URL, - SERVER_URL='http://localhost:8080', - ) - request.steps = [] - request.environ = {} - siteroot(None, request) - self.assertEqual(request['URL'], URL) - self.assertEqual(request['SERVER_URL'], 'http://example.com') - self.assertEqual(request['ACTUAL_URL'], - 'http://example.com/example/folder/') - self.assertEqual(request._virtual_root, '/example') - self.assertTrue(request._urls_reset) - - def test_get_size(self): - siteroot = self._makeOne() - self.assertEqual(siteroot.get_size(), 0) - - -class DummyObject(object): - - def __init__(self, **kw): - self.__dict__.update(kw) - - -class DummyContainer(object): - - def __init__(self, **kw): - self.__dict__.update(kw) - - def _setObject(self, name, object): - setattr(self, name, object) - - def this(self): - return self - - -class DummyRequest(dict): - - _virtual_root = None - _urls_reset = False - - def setVirtualRoot(self, root): - self._virtual_root = root - - def _resetURLS(self): - self._urls_reset = True - - -class SiteRootRegressions(unittest.TestCase): - - def setUp(self): - import transaction - from Testing.makerequest import makerequest - from Testing.ZopeTestCase.ZopeLite import app - from Products.SiteAccess.SiteRoot import manage_addSiteRoot - transaction.begin() - self.app = makerequest(app()) - self.app.manage_addFolder('folder') - manage_addSiteRoot(self.app.folder, title='SiteRoot', - base='http://test_base', path='/test_path') - self.app.REQUEST.set('PARENTS', [self.app]) - self.app.REQUEST.traverse('/folder') - - def tearDown(self): - import transaction - transaction.abort() - self.app._p_jar.close() - - def testRequest(self): - self.assertEqual(self.app.REQUEST['SERVER_URL'], 'http://test_base') - self.assertEqual(self.app.REQUEST['ACTUAL_URL'], - 'http://test_base/test_path') - - def testAbsoluteUrl(self): - self.assertEqual(self.app.folder.absolute_url(), - 'http://test_base/test_path') - -def test_suite(): - return unittest.TestSuite(( - unittest.makeSuite(TraverserTests), - unittest.makeSuite(SiteRootTests), - unittest.makeSuite(SiteRootRegressions), - )) Deleted: Zope/trunk/src/Products/SiteAccess/version.txt =================================================================== --- Zope/trunk/src/Products/SiteAccess/version.txt 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/version.txt 2011-07-03 13:43:05 UTC (rev 122077) @@ -1 +0,0 @@ -SiteAccess-2-0-0 Deleted: Zope/trunk/src/Products/SiteAccess/www/AccessRuleAdd.dtml =================================================================== --- Zope/trunk/src/Products/SiteAccess/www/AccessRuleAdd.dtml 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/www/AccessRuleAdd.dtml 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,59 +0,0 @@ -<dtml-var manage_page_header> - -<dtml-let form_title="'Set Access Rule'"> - <dtml-var manage_form_title> -</dtml-let> - -<p class="form-help"> -<strong> -WARNING: Access Rules are powerful, and can temporarily disable -Zope access! Don't use them unless you have read all about them and -know how to recover from mistakes! -</strong> -</p> - -<p class="form-help"> -In the form below <em>rule id</em> is the id of an object in this -Zope Folder which will be called whenever the Folder is published. -It can implement rewrite rules, preload request variables, etc. -</p> - -<dtml-if manage_getAccessRule> -<p class="form-text"> -The current Access Rule is -<a href="&dtml-absolute_url;/&dtml-manage_getAccessRule;/manage_workspace"> -"&dtml-manage_getAccessRule;"</a>. -</p> -<dtml-else> -<p class="form-text"> -No Access Rule is currently set. -</p> -</dtml-if> - -<form action="manage_addAccessRule" method="post"> -<table cellspacing="0" cellpadding="2" border="0"> - <tr> - <td align="left" valign="top"> - <div class="form-label"> - Rule Id - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="method_id" size="40" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - </td> - <td align="left" valign="top"> - <div class="form-element"> -<input class="form-element" type="SUBMIT" name="submit" value=" Set Rule "> -<input class="form-element" type="SUBMIT" name="none" value=" No Access Rule "> - </div> - </td> - </tr> -</table> -</form> - -<dtml-var manage_page_footer> - Deleted: Zope/trunk/src/Products/SiteAccess/www/SiteRootAdd.dtml =================================================================== --- Zope/trunk/src/Products/SiteAccess/www/SiteRootAdd.dtml 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/www/SiteRootAdd.dtml 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,81 +0,0 @@ -<dtml-var manage_page_header> - -<dtml-let form_title="'Add SiteRoot'"><dtml-var manage_form_title></dtml-let> - -<p class="form-help"> -This will change URLs generated by all objects within the same container -as the SiteRoot. If a Base is specified (or a SiteRootBASE value can be -found) then it will replace the host:port/script portion of generated URLs. -If a Path is specified (or a SiteRootPATH value can be found) then it will -replace the remainder of each URL. -</p> - -<p class="form-help"> -Values affected include DTML variables starting with URL or BASE, and -the absolute_url() methods of objects. -</p> -<p class="form-help"> -If Base is not set, the SiteRoot will first attempt to acquire SiteRootBASE -and then search the REQUEST for it. The same holds for Path and -SiteRootPATH. -</p> -<p class="form-help"> -Base (if specified) should <strong>always</strong> start with -"http://" -</p> - -<form action="manage_addSiteRoot" method="post"> -<table cellspacing="0" cellpadding="2" border="0"> - <tr> - <td align="left" valign="top"> - <div class="form-label"> - Id - </div> - </td> - <td align="left" valign="top">SiteRoot</td> - </tr> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Title - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="title" size="40" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Base - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="base" size="40" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Path - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="path" size="40" value="/" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - </td> - <td align="left" valign="top"> - <div class="form-element"> - <input class="form-element" type="submit" name="submit" - value=" Add " /> - </div> - </td> - </tr> -</table> -</form> - -<dtml-var manage_page_footer> - Deleted: Zope/trunk/src/Products/SiteAccess/www/SiteRootEdit.dtml =================================================================== --- Zope/trunk/src/Products/SiteAccess/www/SiteRootEdit.dtml 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Products/SiteAccess/www/SiteRootEdit.dtml 2011-07-03 13:43:05 UTC (rev 122077) @@ -1,74 +0,0 @@ -<dtml-var manage_page_header> -<dtml-var manage_tabs> - -<p class="form-help"> -This will change URLs generated by all objects within the same container -as the SiteRoot. If a Base is specified (or a SiteRootBASE value can be -found) then it will replace the host:port/script portion of generated URLs. -If a Path is specified (or a SiteRootPATH value can be found) then it will -replace the remainder of each URL. -</p> - -<p class="form-help"> -Values affected include DTML variables starting with URL or BASE, and -the absolute_url() methods of objects. -</p> - -<p class="form-help"> -If Base is not set, the SiteRoot will first attempt to acquire SiteRootBASE -and then search the REQUEST for it. The same holds for Path and SiteRootPATH. -</p> - -<p class="form-help"> -Base (if specified) should <strong>always</strong> start with "http://" -</p> - -<form action="manage_edit" method="POST"> -<table cellspacing="0" cellpadding="2" border="0"> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Title - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="title" size="40" - value="<dtml-if title>&dtml-title;</dtml-if>" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Base - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="base" size="40" - value="<dtml-if base>&dtml-base;</dtml-if>" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - <div class="form-optional"> - Path - </div> - </td> - <td align="left" valign="top"> - <input type="text" name="path" size="40" - value="<dtml-if path>&dtml-path;</dtml-if>" /> - </td> - </tr> - <tr> - <td align="left" valign="top"> - </td> - <td align="left" valign="top"> - <div class="form-element"> - <input class="form-element" type="submit" name="submit" - value="Save Changes" /> - </div> - </td> - </tr> -</table> -</form> - -<dtml-var manage_page_footer> Modified: Zope/trunk/src/Zope2/Startup/handlers.py =================================================================== --- Zope/trunk/src/Zope2/Startup/handlers.py 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Zope2/Startup/handlers.py 2011-07-03 13:43:05 UTC (rev 122077) @@ -53,14 +53,6 @@ value not in (None, default) and _setenv('ZSESSION_TIMEOUT_MINS', value) return value -def suppress_all_access_rules(value): - value and _setenv('SUPPRESS_ACCESSRULE', value) - return value - -def suppress_all_site_roots(value): - value and _setenv('SUPPRESS_SITEROOT', value) - return value - def large_file_threshold(value): import ZServer ZServer.LARGE_FILE_THRESHOLD = value Modified: Zope/trunk/src/Zope2/Startup/zopeschema.xml =================================================================== --- Zope/trunk/src/Zope2/Startup/zopeschema.xml 2011-07-03 13:29:38 UTC (rev 122076) +++ Zope/trunk/src/Zope2/Startup/zopeschema.xml 2011-07-03 13:43:05 UTC (rev 122077) @@ -688,27 +688,6 @@ <metadefault>20</metadefault> </key> - <key name="suppress-all-access-rules" datatype="boolean" - default="off" handler="suppress_all_access_rules"> - <description> - If this directive is set to on, no access rules in your Zope site - will be executed. This is useful if you "lock yourself out" of a - particular part of your site by setting an improper access rule. - </description> - <metadefault>off</metadefault> - </key> - - - <key name="suppress-all-site-roots" datatype="boolean" - default="off" handler="suppress_all_site_roots"> - <description> - If this directive is set to on, no site roots in your Zope site will - be effective. This is useful if you "lock yourself out" of a - particular part of your site by setting an improper site root. - </description> - <metadefault>off</metadefault> - </key> - <section type="eventlog" name="*" attribute="eventlog"> <description> Describes what level of log output is desired and where it _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins