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_logic163918 if not message: 19 message = "A list of URLs separated by whitespace characters" 20 " is needed ('{0}' doesn't seem to be a URL)." 21 self.message = message2224 urls = field.data.split() 25 for u in urls: 26 if not self.is_url(u): 27 raise wtforms.ValidationError(self.message.format(u))284257 6944 if not message: 45 message = "You already have project named '{0}'." 46 self.message = message 47 if not owner: 48 owner = flask.g.user 49 self.owner = owner5052 existing = coprs_logic.CoprsLogic.exists_for_user( 53 self.owner, field.data).first() 54 55 if existing and str(existing.id) != form.id.data: 56 raise wtforms.ValidationError(self.message.format(field.data))728274 if not value: 75 return '' 76 # Replace every whitespace string with one newline 77 # Formats ideally for html form filling, use replace('\n', ' ') 78 # to get space-separated values or split() to get list 79 result = value.strip() 80 regex = re.compile(r"\s+") 81 return regex.sub(lambda x: '\n', result)859087 if value: 88 return helpers.PermissionEnum("request") 89 return helpers.PermissionEnum("nothing")93 94 @staticmethod145 146 def validate_mock_chroots_not_empty(self): 147 have_any = False 148 for c in self.chroots_list: 149 if getattr(self, c).data: 150 have_any = True 151 return have_any 152 153 F.chroots_list = map(lambda x: x.name, 154 models.MockChroot.query.filter( 155 models.MockChroot.is_active == True 156 ).all()) 157 F.chroots_list.sort() 158 # sets of chroots according to how we should print them in columns 159 F.chroots_sets = {} 160 for ch in F.chroots_list: 161 checkbox_default = False 162 if mock_chroots and ch in map(lambda x: x.name, 163 mock_chroots): 164 checkbox_default = True 165 166 setattr(F, ch, wtforms.BooleanField(ch, default=checkbox_default)) 167 if ch[0] in F.chroots_sets: 168 F.chroots_sets[ch[0]].append(ch) 169 else: 170 F.chroots_sets[ch[0]] = [ch] 171 172 return F 17396 class F(wtf.Form): 97 # also use id here, to be able to find out whether user 98 # is updating a copr if so, we don't want to shout 99 # that name already exists 100 id = wtforms.HiddenField() 101 102 name = wtforms.TextField( 103 "Name", 104 validators=[ 105 wtforms.validators.Required(), 106 wtforms.validators.Regexp( 107 re.compile(r"^[\w.-]+$"), 108 message="Name must contain only letters," 109 "digits, underscores, dashes and dots."), 110 CoprUniqueNameValidator(owner=owner), 111 NameNotNumberValidator() 112 ]) 113 114 description = wtforms.TextAreaField("Description") 115 116 instructions = wtforms.TextAreaField("Instructions") 117 118 repos = wtforms.TextAreaField( 119 "Repos", 120 validators=[UrlListValidator()], 121 filters=[StringListFilter()]) 122 123 initial_pkgs = wtforms.TextAreaField( 124 "Initial packages to build", 125 validators=[UrlListValidator()], 126 filters=[StringListFilter()]) 127 128 @property 129 def selected_chroots(self): 130 selected = [] 131 for ch in self.chroots_list: 132 if getattr(self, ch).data: 133 selected.append(ch) 134 return selected135 136 def validate(self): 137 if not super(F, self).validate(): 138 return False 139 140 if not self.validate_mock_chroots_not_empty(): 141 self._mock_chroots_error = "At least one chroot" \ 142 " must be selected" 143 return False 144 return True176 verify = wtforms.TextField( 177 "Confirm deleting by typing 'yes'", 178 validators=[ 179 wtforms.validators.Required(), 180 wtforms.validators.Regexp( 181 r"^yes$", 182 message="Type 'yes' - without the quotes, lowercase.") 183 ])184187 @staticmethod220 221 F.chroots_list = map(lambda x: x.name, active_chroots) 222 F.chroots_list.sort() 223 F.chroots_sets = {} 224 for ch in F.chroots_list: 225 setattr(F, ch, wtforms.BooleanField(ch, default=True)) 226 if ch[0] in F.chroots_sets: 227 F.chroots_sets[ch[0]].append(ch) 228 else: 229 F.chroots_sets[ch[0]] = [ch] 230 231 return F 232189 class F(wtf.Form): 190 @property 191 def selected_chroots(self): 192 selected = [] 193 for ch in self.chroots_list: 194 if getattr(self, ch).data: 195 selected.append(ch) 196 return selected197 198 pkgs = wtforms.TextAreaField( 199 "Pkgs", 200 validators=[ 201 wtforms.validators.Required(), 202 UrlListValidator()], 203 filters=[StringListFilter()]) 204 205 memory_reqs = wtforms.IntegerField( 206 "Memory requirements", 207 validators=[ 208 wtforms.validators.NumberRange( 209 min=constants.MIN_BUILD_MEMORY, 210 max=constants.MAX_BUILD_MEMORY)], 211 default=constants.DEFAULT_BUILD_MEMORY) 212 213 timeout = wtforms.IntegerField( 214 "Timeout", 215 validators=[ 216 wtforms.validators.NumberRange( 217 min=constants.MIN_BUILD_TIMEOUT, 218 max=constants.MAX_BUILD_TIMEOUT)], 219 default=constants.DEFAULT_BUILD_TIMEOUT)235 236 """ 237 Validator for editing chroots in project 238 (adding packages to minimal chroot) 239 """ 240 241 buildroot_pkgs = wtforms.TextField( 242 "Additional packages to be always present in minimal buildroot")243246 comment = wtforms.TextAreaField("Comment")247250 251 @staticmethod 255 256 builder_default = False 257 admin_default = False 258 259 if permission: 260 if permission.copr_builder != helpers.PermissionEnum("nothing"): 261 builder_default = True 262 if permission.copr_admin != helpers.PermissionEnum("nothing"): 263 admin_default = True 264 265 setattr(F, "copr_builder", 266 wtforms.BooleanField( 267 default=builder_default, 268 filters=[ValueToPermissionNumberFilter()])) 269 270 setattr(F, "copr_admin", 271 wtforms.BooleanField( 272 default=admin_default, 273 filters=[ValueToPermissionNumberFilter()])) 274 275 return F276279 280 """Creates a dynamic form for given set of copr permissions""" 281 @staticmethod 285 286 for perm in permissions: 287 builder_choices = helpers.PermissionEnum.choices_list() 288 admin_choices = helpers.PermissionEnum.choices_list() 289 290 builder_default = perm.copr_builder 291 admin_default = perm.copr_admin 292 293 setattr(F, "copr_builder_{0}".format(perm.user.id), 294 wtforms.SelectField( 295 choices=builder_choices, 296 default=builder_default, 297 coerce=int)) 298 299 setattr(F, "copr_admin_{0}".format(perm.user.id), 300 wtforms.SelectField( 301 choices=admin_choices, 302 default=admin_default, 303 coerce=int)) 304 305 return F306308 description = wtforms.TextAreaField('Description', 309 validators=[wtforms.validators.Optional()]) 310 311 instructions = wtforms.TextAreaField('Instructions', 312 validators=[wtforms.validators.Optional()]) 313 314 repos = wtforms.TextAreaField('Repos', 315 validators=[UrlListValidator(), 316 wtforms.validators.Optional()], 317 filters=[StringListFilter()])318320 buildroot_pkgs = wtforms.TextField('Additional packages to be always present in minimal buildroot')321323 playground = wtforms.BooleanField("Playground")324327 project = wtforms.TextField("Project")328
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Wed Aug 27 09:49:48 2014 | http://epydoc.sourceforge.net |