[Twisted-web] Fragment's IGettable

Christopher Armstrong radeex at gmail.com
Tue Oct 12 23:10:42 MDT 2004


I recently noticed a difference in Nevow from some old SVN checkout vs
0.3. 0.3's behavior got in my way while writing a nevow app, but I'm
not sure if it's considered a bug.

The minimal example is below. The difference is that in the old Nevow,
it would display "Hi"; now it displays big-red-NONE.

After some debugging with the help of Tv and dreid on #twisted-web, we
discovered that it was the change that added an IGettable to
rend.Fragment. It __implements__ IGettable and implements 'get' as
'return self.original', which is None. Removing IGettable from
__implements__ and deleting 'def get' makes it display "hi".

I'll probably work around this problem by not passing the Fragment
through the data machinery, and instead look it up and return it
directly in a render function. I'm just notifying you guys about this
issue and you can decide whether or not it should be considered a bug.
I'm interested in knowing why this IGettable implementation was added
to Fragment, as well.

Thanks,

-- 
 Twisted | Christopher Armstrong: International Man of Twistery
  Radix  |          Release Manager,  Twisted Project
---------+            http://radix.twistedmatrix.com


snip:

from nevow import appserver, rend, loaders, inevow, tags as T

class Page(rend.Page):

    def data_foo(self, ctx, data):
        return rend.Fragment(docFactory=loaders.stan(T.div["Hi"]))

    def render_default(self, ctx, data):
        # data is None here in 0.3 (as is IData(ctx), not so in old-nevow
        return data

    docFactory = loaders.stan(T.html[T.body[
        T.div(data=T.directive("foo"),
              render=T.directive("default"))
        ]])


from twisted.application import internet, service

application = service.Application("nevow")
internet.TCPServer(8080, appserver.NevowSite(Page())
                   ).setServiceParent(application)



More information about the Twisted-web mailing list