[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