[Checkins]
SVN: z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/
Validate all input. Since fields are required by default, lots of
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Mon Mar 31 06:29:00 EDT 2008
Log message for revision 85030:
Validate all input. Since fields are required by default, lots of
RequiredMissing exceptions were raised in the tests. Solved this,
for the README.txt test at least, by setting required=False for
the tested schema's.
Validation needs structured testsing still.
Changed:
U z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/README.txt
U z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/_schema2xml.py
-=-
Modified: z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/README.txt
===================================================================
--- z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/README.txt 2008-03-31 06:19:06 UTC (rev 85029)
+++ z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/README.txt 2008-03-31 10:28:59 UTC (rev 85030)
@@ -25,8 +25,8 @@
>>> from zope import interface, schema
>>> class IName(interface.Interface):
- ... first_name = schema.TextLine(title=u'First name')
- ... last_name = schema.TextLine(title=u'Last name')
+ ... first_name = schema.TextLine(title=u'First name', required=False)
+ ... last_name = schema.TextLine(title=u'Last name', required=False)
Let's now make a class that implements this schema::
@@ -55,8 +55,8 @@
>>> from zope import interface, schema
>>> class IAddress(interface.Interface):
- ... street_name = schema.TextLine(title=u'Street name')
- ... number = schema.Int(title=u'House number')
+ ... street_name = schema.TextLine(title=u'Street name', required=False)
+ ... number = schema.Int(title=u'House number', required=False)
>>> class Address(object):
... implements(IAddress)
... def __init__(self, street_name, number):
@@ -83,8 +83,8 @@
can also handle this::
>>> class IPerson(interface.Interface):
- ... name = schema.Object(title=u"Name", schema=IName)
- ... address = schema.Object(title=u"Address", schema=IAddress)
+ ... name = schema.Object(title=u"Name", schema=IName, required=False)
+ ... address = schema.Object(title=u"Address", schema=IAddress, required=False)
>>> class Person(object):
... implements(IPerson)
@@ -112,7 +112,7 @@
... members = schema.List(
... title=u"Commission",
... value_type=schema.Object(__name__='person',
- ... schema=IPerson))
+ ... schema=IPerson), required=False)
Note that we have to explicitly specify __name__ for the field that's
used for value_type here, otherwise we have no name to serialize to
@@ -155,7 +155,7 @@
which there's no an serializer::
>>> class IWithNonSerializableField(interface.Interface):
- ... field = schema.Field(title=u"Commission")
+ ... field = schema.Field(title=u"Commission", required=False)
>>> class NotSerializable(object):
... implements(IWithNonSerializableField)
... def __init__(self, value):
@@ -413,7 +413,7 @@
>>> from datetime import datetime
>>> class IWithDatetime(interface.Interface):
- ... datetime = schema.Datetime(title=u'Date and time')
+ ... datetime = schema.Datetime(title=u'Date and time', required=False)
>>> class WithDatetime(object):
... implements(IWithDatetime)
... def __init__(self, datetime):
Modified: z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/_schema2xml.py
===================================================================
--- z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/_schema2xml.py 2008-03-31 06:19:06 UTC (rev 85029)
+++ z3c.schema2xml/branches/jw-experiment/src/z3c/schema2xml/_schema2xml.py 2008-03-31 10:28:59 UTC (rev 85030)
@@ -75,8 +75,11 @@
def input(self, element):
if element.text is not None:
- return unicode(element.text)
- return None
+ value = unicode(element.text)
+ else:
+ value = None
+ self.field.validate(value) # raises an error if not valid.
+ return value
class Int(XMLGeneratorBase):
grok.adapts(IInt, IBrowserRequest)
@@ -88,8 +91,11 @@
def input(self, element):
if element.text is not None and element.text != '':
- return int(element.text)
- return None
+ value = int(element.text)
+ else:
+ value = None
+ self.field.validate(value) # raises an error if not valid.
+ return value
class Object(XMLGeneratorBase):
grok.adapts(IObject, IBrowserRequest)
@@ -119,10 +125,12 @@
def input(self, element):
field = self.field.value_type
- return [
+ value = [
getMultiAdapter(
(field, self.request), IXMLGenerator).input(sub_element)
for sub_element in element]
+ self.field.validate(value) # raises an error if not valid.
+ return value
class Datetime(XMLGeneratorBase):
grok.adapts(IDatetime, IBrowserRequest)
@@ -134,8 +142,11 @@
def input(self, element):
if element.text is not None:
- return zope.datetime.parseDatetimetz(element.text)
- return None
+ value = zope.datetime.parseDatetimetz(element.text)
+ else:
+ value = None
+ self.field.validate(value) # raises an error if not valid.
+ return value
class Choice(XMLGeneratorBase):
grok.adapts(IChoice, IBrowserRequest)
@@ -146,10 +157,8 @@
def input(self, element):
value = element.text
- if value is not None:
- self.field.validate(value) # raises an error if not valid.
- return value
- return None
+ self.field.validate(value) # raises an error if not valid.
+ return value
class Set(XMLGeneratorBase):
grok.adapts(ISet, IBrowserRequest)
@@ -163,7 +172,9 @@
def input(self, element):
field = self.field.value_type
- return set([
+ value = set([
getMultiAdapter(
(field, self.request), IXMLGenerator).input(sub_element)
for sub_element in element])
+ self.field.validate(value) # raises an error if not valid.
+ return value
More information about the Checkins
mailing list