Trees | Indices | Help |
---|
|
1 import re 2 import urlparse 3 4 import flask 5 import wtforms 6 7 from flask.ext import wtf 8 9 from coprs import constants 10 from coprs import helpers 11 from coprs import models 12 from coprs.logic import coprs_logic3817 if not message: 18 message = 'A list of URLs separated by whitespace characters' 19 ' is needed ("{0}" doesn\'t seem to be a URL).' 20 self.message = message2123 urls = field.data.split() 24 for u in urls: 25 if not self.is_url(u): 26 raise wtforms.ValidationError(self.message.format(u))27455247 existing = coprs_logic.CoprsLogic.exists_for_user( 48 flask.g.user, field.data).first() 49 50 if existing and str(existing.id) != form.id.data: 51 raise wtforms.ValidationError(self.message.format(field.data))6456 if not value: 57 return '' 58 # Replace every whitespace string with one newline 59 # Formats ideally for html form filling, use replace('\n', ' ') 60 # to get space-separated values or split() to get list 61 result = value.strip() 62 regex = re.compile(r'\s+') 63 return regex.sub(lambda x: '\n', result)7168 if value: 69 return helpers.PermissionEnum('request') 70 return helpers.PermissionEnum('nothing')74 @staticmethod124 125 def validate_mock_chroots_not_empty(self): 126 have_any = False 127 for c in self.chroots_list: 128 if getattr(self, c).data: 129 have_any = True 130 return have_any 131 132 F.chroots_list = map(lambda x: x.name, 133 models.MockChroot.query.filter( 134 models.MockChroot.is_active == True 135 ).all()) 136 F.chroots_list.sort() 137 # sets of chroots according to how we should print them in columns 138 F.chroots_sets = {} 139 for ch in F.chroots_list: 140 checkbox_default = False 141 if mock_chroots and ch in map(lambda x: x.name, 142 mock_chroots): 143 checkbox_default = True 144 145 setattr(F, ch, wtforms.BooleanField(ch, default=checkbox_default)) 146 if ch[0] in F.chroots_sets: 147 F.chroots_sets[ch[0]].append(ch) 148 else: 149 F.chroots_sets[ch[0]] = [ch] 150 151 return F 15276 class F(wtf.Form): 77 # also use id here, to be able to find out whether user 78 # is updating a copr if so, we don't want to shout 79 # that name already exists 80 id = wtforms.HiddenField() 81 82 name = wtforms.TextField( 83 'Name', 84 validators=[ 85 wtforms.validators.Required(), 86 wtforms.validators.Regexp( 87 re.compile(r'^[\w.-]+$'), 88 message='Name must contain only letters,' 89 'digits, underscores, dashes and dots.'), 90 CoprUniqueNameValidator() 91 ]) 92 93 description = wtforms.TextAreaField('Description') 94 95 instructions = wtforms.TextAreaField('Instructions') 96 97 repos = wtforms.TextAreaField( 98 'Repos', 99 validators=[UrlListValidator()], 100 filters=[StringListFilter()]) 101 102 initial_pkgs = wtforms.TextAreaField( 103 'Initial packages to build', 104 validators=[UrlListValidator()], 105 filters=[StringListFilter()]) 106 107 @property 108 def selected_chroots(self): 109 selected = [] 110 for ch in self.chroots_list: 111 if getattr(self, ch).data: 112 selected.append(ch) 113 return selected114 115 def validate(self): 116 if not super(F, self).validate(): 117 return False 118 119 if not self.validate_mock_chroots_not_empty(): 120 self._mock_chroots_error = 'At least one chroot' \ 121 ' must be selected' 122 return False 123 return True155 verify = wtforms.TextField( 156 'Confirm deleting by typing "yes"', 157 validators=[ 158 wtforms.validators.Required(), 159 wtforms.validators.Regexp( 160 r'^yes$', 161 message='Type "yes" - without the quotes, lowercase.') 162 ])163166 pkgs = wtforms.TextAreaField( 167 'Pkgs', 168 validators=[ 169 wtforms.validators.Required(), 170 UrlListValidator()], 171 filters=[StringListFilter()]) 172 173 memory_reqs = wtforms.IntegerField( 174 'Memory requirements', 175 validators=[ 176 wtforms.validators.NumberRange( 177 min=constants.MIN_BUILD_MEMORY, 178 max=constants.MAX_BUILD_MEMORY)], 179 default=constants.DEFAULT_BUILD_MEMORY) 180 181 timeout = wtforms.IntegerField( 182 'Timeout', 183 validators=[ 184 wtforms.validators.NumberRange( 185 min=constants.MIN_BUILD_TIMEOUT, 186 max=constants.MAX_BUILD_TIMEOUT)], 187 default=constants.DEFAULT_BUILD_TIMEOUT)188190 """ Validator for editing chroots in project (adding packages to minimal chroot) """ 191 buildroot_pkgs = wtforms.TextField('Additional packages to be always present in minimal buildroot')192195 comment = wtforms.TextAreaField('Comment')196199 @staticmethod 203 204 builder_default = False 205 admin_default = False 206 207 if permission: 208 if permission.copr_builder != helpers.PermissionEnum('nothing'): 209 builder_default = True 210 if permission.copr_admin != helpers.PermissionEnum('nothing'): 211 admin_default = True 212 213 setattr(F, 'copr_builder', 214 wtforms.BooleanField( 215 default=builder_default, 216 filters=[ValueToPermissionNumberFilter()])) 217 218 setattr(F, 'copr_admin', 219 wtforms.BooleanField( 220 default=admin_default, 221 filters=[ValueToPermissionNumberFilter()])) 222 223 return F224227 """Creates a dynamic form for given set of copr permissions""" 228 @staticmethod 232 233 for perm in permissions: 234 builder_choices = helpers.PermissionEnum.choices_list() 235 admin_choices = helpers.PermissionEnum.choices_list() 236 237 builder_default = perm.copr_builder 238 admin_default = perm.copr_admin 239 240 setattr(F, 'copr_builder_{0}'.format(perm.user.id), 241 wtforms.SelectField( 242 choices=builder_choices, 243 default=builder_default, 244 coerce=int)) 245 246 setattr(F, 'copr_admin_{0}'.format(perm.user.id), 247 wtforms.SelectField( 248 choices=admin_choices, 249 default=admin_default, 250 coerce=int)) 251 252 return F253
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Tue Jan 28 00:49:28 2014 | http://epydoc.sourceforge.net |