[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