[Zope] API documentation bug (was: [Zope] set date property from External Method)
Dieter Maurer
dieter@handshake.de
Mon, 18 Sep 2000 22:53:45 +0200 (CEST)
Gijs Reulen writes:
> > If you use the "PropertyManager" interface (as you should),
> > then string values are *converted* to the correct type automatically.
>
> Not so, according to my info and tests:
>
> >From the Zope 2.2.1 API docs on manage_changeProperties(self, REQUEST=None,
> **kw):
>
> "... Note that no type checking or conversion happens when this method is
> called, so it is the caller's responsibility to ensure that the updated
> values are of the correct type. This should probably change. ..."
The API doc is old and outdated:
Both "manage_changeProperties" and "manage_editProperties" call
"_updateProperty". "_updateProperty" has this code:
def _updateProperty(self, id, value):
# Update the value of an existing property. If value
# is a string, an attempt will be made to convert
# the value to the type of the existing property.
self._wrapperCheck(value)
if not self.hasProperty(id):
raise 'Bad Request', 'The property %s does not exist' % id
if type(value)==type(''):
proptype=self.getPropertyType(id) or 'string'
if type_converters.has_key(proptype):
value=type_converters[proptype](value)
self._setPropValue(id, value)
Thus, if you pass a string to "manage_changeProperty" or
"manage_editProperty", it is converted to the correct
type.
A Date property uses the type "DateTime.DateTime".
> I tried things like:
> self.manage_changeProperties(my_prop=time.strftime('%Y/%m/%d %H:%M:%S.000
> GMT+1',time.localtime(time.time())))
I checked (Zope 2.2.1):
self.manage_changeProperties(my_prop='2000/9/12')
You can pass any DateTime value, too, e.g.:
self.manage_changeProperties(my_prop= DateTime())
Dieter