[Twisted-web] Patch: Enable passing the context to freeform autocallable methods

Gavrie Philipson twisted-web@twistedmatrix.com
Thu, 25 Dec 2003 09:44:23 +0200


This is a multi-part message in MIME format.
--------------050709020209030702010009
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi,

The attached patch enables passing the context to freeform autocallable 
methods.

It is used by defining an autocallable like this:

def doIt(self, context = formless.Context(),
	 foo = formless.String(label="Prefix")):
     pass


-- Gavrie.

--------------050709020209030702010009
Content-Type: text/x-patch;
 name="freeform-context.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="freeform-context.patch"

Index: components.wsv
===================================================================
RCS file: /cvs/Quotient/nevow/components.wsv,v
retrieving revision 1.21
diff -u -r1.21 components.wsv
--- components.wsv	23 Dec 2003 06:15:38 -0000	1.21
+++ components.wsv	25 Dec 2003 07:32:46 -0000
@@ -80,6 +80,7 @@
 nevow.freeform.ButtonRenderer       nevow.formless.Button       nevow.freeform.ITypedRenderer
 nevow.freeform.ObjectRenderer       nevow.formless.Object       nevow.freeform.ITypedRenderer
 nevow.freeform.RequestRenderer      nevow.formless.Request      nevow.freeform.ITypedRenderer
+nevow.freeform.ContextRenderer      nevow.formless.Context      nevow.freeform.ITypedRenderer
 nevow.freeform.ListRenderer     nevow.formless.List         nevow.freeform.ITypedRenderer
 nevow.freeform.DictionaryRenderer     nevow.formless.Dictionary         nevow.freeform.ITypedRenderer
 nevow.freeform.FileUploadRenderer   nevow.formless.FileUpload   nevow.freeform.ITypedRenderer
@@ -97,6 +98,7 @@
 nevow.freeform.PasswordValidator        nevow.formless.Password         nevow.freeform.IInputValidator
 nevow.freeform.BooleanValidator         nevow.formless.Boolean          nevow.freeform.IInputValidator
 nevow.freeform.RequestValidator         nevow.formless.Request          nevow.freeform.IInputValidator
+nevow.freeform.ContextValidator         nevow.formless.Context          nevow.freeform.IInputValidator
 nevow.freeform.ListValidator            nevow.formless.List             nevow.freeform.IInputValidator
 nevow.freeform.UploadValidator          nevow.formless.FileUpload       nevow.freeform.IInputValidator
 
Index: formless.py
===================================================================
RCS file: /cvs/Quotient/nevow/formless.py,v
retrieving revision 1.31
diff -u -r1.31 formless.py
--- formless.py	2 Dec 2003 17:54:01 -0000	1.31
+++ formless.py	25 Dec 2003 07:32:48 -0000
@@ -381,6 +381,10 @@
     complexType = True ## Don't use the regular form
 
 
+class Context(Typed):
+    complexType = True ## Don't use the regular form
+
+
 class Button(Typed):
     pass
 
Index: freeform.py
===================================================================
RCS file: /cvs/Quotient/nevow/freeform.py,v
retrieving revision 1.84
diff -u -r1.84 freeform.py
--- freeform.py	23 Dec 2003 19:01:14 -0000	1.84
+++ freeform.py	25 Dec 2003 07:32:50 -0000
@@ -325,6 +334,12 @@
         return ''
 
 
+class ContextRenderer(components.Adapter):
+    __implements__ = IRendererFactory, ITypedRenderer
+    def __call__(self, context, data):
+        return ''
+
+
 ## Hoorj javascript
 LOCATE_AND_CHANGE_CURRENT_SELECTION_INPUT = xml(\
 "var sel = document.getElementById('freeform-action-selection:' + this.name);"\
@@ -1031,6 +1046,14 @@
     def validate(self, context, boundTo, data):
         return context.locate(iwoven.IRequest)
 
+
+class ContextValidator(components.Adapter):
+    __implements__ = IInputValidator,
+
+    def validate(self, context, boundTo, data):
+        return context
+
+
 class UploadValidator(components.Adapter):
     __implements__ = IInputValidator,
     def validate(self, context, boundTo, data):

--------------050709020209030702010009--