Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

root/branches/cherrypy-2.x/cherrypy/lib/form.py

Revision 1028 (checked in by rdelon, 2 years ago)

Implemented #478

  • Property svn:eol-style set to native
Line 
1 """Simple form handling module."""
2
3 import warnings
4 warnings.warn("cherrypy.lib.form is deprecated and might disappear in future versions of CherryPy", DeprecationWarning, stacklevel = 2)
5
6 import cherrypy
7 import defaultformmask
8
9
10 class FormField:
11    
12     def __init__(self, label, name, typ, mask=None, mandatory=0, size='15',
13                  optionList=[], defaultValue='', defaultMessage='', validate=None):
14         self.isField = 1
15         self.label = label
16         self.name = name
17         self.typ = typ
18         if mask is None:
19             self.mask = defaultformmask.defaultMask
20         else:
21             self.mask = mask
22         self.mandatory = mandatory
23         self.size = size
24         self.optionList = optionList
25         self.defaultValue = defaultValue
26         self.defaultMessage = defaultMessage
27         self.validate = validate
28         self.errorMessage = ""
29    
30     def render(self, leaveValues):
31         if leaveValues:
32             if self.typ !='submit':
33                 self.currentValue = cherrypy.request.params.get(self.name, "")
34             else:
35                 self.currentValue = self.defaultValue
36         else:
37             self.currentValue = self.defaultValue
38             self.errorMessage = self.defaultMessage
39         return self.mask(self)
40
41
42 class FormSeparator:
43    
44     def __init__(self, label, mask):
45         self.isField = 0
46         self.label = label
47         self.mask = mask
48    
49     def render(self, dummy):
50         return self.mask(self.label)
51
52
53 class Form:
54    
55     method = "post"
56     enctype = ""
57
58     def __init__(self, action = "postForm", method = "post", enctype = "", header = defaultformmask.defaultHeader, footer = defaultformmask.defaultFooter, headerLabel = "", footerLabel = ""):
59         self.action = action
60         self.method = method
61         self.enctype = enctype
62         self.header = header
63         self.footer = footer
64         self.headerLabel = headerLabel
65         self.footerLabel = footerLabel
66
67     def formView(self, leaveValues=0):
68         if self.enctype:
69             enctypeTag = 'enctype="%s"' % self.enctype
70         else:
71             enctypeTag = ""
72        
73         res = ['<form method="%s" %s action="%s">'
74                % (self.method, enctypeTag, self.action)]
75         res.append(self.header(self.headerLabel))
76
77         for field in self.fieldList:
78             res.append(field.render(leaveValues))
79
80         res.append(self.footer(self.footerLabel))
81         res.append("</form>")
82        
83         return "".join(res)
84    
85     def validateFields(self):
86         # Should be subclassed
87         # Update field's errorMessage value to set an error
88         pass
89    
90     def validateForm(self):
91         # Reset errorMesage for each field
92         for field in self.fieldList:
93             if field.isField:
94                 field.errorMessage = ""
95        
96         # Validate mandatory fields
97         for field in self.fieldList:
98             if (field.isField and field.mandatory
99                 and not cherrypy.request.params.get(field.name)):
100                 field.errorMessage = "Missing"
101        
102         # Validate fields one by one
103         for field in self.fieldList:
104             if field.isField and field.validate and not field.errorMessage:
105                 value = cherrypy.request.params.get(field.name, "")
106                 field.errorMessage = field.validate(value)
107
108         # Validate all fields together (ie: check that passwords match)
109         self.validateFields()
110         for field in self.fieldList:
111             if field.isField and field.errorMessage:
112                 return 0
113         return 1
114    
115     def setFieldErrorMessage(self, fieldName, errorMessage):
116         for field in self.fieldList:
117             if field.isField and field.name == fieldName:
118                 field.errorMessage = errorMessage
119    
120     def getFieldOptionList(self, fieldName):
121         for field in self.fieldList:
122             if field.isField and field.name == fieldName:
123                 return field.optionList
124    
125     def getFieldDefaultValue(self, fieldName):
126         for field in self.fieldList:
127             if field.isField and field.name == fieldName:
128                 return field.defaultValue
129    
130     def setFieldDefaultValue(self, fieldName, defaultValue):
131         for field in self.fieldList:
132             if field.isField and field.name == fieldName:
133                 field.defaultValue = defaultValue
134    
135     def getFieldNameList(self, exceptList=[]):
136         fieldNameList = []
137         for field in self.fieldList:
138             if field.isField and field.name and field.name not in exceptList:
139                 fieldNameList.append(field.name)
140         return fieldNameList
141
142
Note: See TracBrowser for help on using the browser.

Hosted by WebFaction

Log in as guest/cpguest to create tickets