[Zope] changing the meta_type for python product class

Dragos Chirila objectvalues at gmail.com
Wed Dec 6 08:48:16 EST 2006


Hi everybody,

I am stuck with the following problem for witch I don't have a
solution. I would appreciate it very much if you could help me with
it.

I have a very simple Python product with only one class that extends
Folder. The name of the product is MyClass and the MyClass.py module
is below:

from OFS.Folder import Folder
from Products.PageTemplates.PageTemplateFile import PageTemplateFile

from constants import *

manage_addMyClass_html = PageTemplateFile('zpt/myclass_manage_add', globals())
def manage_addMyClass(self, id, title='', REQUEST=None):
    """ """
    ob = MyClass(id, title)
    self._setObject(id, ob)
    if REQUEST:
        return self.manage_main(self, REQUEST, update_menu=1)

class MyClass(Folder):
    """ """

    meta_type = METATYPE_MYCLASS

    def __init__(self, id, title):
        #constructor
        self.id = id
        self.title = title

And the constants.py module contains:

import Globals

MYCLASS_PRODUCT_NAME = 'MyClass'
MYCLASS_PRODUCT_PATH = Globals.package_home(globals())

METATYPE_MYCLASS = 'My Class'
PERMISSION_ADD_MYCLASS = 'MyClass - Add Components'

In the ROOT folder I create the following python script (listing):

for x in container.objectValues(['My Class']):
  print '[%s] - [%s]' % (x.meta_type, x.absolute_url())
return printed


Then I follow the steps:

1. Create an instance with the id 'instance1' (in the drop down I have
'My Class').
2. I run the 'listing' script and I get:

[My Class] - [http://10.0.0.37:8080/instance1]

3. I change the constant METATYPE_MYCLASS into 'My New Class'
4. I run the 'listing' script and I get:

[My New Class] - [http://10.0.0.37:8080/instance1]

5. I create a second instance with the id 'instance2' (in the drop
down I have 'My New Class').
6. I run the 'listing' script and I get:

[My New Class] - [http://10.0.0.37:8080/instance1]

7. I modify the python script by changing the 'My Class' with 'My New Class'
8. I run the 'listing' script and I get:

[My New Class] - [http://10.0.0.37:8080/instance2]

In the ZMI for both instances the meta_type 'My New Class' is
displayed. I don't understand why the first instance is not displayed
after I change the meta_type value in the python Product.
Moreover, if I try to explicit update the meta_type property for the
first instance to the new value, the result is the same.

What I am trying to accomplish is to be able to change the meta_type
value and this to work (e.g. with no effect on python scripts like
'listing')

Thank you very much,
Dragos


More information about the Zope mailing list