[Erp5-report] r44781 jm - in /erp5/trunk/products/ERP5Type: ./ tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Mar 30 11:36:43 CEST 2011
Author: jm
Date: Wed Mar 30 11:36:43 2011
New Revision: 44781
URL: http://svn.erp5.org?rev=44781&view=rev
Log:
Add helpers to handle mount points
- A new Base.getMountedObject method allow to access to parent object in the
mounted storage so that it is possible to migrate their class persistently.
A common pattern for modules in different Data.fs would be:
real_module = portal.mounted_module.getMountedObject()
real_module.getParentValue().migrateToPortalTypeClass()
- Make it possible to manage mount points in unit tests.
Modified:
erp5/trunk/products/ERP5Type/Base.py
erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
erp5/trunk/products/ERP5Type/tests/runUnitTest.py
erp5/trunk/products/ERP5Type/tests/utils.py
Modified: erp5/trunk/products/ERP5Type/Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Base.py?rev=44781&r1=44780&r2=44781&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Base.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/Base.py [utf8] Wed Mar 30 11:36:43 2011
@@ -1529,6 +1529,17 @@ class Base( CopyContainer,
"""
return self
+ def getMountedObject(self):
+ """
+ If self is a mount-point, return the mounted object in its own storage
+ """
+ from Products.ZODBMountPoint.MountedObject import getMountPoint
+ mount_point = getMountPoint(self)
+ if mount_point is not None:
+ connection = self._p_jar
+ assert mount_point._getMountedConnection(connection) is connection
+ return mount_point._traverseToMountedRoot(connection.root(), None)
+
def asSQLExpression(self, strict_membership=0, table='category', base_category = None):
"""
Any document can be used as a Category. It can therefore
Modified: erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py?rev=44781&r1=44780&r2=44781&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/ERP5TypeTestCase.py [utf8] Wed Mar 30 11:36:43 2011
@@ -100,6 +100,7 @@ ZopeTestCase.installProduct('PageTemplat
ZopeTestCase.installProduct('PythonScripts', quiet=install_product_quiet)
ZopeTestCase.installProduct('ExternalMethod', quiet=install_product_quiet)
ZopeTestCase.installProduct('Sessions', quiet=install_product_quiet)
+ZopeTestCase.installProduct('ZODBMountPoint', quiet=install_product_quiet)
try:
from Testing.ZopeTestCase.layer import onsetup
Modified: erp5/trunk/products/ERP5Type/tests/runUnitTest.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/runUnitTest.py?rev=44781&r1=44780&r2=44781&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/runUnitTest.py [utf8] Wed Mar 30 11:36:43 2011
@@ -363,6 +363,11 @@ def runUnitTestList(test_list, verbosity
cfg = App.config.getConfiguration()
cfg.testinghome = instance_home
cfg.instancehome = instance_home
+ try:
+ from Zope2.Startup.datatypes import DBTab
+ cfg.dbtab = DBTab({}, {})
+ except ImportError: # Zope 2.8
+ pass
App.config.setConfiguration(cfg)
if WIN:
@@ -457,6 +462,10 @@ def runUnitTestList(test_list, verbosity
assert False
layer.onsetup = assertFalse
+ from Products.ERP5Type.tests.utils import DbFactory
+ root_db_name, = cfg.dbtab.databases.keys()
+ DbFactory(root_db_name).addMountPoint('/')
+
TestRunner = backportUnittest.TextTestRunner
import Lifetime
Modified: erp5/trunk/products/ERP5Type/tests/utils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/tests/utils.py?rev=44781&r1=44780&r2=44781&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/tests/utils.py [utf8] (original)
+++ erp5/trunk/products/ERP5Type/tests/utils.py [utf8] Wed Mar 30 11:36:43 2011
@@ -35,7 +35,11 @@ import random
import socket
import sys
import transaction
+import ZODB
import zLOG
+from App.config import getConfiguration
+from ZConfig.matcher import SectionValue
+from Zope2.Startup.datatypes import ZopeDatabase
import Products.ERP5Type
from Products.MailHost.MailHost import MailHost
from email import message_from_string
@@ -337,6 +341,34 @@ def createZServer(log=os.devnull, zserve
raise
hs.close()
+class DbFactory(ZopeDatabase):
+
+ def __init__(self, name, storage=None, **kw):
+ ZopeDatabase.__init__(self, SectionValue({'container_class': None,
+ 'mount_points': [],
+ }, name, None))
+ if storage is not None:
+ self.open = lambda database_name, databases: ZODB.DB(storage,
+ database_name=database_name, databases=databases, **kw)
+ getConfiguration().dbtab.db_factories[name] = self
+
+ @staticmethod
+ def get(*args, **kw):
+ return getConfiguration().dbtab.getDatabaseFactory(*args, **kw)
+
+ def addMountPoint(self, *mount_points):
+ dbtab = getConfiguration().dbtab
+ self.config.mount_points += mount_points
+ for mount_point in self.getVirtualMountPaths():
+ dbtab.mount_paths[mount_point] = self.name
+
+ def close(self):
+ dbtab = getConfiguration().dbtab
+ for mount_point in self.getVirtualMountPaths():
+ del dbtab.mount_paths[mount_point]
+ del dbtab.db_factories[self.name]
+ dbtab.databases.pop(self.name).close()
+
# decorators
@simple_decorator
def reindex(func):
More information about the Erp5-report
mailing list