Allowing access to Zope Product in Control Panel
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. TIA, Itai -- -- 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" --
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
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. in Utils.py: from Products.PythonScripts.Utility import allow_module allow_module('MyProduct.Utils') allow_module('Products.MyProduct.Utils') allow_module('Control_Panel.Products.MyProduct.Utils') (I tried each one of the above 3) def myclass_attr_access(name): return getattr(MyClass, name, None) in Python Script: from context.Control_Panel.Products.MyProduct.Utils import myclass_attr_access Result: import of "context.Control_Panel.Products.ERAA.Utils" is unauthorized I also tried: in __init__.py: class Accessor: def myclass_attr_access(name): return getattr(MyClass, name, None) allow_class(Accessor) in Python Script: from context.Control_Panel.Products.ERAA import Accessor Same result. I'm stuck. Any more ideas? TIA, Itai -- -- 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" --
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')
in Utils.py:
from Products.PythonScripts.Utility import allow_module
allow_module('MyProduct.Utils') allow_module('Products.MyProduct.Utils') allow_module('Control_Panel.Products.MyProduct.Utils') (I tried each one of the above 3)
def myclass_attr_access(name): return getattr(MyClass, name, None)
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 ie. your importing directly from the python module not through some object indirection of the control panel.
in __init__.py:
class Accessor: def myclass_attr_access(name): return getattr(MyClass, name, None)
allow_class(Accessor)
in Python Script:
from context.Control_Panel.Products.ERAA import Accessor
try, from Products.ERAA import Accessor
Same result. I'm stuck. Any more ideas?
sorry for the misconstrued advice :( , one more note, i had some difficulties with this under zope2.4.1 because it was over righting the module security declarations, which created some problems based on order of importing, this is fixed in 2.5 (and maybe latter 2.4.Xs) hth, kapil
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" --
participants (2)
-
Itai Tavor -
kapil thangavelu