Divmod : Nevow : Context Removal
Step 1
Change Resource Inheritance
The Page class is now imported from nevow.page instead of nevow.rend. class declarations change as indicated below.
From:
class Root(rend.Page): ...To:
class Root(page.Page): ...
Step 2
Change child_ Class Attributes
Class child_* class attributes change in that the prefix is no longer needed and all child_s are stored together in a dict.
From:
... child_foo = RendPageInstance ...To:
... children = { 'foo': PagePageInstance, ...} ...
Step 3
Remove Context from Signatures
The context object is no longer passed in the method signatures. Passed parameters changes as indicated below.
From:
... def render_foo(self, context, data): ...To:
... def render_foo(self, request, tag): ...
Step 4
Use Decorators
The method names no longer need to contain render_ and child_. Method names change as indicated below.
From:
... def render_foo(self, context, data): ... ... def child_bar(self, context): ...To:
... def foo(self, request, tag): ... page.renderer(foo) ... def bar(self, request): ... page.child(bar)Or, for a version of python that supports the decorator syntax:
... @page.renderer def foo(self, request, tag): ... ... @page.child def bar(self, request): ...
Step 5
Change Fill Slot Calls
The fillSlots() calls are still tag methods, but tag is now passed directly to render methods and not accessed as a context attribute. Make changes as indicated below.
From:
... def render_entries(self, ctx, data): ctx.tag.fillSlots('author', 'The Humble Author') ctx.tag.fillSlots('title', 'The Excellent Title') ctx.tag.fillSlots('content', 'The Interesting Content') return ctx.tagTo:
... def entries(self, request, tag): tag.fillSlots('author', 'The Humble Author') tag.fillSlots('title', 'The Excellent Title') tag.fillSlots('content', 'The Interesting Content') return tag page.renderer(entries)
