[Zope3-dev] Re: SVN: Zope3/trunk/src/zope/ Internationalized apidoc modules description.

Philipp von Weitershausen philipp at weitershausen.de
Thu Sep 2 11:21:54 EDT 2004


Jim Fulton wrote:

>  > Since this problem occurred only as you internationalized API doc,
> 
>> we should be able to quickly determine the place where we should call 
>> the removeSecurityProxy() call.
> 
> 
> A better aproach is to add necessary security declarations for message ids.
> 
> It would be nice if we could make message ids into "rocks" so they didn't
> have to be proxied.  We would have to make them immutable though, and
> be careful about the data they contained.

I would like them to be rocks, too. Their semantics right now are a bit 
problematic for this, though. Consider a message id:

   >>> from zope.i18nmessageid import MessageIDFactory
   >>> _ = MessageIDFactory('zope')
   >>> msg = _(u"foo-label", u"Foo")
   >>> msg
   u'foo-label'
   >>> msg.default
   u'Foo'
   >>> msg.mapping
   {}

Since the attributes are writable, message ids are mutable:

   >>> msg.default = u"Foo bar"
   >>> msg.mapping = {'foo':'bar'}

or

   >>> msg.mapping.update({'foo':'bar'})

I would suggest to

1.) make the 'default' attribute a read-only attribute. 'default' and 
message-id are to be seen as one set of information, always tied together.

2.) use a different syntax for updating the mapping:

   >>> msg = msg % {'foo':'bar'}

Note how the __mod__ (method responsible for the % operator) returns a 
new message id object.

This is an analogy to

   >>> "Insert %(text)s" % {'text': 'here'}
   Insert here

If this idea is generally welcomed, I could write up a proposal and 
provide an implementation, with or without backward compatability.

Philipp



More information about the Zope3-dev mailing list