Jason Chu wrote:
> Working with the new widget code some more...
>
> Something I've noticed while converting all our widgets, if you have a
> widget who's outermost tab has a py:strip in it (this is also the tag
> that has the xmlns:py in it), you will get a trackback that looks
> something like this:
>
> Traceback (most recent call last):
> File
> "/home/jchu/coding/turbogears/thirdparty/cherrypy/cherrypy/_cphttptools.py",
> line 99, in _run
> self.main()
> File
> "/home/jchu/coding/turbogears/thirdparty/cherrypy/cherrypy/_cphttptools.py",
> line 247, in main
> body = page_handler(*virtual_path, **self.params)
> File "<string>", line 3, in month
> File "/home/jchu/coding/turbogears/turbogears/controllers.py", line 199, in
> expose
> func, tg_format, html, fragment, *args, **kw)
> File "/home/jchu/coding/turbogears/turbogears/database.py", line 193, in
> run_with_transaction
> retval = func(*args, **kw)
> File "/home/jchu/coding/turbogears/turbogears/controllers.py", line 220, in
> _execute_func
> return _process_output(tg_format, output, html, fragment)
> File "/home/jchu/coding/turbogears/turbogears/controllers.py", line 71, in
> _process_output
> fragment=fragment)
> File "/home/jchu/coding/turbogears/turbogears/view.py", line 60, in render
> return engine.render(info, format, fragment, template)
> File "/home/jchu/coding/turbogears/plugins/kid/turbokid/kidsupport.py",
> line 97, in render
> return t.serialize(encoding=self.defaultencoding, output=format,
> fragment=fragment)
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/__init__.py", line
> 236, in serialize
> return serializer.serialize(self, encoding, fragment)
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/serialization.py",
> line 51, in serialize
> text = list(self.generate(stream, encoding, fragment))
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/serialization.py",
> line 327, in generate
> for ev, item in self.apply_filters(stream):
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/pull.py", line 206,
> in _coalesce
> for ev, item in stream:
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/filter.py", line 21,
> in transform_filter
> for ev, item in apply_matches(stream, template, templates, apply_func):
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/filter.py", line 31,
> in apply_matches
> item = stream.expand()
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/pull.py", line 95, in
> expand
> for ev, item in self._iter:
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/pull.py", line 164,
> in _track
> for p in stream:
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/pull.py", line 206,
> in _coalesce
> for ev, item in stream:
> File "/home/jchu/coding/fatboy/fatboy/templates/calendar/month.py", line
> 224, in _pull
> yield (START, current)
> File "/home/jchu/coding/turbogears/turbogears/widgets/base.py", line 39, in
> lockwidget
> output = self.__class__.display(self, *args, **kw)
> File "/home/jchu/coding/turbogears/turbogears/widgets/base.py", line 176,
> in display
> return view.transform(template_vars, template=self.template_c)
> File "/home/jchu/coding/turbogears/turbogears/view.py", line 65, in
> transform
> return engine.transform(info, template)
> File "/home/jchu/coding/turbogears/plugins/kid/turbokid/kidsupport.py",
> line 114, in transform
> return ElementStream(t.transform()).expand()
> File "/home/jchu/coding/turbogears/thirdparty/kid/kid/pull.py", line 111,
> in expand
> current.text = item
> AttributeError: 'list' object has no attribute 'text'
>
Someone mentioned this on IRC the last week, it seems to be a Kid bug
in pull.py:
current = self.current
if current is None:
current = []
so current can be a list and then they are trying to access:
current.text
on a list.
Should be an easy fix I guess.
> The reason we'd py:strip all those out tags is because of the ugly xmlns:py
> in the output.
>
That's the actual TextField template:
template = """
<input xmlns:py="http://purl.org/kid/ns#"
type="text"
name="${name}"
class="${field_class}"
id="${field_id}"
value="${value}"
py:attrs="attrs"
/>
"""
but as you can see xmlns:py is stripped from the final output:
>>> from turbogears import widgets as w
>>> text = w.TextField(name="name")
>>> text.render()
'<INPUT ID="name" TYPE="text" CLASS="textfield" NAME="name">'
>>> text.render(format="xhtml")
'<input id="name" type="text" class="textfield" name="name"></input>'
>>>
what's happening on your output?
Ciao
Michele