Log message for revision 122071: Removed persistent default code like the `error_log` and `temp_folder`.
Changed: U Zope/trunk/doc/CHANGES.rst U Zope/trunk/src/OFS/Application.py U Zope/trunk/src/OFS/tests/testAcquisition.py U Zope/trunk/src/OFS/tests/testAppInitializer.py U Zope/trunk/src/Products/SiteAccess/tests/testVirtualHostMonster.py U Zope/trunk/src/Zope2/App/startup.py U Zope/trunk/src/webdav/tests/testPUT_factory.py -=- Modified: Zope/trunk/doc/CHANGES.rst =================================================================== --- Zope/trunk/doc/CHANGES.rst 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/doc/CHANGES.rst 2011-07-03 12:25:49 UTC (rev 122071) @@ -33,6 +33,8 @@ Restructuring +++++++++++++ +- Removed persistent default code like the `error_log` and `temp_folder`. + - Removed persistent default content, including the `standard_error_message` template. Modified: Zope/trunk/src/OFS/Application.py =================================================================== --- Zope/trunk/src/OFS/Application.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/OFS/Application.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -23,7 +23,6 @@ from AccessControl.Permission import ApplicationDefaultPermissions from Acquisition import aq_base from App.ApplicationManager import ApplicationManager -from App.config import getConfiguration from App import FactoryDispatcher from DateTime import DateTime from OFS.metaconfigure import get_packages_to_initialize @@ -59,8 +58,8 @@ security = ClassSecurityInfo() title = 'Zope' - __defined_roles__ = ('Manager','Anonymous','Owner') - web__form__method = 'GET' + __defined_roles__ = ('Manager', 'Anonymous', 'Owner') + __error_log__ = None isTopLevelPrincipiaApplicationObject = 1 manage_options=(( @@ -70,25 +69,16 @@ Folder.Folder.manage_options[2:] ) - p_=misc_.p_ - misc_=misc_.misc_ + p_ = misc_.p_ + misc_ = misc_.misc_ + _reserved_names = ('Control_Panel', ) - _reserved_names=('Control_Panel', - 'browser_id_manager', - 'temp_folder') - # This class-default __allow_groups__ ensures that the # emergency user can still access the system if the top-level # UserFolder is deleted. This is necessary to allow people # to replace the top-level UserFolder object. - __allow_groups__ = UserFolder() - # Set the universal default method to index_html - _object_manager_browser_default_id = 'index_html' - - _initializer_registry = None - def __init__(self): # Initialize users uf = UserFolder() @@ -98,7 +88,7 @@ def id(self): try: return self.REQUEST['SCRIPT_NAME'][1:] - except: + except (KeyError, TypeError): return self.title def title_and_id(self): @@ -197,21 +187,8 @@ together. """ # We're at the base of the path. - return ('',) + return ('', ) - security.declarePrivate('_setInitializerFlag') - def _setInitializerFlag(self, flag): - if self._initializer_registry is None: - self._initializer_registry = {} - self._initializer_registry[flag] = 1 - - security.declarePrivate('_getInitializerFlag') - def _getInitializerFlag(self, flag): - reg = self._initializer_registry - if reg is None: - reg = {} - return reg.get(flag) - InitializeClass(Application) @@ -253,15 +230,10 @@ def initialize(self): # make sure to preserve relative ordering of calls below. self.install_cp_and_products() - self.install_tempfolder_and_sdc() - self.install_session_data_manager() - self.install_browser_id_manager() self.install_required_roles() self.install_inituser() - self.install_errorlog() self.install_products() self.install_standards() - self.install_virtual_hosting() def install_cp_and_products(self): global APP_MANAGER @@ -277,130 +249,6 @@ app._objects = tuple(i for i in app._objects if i['id'] != 'Control_Panel') self.commit('Removed persistent Control_Panel') - def install_tempfolder_and_sdc(self): - app = self.getApp() - from Products.ZODBMountPoint.MountedObject import manage_addMounts,\ - MountedObject - from Products.ZODBMountPoint.MountedObject import getConfiguration as \ - getDBTabConfiguration - - dbtab_config = getDBTabConfiguration() - - tf = getattr(app, 'temp_folder', None) - - if getattr(tf, 'meta_type', None) == MountedObject.meta_type: - # tf is a MountPoint object. This means that the temp_folder - # couldn't be mounted properly (the meta_type would have been - # the meta type of the container class otherwise). The - # MountPoint object writes a message to zLOG so we don't - # need to. - return - - if tf is None: - # do nothing if we've already installed one - if not app._getInitializerFlag('temp_folder'): - if dbtab_config is None: - # DefaultConfiguration, do nothing - return - mount_paths = [ x[0] for x in dbtab_config.listMountPaths() ] - if not '/temp_folder' in mount_paths: - # we won't be able to create the mount point properly - LOG.error('Could not initialze a Temporary Folder because ' - 'a database was not configured to be mounted at ' - 'the /temp_folder mount point') - return - try: - manage_addMounts(app, ('/temp_folder',)) - app._setInitializerFlag('temp_folder') - self.commit('Added temp_folder') - tf = app.temp_folder - except: - LOG.error('Could not add a /temp_folder mount point due to an ' - 'error.', exc_info=sys.exc_info()) - return - - # Ensure that there is a transient object container in the temp folder - config = getConfiguration() - - if not hasattr(aq_base(tf), 'session_data'): - from Products.Transience.Transience import TransientObjectContainer - addnotify = getattr(config, 'session_add_notify_script_path', None) - delnotify = getattr(config, 'session_delete_notify_script_path', - None) - default_limit = 1000 - default_period_secs = 20 - default_timeout_mins = 20 - - limit = getattr(config, 'maximum_number_of_session_objects', - default_limit) - timeout_spec = getattr(config, 'session_timeout_minutes', - default_timeout_mins) - period_spec = getattr(config, 'session_resolution_seconds', - default_period_secs) - - if addnotify and app.unrestrictedTraverse(addnotify, None) is None: - LOG.warn('failed to use nonexistent "%s" script as ' - 'session-add-notify-script-path' % addnotify) - addnotify=None - - if delnotify and app.unrestrictedTraverse(delnotify, None) is None: - LOG.warn('failed to use nonexistent "%s" script as ' - 'session-delete-notify-script-path' % delnotify) - delnotify=None - - if 1: # Preserve indentation for diff - toc = TransientObjectContainer('session_data', - 'Session Data Container', - timeout_mins = timeout_spec, - addNotification = addnotify, - delNotification = delnotify, - limit=limit, - period_secs = period_spec) - - tf._setObject('session_data', toc) - tf_reserved = getattr(tf, '_reserved_names', ()) - if 'session_data' not in tf_reserved: - tf._reserved_names = tf_reserved + ('session_data',) - self.commit('Added session_data to temp_folder') - return tf # return the tempfolder object for test purposes - - def install_browser_id_manager(self): - app = self.getApp() - if app._getInitializerFlag('browser_id_manager'): - # do nothing if we've already installed one - return - # Ensure that a browser ID manager exists - if not hasattr(app, 'browser_id_manager'): - from Products.Sessions.BrowserIdManager import BrowserIdManager - bid = BrowserIdManager('browser_id_manager', 'Browser Id Manager') - app._setObject('browser_id_manager', bid) - # FIXME explicitely call manage_afterAdd, as sometimes - # events are initialized too late - browser_id_manager = app.browser_id_manager - browser_id_manager.manage_afterAdd(browser_id_manager, app) - app._setInitializerFlag('browser_id_manager') - self.commit('Added browser_id_manager') - - def install_session_data_manager(self): - app = self.getApp() - if app._getInitializerFlag('session_data_manager'): - # do nothing if we've already installed one - return - # Ensure that a session data manager exists - if not hasattr(app, 'session_data_manager'): - from Products.Sessions.SessionDataManager import SessionDataManager - sdm = SessionDataManager('session_data_manager', - title='Session Data Manager', - path='/temp_folder/session_data', - requestName='SESSION') - app._setObject('session_data_manager', sdm) - # FIXME explicitely call manage_afterAdd, as sometimes - # events are initialized too late - session_data_manager = app.session_data_manager - session_data_manager.manage_afterAdd(session_data_manager, app) - app._setInitializerFlag('session_data_manager') - self.commit('Added session_data_manager') - def install_required_roles(self): app = self.getApp() @@ -439,47 +287,16 @@ transaction.get().note('Migrated user folder') transaction.commit() - def install_errorlog(self): - app = self.getApp() - if app._getInitializerFlag('error_log'): - # do nothing if we've already installed one - return - - # Install an error_log - if not hasattr(app, 'error_log'): - from Products.SiteErrorLog.SiteErrorLog import SiteErrorLog - error_log = SiteErrorLog() - app._setObject('error_log', error_log) - # FIXME explicitely call manage_afterAdd, as sometimes - # events are initialized too late - error_log = app.error_log - error_log.manage_afterAdd(error_log, app) - app._setInitializerFlag('error_log') - self.commit('Added site error_log at /error_log') - - def install_virtual_hosting(self): - app = self.getApp() - if app._getInitializerFlag('virtual_hosting'): - return - if (not app.objectIds('Virtual Host Monster') and - not hasattr(app, 'virtual_hosting')): - from Products.SiteAccess.VirtualHostMonster \ - import VirtualHostMonster - vhm = VirtualHostMonster() - vhm.id = 'virtual_hosting' - vhm.addToContainer(app) - app._setInitializerFlag('virtual_hosting') - self.commit('Added virtual_hosting') - def install_products(self): return install_products() def install_standards(self): app = self.getApp() - if getattr(app, '_standard_objects_have_been_added', None) is None: - return - delattr(app, '_standard_objects_have_been_added') - transaction.get().note('Removed standard objects flag') + if getattr(app, '_standard_objects_have_been_added', None) is not None: + delattr(app, '_standard_objects_have_been_added') + if getattr(app, '_initializer_registry', None) is not None: + delattr(app, '_initializer_registry') + transaction.get().note('Removed unused application attributes.') transaction.commit() Modified: Zope/trunk/src/OFS/tests/testAcquisition.py =================================================================== --- Zope/trunk/src/OFS/tests/testAcquisition.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/OFS/tests/testAcquisition.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -29,10 +29,9 @@ from AccessControl.class_init import InitializeClass from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManagement import noSecurityManager -from AccessControl.Permissions import view, view_management_screens +from AccessControl.Permissions import view_management_screens from AccessControl.ImplPython import guarded_getattr as guarded_getattr_py from AccessControl.ImplC import guarded_getattr as guarded_getattr_c -from Products.SiteErrorLog.SiteErrorLog import SiteErrorLog class AllowedItem(SimpleItem): @@ -56,17 +55,7 @@ InitializeClass(ProtectedItem) -class ProtectedSiteErrorLog(SiteErrorLog): - '''This differs from the base by declaring security - for the object itself. - ''' - id = 'error_log2' - security = ClassSecurityInfo() - security.declareObjectProtected(view) -InitializeClass(ProtectedSiteErrorLog) - - class TestGetAttr(unittest.TestCase): def setUp(self): @@ -83,7 +72,6 @@ # Set up objects in the root that we want to aquire self.app.manage_addFolder('plain_folder') - self.app._setObject('error_log2', ProtectedSiteErrorLog()) # We also want to be able to acquire simple attributes self.app.manage_addProperty(id='simple_type', type='string', value='a string') @@ -131,74 +119,13 @@ self.assertEqual(o, self.app.acl_users) def testAclUsersDenied(self): - # XXX: Fails in 2.7.3 o = self.guarded_getattr(self.folder.denied, 'acl_users') self.assertEqual(o, self.app.acl_users) def testAclUsersProtected(self): - # XXX: Fails in 2.7.3 for Anonymous o = self.guarded_getattr(self.folder.protected, 'acl_users') self.assertEqual(o, self.app.acl_users) - # Acquire browser id manager - - def testBrowserIdManagerAllowed(self): - o = self.guarded_getattr(self.folder.allowed, 'browser_id_manager') - self.assertEqual(o, self.app.browser_id_manager) - - def testBrowserIdManagerDenied(self): - o = self.guarded_getattr(self.folder.denied, 'browser_id_manager') - self.assertEqual(o, self.app.browser_id_manager) - - def testBrowserIdManagerProtected(self): - o = self.guarded_getattr(self.folder.protected, 'browser_id_manager') - self.assertEqual(o, self.app.browser_id_manager) - - # Acquire error log - - def testErrorLogAllowed(self): - o = self.guarded_getattr(self.folder.allowed, 'error_log') - self.assertEqual(o, self.app.error_log) - - def testErrorLogDenied(self): - # XXX: Fails in 2.7.3 - o = self.guarded_getattr(self.folder.denied, 'error_log') - self.assertEqual(o, self.app.error_log) - - def testErrorLogProtected(self): - # XXX: Fails in 2.7.3 for Anonymous - o = self.guarded_getattr(self.folder.protected, 'error_log') - self.assertEqual(o, self.app.error_log) - - # Now watch this: error log with object security declaration works fine! - - def testProtectedErrorLogAllowed(self): - o = self.guarded_getattr(self.folder.allowed, 'error_log2') - self.assertEqual(o, self.app.error_log2) - - def testProtectedErrorLogDenied(self): - o = self.guarded_getattr(self.folder.denied, 'error_log2') - self.assertEqual(o, self.app.error_log2) - - def testProtectedErrorLogProtected(self): - o = self.guarded_getattr(self.folder.protected, 'error_log2') - self.assertEqual(o, self.app.error_log2) - - # This appears to mean that any potential acquiree must make sure - # to declareObjectProtected(SomePermission). - - # From the ZDG: - # We've seen how to make assertions on methods - but in the case of - # someObject we are not trying to access any particular method, but - # rather the object itself (to pass it to some_method). Because the - # security machinery will try to validate access to someObject, we - # need a way to let the security machinery know how to handle access - # to the object itself in addition to protecting its methods. - - # IOW, acquiring an object in restricted Python now amounts to - # "passing it to some_method". - - # Also test Richard Jones' use-case of acquiring a string: def testSimpleTypeAllowed(self): @@ -206,12 +133,10 @@ self.assertEqual(o, 'a string') def testSimpleTypeDenied(self): - # XXX: Fails in 2.7.3 o = self.guarded_getattr(self.folder.denied, 'simple_type') self.assertEqual(o, 'a string') def testSimpleTypeProtected(self): - # XXX: Fails in 2.7.3 for Anonymous o = self.guarded_getattr(self.folder.protected, 'simple_type') self.assertEqual(o, 'a string') Modified: Zope/trunk/src/OFS/tests/testAppInitializer.py =================================================================== --- Zope/trunk/src/OFS/tests/testAppInitializer.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/OFS/tests/testAppInitializer.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -14,8 +14,6 @@ import os, unittest, tempfile, cStringIO -from logging import getLogger - from OFS.Application import Application, AppInitializer import Zope2.Startup import ZConfig @@ -101,69 +99,6 @@ self.assertTrue(hasattr(app, 'Control_Panel')) self.assertEqual(app.Control_Panel.meta_type, 'Control Panel') - def test_install_tempfolder_and_sdc(self): - self.configure(good_cfg) - i = self.getOne() - i.install_tempfolder_and_sdc() - app = i.getApp() - self.assertEqual(app.temp_folder.meta_type, 'Temporary Folder') - self.assertEqual(app.temp_folder.session_data.meta_type, - 'Transient Object Container') - self.assertTrue(app._getInitializerFlag('temp_folder')) - - def test_install_tempfolder_and_sdc_status(self): - self.configure(good_cfg) - i = self.getOne() - status = i.install_tempfolder_and_sdc() - self.assertTrue(status) - - i = self.getOne() - self.configure(bad_cfg) - try: - logger = getLogger('Zope.ZODBMountPoint') - logger.disabled = 1 - status = i.install_tempfolder_and_sdc() - finally: - logger.disabled = 0 - self.assertFalse(status) - - def test_install_tempfolder_and_sdc_unlimited_sessions(self): - unlimited_cfg = good_cfg + """ - maximum-number-of-session-objects 0 - """ - self.configure(unlimited_cfg) - i = self.getOne() - status = i.install_tempfolder_and_sdc() - self.assertTrue(status) - - sdc = i.getApp().temp_folder.session_data - self.assertEqual(sdc.getSubobjectLimit(), 0) - - def test_install_browser_id_manager(self): - self.configure(good_cfg) - i = self.getOne() - app = i.getApp() - i.install_browser_id_manager() - self.assertEqual(app.browser_id_manager.meta_type,'Browser Id Manager') - self.assertTrue(app._getInitializerFlag('browser_id_manager')) - - def test_install_virtual_hosting(self): - self.configure(good_cfg) - i = self.getOne() - app = i.getApp() - i.install_virtual_hosting() - self.assertEqual(app.virtual_hosting.meta_type,'Virtual Host Monster') - self.assertTrue(app._getInitializerFlag('virtual_hosting')) - - def test_install_session_data_manager(self): - self.configure(good_cfg) - i = self.getOne() - i.install_session_data_manager() - app = i.getApp() - self.assertEqual(app.session_data_manager.meta_type, - 'Session Data Manager') - self.assertTrue(app._getInitializerFlag('session_data_manager')) - def test_install_required_roles(self): self.configure(good_cfg) i = self.getOne() @@ -187,14 +122,6 @@ if os.path.exists(fname): os.unlink(fname) - def test_install_errorlog(self): - self.configure(good_cfg) - i = self.getOne() - i.install_errorlog() - app = i.getApp() - self.assertEqual(app.error_log.meta_type, 'Site Error Log') - self.assertTrue(app._getInitializerFlag('error_log')) - def test_install_products(self): self.configure(good_cfg) i = self.getOne() Modified: Zope/trunk/src/Products/SiteAccess/tests/testVirtualHostMonster.py =================================================================== --- Zope/trunk/src/Products/SiteAccess/tests/testVirtualHostMonster.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/Products/SiteAccess/tests/testVirtualHostMonster.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -17,7 +17,7 @@ from Testing.ZopeTestCase.ZopeLite import app transaction.begin() self.app = makerequest(app()) - if 'virtual_hosting' not in self.app.objectIds(): + if 'virtual_hosting' not in self.app.objectIds(): # If ZopeLite was imported, we have no default virtual # host monster from Products.SiteAccess.VirtualHostMonster \ Modified: Zope/trunk/src/Zope2/App/startup.py =================================================================== --- Zope/trunk/src/Zope2/App/startup.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/Zope2/App/startup.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -200,16 +200,15 @@ # ouch, a user saw this conflict error :-( self.unresolved_conflict_errors += 1 - if isinstance(published, list): - # special case for zope root - error_log_url = '' - else: + error_log_url = '' + if not isinstance(published, list): try: log = aq_acquire(published, '__error_log__', containment=1) except AttributeError: - error_log_url = '' + pass else: - error_log_url = log.raising((t, v, traceback)) + if log is not None: + error_log_url = log.raising((t, v, traceback)) if (REQUEST is None or (getattr(REQUEST.get('RESPONSE', None), '_error_format', '') Modified: Zope/trunk/src/webdav/tests/testPUT_factory.py =================================================================== --- Zope/trunk/src/webdav/tests/testPUT_factory.py 2011-07-02 21:54:14 UTC (rev 122070) +++ Zope/trunk/src/webdav/tests/testPUT_factory.py 2011-07-03 12:25:49 UTC (rev 122071) @@ -1,8 +1,8 @@ import unittest -import Testing import Zope2 Zope2.startup() +from Products.SiteAccess.VirtualHostMonster import VirtualHostMonster from Testing.makerequest import makerequest import transaction import base64 @@ -14,24 +14,23 @@ def setUp(self): self.app = makerequest(Zope2.app()) - try: - # Make a manager user - uf = self.app.acl_users - uf._doAddUser('manager', 'secret', ['Manager'], []) - # Make a folder to put stuff into - self.app.manage_addFolder('folder', '') - self.folder = self.app.folder - # Fake a WebDAV PUT request - request = self.app.REQUEST - request['PARENTS'] = [self.app] - request['BODY'] = 'bar' - request.environ['CONTENT_TYPE'] = 'text/plain' - request.environ['REQUEST_METHOD'] = 'PUT' - request.environ['WEBDAV_SOURCE_PORT'] = 1 - request._auth = auth_info - except: - self.tearDown() - raise + # Make a manager user + uf = self.app.acl_users + uf._doAddUser('manager', 'secret', ['Manager'], []) + # Make a folder to put stuff into + self.app.manage_addFolder('folder', '') + self.folder = self.app.folder + # Setup VHM + vhm = VirtualHostMonster() + vhm.addToContainer(self.app) + # Fake a WebDAV PUT request + request = self.app.REQUEST + request['PARENTS'] = [self.app] + request['BODY'] = 'bar' + request.environ['CONTENT_TYPE'] = 'text/plain' + request.environ['REQUEST_METHOD'] = 'PUT' + request.environ['WEBDAV_SOURCE_PORT'] = 1 + request._auth = auth_info def tearDown(self): transaction.abort() @@ -69,7 +68,6 @@ self.assertTrue('doc' in self.folder.objectIds()) def testCollector2261(self): - from OFS.Folder import manage_addFolder from OFS.DTMLMethod import addDTMLMethod self.app.manage_addFolder('A', '') _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins