Re: [Zope-dev] Object schema field validation

2009-12-01 Thread Christian Theune
Hi,

On 11/29/2009 12:02 PM, Markus Kemmerling wrote:
 I stumbled upon a problem with Object schema field validation. The problem 
 occurs, e.g., if the the Object field's schema itself contains a Choice field 
 with a dynamically computed vocabulary. For the latter to validate correctly 
 the field must be bound to the instance. But the Object field validation code 
 in zope.schema._fields._validate_fields validates the attributes of the 
 Object field instance without binding them first:

 def _validate_fields(schema, value, errors=None):
  ...
  try:
  attribute = schema[name]
  if IField.providedBy(attribute):
  # validate attributes that are fields
  attribute.validate(getattr(value, name))
  except ValidationError, error:
  ...

 Replacing the line

  attribute.validate(getattr(value, name))

 with

  field = attribute.bind(value)
  field.validate(getattr(value, name))

 fixes the problem.

 Looks like a bug to me.

Yeah, sounds like it. Would you mind reporting this to the bug tracker 
and put the bug number into this thread so people can later find it in 
the archive?

Thanks and kind regards,
Christian

-- 
Christian Theune · c...@gocept.com
gocept gmbh  co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 0 · fax +49 345 1229889 1
Zope and Plone consulting and development

___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )


[Zope-dev] Object schema field validation

2009-11-29 Thread Markus Kemmerling
I stumbled upon a problem with Object schema field validation. The problem 
occurs, e.g., if the the Object field's schema itself contains a Choice field 
with a dynamically computed vocabulary. For the latter to validate correctly 
the field must be bound to the instance. But the Object field validation code 
in zope.schema._fields._validate_fields validates the attributes of the Object 
field instance without binding them first:

def _validate_fields(schema, value, errors=None):
...
try:
attribute = schema[name]
if IField.providedBy(attribute):
# validate attributes that are fields
attribute.validate(getattr(value, name))
except ValidationError, error:
...

Replacing the line

attribute.validate(getattr(value, name))

with

field = attribute.bind(value)
field.validate(getattr(value, name))

fixes the problem.

Looks like a bug to me.

Regards,
Markus Kemmerling
___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )