class EditScheduledChangeNewReleaseForm(ScheduledChangeTimeForm): """Any Release field may be changed when editing an Scheduled Change for a new Release.""" name = StringField('Name', validators=[Optional()]) product = StringField('Product', validators=[Optional()]) data = JSONStringField(None, 'Data', validators=[Optional()], widget=FileInput()) sc_data_version = IntegerField('sc_data_version', validators=[InputRequired()], widget=HiddenInput())
class CompleteReleaseForm(Form): name = StringField('Name', validators=[Required()]) product = StringField('Product', validators=[Required()]) blob = JSONStringField({}, 'Data', validators=[Required()], widget=FileInput()) data_version = IntegerField('data_version', widget=HiddenInput())
class EditScheduledChangeExistingReleaseForm(ScheduledChangeTimeForm): """Only data may be changed when editing an existing Scheduled Change for a Release. Name cannot be changed because it is a PK field, and product cannot be changed because it almost never makes sense to (and can be done by deleting/recreating instead).""" data = JSONStringField(None, 'Data', validators=[Optional()], widget=FileInput()) data_version = IntegerField('data_version', widget=HiddenInput()) sc_data_version = IntegerField('sc_data_version', validators=[InputRequired()], widget=HiddenInput())
class ScheduledChangeNewReleaseForm(ScheduledChangeTimeForm): """All Release fields (name, product, data) are required when creating a new Release, so they must be provided when Scheduling a Change that does the same.""" name = StringField('Name', validators=[InputRequired()]) product = StringField('Product', validators=[InputRequired()]) data = JSONStringField({}, 'Data', validators=[InputRequired()], widget=FileInput()) change_type = SelectField("Change Type", choices=[('insert', 'insert'), ('update', 'update'), ('delete'), ('delete')])
class ScheduledChangeExistingReleaseForm(ScheduledChangeTimeForm): """Name must be provided when Scheduling a Change that modifies an existing Release so that we can identify it. Other Release fields (product, data) are optional.""" name = StringField('Name', validators=[InputRequired()]) product = StringField('Product', validators=[Optional()]) data = JSONStringField({}, 'Data', validators=[Optional()], widget=FileInput()) data_version = IntegerField('data_version', validators=[InputRequired()], widget=HiddenInput()) change_type = SelectField("Change Type", choices=[('insert', 'insert'), ('update', 'update'), ('delete'), ('delete')])
def __call__(self, field, **kwargs): if field.accept: kwargs[u'accept'] = ','.join(field.accept) return _FileInput.__call__(self, field, **kwargs)
class BlobUploadField(fields.StringField): widget = FileInput() def __init__(self, label=None, allowed_extensions=None, size_field=None, filename_field=None, mimetype_field=None, **kwargs): self.allowed_extensions = allowed_extensions self.size_field = size_field self.filename_field = filename_field self.mimetype_field = mimetype_field validators = [required()] super(BlobUploadField, self).__init__(label, validators, **kwargs) def is_file_allowed(self, filename): """ Check if file extension is allowed. :param filename: File name to check """ if not self.allowed_extensions: return True return ('.' in filename and filename.rsplit('.', 1)[1].lower() in map( lambda x: x.lower(), self.allowed_extensions)) def _is_uploaded_file(self, data): return (data and isinstance(data, FileStorage) and data.filename) def pre_validate(self, form): super(BlobUploadField, self).pre_validate(form) if self._is_uploaded_file( self.data) and not self.is_file_allowed(self.data.filename): raise ValidationError( 'Format no valid. Formats acceptats: ' '[.pdf, .doc, .docx, .xls, .xlsx, jpeg, png, jpg, gif]') def process_formdata(self, valuelist): if valuelist: data = valuelist[0] self.data = data def populate_obj(self, obj, name): if self._is_uploaded_file(self.data): _blob = self.data.read() setattr(obj, name, _blob) if self.size_field: setattr(obj, self.size_field, len(_blob)) if self.filename_field: setattr(obj, self.filename_field, self.data.filename) if self.mimetype_field: setattr(obj, self.mimetype_field, self.data.content_type)
class BlobUploadField(fields.StringField): widget = FileInput() def __init__(self, label=None, allowed_extensions=None, size_field=None, filename_field=None, mimetype_field=None, **kwargs): self.allowed_extensions = allowed_extensions self.size_field = size_field self.filename_field = filename_field self.mimetype_field = mimetype_field # validators = [required()] validators = [] super(BlobUploadField, self).__init__(label, validators, **kwargs) def is_file_allowed(self, filename): """ Check if file extension is allowed. :param filename: File name to check """ if not self.allowed_extensions: return True return ('.' in filename and filename.rsplit('.', 1)[1].lower() in map( lambda x: x.lower(), self.allowed_extensions)) def _is_uploaded_file(self, data): return data and data.filename def pre_validate(self, form): super(BlobUploadField, self).pre_validate(form) if (self._is_uploaded_file(self.data) and not self.is_file_allowed(self.data.filename)): raise ValidationError(gettext('Invalid file extension')) def process_formdata(self, valuelist): if valuelist: data = valuelist[0] self.data = data def populate_obj(self, obj, name): if self._is_uploaded_file(self.data): _blob = self.data.read() setattr(obj, name, _blob) if self.size_field: setattr(obj, self.size_field, len(_blob)) ''' if self.filename_field: setattr(obj, self.filename_field, self.data.filename) ''' if self.mimetype_field: setattr(obj, self.mimetype_field, self.data.content_type)
class NewReleaseForm(Form): name = StringField('Name', validators=[Required()]) version = StringField('Version', validators=[Required()]) product = StringField('Product', validators=[Required()]) blob = JSONStringField('Data', validators=[Required()], widget=FileInput())
class UploadForm(FlaskForm): filename = FileInput() submit = SubmitField('Upload')
class UploadForm(Form): img = FileField(u"Select image file:", validators=[file_required(), file_allowed(images, "Images only!")], widget=FileInput())
def __call__(self, field, **kwargs): if field.accept: kwargs[u"accept"] = ",".join(field.accept) return _FileInput.__call__(self, field, **kwargs)
def __call__(self, field, **kwargs): if field.accept: kwargs[u'accept'] = ','.join(field.accept) return _FileInput.__call__(self, field, **kwargs)
def __init__(self): self._field_renderer = FileInput()