[Zope3-dev] zope.schema: defaults for non-immutables... questions
Shaun Cutts
shaun at cuttshome.net
Tue Jan 24 12:26:40 EST 2006
It would seem that the current default mechanism is poorly suited to
providing default values for non-immutables. For example:
class IBar( Interface ):
a = Object( schema = IFoo, default = Foo() )
But if a "Foo" is not immutable this doesn't make sense. (In my case, I
want "a" to be a collection providing IFoo, which defaults to an empty
collection. Each Bar implementing IBar should have its own instance of
Foo.)
A proposal to remedy: if the default is a callable object, it is assumed
to be a factory.
How does this sound? (This would apply to missing_value as well.)
A few further questions:
1) who should be responsible for setting defaults, and how should it be
done?
I have a base class from which I derive (e.g.) Bar, whose constructor
loops through fields of interfaces provided by the instance:
for iface in zope.interface.providedBy( self ):
for fname, field in zope.schema.getFields( iface
).iteritems():
It checks default & missing_value, and sets them. However, if one field
shadows another in the interfaces, there is no guarantee that I hit them
in the right order. Might it not be good to have a
"attributesProvidedBy( instance ) in zope.interface that guarantees that
it passes back the most derived versions (and resolves consistently when
there is no "most derived" )?
Also, currently, when something doesn't have a definition, and is not
required, I check first for "default" then for "missing_value", and use
the first I find as a missing value. Is this correct? How should
"default" and "missing_value" interact with each other? What makes most
sense to me is: (pseudocode):
If not specified:
If default defined
Use default
Else
If required
Raise error
Else
If missing value defined
Use missing value
Else
Raise error
Finally, a missing missing_value eventually gets "None" in the current
Field constructor. Shouldn't it be left undefined when it wasn't
specified? (Same for default.)
- Shaun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope3-dev/attachments/20060124/452b2fa2/attachment.htm
More information about the Zope3-dev
mailing list