On 12/29/05, Michele Cella <[EMAIL PROTECTED]> wrote:
>
> I've put some time into this, step to reproduce te problem.
>
> Let's put this widget into my controllers.py:
>
> class MyTextField(widgets.TextField):
> template = """
> <div xmlns:py="http://purl.org/kid/ns#">
> </div>
> """
> I then modified turbogears/widgets/base.py to:
>
> if isinstance(t, basestring) and "<" in t:
> modname = "%s.%s.Template" % (cls.__module__, name)
> print modname <- addition
> cls.template = kid.load_template(t, name=modname).Template
>
> starting the application gives me a loop that prints this:
>
> ...
> turbogears.widgets.base.CalendarDateTimePicker.Template
> turbogears.widgets.base.AutoCompleteField.Template
> turbogears.widgets.forms.TableForm.Template
> turbogears.fastdata.datacontroller.DataGrid.Template
> playground.controllers.MyTextField.Template
> 2005/12/29 13:45:08 HTTP INFO SystemExit raised: shutting down
> autoreloader
> 2005/12/29 13:45:08 HTTP INFO CherryPy shut down
> Unhandled exception in thread started by
> Error in sys.excepthook:
>
> The problem is related to widgets that provide a source string as
> template, in base.py they are loaded with a module name to be then
> rendered using turbogears kidsupport:
>
> if isinstance(t, basestring) and "<" in t:
> modname = "%s.%s.Template" % (cls.__module__, name)
> cls.template = kid.load_template(t, name=modname).Template
>
> inside kidsupport they are autoreloaded if needed but since they aren't
> standalone kid files the autoreloader can't find them and raises an
> exception.
Hmm... I tried a widget very similar to the one you're trying and I
couldn't reproduce the problem. Additionally, these templates should
not be autoreloaded. In the code above, it sets cls.template to the
Template class itself.
This is what happens in kidsupport:
def transform(self, info, template):
if isinstance(template, type):
tclass = template
else:
tclass = self.load_template(template)
Unless that if statement is wrong (and I didn't think it was), if it's
passed a template class directly it will just use that, otherwise it
will run load_template (which is also responsible for the refreshing).
So, kidsupport shouldn't be doing any reloading of the template
already.
Kevin