##// END OF EJS Templates
email: add whitespace stripping during registration of users on email addresses.
ergo -
r2385:2808e7be default
parent child Browse files
Show More
@@ -1,614 +1,617 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22 this is forms validation classes
23 23 http://formencode.org/module-formencode.validators.html
24 24 for list off all availible validators
25 25
26 26 we can create our own validators
27 27
28 28 The table below outlines the options which can be used in a schema in addition to the validators themselves
29 29 pre_validators [] These validators will be applied before the schema
30 30 chained_validators [] These validators will be applied after the schema
31 31 allow_extra_fields False If True, then it is not an error when keys that aren't associated with a validator are present
32 32 filter_extra_fields False If True, then keys that aren't associated with a validator are removed
33 33 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.
34 34 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
35 35
36 36
37 37 <name> = formencode.validators.<name of validator>
38 38 <name> must equal form name
39 39 list=[1,2,3,4,5]
40 40 for SELECT use formencode.All(OneOf(list), Int())
41 41
42 42 """
43 43
44 44 import deform
45 45 import logging
46 46 import formencode
47 47
48 48 from pkg_resources import resource_filename
49 49 from formencode import All, Pipe
50 50
51 51 from pyramid.threadlocal import get_current_request
52 52
53 53 from rhodecode import BACKENDS
54 54 from rhodecode.lib import helpers
55 55 from rhodecode.model import validators as v
56 56
57 57 log = logging.getLogger(__name__)
58 58
59 59
60 60 deform_templates = resource_filename('deform', 'templates')
61 61 rhodecode_templates = resource_filename('rhodecode', 'templates/forms')
62 62 search_path = (rhodecode_templates, deform_templates)
63 63
64 64
65 65 class RhodecodeFormZPTRendererFactory(deform.ZPTRendererFactory):
66 66 """ Subclass of ZPTRendererFactory to add rhodecode context variables """
67 67 def __call__(self, template_name, **kw):
68 68 kw['h'] = helpers
69 69 kw['request'] = get_current_request()
70 70 return self.load(template_name)(**kw)
71 71
72 72
73 73 form_renderer = RhodecodeFormZPTRendererFactory(search_path)
74 74 deform.Form.set_default_renderer(form_renderer)
75 75
76 76
77 77 def LoginForm(localizer):
78 78 _ = localizer
79 79
80 80 class _LoginForm(formencode.Schema):
81 81 allow_extra_fields = True
82 82 filter_extra_fields = True
83 83 username = v.UnicodeString(
84 84 strip=True,
85 85 min=1,
86 86 not_empty=True,
87 87 messages={
88 88 'empty': _(u'Please enter a login'),
89 89 'tooShort': _(u'Enter a value %(min)i characters long or more')
90 90 }
91 91 )
92 92
93 93 password = v.UnicodeString(
94 94 strip=False,
95 95 min=3,
96 96 max=72,
97 97 not_empty=True,
98 98 messages={
99 99 'empty': _(u'Please enter a password'),
100 100 'tooShort': _(u'Enter %(min)i characters or more')}
101 101 )
102 102
103 103 remember = v.StringBoolean(if_missing=False)
104 104
105 105 chained_validators = [v.ValidAuth(localizer)]
106 106 return _LoginForm
107 107
108 108
109 109 def UserForm(localizer, edit=False, available_languages=None, old_data=None):
110 110 old_data = old_data or {}
111 111 available_languages = available_languages or []
112 112 _ = localizer
113 113
114 114 class _UserForm(formencode.Schema):
115 115 allow_extra_fields = True
116 116 filter_extra_fields = True
117 117 username = All(v.UnicodeString(strip=True, min=1, not_empty=True),
118 118 v.ValidUsername(localizer, edit, old_data))
119 119 if edit:
120 120 new_password = All(
121 121 v.ValidPassword(localizer),
122 122 v.UnicodeString(strip=False, min=6, max=72, not_empty=False)
123 123 )
124 124 password_confirmation = All(
125 125 v.ValidPassword(localizer),
126 126 v.UnicodeString(strip=False, min=6, max=72, not_empty=False),
127 127 )
128 128 admin = v.StringBoolean(if_missing=False)
129 129 else:
130 130 password = All(
131 131 v.ValidPassword(localizer),
132 132 v.UnicodeString(strip=False, min=6, max=72, not_empty=True)
133 133 )
134 134 password_confirmation = All(
135 135 v.ValidPassword(localizer),
136 136 v.UnicodeString(strip=False, min=6, max=72, not_empty=False)
137 137 )
138 138
139 139 password_change = v.StringBoolean(if_missing=False)
140 140 create_repo_group = v.StringBoolean(if_missing=False)
141 141
142 142 active = v.StringBoolean(if_missing=False)
143 143 firstname = v.UnicodeString(strip=True, min=1, not_empty=False)
144 144 lastname = v.UnicodeString(strip=True, min=1, not_empty=False)
145 145 email = All(v.Email(not_empty=True), v.UniqSystemEmail(localizer, old_data))
146 146 extern_name = v.UnicodeString(strip=True)
147 147 extern_type = v.UnicodeString(strip=True)
148 148 language = v.OneOf(available_languages, hideList=False,
149 149 testValueList=True, if_missing=None)
150 150 chained_validators = [v.ValidPasswordsMatch(localizer)]
151 151 return _UserForm
152 152
153 153
154 154 def UserGroupForm(localizer, edit=False, old_data=None, allow_disabled=False):
155 155 old_data = old_data or {}
156 156 _ = localizer
157 157
158 158 class _UserGroupForm(formencode.Schema):
159 159 allow_extra_fields = True
160 160 filter_extra_fields = True
161 161
162 162 users_group_name = All(
163 163 v.UnicodeString(strip=True, min=1, not_empty=True),
164 164 v.ValidUserGroup(localizer, edit, old_data)
165 165 )
166 166 user_group_description = v.UnicodeString(strip=True, min=1,
167 167 not_empty=False)
168 168
169 169 users_group_active = v.StringBoolean(if_missing=False)
170 170
171 171 if edit:
172 172 # this is user group owner
173 173 user = All(
174 174 v.UnicodeString(not_empty=True),
175 175 v.ValidRepoUser(localizer, allow_disabled))
176 176 return _UserGroupForm
177 177
178 178
179 179 def RepoGroupForm(localizer, edit=False, old_data=None, available_groups=None,
180 180 can_create_in_root=False, allow_disabled=False):
181 181 _ = localizer
182 182 old_data = old_data or {}
183 183 available_groups = available_groups or []
184 184
185 185 class _RepoGroupForm(formencode.Schema):
186 186 allow_extra_fields = True
187 187 filter_extra_fields = False
188 188
189 189 group_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
190 190 v.SlugifyName(localizer),)
191 191 group_description = v.UnicodeString(strip=True, min=1,
192 192 not_empty=False)
193 193 group_copy_permissions = v.StringBoolean(if_missing=False)
194 194
195 195 group_parent_id = v.OneOf(available_groups, hideList=False,
196 196 testValueList=True, not_empty=True)
197 197 enable_locking = v.StringBoolean(if_missing=False)
198 198 chained_validators = [
199 199 v.ValidRepoGroup(localizer, edit, old_data, can_create_in_root)]
200 200
201 201 if edit:
202 202 # this is repo group owner
203 203 user = All(
204 204 v.UnicodeString(not_empty=True),
205 205 v.ValidRepoUser(localizer, allow_disabled))
206 206 return _RepoGroupForm
207 207
208 208
209 209 def RegisterForm(localizer, edit=False, old_data=None):
210 210 _ = localizer
211 211 old_data = old_data or {}
212 212
213 213 class _RegisterForm(formencode.Schema):
214 214 allow_extra_fields = True
215 215 filter_extra_fields = True
216 216 username = All(
217 217 v.ValidUsername(localizer, edit, old_data),
218 218 v.UnicodeString(strip=True, min=1, not_empty=True)
219 219 )
220 220 password = All(
221 221 v.ValidPassword(localizer),
222 222 v.UnicodeString(strip=False, min=6, max=72, not_empty=True)
223 223 )
224 224 password_confirmation = All(
225 225 v.ValidPassword(localizer),
226 226 v.UnicodeString(strip=False, min=6, max=72, not_empty=True)
227 227 )
228 228 active = v.StringBoolean(if_missing=False)
229 229 firstname = v.UnicodeString(strip=True, min=1, not_empty=False)
230 230 lastname = v.UnicodeString(strip=True, min=1, not_empty=False)
231 email = All(v.Email(not_empty=True), v.UniqSystemEmail(localizer, old_data))
231 email = All(
232 v.Email(not_empty=True),
233 v.UniqSystemEmail(localizer, old_data),
234 v.UnicodeString(strip=True, min=3))
232 235
233 236 chained_validators = [v.ValidPasswordsMatch(localizer)]
234 237 return _RegisterForm
235 238
236 239
237 240 def PasswordResetForm(localizer):
238 241 _ = localizer
239 242
240 243 class _PasswordResetForm(formencode.Schema):
241 244 allow_extra_fields = True
242 245 filter_extra_fields = True
243 246 email = All(v.ValidSystemEmail(localizer), v.Email(not_empty=True))
244 247 return _PasswordResetForm
245 248
246 249
247 250 def RepoForm(localizer, edit=False, old_data=None, repo_groups=None,
248 251 landing_revs=None, allow_disabled=False):
249 252 _ = localizer
250 253 old_data = old_data or {}
251 254 repo_groups = repo_groups or []
252 255 landing_revs = landing_revs or []
253 256 supported_backends = BACKENDS.keys()
254 257
255 258 class _RepoForm(formencode.Schema):
256 259 allow_extra_fields = True
257 260 filter_extra_fields = False
258 261 repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
259 262 v.SlugifyName(localizer), v.CannotHaveGitSuffix(localizer))
260 263 repo_group = All(v.CanWriteGroup(localizer, old_data),
261 264 v.OneOf(repo_groups, hideList=True))
262 265 repo_type = v.OneOf(supported_backends, required=False,
263 266 if_missing=old_data.get('repo_type'))
264 267 repo_description = v.UnicodeString(strip=True, min=1, not_empty=False)
265 268 repo_private = v.StringBoolean(if_missing=False)
266 269 repo_landing_rev = v.OneOf(landing_revs, hideList=True)
267 270 repo_copy_permissions = v.StringBoolean(if_missing=False)
268 271 clone_uri = All(v.UnicodeString(strip=True, min=1, not_empty=False))
269 272
270 273 repo_enable_statistics = v.StringBoolean(if_missing=False)
271 274 repo_enable_downloads = v.StringBoolean(if_missing=False)
272 275 repo_enable_locking = v.StringBoolean(if_missing=False)
273 276
274 277 if edit:
275 278 # this is repo owner
276 279 user = All(
277 280 v.UnicodeString(not_empty=True),
278 281 v.ValidRepoUser(localizer, allow_disabled))
279 282 clone_uri_change = v.UnicodeString(
280 283 not_empty=False, if_missing=v.Missing)
281 284
282 285 chained_validators = [v.ValidCloneUri(localizer),
283 286 v.ValidRepoName(localizer, edit, old_data)]
284 287 return _RepoForm
285 288
286 289
287 290 def RepoPermsForm(localizer):
288 291 _ = localizer
289 292
290 293 class _RepoPermsForm(formencode.Schema):
291 294 allow_extra_fields = True
292 295 filter_extra_fields = False
293 296 chained_validators = [v.ValidPerms(localizer, type_='repo')]
294 297 return _RepoPermsForm
295 298
296 299
297 300 def RepoGroupPermsForm(localizer, valid_recursive_choices):
298 301 _ = localizer
299 302
300 303 class _RepoGroupPermsForm(formencode.Schema):
301 304 allow_extra_fields = True
302 305 filter_extra_fields = False
303 306 recursive = v.OneOf(valid_recursive_choices)
304 307 chained_validators = [v.ValidPerms(localizer, type_='repo_group')]
305 308 return _RepoGroupPermsForm
306 309
307 310
308 311 def UserGroupPermsForm(localizer):
309 312 _ = localizer
310 313
311 314 class _UserPermsForm(formencode.Schema):
312 315 allow_extra_fields = True
313 316 filter_extra_fields = False
314 317 chained_validators = [v.ValidPerms(localizer, type_='user_group')]
315 318 return _UserPermsForm
316 319
317 320
318 321 def RepoFieldForm(localizer):
319 322 _ = localizer
320 323
321 324 class _RepoFieldForm(formencode.Schema):
322 325 filter_extra_fields = True
323 326 allow_extra_fields = True
324 327
325 328 new_field_key = All(v.FieldKey(localizer),
326 329 v.UnicodeString(strip=True, min=3, not_empty=True))
327 330 new_field_value = v.UnicodeString(not_empty=False, if_missing=u'')
328 331 new_field_type = v.OneOf(['str', 'unicode', 'list', 'tuple'],
329 332 if_missing='str')
330 333 new_field_label = v.UnicodeString(not_empty=False)
331 334 new_field_desc = v.UnicodeString(not_empty=False)
332 335 return _RepoFieldForm
333 336
334 337
335 338 def RepoForkForm(localizer, edit=False, old_data=None,
336 339 supported_backends=BACKENDS.keys(), repo_groups=None,
337 340 landing_revs=None):
338 341 _ = localizer
339 342 old_data = old_data or {}
340 343 repo_groups = repo_groups or []
341 344 landing_revs = landing_revs or []
342 345
343 346 class _RepoForkForm(formencode.Schema):
344 347 allow_extra_fields = True
345 348 filter_extra_fields = False
346 349 repo_name = All(v.UnicodeString(strip=True, min=1, not_empty=True),
347 350 v.SlugifyName(localizer))
348 351 repo_group = All(v.CanWriteGroup(localizer, ),
349 352 v.OneOf(repo_groups, hideList=True))
350 353 repo_type = All(v.ValidForkType(localizer, old_data), v.OneOf(supported_backends))
351 354 description = v.UnicodeString(strip=True, min=1, not_empty=True)
352 355 private = v.StringBoolean(if_missing=False)
353 356 copy_permissions = v.StringBoolean(if_missing=False)
354 357 fork_parent_id = v.UnicodeString()
355 358 chained_validators = [v.ValidForkName(localizer, edit, old_data)]
356 359 landing_rev = v.OneOf(landing_revs, hideList=True)
357 360 return _RepoForkForm
358 361
359 362
360 363 def ApplicationSettingsForm(localizer):
361 364 _ = localizer
362 365
363 366 class _ApplicationSettingsForm(formencode.Schema):
364 367 allow_extra_fields = True
365 368 filter_extra_fields = False
366 369 rhodecode_title = v.UnicodeString(strip=True, max=40, not_empty=False)
367 370 rhodecode_realm = v.UnicodeString(strip=True, min=1, not_empty=True)
368 371 rhodecode_pre_code = v.UnicodeString(strip=True, min=1, not_empty=False)
369 372 rhodecode_post_code = v.UnicodeString(strip=True, min=1, not_empty=False)
370 373 rhodecode_captcha_public_key = v.UnicodeString(strip=True, min=1, not_empty=False)
371 374 rhodecode_captcha_private_key = v.UnicodeString(strip=True, min=1, not_empty=False)
372 375 rhodecode_create_personal_repo_group = v.StringBoolean(if_missing=False)
373 376 rhodecode_personal_repo_group_pattern = v.UnicodeString(strip=True, min=1, not_empty=False)
374 377 return _ApplicationSettingsForm
375 378
376 379
377 380 def ApplicationVisualisationForm(localizer):
378 381 _ = localizer
379 382
380 383 class _ApplicationVisualisationForm(formencode.Schema):
381 384 allow_extra_fields = True
382 385 filter_extra_fields = False
383 386 rhodecode_show_public_icon = v.StringBoolean(if_missing=False)
384 387 rhodecode_show_private_icon = v.StringBoolean(if_missing=False)
385 388 rhodecode_stylify_metatags = v.StringBoolean(if_missing=False)
386 389
387 390 rhodecode_repository_fields = v.StringBoolean(if_missing=False)
388 391 rhodecode_lightweight_journal = v.StringBoolean(if_missing=False)
389 392 rhodecode_dashboard_items = v.Int(min=5, not_empty=True)
390 393 rhodecode_admin_grid_items = v.Int(min=5, not_empty=True)
391 394 rhodecode_show_version = v.StringBoolean(if_missing=False)
392 395 rhodecode_use_gravatar = v.StringBoolean(if_missing=False)
393 396 rhodecode_markup_renderer = v.OneOf(['markdown', 'rst'])
394 397 rhodecode_gravatar_url = v.UnicodeString(min=3)
395 398 rhodecode_clone_uri_tmpl = v.UnicodeString(min=3)
396 399 rhodecode_support_url = v.UnicodeString()
397 400 rhodecode_show_revision_number = v.StringBoolean(if_missing=False)
398 401 rhodecode_show_sha_length = v.Int(min=4, not_empty=True)
399 402 return _ApplicationVisualisationForm
400 403
401 404
402 405 class _BaseVcsSettingsForm(formencode.Schema):
403 406
404 407 allow_extra_fields = True
405 408 filter_extra_fields = False
406 409 hooks_changegroup_repo_size = v.StringBoolean(if_missing=False)
407 410 hooks_changegroup_push_logger = v.StringBoolean(if_missing=False)
408 411 hooks_outgoing_pull_logger = v.StringBoolean(if_missing=False)
409 412
410 413 # PR/Code-review
411 414 rhodecode_pr_merge_enabled = v.StringBoolean(if_missing=False)
412 415 rhodecode_use_outdated_comments = v.StringBoolean(if_missing=False)
413 416
414 417 # hg
415 418 extensions_largefiles = v.StringBoolean(if_missing=False)
416 419 extensions_evolve = v.StringBoolean(if_missing=False)
417 420 phases_publish = v.StringBoolean(if_missing=False)
418 421
419 422 rhodecode_hg_use_rebase_for_merging = v.StringBoolean(if_missing=False)
420 423 rhodecode_hg_close_branch_before_merging = v.StringBoolean(if_missing=False)
421 424
422 425 # git
423 426 vcs_git_lfs_enabled = v.StringBoolean(if_missing=False)
424 427 rhodecode_git_use_rebase_for_merging = v.StringBoolean(if_missing=False)
425 428 rhodecode_git_close_branch_before_merging = v.StringBoolean(if_missing=False)
426 429
427 430 # svn
428 431 vcs_svn_proxy_http_requests_enabled = v.StringBoolean(if_missing=False)
429 432 vcs_svn_proxy_http_server_url = v.UnicodeString(strip=True, if_missing=None)
430 433
431 434
432 435 def ApplicationUiSettingsForm(localizer):
433 436 _ = localizer
434 437
435 438 class _ApplicationUiSettingsForm(_BaseVcsSettingsForm):
436 439 web_push_ssl = v.StringBoolean(if_missing=False)
437 440 paths_root_path = All(
438 441 v.ValidPath(localizer),
439 442 v.UnicodeString(strip=True, min=1, not_empty=True)
440 443 )
441 444 largefiles_usercache = All(
442 445 v.ValidPath(localizer),
443 446 v.UnicodeString(strip=True, min=2, not_empty=True))
444 447 vcs_git_lfs_store_location = All(
445 448 v.ValidPath(localizer),
446 449 v.UnicodeString(strip=True, min=2, not_empty=True))
447 450 extensions_hgsubversion = v.StringBoolean(if_missing=False)
448 451 extensions_hggit = v.StringBoolean(if_missing=False)
449 452 new_svn_branch = v.ValidSvnPattern(localizer, section='vcs_svn_branch')
450 453 new_svn_tag = v.ValidSvnPattern(localizer, section='vcs_svn_tag')
451 454 return _ApplicationUiSettingsForm
452 455
453 456
454 457 def RepoVcsSettingsForm(localizer, repo_name):
455 458 _ = localizer
456 459
457 460 class _RepoVcsSettingsForm(_BaseVcsSettingsForm):
458 461 inherit_global_settings = v.StringBoolean(if_missing=False)
459 462 new_svn_branch = v.ValidSvnPattern(localizer,
460 463 section='vcs_svn_branch', repo_name=repo_name)
461 464 new_svn_tag = v.ValidSvnPattern(localizer,
462 465 section='vcs_svn_tag', repo_name=repo_name)
463 466 return _RepoVcsSettingsForm
464 467
465 468
466 469 def LabsSettingsForm(localizer):
467 470 _ = localizer
468 471
469 472 class _LabSettingsForm(formencode.Schema):
470 473 allow_extra_fields = True
471 474 filter_extra_fields = False
472 475 return _LabSettingsForm
473 476
474 477
475 478 def ApplicationPermissionsForm(
476 479 localizer, register_choices, password_reset_choices,
477 480 extern_activate_choices):
478 481 _ = localizer
479 482
480 483 class _DefaultPermissionsForm(formencode.Schema):
481 484 allow_extra_fields = True
482 485 filter_extra_fields = True
483 486
484 487 anonymous = v.StringBoolean(if_missing=False)
485 488 default_register = v.OneOf(register_choices)
486 489 default_register_message = v.UnicodeString()
487 490 default_password_reset = v.OneOf(password_reset_choices)
488 491 default_extern_activate = v.OneOf(extern_activate_choices)
489 492 return _DefaultPermissionsForm
490 493
491 494
492 495 def ObjectPermissionsForm(localizer, repo_perms_choices, group_perms_choices,
493 496 user_group_perms_choices):
494 497 _ = localizer
495 498
496 499 class _ObjectPermissionsForm(formencode.Schema):
497 500 allow_extra_fields = True
498 501 filter_extra_fields = True
499 502 overwrite_default_repo = v.StringBoolean(if_missing=False)
500 503 overwrite_default_group = v.StringBoolean(if_missing=False)
501 504 overwrite_default_user_group = v.StringBoolean(if_missing=False)
502 505 default_repo_perm = v.OneOf(repo_perms_choices)
503 506 default_group_perm = v.OneOf(group_perms_choices)
504 507 default_user_group_perm = v.OneOf(user_group_perms_choices)
505 508 return _ObjectPermissionsForm
506 509
507 510
508 511 def UserPermissionsForm(localizer, create_choices, create_on_write_choices,
509 512 repo_group_create_choices, user_group_create_choices,
510 513 fork_choices, inherit_default_permissions_choices):
511 514 _ = localizer
512 515
513 516 class _DefaultPermissionsForm(formencode.Schema):
514 517 allow_extra_fields = True
515 518 filter_extra_fields = True
516 519
517 520 anonymous = v.StringBoolean(if_missing=False)
518 521
519 522 default_repo_create = v.OneOf(create_choices)
520 523 default_repo_create_on_write = v.OneOf(create_on_write_choices)
521 524 default_user_group_create = v.OneOf(user_group_create_choices)
522 525 default_repo_group_create = v.OneOf(repo_group_create_choices)
523 526 default_fork_create = v.OneOf(fork_choices)
524 527 default_inherit_default_permissions = v.OneOf(inherit_default_permissions_choices)
525 528 return _DefaultPermissionsForm
526 529
527 530
528 531 def UserIndividualPermissionsForm(localizer):
529 532 _ = localizer
530 533
531 534 class _DefaultPermissionsForm(formencode.Schema):
532 535 allow_extra_fields = True
533 536 filter_extra_fields = True
534 537
535 538 inherit_default_permissions = v.StringBoolean(if_missing=False)
536 539 return _DefaultPermissionsForm
537 540
538 541
539 542 def DefaultsForm(localizer, edit=False, old_data=None, supported_backends=BACKENDS.keys()):
540 543 _ = localizer
541 544 old_data = old_data or {}
542 545
543 546 class _DefaultsForm(formencode.Schema):
544 547 allow_extra_fields = True
545 548 filter_extra_fields = True
546 549 default_repo_type = v.OneOf(supported_backends)
547 550 default_repo_private = v.StringBoolean(if_missing=False)
548 551 default_repo_enable_statistics = v.StringBoolean(if_missing=False)
549 552 default_repo_enable_downloads = v.StringBoolean(if_missing=False)
550 553 default_repo_enable_locking = v.StringBoolean(if_missing=False)
551 554 return _DefaultsForm
552 555
553 556
554 557 def AuthSettingsForm(localizer):
555 558 _ = localizer
556 559
557 560 class _AuthSettingsForm(formencode.Schema):
558 561 allow_extra_fields = True
559 562 filter_extra_fields = True
560 563 auth_plugins = All(v.ValidAuthPlugins(localizer),
561 564 v.UniqueListFromString(localizer)(not_empty=True))
562 565 return _AuthSettingsForm
563 566
564 567
565 568 def UserExtraEmailForm(localizer):
566 569 _ = localizer
567 570
568 571 class _UserExtraEmailForm(formencode.Schema):
569 572 email = All(v.UniqSystemEmail(localizer), v.Email(not_empty=True))
570 573 return _UserExtraEmailForm
571 574
572 575
573 576 def UserExtraIpForm(localizer):
574 577 _ = localizer
575 578
576 579 class _UserExtraIpForm(formencode.Schema):
577 580 ip = v.ValidIp(localizer)(not_empty=True)
578 581 return _UserExtraIpForm
579 582
580 583
581 584 def PullRequestForm(localizer, repo_id):
582 585 _ = localizer
583 586
584 587 class ReviewerForm(formencode.Schema):
585 588 user_id = v.Int(not_empty=True)
586 589 reasons = All()
587 590 mandatory = v.StringBoolean()
588 591
589 592 class _PullRequestForm(formencode.Schema):
590 593 allow_extra_fields = True
591 594 filter_extra_fields = True
592 595
593 596 common_ancestor = v.UnicodeString(strip=True, required=True)
594 597 source_repo = v.UnicodeString(strip=True, required=True)
595 598 source_ref = v.UnicodeString(strip=True, required=True)
596 599 target_repo = v.UnicodeString(strip=True, required=True)
597 600 target_ref = v.UnicodeString(strip=True, required=True)
598 601 revisions = All(#v.NotReviewedRevisions(localizer, repo_id)(),
599 602 v.UniqueList(localizer)(not_empty=True))
600 603 review_members = formencode.ForEach(ReviewerForm())
601 604 pullrequest_title = v.UnicodeString(strip=True, required=True)
602 605 pullrequest_desc = v.UnicodeString(strip=True, required=False)
603 606
604 607 return _PullRequestForm
605 608
606 609
607 610 def IssueTrackerPatternsForm(localizer):
608 611 _ = localizer
609 612
610 613 class _IssueTrackerPatternsForm(formencode.Schema):
611 614 allow_extra_fields = True
612 615 filter_extra_fields = False
613 616 chained_validators = [v.ValidPattern(localizer)]
614 617 return _IssueTrackerPatternsForm
General Comments 0
You need to be logged in to leave comments. Login now