Commit 514a8f29 authored by 's avatar

- removed old-style product metadata support

- removed all dependencies on that support
parent 34a11562
...@@ -58,6 +58,9 @@ Zope Changes ...@@ -58,6 +58,9 @@ Zope Changes
Other Other
- OFS Application: Removed support for long deprecated old-style product
metadata in the __init__.py of products.
- ZSQLMethod.manage_main: Moved the error message that warns of a - ZSQLMethod.manage_main: Moved the error message that warns of a
non-existing or closed database connection next to the Connection ID non-existing or closed database connection next to the Connection ID
dropdown and present it using red to increase its visibility. dropdown and present it using red to increase its visibility.
......
...@@ -734,7 +734,6 @@ def install_product(app, product_dir, product_name, meta_types, ...@@ -734,7 +734,6 @@ def install_product(app, product_dir, product_name, meta_types,
path_join=os.path.join path_join=os.path.join
isdir=os.path.isdir isdir=os.path.isdir
exists=os.path.exists exists=os.path.exists
DictType=type({})
global_dict=globals() global_dict=globals()
silly=('__doc__',) silly=('__doc__',)
...@@ -755,7 +754,7 @@ def install_product(app, product_dir, product_name, meta_types, ...@@ -755,7 +754,7 @@ def install_product(app, product_dir, product_name, meta_types,
# like icon images. # like icon images.
misc_=pgetattr(product, 'misc_', {}) misc_=pgetattr(product, 'misc_', {})
if misc_: if misc_:
if type(misc_) is DictType: if isinstance(misc_, dict):
misc_=Misc_(product_name, misc_) misc_=Misc_(product_name, misc_)
Application.misc_.__dict__[product_name]=misc_ Application.misc_.__dict__[product_name]=misc_
...@@ -770,61 +769,11 @@ def install_product(app, product_dir, product_name, meta_types, ...@@ -770,61 +769,11 @@ def install_product(app, product_dir, product_name, meta_types,
product, product_name, package_dir, app) product, product_name, package_dir, app)
context=ProductContext(productObject, app, product) context=ProductContext(productObject, app, product)
# Look for an 'initialize' method in the product. If it does # Look for an 'initialize' method in the product.
# not exist, then this is an old product that has never been
# updated. In that case, we will analyze the product and
# build up enough information to do initialization manually.
initmethod=pgetattr(product, 'initialize', None) initmethod=pgetattr(product, 'initialize', None)
if initmethod is not None: if initmethod is not None:
initmethod(context) initmethod(context)
# Support old-style product metadata. Older products may
# define attributes to name their permissions, meta_types,
# constructors, etc.
permissions={}
new_permissions={}
for p in pgetattr(product, '__ac_permissions__', ()):
permission, names, default = (
tuple(p)+('Manager',))[:3]
if names:
for name in names:
permissions[name]=permission
elif not folder_permissions.has_key(permission):
new_permissions[permission]=()
for meta_type in pgetattr(product, 'meta_types', ()):
# Modern product initialization via a ProductContext
# adds 'product' and 'permission' keys to the meta_type
# mapping. We have to add these here for old products.
pname=permissions.get(meta_type['action'], None)
if pname is not None:
meta_type['permission']=pname
meta_type['product']=productObject.id
meta_type['visibility'] = 'Global'
meta_types.append(meta_type)
for name,method in pgetattr(
product, 'methods', {}).items():
if not hasattr(Folder.Folder, name):
setattr(Folder.Folder, name, method)
if name[-9:]!='__roles__': # not Just setting roles
if (permissions.has_key(name) and
not folder_permissions.has_key(
permissions[name])):
permission=permissions[name]
if new_permissions.has_key(permission):
new_permissions[permission].append(name)
else:
new_permissions[permission]=[name]
if new_permissions:
new_permissions=new_permissions.items()
for permission, names in new_permissions:
folder_permissions[permission]=names
new_permissions.sort()
Folder.Folder.__ac_permissions__=tuple(
list(Folder.Folder.__ac_permissions__)+new_permissions)
if not doInstall(): if not doInstall():
transaction().abort() transaction().abort()
else: else:
......
...@@ -44,16 +44,18 @@ products <<PRODUCTS2>> ...@@ -44,16 +44,18 @@ products <<PRODUCTS2>>
# backslashes, the backslashes get treated *as* backslashes instead of as # backslashes, the backslashes get treated *as* backslashes instead of as
# string escape codes. # string escape codes.
dummy_product_init = """ dummy_product_init = """
misc_ = {'a':1}
def amethod(self):
pass
def initialize(context): def initialize(context):
f=open(r'%s', 'w') f=open(r'%s', 'w')
f.write('didit') f.write('didit')
f.close() f.close()
misc_ = {'a':1} context.registerClass(
def amethod(self): meta_type='grabass',
pass permission='aPermission',
methods = {'amethod':amethod} constructors=(amethod,),
__ac_permissions__ = ( ('aPermission', (), () ), ) legacy=(amethod,))
meta_types = ( {'name':'grabass', 'action':'amethod'}, )
""" """
def getSchema(): def getSchema():
...@@ -195,13 +197,18 @@ class TestProductInit( unittest.TestCase ): ...@@ -195,13 +197,18 @@ class TestProductInit( unittest.TestCase ):
self.assert_(os.path.exists(doneflag)) self.assert_(os.path.exists(doneflag))
# Methods installed into folder # Methods installed into folder
self.assert_(hasattr(Folder, 'amethod')) self.assert_(hasattr(Folder, 'amethod'))
# __ac_permissions__ put into folder # permission roles put into folder
self.assert_( ('aPermission', (),) in self.assert_(hasattr(Folder, 'amethod__roles__'))
Folder.__ac_permissions__)
# Products.meta_types updated # Products.meta_types updated
self.assert_( {'action': 'amethod', 'product': 'abaz', self.assert_( {'name': 'grabass',
'name': 'grabass', 'visibility': 'Global'} 'action': 'manage_addProduct/abaz/amethod',
in meta_types) 'product': 'abaz',
'permission': 'aPermission',
'visibility': 'Global',
'interfaces': (),
'instance': None,
'container_filter': None}
in Products.meta_types)
def test_install_products(self): def test_install_products(self):
self.makeFakeProducts() self.makeFakeProducts()
......
...@@ -7,13 +7,13 @@ ...@@ -7,13 +7,13 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE # FOR A PARTICULAR PURPOSE.
# #
############################################################################## ##############################################################################
__doc__='''Generic Database Adapter Package Registration """Generic Database Adapter Package Registration.
$Id$''' $Id$
__version__='$Revision: 1.16 $'[11:-2] """
import Globals, os import Globals, os
...@@ -34,12 +34,6 @@ for icon in ('table', 'view', 'stable', 'what', ...@@ -34,12 +34,6 @@ for icon in ('table', 'view', 'stable', 'what',
'date','time','datetime'): 'date','time','datetime'):
misc_[icon]=Globals.ImageFile('icons/%s.gif' % icon, globals()) misc_[icon]=Globals.ImageFile('icons/%s.gif' % icon, globals())
meta_types=(
{'name':'Z %s Database Connection' % database_type,
'action':'manage_addZ%sConnectionForm' % database_type,
},
)
DA=None DA=None
def getDA(): def getDA():
global DA global DA
...@@ -70,20 +64,17 @@ def manage_addZGadflyConnection( ...@@ -70,20 +64,17 @@ def manage_addZGadflyConnection(
return getDA().manage_addZGadflyConnection( return getDA().manage_addZGadflyConnection(
self, id, title, connection, check, REQUEST) self, id, title, connection, check, REQUEST)
methods={ def initialize(context):
'manage_addZGadflyConnection':
manage_addZGadflyConnection,
'manage_addZGadflyConnectionForm':
manage_addZGadflyConnectionForm,
}
__ac_permissions__=( context.registerClass(
('Add Z Gadfly Database Connections', DA.Connection,
('manage_addZGadflyConnectionForm', permission='Add Z Gadfly Database Connections',
'manage_addZGadflyConnection')), constructors=(manage_addZGadflyConnectionForm,
manage_addZGadflyConnection),
legacy=(manage_addZGadflyConnectionForm,
manage_addZGadflyConnection),
) )
# from App.config import getConfiguration # from App.config import getConfiguration
# j=os.path.join # j=os.path.join
# d=j(getConfiguration().clienthome,'gadfly') # d=j(getConfiguration().clienthome,'gadfly')
......
...@@ -7,21 +7,19 @@ ...@@ -7,21 +7,19 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE # FOR A PARTICULAR PURPOSE.
# #
############################################################################## ##############################################################################
__doc__='''SQL Method Product """SQL Method Product.
$Id$
"""
$Id$'''
__version__='$Revision: 1.18 $'[11:-2]
import Shared.DC.ZRDB.Search, Shared.DC.ZRDB.Aqueduct, SQL import Shared.DC.ZRDB.Search, Shared.DC.ZRDB.Aqueduct, SQL
import Shared.DC.ZRDB.RDB import Shared.DC.ZRDB.RDB
import Shared.DC.ZRDB.sqlvar, Shared.DC.ZRDB.sqlgroup, Shared.DC.ZRDB.sqltest import Shared.DC.ZRDB.sqlvar, Shared.DC.ZRDB.sqlgroup, Shared.DC.ZRDB.sqltest
# This is the new way to initialize products. It is hoped
# that this more direct mechanism will be more understandable.
def initialize(context): def initialize(context):
context.registerClass( context.registerClass(
...@@ -29,6 +27,9 @@ def initialize(context): ...@@ -29,6 +27,9 @@ def initialize(context):
permission='Add Database Methods', permission='Add Database Methods',
constructors=(SQL.manage_addZSQLMethodForm, SQL.manage_addZSQLMethod), constructors=(SQL.manage_addZSQLMethodForm, SQL.manage_addZSQLMethod),
icon='sqlmethod.gif', icon='sqlmethod.gif',
# XXX: can this permission be removed?
permissions=('Open/Close Database Connections',),
legacy=(SQL.SQLConnectionIDs,)
) )
context.registerClass( context.registerClass(
...@@ -36,24 +37,12 @@ def initialize(context): ...@@ -36,24 +37,12 @@ def initialize(context):
permission='Add Documents, Images, and Files', permission='Add Documents, Images, and Files',
constructors=(Shared.DC.ZRDB.Search.addForm, constructors=(Shared.DC.ZRDB.Search.addForm,
Shared.DC.ZRDB.Search.manage_addZSearch), Shared.DC.ZRDB.Search.manage_addZSearch),
legacy=(Shared.DC.ZRDB.Search.ZQueryIds,)
) )
context.registerHelp() context.registerHelp()
context.registerHelpTitle('Zope Help') context.registerHelpTitle('Zope Help')
methods={
# We still need this one, at least for now, for both editing and
# adding. Ugh.
'SQLConnectionIDs': SQL.SQLConnectionIDs,
# Oh please!
'ZQueryIds': Shared.DC.ZRDB.Search.ZQueryIds,
}
__ac_permissions__=(
# Ugh. We should get rid of this, but we'll have to revisit connections
('Open/Close Database Connections', ()),
)
__module_aliases__=( __module_aliases__=(
('Products.AqueductSQLMethods','Products.ZSQLMethods'), ('Products.AqueductSQLMethods','Products.ZSQLMethods'),
......
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