def test_upload_field(): app = Flask(__name__) path = _create_temp() def _remove_testfiles(): safe_delete(path, 'test1.txt') safe_delete(path, 'test2.txt') class TestForm(form.BaseForm): upload = form.FileUploadField('Upload', base_path=path) class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.base_path, path) _remove_testfiles() dummy = Dummy() # Check upload with app.test_request_context( method='POST', data={'upload': (BytesIO(b'Hello World 1'), 'test1.txt')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.txt') ok_(op.exists(op.join(path, 'test1.txt'))) # Check replace with app.test_request_context( method='POST', data={'upload': (BytesIO(b'Hello World 2'), 'test2.txt')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test2.txt') ok_(not op.exists(op.join(path, 'test1.txt'))) ok_(op.exists(op.join(path, 'test2.txt'))) # Check delete with app.test_request_context(method='POST', data={'_upload-delete': 'checked'}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, None) ok_(not op.exists(op.join(path, 'test2.txt')))
def test_upload_field(): app = Flask(__name__) path = _create_temp() def _remove_testfiles(): safe_delete(path, 'test1.txt') safe_delete(path, 'test2.txt') class TestForm(form.BaseForm): upload = form.FileUploadField('Upload', path=path) class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.path, path) _remove_testfiles() dummy = Dummy() # Check upload with app.test_request_context(method='POST', data={'upload': (BytesIO(b'Hello World 1'), 'test1.txt')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.txt') ok_(op.exists(op.join(path, 'test1.txt'))) # Check replace with app.test_request_context(method='POST', data={'upload': (BytesIO(b'Hello World 2'), 'test2.txt')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test2.txt') ok_(not op.exists(op.join(path, 'test1.txt'))) ok_(op.exists(op.join(path, 'test2.txt'))) # Check delete with app.test_request_context(method='POST', data={'_upload-delete': 'checked'}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, None) ok_(not op.exists(op.join(path, 'test2.txt')))
def test_relative_path(): app = Flask(__name__) path = _create_temp() def _remove_testfiles(): safe_delete(path, 'test1.txt') class TestForm(form.BaseForm): upload = form.FileUploadField('Upload', base_path=path, relative_path='inner/') class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.base_path, path) eq_(my_form.upload.relative_path, 'inner/') _remove_testfiles() dummy = Dummy() # Check upload with app.test_request_context(method='POST', data={'upload': (BytesIO(b'Hello World 1'), 'test1.txt')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'inner/test1.txt') ok_(op.exists(op.join(path, 'inner/test1.txt'))) eq_(url_for('static', filename=dummy.upload), '/static/inner/test1.txt')
def create_form(self, obj=None): """ Instantiate model creation form and return it. Override to implement custom behavior. """ return self._create_form_class(get_form_data(), obj=obj)
def mkdir(self, path=None): """ Directory creation view method :param path: Optional directory path. If not provided, will use the base directory """ # Get path and verify if it is valid base_path, directory, path = self._normalize_path(path) dir_url = self._get_dir_url('.index', path) if not self.can_mkdir: flash(gettext('Directory creation is disabled.'), 'error') return redirect(dir_url) if not self.is_accessible_path(path): flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) form = NameForm(helpers.get_form_data()) if helpers.validate_form_on_submit(form): try: os.mkdir(op.join(directory, form.name.data)) self.on_mkdir(directory, form.name.data) return redirect(dir_url) except Exception as ex: flash( gettext('Failed to create directory: %(error)s', error=ex), 'error') return self.render(self.mkdir_template, form=form, dir_url=dir_url)
def mkdir(self, path=None): """ Directory creation view method :param path: Optional directory path. If not provided, will use the base directory """ # Get path and verify if it is valid base_path, directory, path = self._normalize_path(path) dir_url = self._get_dir_url('.index', path) if not self.can_mkdir: flash(gettext('Directory creation is disabled.'), 'error') return redirect(dir_url) if not self.is_accessible_path(path): flash(gettext(gettext('Permission denied.'))) return redirect(self._get_dir_url('.index')) form = NameForm(helpers.get_form_data()) if helpers.validate_form_on_submit(form): try: os.mkdir(op.join(directory, form.name.data)) self.on_mkdir(directory, form.name.data) return redirect(dir_url) except Exception as ex: flash(gettext('Failed to create directory: %(error)s', ex), 'error') return self.render(self.mkdir_template, form=form, dir_url=dir_url)
def edit_form(self, obj=None): """ Instantiate model editing form and return it. Override to implement custom behavior. """ return self._edit_form_class(get_form_data(), obj=obj)
def edit(self): """ Edit view method """ path = request.args.getlist('path') next_url = None if not path: return redirect(url_for('.index')) if len(path) > 1: next_url = url_for('.edit', path=path[1:]) path = path[0] base_path, full_path, path = self._normalize_path(path) dir_url = self._get_dir_url('.index', os.path.dirname(path)) next_url = next_url or dir_url form = EditForm(helpers.get_form_data()) error = False if helpers.validate_form_on_submit(form): form.process(request.form, content='') if form.validate(): try: with open(full_path, 'w') as f: f.write(request.form['content']) except IOError: flash(gettext("Error saving changes to %(name)s.", name=path), 'error') error = True else: self.on_edit_file(full_path, path) flash(gettext("Changes to %(name)s saved successfully.", name=path)) return redirect(next_url) else: try: with open(full_path, 'r') as f: content = f.read() except IOError: flash(gettext("Error reading %(name)s.", name=path), 'error') error = True except: flash(gettext("Unexpected error while reading from %(name)s", name=path), 'error') error = True else: try: content.decode('utf8') except UnicodeDecodeError: flash(gettext("Cannot edit %(name)s.", name=path), 'error') error = True except: flash(gettext("Unexpected error while reading from %(name)s", name=path), 'error') error = True else: form.content.data = content return self.render(self.edit_template, dir_url=dir_url, path=path, form=form, error=error)
def clean(self): """Make validations before save any document""" a = helpers.get_form_data() if a.getlist('preguntas') == []: self.preguntas = [] preguntas = self.preguntas for pregunta in preguntas: if self.asignatura <> pregunta.asignatura: msg = u'Error: La asignatura no se corresponde con la asignatura de las preguntas seleccionadas.' raise ValidationError(msg)
def rename(self): """ Rename view method """ path = request.args.get('path') if not path: return redirect(url_for('.index')) base_path, full_path, path = self._normalize_path(path) return_url = self._get_dir_url('.index', op.dirname(path)) if not self.can_rename: flash(gettext('Renaming is disabled.')) return redirect(return_url) if not self.is_accessible_path(path): if self._debug: flash(gettext('Permission denied (%(path)s)', path=full_path)) else: flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) if not op.exists(full_path): flash(gettext('Path does not exist.')) return redirect(return_url) form = NameForm(helpers.get_form_data(), name=op.basename(path)) if helpers.validate_form_on_submit(form): try: dir_base = op.dirname(full_path) filename = secure_filename(form.name.data) os.rename(full_path, op.join(dir_base, filename)) self.on_rename(full_path, dir_base, filename) flash(gettext('Successfully renamed "%(src)s" to "%(dst)s"', src=op.basename(path), dst=filename)) except Exception as ex: flash(gettext('Failed to rename: %(error)s', error=ex), 'error') return redirect(return_url) return self.render(self.rename_template, form=form, path=op.dirname(path), name=op.basename(path), dir_url=return_url)
def edit_form(self, obj=None): """ Instantiate model editing form and return it. Override to implement custom behavior. """ if not obj: raise ValueError view_subclass = self.subclass.get(obj.__class__) if view_subclass and view_subclass != self.__class__: view = view_subclass(obj.__class__, self.session) return view.edit_form(obj) return self._edit_form_class(get_form_data(), obj=obj)
def rename(self): """ Rename view method """ path = request.args.get('path') if not path: return redirect(self.get_url('.index')) base_path, full_path, path = self._normalize_path(path) return_url = self._get_dir_url('.index', op.dirname(path)) if not self.can_rename: flash(gettext('Renaming is disabled.')) return redirect(return_url) if not self.is_accessible_path(path): flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) if not op.exists(full_path): flash(gettext('Path does not exist.')) return redirect(return_url) form = NameForm(helpers.get_form_data(), name=op.basename(path)) if helpers.validate_form_on_submit(form): try: dir_base = op.dirname(full_path) filename = secure_filename(form.name.data) os.rename(full_path, op.join(dir_base, filename)) self.on_rename(full_path, dir_base, filename) flash( gettext('Successfully renamed "%(src)s" to "%(dst)s"', src=op.basename(path), dst=filename)) except Exception as ex: flash(gettext('Failed to rename: %(error)s', error=ex), 'error') return redirect(return_url) return self.render(self.rename_template, form=form, path=op.dirname(path), name=op.basename(path), dir_url=return_url)
def edit_form(self, obj): """ Create edit form from the MongoDB document """ return self._edit_form_class(get_form_data(), **obj)
def edit_form(self, obj=None): users = models.User.objects(groups=obj) return self._edit_form_class(get_form_data(), obj=obj, users=users)
def test_image_upload_field(): app = Flask(__name__) path = _create_temp() def _remove_testimages(): safe_delete(path, 'test1.png') safe_delete(path, 'test1_thumb.jpg') safe_delete(path, 'test2.png') safe_delete(path, 'test2_thumb.jpg') safe_delete(path, 'test1.jpg') class TestForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, thumbnail_size=(100, 100, True)) class TestNoResizeForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, endpoint='test') class TestAutoResizeForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, max_size=(64, 64, True)) class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.base_path, path) eq_(my_form.upload.endpoint, 'static') _remove_testimages() dummy = Dummy() # Check upload filename = op.join(op.dirname(__file__), 'data', 'copyleft.png') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(op.exists(op.join(path, 'test1_thumb.png'))) # Check replace with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test2.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test2.png') ok_(op.exists(op.join(path, 'test2.png'))) ok_(op.exists(op.join(path, 'test2_thumb.png'))) ok_(not op.exists(op.join(path, 'test1.png'))) ok_(not op.exists(op.join(path, 'test1_thumb.jpg'))) # Check delete with app.test_request_context(method='POST', data={'_upload-delete': 'checked'}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, None) ok_(not op.exists(op.join(path, 'test2.png'))) ok_(not op.exists(op.join(path, 'test2_thumb.png'))) # Check upload no-resize with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestNoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(not op.exists(op.join(path, 'test1_thumb.png'))) # Check upload, auto-resize filename = op.join(op.dirname(__file__), 'data', 'copyleft.png') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestAutoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) filename = op.join(op.dirname(__file__), 'data', 'copyleft.tiff') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.tiff')}): my_form = TestAutoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.jpg') ok_(op.exists(op.join(path, 'test1.jpg')))
def __init__(self, admin): self.admin = admin super(UploadForm, self).__init__(helpers.get_form_data())
def read_form(self, obj=None): return self._read_form_class(get_form_data(), obj=obj)
def edit(self): """ Edit view method """ next_url = None path = request.args.getlist('path') if not path: return redirect(self.get_url('.index')) if len(path) > 1: next_url = self.get_url('.edit', path=path[1:]) path = path[0] base_path, full_path, path = self._normalize_path(path) if not self.is_accessible_path(path) or not self.is_file_editable( path): flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) dir_url = self._get_dir_url('.index', os.path.dirname(path)) next_url = next_url or dir_url form = EditForm(helpers.get_form_data()) error = False if helpers.validate_form_on_submit(form): form.process(request.form, content='') if form.validate(): try: with open(full_path, 'w') as f: f.write(request.form['content']) except IOError: flash( gettext("Error saving changes to %(name)s.", name=path), 'error') error = True else: self.on_edit_file(full_path, path) flash( gettext("Changes to %(name)s saved successfully.", name=path)) return redirect(next_url) else: try: with open(full_path, 'r') as f: content = f.read() except IOError: flash(gettext("Error reading %(name)s.", name=path), 'error') error = True except: flash( gettext("Unexpected error while reading from %(name)s", name=path), 'error') error = True else: try: content = content.decode('utf8') except UnicodeDecodeError: flash(gettext("Cannot edit %(name)s.", name=path), 'error') error = True except: flash( gettext("Unexpected error while reading from %(name)s", name=path), 'error') error = True else: form.content.data = content return self.render(self.edit_template, dir_url=dir_url, path=path, form=form, error=error)
def edit(self): """ Edit view method """ next_url = None path = request.args.getlist("path") if not path: return redirect(self.get_url(".index")) if len(path) > 1: next_url = self.get_url(".edit", path=path[1:]) path = path[0] base_path, full_path, path = self._normalize_path(path) if not self.is_accessible_path(path) or not self.is_file_editable(path): flash(gettext("Permission denied.")) return redirect(self._get_dir_url(".index")) dir_url = self._get_dir_url(".index", os.path.dirname(path)) next_url = next_url or dir_url form = EditForm(helpers.get_form_data()) error = False if helpers.validate_form_on_submit(form): form.process(request.form, content="") if form.validate(): try: with open(full_path, "w") as f: f.write(request.form["content"]) except IOError: flash(gettext("Error saving changes to %(name)s.", name=path), "error") error = True else: self.on_edit_file(full_path, path) flash(gettext("Changes to %(name)s saved successfully.", name=path)) return redirect(next_url) else: try: with open(full_path, "r") as f: content = f.read() except IOError: flash(gettext("Error reading %(name)s.", name=path), "error") error = True except: flash(gettext("Unexpected error while reading from %(name)s", name=path), "error") error = True else: try: content = content.decode("utf8") except UnicodeDecodeError: flash(gettext("Cannot edit %(name)s.", name=path), "error") error = True except: flash(gettext("Unexpected error while reading from %(name)s", name=path), "error") error = True else: form.content.data = content return self.render(self.edit_template, dir_url=dir_url, path=path, form=form, error=error)
def test_image_upload_field(): app = Flask(__name__) path = _create_temp() def _remove_testimages(): safe_delete(path, 'test1.png') safe_delete(path, 'test1_thumb.jpg') safe_delete(path, 'test2.png') safe_delete(path, 'test2_thumb.jpg') safe_delete(path, 'test1.jpg') safe_delete(path, 'test1.jpeg') safe_delete(path, 'test1.gif') safe_delete(path, 'test1.png') safe_delete(path, 'test1.tiff') class TestForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, thumbnail_size=(100, 100, True)) class TestNoResizeForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, endpoint='test') class TestAutoResizeForm(form.BaseForm): upload = form.ImageUploadField('Upload', base_path=path, max_size=(64, 64, True)) class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.base_path, path) eq_(my_form.upload.endpoint, 'static') _remove_testimages() dummy = Dummy() # Check upload filename = op.join(op.dirname(__file__), 'data', 'copyleft.png') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(op.exists(op.join(path, 'test1_thumb.png'))) # Check replace with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test2.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test2.png') ok_(op.exists(op.join(path, 'test2.png'))) ok_(op.exists(op.join(path, 'test2_thumb.png'))) ok_(not op.exists(op.join(path, 'test1.png'))) ok_(not op.exists(op.join(path, 'test1_thumb.jpg'))) # Check delete with app.test_request_context(method='POST', data={'_upload-delete': 'checked'}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, None) ok_(not op.exists(op.join(path, 'test2.png'))) ok_(not op.exists(op.join(path, 'test2_thumb.png'))) # Check upload no-resize with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestNoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(not op.exists(op.join(path, 'test1_thumb.png'))) # Check upload, auto-resize filename = op.join(op.dirname(__file__), 'data', 'copyleft.png') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestAutoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) filename = op.join(op.dirname(__file__), 'data', 'copyleft.tiff') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.tiff')}): my_form = TestAutoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.jpg') ok_(op.exists(op.join(path, 'test1.jpg'))) # check allowed extensions for extension in ('gif', 'jpg', 'jpeg', 'png', 'tiff'): filename = 'copyleft.' + extension filepath = op.join(op.dirname(__file__), 'data', filename) with open(filepath, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, filename)}): my_form = TestNoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, my_form.upload.data.filename) # check case-sensitivity for extensions filename = op.join(op.dirname(__file__), 'data', 'copyleft.jpg') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'copyleft.JPG')}): my_form = TestNoResizeForm(helpers.get_form_data()) ok_(my_form.validate())
def create_form(self, obj=None): """ instantiate the custom forms based on selected template """ self._create_form_class = self.get_create_form() form = self._create_form_class(get_form_data(), obj=obj) return form
def test_image_upload_field(): app = Flask(__name__) path = _create_temp() def _remove_testimages(): safe_delete(path, 'test1.png') safe_delete(path, 'test1_thumb.jpg') safe_delete(path, 'test2.png') safe_delete(path, 'test2_thumb.jpg') class TestForm(form.BaseForm): upload = form.ImageUploadField('Upload', path=path, thumbnail_size=(100, 100, True)) class TestNoResizeForm(form.BaseForm): upload = form.ImageUploadField('Upload', path=path) class Dummy(object): pass my_form = TestForm() eq_(my_form.upload.path, path) eq_(my_form.upload.endpoint, 'static') _remove_testimages() dummy = Dummy() # Check upload filename = op.join(op.dirname(__file__), 'data', 'copyleft.png') with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(op.exists(op.join(path, 'test1_thumb.jpg'))) # Check replace with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test2.png')}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test2.png') ok_(op.exists(op.join(path, 'test2.png'))) ok_(op.exists(op.join(path, 'test2_thumb.jpg'))) ok_(not op.exists(op.join(path, 'test1.png'))) ok_(not op.exists(op.join(path, 'test1_thumb.jpg'))) # Check delete with app.test_request_context(method='POST', data={'_upload-delete': 'checked'}): my_form = TestForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, None) ok_(not op.exists(op.join(path, 'test2.png'))) ok_(not op.exists(op.join(path, 'test2_thumb.jpg'))) # Check upload no-resize with open(filename, 'rb') as fp: with app.test_request_context(method='POST', data={'upload': (fp, 'test1.png')}): my_form = TestNoResizeForm(helpers.get_form_data()) ok_(my_form.validate()) my_form.populate_obj(dummy) eq_(dummy.upload, 'test1.png') ok_(op.exists(op.join(path, 'test1.png'))) ok_(op.exists(op.join(path, 'test1_thumb.jpg')))
def clean(self): """Make validations before save any document""" a = helpers.get_form_data() if a.getlist('asignaturas') == []: self.asignaturas = []