[Zope] Allowing access to Zope Product in Control Panel

Itai Tavor itai@optusnet.com.au
Wed, 3 Apr 2002 09:09:17 +1000


>On Sunday 31 March 2002 04:29 pm, Itai Tavor wrote:
>>  >On Thursday 28 March 2002 08:02 pm, Itai Tavor wrote:
>>  >>  Hi,
>>  >>
>>  >>  I have a python Product MyProduct, defining a class MyClass. I want
>>  >>  to be able to do two things with this class from a Python Script:
>>  >>
>>  >>  - Access a property defined in the class without creating an instance
>>  >>  of the class
>>  >>
>>  >>     class MyClass(SimpleItem):
>>  >>         menu = ('a', 'b', 'c')
>>  >>
>>  >>     In Python Script: menu =
>>  >>  context.Control_Panel.MyProduct.MyClass.MyClass.menu
>>  >>
>>  >>  - Create an instance of MyClass without doing registerClass on it.
>>  >>
>>  >>  The question is, how do I create the right permissions so the above
>>  >>  can be done? I tried playing with the various methods detailed in
>>  >>  PythonScripts/module_access_examples.py but didn't get anywhere.
>>  >
>>  >i would do the above with some accessor functions in a Utility module of
>>  > the product and then use PythonScripts Modules allow access  utility for
>>  > example.
>>  >
>>  >#Utils.py
>>  >from Products.PythonScripts.Utility import allow_module
>>  >from MyModule import MyClass
>>  >
>>  >allow_module('MyProduct.Utils')
>>  >
>>  >def myclass_factory(*args):
>>  >      return MyClass(*args)
>>  >
>>  >def myclass_attr_access(name):
>>  >       return getattr(MyClass, name, None)
>>  >
>>  >in a python script
>>  >
>>  >from MyProducts.Utils import myclass_attr_access
>>  >
>>  >etc...
>>  >
>>  >-kapil
>>
>>  Thanks, Kapil... good suggestion. Sadly, I'm still not getting
>>  anywhere... I tried every combination of modules, classes, methods
>>  and allow_class/allow_module I could think of, and nothing works.
>
>hi ita,
>
>first there is one mistake in the above i sent previously
>
>the allow_module call should have been
>
>allow_module('Products.MyProduct.Utils')

Kapil, that's it! I tried all the different combinations I could 
think of, except for this one. Thanks for sticking with me :-)

>  > in Python Script:
>>
>>  from context.Control_Panel.Products.MyProduct.Utils import
>>  myclass_attr_access
>
>ok, this will never work. what you want to import is
>
>from Products.MyProduct.Utils import my_class_attr

Yeah, I figured that on my own, I only tried it this way because 
"from Products..." didn't work.


-- 
--
Itai Tavor                      -- "Je sautille, donc je suis."    --
itai@optusnet.com.au            --               - Kermit the Frog --
--                                                                 --
-- "If you haven't got your health, you haven't got anything"      --