[Zope3-Users] Annoying thing about schema

Peter Bengtsson peter at fry-it.com
Wed Jun 4 19:20:06 EDT 2008


Suppose you've written this:

class ISomething(zope.interface.Interface):
     foo = zope.schema.TextLine(title="Foo")

then you get the error below.
First of all, why can't it just help me and just convert the str to a
unicode. All it'd need to do is just::

 title = unicode(title)

Django does this.
If someone does something bad like `TextLine(title="Ölmage")` that
developer should rightly get a UnicodeDecodeError.
Secondly, if there is an actual reason for this extreme analism, why
can't the error be wrapped into something more user friendly?



$ ./bin/zopectl debug
Traceback (most recent call last):
  File "/home/peterbe/buildout-eggs/tmpUIBNQF/zc.zope3recipes-0.7.0-py2.4.egg/zc/zope3recipes/debugzope.py",
line 60, in debug
  File "/home/peterbe/buildout-eggs/tmpUIBNQF/zc.zope3recipes-0.7.0-py2.4.egg/zc/zope3recipes/debugzope.py",
line 39, in zglobals
  File "/home/peterbe/buildout-eggs/zope.app.appsetup-3.4.1-py2.4.egg/zope/app/appsetup/appsetup.py",
line 111, in config
    context = xmlconfig.file(file, context=context, execute=execute)
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 610, in file
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 546, in include
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 378, in processxmlfile
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.4/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 207, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 348, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 357, in endElementNS
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/config.py",
line 542, in end
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/config.py",
line 690, in finish
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 546, in include
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 378, in processxmlfile
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib/python2.4/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 207, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib/python2.4/xml/sax/expatreader.py", line 348, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/xmlconfig.py",
line 357, in endElementNS
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/config.py",
line 542, in end
  File "/home/peterbe/buildout-eggs/tmpU_pQr6/zope.configuration-3.4.0-py2.4.egg/zope/configuration/config.py",
line 690, in finish
  File "/home/peterbe/buildout-eggs/tmp_TGW-i/grok-0.12.1-py2.4.egg/grok/zcml.py",
line 48, in grokDirective
  File "/home/peterbe/buildout-eggs/tmp_TGW-i/grok-0.12.1-py2.4.egg/grok/zcml.py",
line 53, in do_grok
  File "/home/peterbe/buildout-eggs/martian-0.9.3-py2.4.egg/martian/core.py",
line 194, in grok_dotted_name
    grok_package(module_info, grokker, **kw)
  File "/home/peterbe/buildout-eggs/martian-0.9.3-py2.4.egg/martian/core.py",
line 199, in grok_package
    grok_package(sub_module_info, grokker, **kw)
  File "/home/peterbe/buildout-eggs/martian-0.9.3-py2.4.egg/martian/core.py",
line 197, in grok_package
    grok_module(module_info, grokker, **kw)
  File "/home/peterbe/buildout-eggs/martian-0.9.3-py2.4.egg/martian/core.py",
line 202, in grok_module
    grokker.grok(module_info.dotted_name, module_info.getModule(),
  File "/usr/lib/python2.4/site-packages/martian-0.9.3-py2.4.egg/martian/scan.py",
line 118, in getModule
  File "/usr/lib/python2.4/site-packages/martian-0.9.3-py2.4.egg/martian/scan.py",
line 188, in resolve
  File "/home/peterbe/dev/GROK/GrokGlossary/src/grokglossary/app.py",
line 20, in ?
    class ITerm(interface.Interface):
  File "/home/peterbe/dev/GROK/GrokGlossary/src/grokglossary/app.py",
line 21, in ITerm
    term = schema.TextLine(title='Term')
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 278, in __init__
    super(Text, self).__init__(*args, **kw)
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 260, in __init__
    super(MinMaxLen, self).__init__(**kw)
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 108, in __init__
    self.title = title
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/fieldproperty.py",
line 52, in __set__
    field.validate(value)
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 138, in validate
    self._validate(value)
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 263, in _validate
    super(MinMaxLen, self)._validate(value)
  File "/home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py",
line 165, in _validate
    raise WrongType(value, self._type)
ZopeXMLConfigurationError: File
"/home/peterbe/dev/GROK/GrokGlossary/parts/app/site.zcml", line
4.0-4.34
    ZopeXMLConfigurationError: File
"/home/peterbe/dev/GROK/GrokGlossary/src/grokglossary/configure.zcml",
line 5.2-5.27
    WrongType: ('Term', <type 'unicode'>)
> /home/peterbe/buildout-eggs/zope.schema-3.4.0-py2.4.egg/zope/schema/_bootstrapfields.py(165)_validate()
-> raise WrongType(value, self._type)


-- 
Peter Bengtsson,
work www.fry-it.com
home www.peterbe.com
hobby www.issuetrackerproduct.com


More information about the Zope3-users mailing list