Commit 152645d3 authored by Jim Fulton's avatar Jim Fulton

Add a global id registry if used with ZODB3.

Add an exception handler for initializing products so that a bad
product can't keep the site from coming up.
parent bc27da30
...@@ -85,8 +85,8 @@ ...@@ -85,8 +85,8 @@
__doc__='''Application support __doc__='''Application support
$Id: Application.py,v 1.108 1999/05/24 21:03:08 jim Exp $''' $Id: Application.py,v 1.109 1999/06/24 19:26:52 jim Exp $'''
__version__='$Revision: 1.108 $'[11:-2] __version__='$Revision: 1.109 $'[11:-2]
import Globals,Folder,os,regex,sys,App.Product, App.ProductRegistry, misc_ import Globals,Folder,os,regex,sys,App.Product, App.ProductRegistry, misc_
...@@ -343,11 +343,18 @@ def initialize(app): ...@@ -343,11 +343,18 @@ def initialize(app):
app.__ac_roles__=app.__ac_roles__ + ('Owner',) app.__ac_roles__=app.__ac_roles__ + ('Owner',)
get_transaction().note('Added Owner role') get_transaction().note('Added Owner role')
get_transaction().commit() get_transaction().commit()
# Make sure we have Globals
try: root=app._p_jar.root()
except: pass # BoboPOS 2
else:
if not root.has_key('ZGlobals'):
import BTree
app._p_jar.root()['ZGlobals']=BTree.BTree()
get_transaction().note('Added Globals')
get_transaction().commit()
install_products(app) install_products(app)
get_transaction().note('Product installations')
get_transaction().commit()
def import_products(_st=type('')): def import_products(_st=type('')):
# Try to import each product, checking for and catching errors. # Try to import each product, checking for and catching errors.
...@@ -414,6 +421,9 @@ def install_products(app): ...@@ -414,6 +421,9 @@ def install_products(app):
done={} done={}
get_transaction().note('Prior to product installs')
get_transaction().commit()
for product_dir in Products.__path__: for product_dir in Products.__path__:
product_names=os.listdir(product_dir) product_names=os.listdir(product_dir)
...@@ -431,59 +441,64 @@ def install_products(app): ...@@ -431,59 +441,64 @@ def install_products(app):
if not exists(path_join(package_dir, '__init__.pyc')): if not exists(path_join(package_dir, '__init__.pyc')):
continue continue
product=__import__("Products.%s" % product_name, try:
global_dict, global_dict, silly) product=__import__("Products.%s" % product_name,
global_dict, global_dict, silly)
misc_=pgetattr(product, 'misc_', {})
if misc_: misc_=pgetattr(product, 'misc_', {})
if type(misc_) is DictType: misc_=Misc_(product_name, misc_) if misc_:
Application.misc_.__dict__[product_name]=misc_ if type(misc_) is DictType:
misc_=Misc_(product_name, misc_)
# Set up dynamic project information. Application.misc_.__dict__[product_name]=misc_
productObject=App.Product.initializeProduct(
product, product_name, package_dir, app) # Set up dynamic project information.
productObject=App.Product.initializeProduct(
pgetattr(product, 'initialize', lambda context: None)( product, product_name, package_dir, app)
ProductContext(productObject, app, product))
pgetattr(product, 'initialize', lambda context: None)(
permissions={} ProductContext(productObject, app, product))
new_permissions={}
for p in pgetattr(product, '__ac_permissions__', ()): permissions={}
permission, names, default = (tuple(p)+('Manager',))[:3] new_permissions={}
if names: for p in pgetattr(product, '__ac_permissions__', ()):
for name in names: permission, names, default = (tuple(p)+('Manager',))[:3]
permissions[name]=permission if names:
for name in names:
elif not folder_permissions.has_key(permission): permissions[name]=permission
new_permissions[permission]=()
elif not folder_permissions.has_key(permission):
for meta_type in pgetattr(product, 'meta_types', ()): new_permissions[permission]=()
if product_name=='OFSP': meta_types.insert(0,meta_type)
else: meta_types.append(meta_type) for meta_type in pgetattr(product, 'meta_types', ()):
if product_name=='OFSP': meta_types.insert(0,meta_type)
else: meta_types.append(meta_type)
for name,method in pgetattr(product, 'methods', {}).items():
if not hasattr(Folder, name):
setattr(Folder, name, method) for name,method in pgetattr(product, 'methods', {}).items():
if name[-9:]!='__roles__': # not Just setting roles if not hasattr(Folder, name):
if (permissions.has_key(name) and setattr(Folder, name, method)
not folder_permissions.has_key(permissions[name])): if name[-9:]!='__roles__': # not Just setting roles
permission=permissions[name] if (permissions.has_key(name) and
if new_permissions.has_key(permission): not folder_permissions.has_key(
new_permissions[permission].append(name) permissions[name])):
else: permission=permissions[name]
new_permissions[permission]=[name] if new_permissions.has_key(permission):
new_permissions[permission].append(name)
if new_permissions: else:
new_permissions=new_permissions.items() new_permissions[permission]=[name]
for permission, names in new_permissions:
folder_permissions[permission]=names if new_permissions:
new_permissions.sort() new_permissions=new_permissions.items()
Folder.__dict__['__ac_permissions__']=tuple( for permission, names in new_permissions:
list(Folder.__ac_permissions__)+new_permissions) folder_permissions[permission]=names
new_permissions.sort()
get_transaction().note('Installed product '+product_name) Folder.__dict__['__ac_permissions__']=tuple(
get_transaction().commit() list(Folder.__ac_permissions__)+new_permissions)
get_transaction().note('Installed product '+product_name)
get_transaction().commit()
except:
get_transaction().abort()
Products.meta_types=Products.meta_types+tuple(meta_types) Products.meta_types=Products.meta_types+tuple(meta_types)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment