Log message for revision 72991: No longer opens a zodb connection every time a ProductDispatcher is looked up, forward ported from zope 2.10 branch r72990 and five 1.5 branch r72986.
Changed: U Zope/trunk/doc/CHANGES.txt U Zope/trunk/lib/python/App/FactoryDispatcher.py U Zope/trunk/lib/python/Products/Five/fiveconfigure.py U Zope/trunk/lib/python/Products/Five/tests/test_registerpackage.py -=- Modified: Zope/trunk/doc/CHANGES.txt =================================================================== --- Zope/trunk/doc/CHANGES.txt 2007-03-05 14:20:58 UTC (rev 72990) +++ Zope/trunk/doc/CHANGES.txt 2007-03-05 14:43:23 UTC (rev 72991) @@ -82,6 +82,9 @@ Bugs Fixed + - No longer opens a zodb connection every time a ProductDispatcher + is looked up. + - PageTemplate/ZRPythonExpr.py: expressions represented as unicode string caused UnicodeDecodeErrors. Modified: Zope/trunk/lib/python/App/FactoryDispatcher.py =================================================================== --- Zope/trunk/lib/python/App/FactoryDispatcher.py 2007-03-05 14:20:58 UTC (rev 72990) +++ Zope/trunk/lib/python/App/FactoryDispatcher.py 2007-03-05 14:43:23 UTC (rev 72991) @@ -26,32 +26,15 @@ zope2 packages and those without the Products namespace package. """ - old_product_packages = {} + packages = {} for x in dir(Products): m = getattr(Products, x) if isinstance(m, types.ModuleType): - old_product_packages[x] = m + packages[x] = m + + for m in getattr(Products, '_registered_packages', []): + packages[m.__name__] = m - packages = {} - app = Zope2.app() - try: - products = app.Control_Panel.Products - - for product_id in products.objectIds(): - product = products[product_id] - if hasattr(product, 'package_name'): - pos = product.package_name.rfind('.') - if pos > -1: - packages[product_id] = __import__(product.package_name, - globals(), {}, - product.package_name[pos+1:]) - else: - packages[product_id] = __import__(product.package_name) - elif old_product_packages.has_key(product_id): - packages[product_id] = old_product_packages[product_id] - finally: - app._p_jar.close() - return packages class ProductDispatcher(Acquisition.Implicit): Modified: Zope/trunk/lib/python/Products/Five/fiveconfigure.py =================================================================== --- Zope/trunk/lib/python/Products/Five/fiveconfigure.py 2007-03-05 14:20:58 UTC (rev 72990) +++ Zope/trunk/lib/python/Products/Five/fiveconfigure.py 2007-03-05 14:43:23 UTC (rev 72991) @@ -218,6 +218,11 @@ if init_func is not None: newContext = ProductContext(product, app, module_) init_func(newContext) + + registered_packages = getattr(Products, '_registered_packages', None) + if registered_packages is None: + registered_packages = Products._registered_packages = [] + registered_packages.append(module_) finally: try: import transaction Modified: Zope/trunk/lib/python/Products/Five/tests/test_registerpackage.py =================================================================== --- Zope/trunk/lib/python/Products/Five/tests/test_registerpackage.py 2007-03-05 14:20:58 UTC (rev 72990) +++ Zope/trunk/lib/python/Products/Five/tests/test_registerpackage.py 2007-03-05 14:43:23 UTC (rev 72991) @@ -65,7 +65,11 @@ >>> 'pythonproduct2' in product_listing True + Make sure it also shows up in ``Products._registered_packages``. + >>> [x.__name__ for x in getattr(Products, '_registered_packages', [])] + ['pythonproduct2'] + Clean up: >>> tearDown() _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins