From: "Oleg Broytmann" <phd@phd.pp.ru>
Ever looked to Zope beans? http://www.pault.com/pault/zope/zope_beans.html
Yes, but I think my approach is more in line with Zope. To me it is anyway. Also I need a new object format like a hole in the the head ;-) Here I am thinking of the xml format describing the Zope bean. But see below. I don't tink that the "easy" approach is harder than the "bean" approach. They are both about the same amount of lines anyway :-) And how do you set Security on the methods? And if you change the "_properties" in the "easy" approach they are immediately updated in your product. regards Max M ##################################################### ##################################################### <bean> <name> Hello </name> <icon> bean.gif </icon> <version> 0-0-1 </version> <meta> Sample Zope Bean </meta> <property name="greeting" type="string"> Default Greeting </property> <property name="counter" type="string">3</property> <method name="SayGreeting" /> <method name="SaySomething"/> <readme> Hello Zope Bean. This is sample bean to show how Zope Beans work. </readme> </bean> ##################################################### class Hello: "Actual semantics of Hello Bean" def SayGreeting(self): return "Greeting is: " + self.get_greeting() def SaySomething(self, msg, ntimes ): ret = [] for n in range( 1,ntimes ) : ret.append( self.get_greeting() + " By the way ... " + msg) return ret ##################################################### ##################################################### from mxm import mxmSimpleItem class Hello(mxmSimpleItem.mxmSimpleItem): meta_type = 'Hello' _properties = ( {'id':greeting, 'type':'string', 'mode':'w'}, {'id':counter, 'type':'text', 'mode':'w'}, ) __ac_permissions__ = mxmSimpleItem.__ac_permissions__ + ( # label ('View', # methods ('SayGreeting','SaySomething'), # roles ('Anonymous', 'Manager'), ), ) def SayGreeting(self): "" return "Greeting is: " + self.greeting def SaySomething(self, msg, ntimes ): "" ret = [] for n in range( 1,ntimes ) : ret.append( self.greeting + " By the way ... " + msg) return ret def manage_addAction(self, id=None, REQUEST=None): "Add instance to parent ObjectManager" mxmSimpleItem.addClass(self, id, Hello, REQUEST) constructors = (mxmSimpleItem.manage_addForm, manage_addAction) ##################################################### import mxmItem def initialize(context): context.registerClass( mxmItem.mxmItem, constructors = mxmItem.constructors, icon="bean.gif" ) #####################################################