##// END OF EJS Templates
Improve validation on dashboard items field
marcink -
r3949:3301fb05 beta
parent child Browse files
Show More
@@ -1,438 +1,438 b''
1 1 """ this is forms validation classes
2 2 http://formencode.org/module-formencode.validators.html
3 3 for list off all availible validators
4 4
5 5 we can create our own validators
6 6
7 7 The table below outlines the options which can be used in a schema in addition to the validators themselves
8 8 pre_validators [] These validators will be applied before the schema
9 9 chained_validators [] These validators will be applied after the schema
10 10 allow_extra_fields False If True, then it is not an error when keys that aren't associated with a validator are present
11 11 filter_extra_fields False If True, then keys that aren't associated with a validator are removed
12 12 if_key_missing NoDefault If this is given, then any keys that aren't available but are expected will be replaced with this value (and then validated). This does not override a present .if_missing attribute on validators. NoDefault is a special FormEncode class to mean that no default values has been specified and therefore missing keys shouldn't take a default value.
13 13 ignore_key_missing False If True, then missing keys will be missing in the result, if the validator doesn't have .if_missing on it already
14 14
15 15
16 16 <name> = formencode.validators.<name of validator>
17 17 <name> must equal form name
18 18 list=[1,2,3,4,5]
19 19 for SELECT use formencode.All(OneOf(list), Int())
20 20
21 21 """
22 22 import logging
23 23
24 24 import formencode
25 25 from formencode import All
26 26
27 27 from pylons.i18n.translation import _
28 28
29 29 from rhodecode.model import validators as v
30 30 from rhodecode import BACKENDS
31 31
32 32 log = logging.getLogger(__name__)
33 33
34 34
35 35 class LoginForm(formencode.Schema):
36 36 allow_extra_fields = True
37 37 filter_extra_fields = True
38 38 username = v.UnicodeString(
39 39 strip=True,
40 40 min=1,
41 41 not_empty=True,
42 42 messages={
43 43 'empty': _(u'Please enter a login'),
44 44 'tooShort': _(u'Enter a value %(min)i characters long or more')}
45 45 )
46 46
47 47 password = v.UnicodeString(
48 48 strip=False,
49 49 min=3,
50 50 not_empty=True,
51 51 messages={
52 52 'empty': _(u'Please enter a password'),
53 53 'tooShort': _(u'Enter %(min)i characters or more')}
54 54 )
55 55
56 56 remember = v.StringBoolean(if_missing=False)
57 57
58 58 chained_validators = [v.ValidAuth()]
59 59
60 60
61 61 def UserForm(edit=False, old_data={}):
62 62 class _UserForm(formencode.Schema):
63 63 allow_extra_fields = True
64 64 filter_extra_fields = True
65 65 username = All(v.UnicodeString(strip=True, min=1, not_empty=True),
66 66 v.ValidUsername(edit, old_data))
67 67 if edit:
68 68 new_password = All(
69 69 v.ValidPassword(),
70 70 v.UnicodeString(strip=False, min=6, not_empty=False)
71 71 )
72 72 password_confirmation = All(
73 73 v.ValidPassword(),
74 74 v.UnicodeString(strip=False, min=6, not_empty=False),
75 75 )
76 76 admin = v.StringBoolean(if_missing=False)
77 77 else:
78 78 password = All(
79 79 v.ValidPassword(),
80 80 v.UnicodeString(strip=False, min=6, not_empty=True)
81 81 )
82 82 password_confirmation = All(
83 83 v.ValidPassword(),
84 84 v.UnicodeString(strip=False, min=6, not_empty=False)
85 85 )
86 86
87 87 active = v.StringBoolean(if_missing=False)
88 88 firstname = v.UnicodeString(strip=True, min=1, not_empty=False)
89 89 lastname = v.UnicodeString(strip=True, min=1, not_empty=False)
90 90 email = All(v.Email(not_empty=True), v.UniqSystemEmail(old_data))
91 91
92 92 chained_validators = [v.ValidPasswordsMatch()]
93 93
94 94 return _UserForm
95 95
96 96
97 97 def UserGroupForm(edit=False, old_data={}, available_members=[]):
98 98 class _UserGroupForm(formencode.Schema):
99 99 allow_extra_fields = True
100 100 filter_extra_fields = True
101 101
102 102 users_group_name = All(
103 103 v.UnicodeString(strip=True, min=1, not_empty=True),
104 104 v.ValidUserGroup(edit, old_data)
105 105 )
106 106
107 107 users_group_active = v.StringBoolean(if_missing=False)
108 108
109 109 if edit:
110 110 users_group_members = v.OneOf(
111 111 available_members, hideList=False, testValueList=True,
112 112 if_missing=None, not_empty=False
113 113 )
114 114
115 115 return _UserGroupForm
116 116
117 117
118 118 def ReposGroupForm(edit=False, old_data={}, available_groups=[],
119 119 can_create_in_root=False):
120 120 class _ReposGroupForm(formencode.Schema):
121 121 allow_extra_fields = True
122 122 filter_extra_fields = False
123 123
124 124 group_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
125 125 v.SlugifyName())
126 126 group_description = v.UnicodeString(strip=True, min=1,
127 127 not_empty=False)
128 128 if edit:
129 129 #FIXME: do a special check that we cannot move a group to one of
130 130 #it's children
131 131 pass
132 132 group_parent_id = All(v.CanCreateGroup(can_create_in_root),
133 133 v.OneOf(available_groups, hideList=False,
134 134 testValueList=True,
135 135 if_missing=None, not_empty=True))
136 136 enable_locking = v.StringBoolean(if_missing=False)
137 137 chained_validators = [v.ValidReposGroup(edit, old_data)]
138 138
139 139 return _ReposGroupForm
140 140
141 141
142 142 def RegisterForm(edit=False, old_data={}):
143 143 class _RegisterForm(formencode.Schema):
144 144 allow_extra_fields = True
145 145 filter_extra_fields = True
146 146 username = All(
147 147 v.ValidUsername(edit, old_data),
148 148 v.UnicodeString(strip=True, min=1, not_empty=True)
149 149 )
150 150 password = All(
151 151 v.ValidPassword(),
152 152 v.UnicodeString(strip=False, min=6, not_empty=True)
153 153 )
154 154 password_confirmation = All(
155 155 v.ValidPassword(),
156 156 v.UnicodeString(strip=False, min=6, not_empty=True)
157 157 )
158 158 active = v.StringBoolean(if_missing=False)
159 159 firstname = v.UnicodeString(strip=True, min=1, not_empty=False)
160 160 lastname = v.UnicodeString(strip=True, min=1, not_empty=False)
161 161 email = All(v.Email(not_empty=True), v.UniqSystemEmail(old_data))
162 162
163 163 chained_validators = [v.ValidPasswordsMatch()]
164 164
165 165 return _RegisterForm
166 166
167 167
168 168 def PasswordResetForm():
169 169 class _PasswordResetForm(formencode.Schema):
170 170 allow_extra_fields = True
171 171 filter_extra_fields = True
172 172 email = All(v.ValidSystemEmail(), v.Email(not_empty=True))
173 173 return _PasswordResetForm
174 174
175 175
176 176 def RepoForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
177 177 repo_groups=[], landing_revs=[]):
178 178 class _RepoForm(formencode.Schema):
179 179 allow_extra_fields = True
180 180 filter_extra_fields = False
181 181 repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
182 182 v.SlugifyName())
183 183 repo_group = All(v.CanWriteGroup(old_data),
184 184 v.OneOf(repo_groups, hideList=True))
185 185 repo_type = v.OneOf(supported_backends, required=False,
186 186 if_missing=old_data.get('repo_type'))
187 187 repo_description = v.UnicodeString(strip=True, min=1, not_empty=False)
188 188 repo_private = v.StringBoolean(if_missing=False)
189 189 repo_landing_rev = v.OneOf(landing_revs, hideList=True)
190 190 clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False))
191 191
192 192 repo_enable_statistics = v.StringBoolean(if_missing=False)
193 193 repo_enable_downloads = v.StringBoolean(if_missing=False)
194 194 repo_enable_locking = v.StringBoolean(if_missing=False)
195 195
196 196 if edit:
197 197 #this is repo owner
198 198 user = All(v.UnicodeString(not_empty=True), v.ValidRepoUser())
199 199
200 200 chained_validators = [v.ValidCloneUri(),
201 201 v.ValidRepoName(edit, old_data)]
202 202 return _RepoForm
203 203
204 204
205 205 def RepoPermsForm():
206 206 class _RepoPermsForm(formencode.Schema):
207 207 allow_extra_fields = True
208 208 filter_extra_fields = False
209 209 chained_validators = [v.ValidPerms(type_='repo')]
210 210 return _RepoPermsForm
211 211
212 212
213 213 def RepoGroupPermsForm():
214 214 class _RepoGroupPermsForm(formencode.Schema):
215 215 allow_extra_fields = True
216 216 filter_extra_fields = False
217 217 recursive = v.StringBoolean(if_missing=False)
218 218 chained_validators = [v.ValidPerms(type_='repo_group')]
219 219 return _RepoGroupPermsForm
220 220
221 221
222 222 def UserGroupPermsForm():
223 223 class _UserPermsForm(formencode.Schema):
224 224 allow_extra_fields = True
225 225 filter_extra_fields = False
226 226 chained_validators = [v.ValidPerms(type_='user_group')]
227 227 return _UserPermsForm
228 228
229 229
230 230 def RepoFieldForm():
231 231 class _RepoFieldForm(formencode.Schema):
232 232 filter_extra_fields = True
233 233 allow_extra_fields = True
234 234
235 235 new_field_key = All(v.FieldKey(),
236 236 v.UnicodeString(strip=True, min=3, not_empty=True))
237 237 new_field_value = v.UnicodeString(not_empty=False, if_missing='')
238 238 new_field_type = v.OneOf(['str', 'unicode', 'list', 'tuple'],
239 239 if_missing='str')
240 240 new_field_label = v.UnicodeString(not_empty=False)
241 241 new_field_desc = v.UnicodeString(not_empty=False)
242 242
243 243 return _RepoFieldForm
244 244
245 245
246 246 def RepoForkForm(edit=False, old_data={}, supported_backends=BACKENDS.keys(),
247 247 repo_groups=[], landing_revs=[]):
248 248 class _RepoForkForm(formencode.Schema):
249 249 allow_extra_fields = True
250 250 filter_extra_fields = False
251 251 repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
252 252 v.SlugifyName())
253 253 repo_group = All(v.CanWriteGroup(),
254 254 v.OneOf(repo_groups, hideList=True))
255 255 repo_type = All(v.ValidForkType(old_data), v.OneOf(supported_backends))
256 256 description = v.UnicodeString(strip=True, min=1, not_empty=True)
257 257 private = v.StringBoolean(if_missing=False)
258 258 copy_permissions = v.StringBoolean(if_missing=False)
259 259 update_after_clone = v.StringBoolean(if_missing=False)
260 260 fork_parent_id = v.UnicodeString()
261 261 chained_validators = [v.ValidForkName(edit, old_data)]
262 262 landing_rev = v.OneOf(landing_revs, hideList=True)
263 263
264 264 return _RepoForkForm
265 265
266 266
267 267 def ApplicationSettingsForm():
268 268 class _ApplicationSettingsForm(formencode.Schema):
269 269 allow_extra_fields = True
270 270 filter_extra_fields = False
271 271 rhodecode_title = v.UnicodeString(strip=True, min=1, not_empty=True)
272 272 rhodecode_realm = v.UnicodeString(strip=True, min=1, not_empty=True)
273 273 rhodecode_ga_code = v.UnicodeString(strip=True, min=1, not_empty=False)
274 274
275 275 return _ApplicationSettingsForm
276 276
277 277
278 278 def ApplicationVisualisationForm():
279 279 class _ApplicationVisualisationForm(formencode.Schema):
280 280 allow_extra_fields = True
281 281 filter_extra_fields = False
282 282 rhodecode_show_public_icon = v.StringBoolean(if_missing=False)
283 283 rhodecode_show_private_icon = v.StringBoolean(if_missing=False)
284 284 rhodecode_stylify_metatags = v.StringBoolean(if_missing=False)
285 285
286 286 rhodecode_repository_fields = v.StringBoolean(if_missing=False)
287 287 rhodecode_lightweight_journal = v.StringBoolean(if_missing=False)
288 rhodecode_dashboard_items = v.UnicodeString()
288 rhodecode_dashboard_items = v.Int(min=5, not_empty=True)
289 289 rhodecode_show_version = v.StringBoolean(if_missing=False)
290 290
291 291 return _ApplicationVisualisationForm
292 292
293 293
294 294 def ApplicationUiSettingsForm():
295 295 class _ApplicationUiSettingsForm(formencode.Schema):
296 296 allow_extra_fields = True
297 297 filter_extra_fields = False
298 298 web_push_ssl = v.StringBoolean(if_missing=False)
299 299 paths_root_path = All(
300 300 v.ValidPath(),
301 301 v.UnicodeString(strip=True, min=1, not_empty=True)
302 302 )
303 303 hooks_changegroup_update = v.StringBoolean(if_missing=False)
304 304 hooks_changegroup_repo_size = v.StringBoolean(if_missing=False)
305 305 hooks_changegroup_push_logger = v.StringBoolean(if_missing=False)
306 306 hooks_outgoing_pull_logger = v.StringBoolean(if_missing=False)
307 307
308 308 extensions_largefiles = v.StringBoolean(if_missing=False)
309 309 extensions_hgsubversion = v.StringBoolean(if_missing=False)
310 310 extensions_hggit = v.StringBoolean(if_missing=False)
311 311
312 312 return _ApplicationUiSettingsForm
313 313
314 314
315 315 def DefaultPermissionsForm(repo_perms_choices, group_perms_choices,
316 316 user_group_perms_choices, create_choices,
317 317 repo_group_create_choices, user_group_create_choices,
318 318 fork_choices, register_choices, extern_activate_choices):
319 319 class _DefaultPermissionsForm(formencode.Schema):
320 320 allow_extra_fields = True
321 321 filter_extra_fields = True
322 322 overwrite_default_repo = v.StringBoolean(if_missing=False)
323 323 overwrite_default_group = v.StringBoolean(if_missing=False)
324 324 overwrite_default_user_group = v.StringBoolean(if_missing=False)
325 325 anonymous = v.StringBoolean(if_missing=False)
326 326 default_repo_perm = v.OneOf(repo_perms_choices)
327 327 default_group_perm = v.OneOf(group_perms_choices)
328 328 default_user_group_perm = v.OneOf(user_group_perms_choices)
329 329
330 330 default_repo_create = v.OneOf(create_choices)
331 331 default_user_group_create = v.OneOf(user_group_create_choices)
332 332 #default_repo_group_create = v.OneOf(repo_group_create_choices) #not impl. yet
333 333 default_fork = v.OneOf(fork_choices)
334 334
335 335 default_register = v.OneOf(register_choices)
336 336 default_extern_activate = v.OneOf(extern_activate_choices)
337 337 return _DefaultPermissionsForm
338 338
339 339
340 340 def CustomDefaultPermissionsForm():
341 341 class _CustomDefaultPermissionsForm(formencode.Schema):
342 342 filter_extra_fields = True
343 343 allow_extra_fields = True
344 344 inherit_default_permissions = v.StringBoolean(if_missing=False)
345 345
346 346 create_repo_perm = v.StringBoolean(if_missing=False)
347 347 create_user_group_perm = v.StringBoolean(if_missing=False)
348 348 #create_repo_group_perm Impl. later
349 349
350 350 fork_repo_perm = v.StringBoolean(if_missing=False)
351 351
352 352 return _CustomDefaultPermissionsForm
353 353
354 354
355 355 def DefaultsForm(edit=False, old_data={}, supported_backends=BACKENDS.keys()):
356 356 class _DefaultsForm(formencode.Schema):
357 357 allow_extra_fields = True
358 358 filter_extra_fields = True
359 359 default_repo_type = v.OneOf(supported_backends)
360 360 default_repo_private = v.StringBoolean(if_missing=False)
361 361 default_repo_enable_statistics = v.StringBoolean(if_missing=False)
362 362 default_repo_enable_downloads = v.StringBoolean(if_missing=False)
363 363 default_repo_enable_locking = v.StringBoolean(if_missing=False)
364 364
365 365 return _DefaultsForm
366 366
367 367
368 368 def LdapSettingsForm(tls_reqcert_choices, search_scope_choices,
369 369 tls_kind_choices):
370 370 class _LdapSettingsForm(formencode.Schema):
371 371 allow_extra_fields = True
372 372 filter_extra_fields = True
373 373 #pre_validators = [LdapLibValidator]
374 374 ldap_active = v.StringBoolean(if_missing=False)
375 375 ldap_host = v.UnicodeString(strip=True,)
376 376 ldap_port = v.Number(strip=True,)
377 377 ldap_tls_kind = v.OneOf(tls_kind_choices)
378 378 ldap_tls_reqcert = v.OneOf(tls_reqcert_choices)
379 379 ldap_dn_user = v.UnicodeString(strip=True,)
380 380 ldap_dn_pass = v.UnicodeString(strip=True,)
381 381 ldap_base_dn = v.UnicodeString(strip=True,)
382 382 ldap_filter = v.UnicodeString(strip=True,)
383 383 ldap_search_scope = v.OneOf(search_scope_choices)
384 384 ldap_attr_login = v.AttrLoginValidator()(not_empty=True)
385 385 ldap_attr_firstname = v.UnicodeString(strip=True,)
386 386 ldap_attr_lastname = v.UnicodeString(strip=True,)
387 387 ldap_attr_email = v.UnicodeString(strip=True,)
388 388
389 389 return _LdapSettingsForm
390 390
391 391
392 392 def UserExtraEmailForm():
393 393 class _UserExtraEmailForm(formencode.Schema):
394 394 email = All(v.UniqSystemEmail(), v.Email(not_empty=True))
395 395 return _UserExtraEmailForm
396 396
397 397
398 398 def UserExtraIpForm():
399 399 class _UserExtraIpForm(formencode.Schema):
400 400 ip = v.ValidIp()(not_empty=True)
401 401 return _UserExtraIpForm
402 402
403 403
404 404 def PullRequestForm(repo_id):
405 405 class _PullRequestForm(formencode.Schema):
406 406 allow_extra_fields = True
407 407 filter_extra_fields = True
408 408
409 409 user = v.UnicodeString(strip=True, required=True)
410 410 org_repo = v.UnicodeString(strip=True, required=True)
411 411 org_ref = v.UnicodeString(strip=True, required=True)
412 412 other_repo = v.UnicodeString(strip=True, required=True)
413 413 other_ref = v.UnicodeString(strip=True, required=True)
414 414 revisions = All(#v.NotReviewedRevisions(repo_id)(),
415 415 v.UniqueList(not_empty=True))
416 416 review_members = v.UniqueList(not_empty=True)
417 417
418 418 pullrequest_title = v.UnicodeString(strip=True, required=True, min=3)
419 419 pullrequest_desc = v.UnicodeString(strip=True, required=False)
420 420
421 421 ancestor_rev = v.UnicodeString(strip=True, required=True)
422 422 merge_rev = v.UnicodeString(strip=True, required=True)
423 423
424 424 return _PullRequestForm
425 425
426 426
427 427 def GistForm(lifetime_options):
428 428 class _GistForm(formencode.Schema):
429 429
430 430 filename = All(v.BasePath()(),
431 431 v.UnicodeString(strip=True, required=False))
432 432 description = v.UnicodeString(required=False, if_missing='')
433 433 lifetime = v.OneOf(lifetime_options)
434 434 content = v.UnicodeString(required=True, not_empty=True)
435 435 public = v.UnicodeString(required=False, if_missing='')
436 436 private = v.UnicodeString(required=False, if_missing='')
437 437
438 438 return _GistForm
General Comments 0
You need to be logged in to leave comments. Login now