def upload(self, path=None): """ Upload view method `path` Optional directory path. If not provided, will use base directory """ # Get path and verify if it is valid base_path, directory, path = self._normalize_path(path) if not self.can_upload: flash(gettext('File uploading is disabled.'), 'error') return redirect(self._get_dir_url('.index', path)) form = UploadForm(self) if form.validate_on_submit(): filename = op.join(directory, secure_filename(form.upload.data.filename)) if op.exists(filename): flash(gettext('File "%(name)s" already exists.', name=form.upload.data.filename), 'error') else: try: self.save_file(filename, form.upload.data) return redirect(self._get_dir_url('.index', path)) except Exception, ex: flash(gettext('Failed to save file: %(error)s', error=ex))
def delete(self): """ Delete view method """ path = request.form.get('path') if not path: return redirect(url_for('.index')) # Get path and verify if it is valid base_path, full_path, path = self._normalize_path(path) return_url = self._get_dir_url('.index', op.dirname(path)) if not self.can_delete: flash(gettext('Deletion is disabled.')) return redirect(return_url) if op.isdir(full_path): if not self.can_delete_dirs: flash(gettext('Directory deletion is disabled.')) return redirect(return_url) try: shutil.rmtree(full_path) flash(gettext('Directory "%s" was successfully deleted.' % path)) except Exception, ex: flash(gettext('Failed to delete directory: %(error)s', error=ex), 'error')
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) form = NameForm(request.form) if form.validate_on_submit(): try: os.mkdir(op.join(directory, form.name.data)) self.on_mkdir(directory, form.name.data) return redirect(dir_url) except Exception, ex: flash(gettext('Failed to create directory: %(error)s', ex), 'error')
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 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 op.exists(full_path): flash(gettext('Path does not exist.')) return redirect(return_url) form = NameForm(request.form, name=op.basename(path)) if form.validate_on_submit(): try: dir_base = op.dirname(full_path) filename = secure_filename(form.name.data) os.rename(full_path, op.join(dir_base, filename)) flash(gettext('Successfully renamed "%(src)s" to "%(dst)s"', src=op.basename(path), dst=filename)) except Exception, ex: flash(gettext('Failed to rename: %(error)s', error=ex), 'error') return redirect(return_url)
def upload(self, path=None): """ Upload 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) if not self.can_upload: flash(gettext('File uploading is disabled.'), 'error') return redirect(self._get_dir_url('.index', path)) if not self.is_accessible_path(path): flash(gettext(gettext('Permission denied.'))) return redirect(self._get_dir_url('.index')) form = UploadForm(self) if helpers.validate_form_on_submit(form): filename = op.join(directory, secure_filename(form.upload.data.filename)) if op.exists(filename): flash(gettext('File "%(name)s" already exists.', name=filename), 'error') else: try: self.save_file(filename, form.upload.data) self.on_file_upload(directory, path, filename) return redirect(self._get_dir_url('.index', path)) except Exception as ex: flash(gettext('Failed to save file: %(error)s', error=ex)) return self.render(self.upload_template, form=form)
def upload(self, path=None): """ Upload 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) if not self.can_upload: flash(gettext('File uploading is disabled.'), 'error') return redirect(self._get_dir_url('.index', path)) if not self.is_accessible_path(path): flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) form = self.upload_form(self) if helpers.validate_form_on_submit(form): try: self._save_form_files(directory, path, form) return redirect(self._get_dir_url('.index', path)) except Exception as ex: flash(gettext('Failed to save file: %(error)s', error=ex)) return self.render(self.upload_template, form=form)
def index(self, path=None): """ Index 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) if not self.is_accessible_path(path): if self._debug: flash(gettext('Permission denied (%(path)s)', path=directory)) else: flash(gettext('Permission denied.')) return redirect(self._get_dir_url('.index')) # Get directory listing items = [] # Parent directory if directory != base_path: parent_path = op.normpath(op.join(path, '..')) if parent_path == '.': parent_path = None items.append(('..', parent_path, True, 0)) for f in os.listdir(directory): fp = op.join(directory, f) rel_path = op.join(path, f) if self.is_accessible_path(rel_path): items.append((f, rel_path, op.isdir(fp), op.getsize(fp))) # Sort by name items.sort(key=itemgetter(0)) # Sort by type items.sort(key=itemgetter(2), reverse=True) # Generate breadcrumbs accumulator = [] breadcrumbs = [] for n in path.split(os.sep): accumulator.append(n) breadcrumbs.append((n, op.join(*accumulator))) # Actions actions, actions_confirmation = self.get_actions_list() return self.render(self.list_template, dir_path=path, breadcrumbs=breadcrumbs, get_dir_url=self._get_dir_url, get_file_url=self._get_file_url, items=items, actions=actions, actions_confirmation=actions_confirmation)
def validate_upload(self, field): if not self.upload.data: raise validators.ValidationError(gettext('File required.')) filename = self.upload.data.filename if not self.admin.is_file_allowed(filename): raise validators.ValidationError(gettext('Invalid file type.'))
def action_delete(self, items): for path in items: base_path, full_path, path = self._normalize_path(path) try: os.remove(full_path) flash(gettext('File "%(name)s" was successfully deleted.', name=path)) except Exception, ex: flash(gettext('Failed to delete file: %(name)s', name=ex), 'error')
def upload(self, path=None): """ Upload 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) if not self.can_upload: flash(gettext('File uploading is disabled.'), 'error') return redirect(self._get_dir_url('.index', path)) if not self.is_accessible_path(path): flash(gettext(gettext('Permission denied.'))) return redirect(self._get_dir_url('.index')) form = UploadForm(self) #print form, helpers.validate_form_on_submit(form), form.data if helpers.validate_form_on_submit(form): filename = op.join(directory, secure_filename(form.upload.data.filename)) if op.exists(filename): flash(gettext('File "%(name)s" already exists.', name=filename), 'error') else: try: self.save_file(filename, form.upload.data) self.on_file_upload(directory, path, filename) flash('%s was correctly uploaded' % form.upload.data.filename) return redirect(self._get_dir_url('.index', path)) except Exception as ex: flash(gettext('Failed to save file: %(error)s', error=ex)) elif request.form and 'async' in request.form: total_uploaded = 0 for tmp_filename in json.loads(request.form['async']): filename = op.join(directory, secure_filename(form.upload.data.filename)) if op.exists(filename): total_uploaded = total_uploaded + 1 if total_uploaded == 0: flash('Nothing was uploaded', 'error') elif total_uploaded == 1: flash('%s was correctly uploaded' % tmp_filename) return redirect(self._get_dir_url('.index', path)) else: flash('%d files were correctly uploaded' % total_uploaded) return redirect(self._get_dir_url('.index', path)) return self.render(self.upload_template, form=form, dir_path=path)
def action_delete(self, items): if not self.can_delete: flash(gettext('File deletion is disabled.'), 'error') return for path in items: base_path, full_path, path = self._normalize_path(path) if self.is_accessible_path(path): try: os.remove(full_path) flash(gettext('File "%(name)s" was successfully deleted.', name=path)) except Exception as ex: flash(gettext('Failed to delete file: %(name)s', name=ex), 'error')
def rename(self): """ Rename view method """ form = self.name_form() path = form.path.data if path: base_path, full_path, path = self._normalize_path(path) return_url = self._get_dir_url('.index', op.dirname(path)) else: return redirect(self.get_url('.index')) if not self.can_rename: flash(gettext('Renaming is disabled.'), 'error') return redirect(return_url) if not self.is_accessible_path(path): flash(gettext('Permission denied.'), 'error') return redirect(self._get_dir_url('.index')) if not op.exists(full_path): flash(gettext('Path does not exist.'), 'error') return redirect(return_url) if self.validate_form(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) else: helpers.flash_errors(form, message='Failed to rename: %(error)s') return self.render(self.rename_template, form=form, path=op.dirname(path), name=op.basename(path), dir_url=return_url)
def index(self, path=None): """ Index 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) if not self.is_accessible_path(path): flash(gettext(gettext('Permission denied.'))) return redirect(self._get_dir_url('.index')) # Get directory listing items = [] tour_id = request.args.get("tour_id", None) if not access_picture(tour_id): return redirect('/admin') if tour_id: for picture in TourPicture.query.filter(TourPicture.tour_id == tour_id).all(): items.append(get_picture(path, directory, picture)) # Sort by name items.sort(key=itemgetter(0)) # Sort by type items.sort(key=itemgetter(2), reverse=True) # Generate breadcrumbs accumulator = [] breadcrumbs = [] for n in path.split(os.sep): accumulator.append(n) breadcrumbs.append((n, op.join(*accumulator))) # Actions actions, actions_confirmation = self.get_actions_list() return self.render(self.list_template, dir_path=path, breadcrumbs=breadcrumbs, get_dir_url=self._get_dir_url, get_file_url=self._get_file_url, items=items, actions=actions, actions_confirmation=actions_confirmation)
def action_delete(self, ids): try: model_pk = getattr(self.model, self._primary_key) query = self.get_query().filter(model_pk.in_(ids)) if self.fast_mass_delete: count = query.delete(synchronize_session=False) else: count = 0 for m in query.all(): self.session.delete(m) count += 1 self.session.commit() flash(ngettext('Model was successfully deleted.', '%(count)s models were successfully deleted.', count, count=count)) except Exception as ex: if self._debug: raise flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
def edit_view(self): """ Edit model view """ return_url = get_redirect_target() or url_for(".index_view") if not self.can_edit: return redirect(return_url) id = get_mdict_item_or_list(request.args, "id") if id is None: return redirect(return_url) model = self.get_one(id) if model is None: return redirect(return_url) form = self.edit_form(obj=model) if validate_form_on_submit(form): if self.update_model(form, model): if "_continue_editing" in request.form: flash(gettext("Model was successfully saved.")) return redirect(request.url) else: return redirect(return_url) if request.method == "GET": self.on_form_prefill(form, id) form_opts = FormOpts(widget_args=self.form_widget_args, form_rules=self._form_edit_rules) return self.render(self.edit_template, model=model, form=form, form_opts=form_opts, return_url=return_url)
def create_model(self, form): """ Create model helper :param form: Form instance """ try: model = self.model() form.populate_obj(model) self._on_model_change(form, model, True) model.save() except Exception as ex: if self._debug: raise flash(gettext('Failed to create model. %(error)s', error=format_error(ex)), 'error') log.exception('Failed to create model') return False else: self.after_model_change(form, model, True) return True
def _get_list_filter_args(self): if self._filters: filters = [] for n in request.args: if not n.startswith('flt'): continue if '_' not in n: continue pos, key = n[3:].split('_', 1) if key in self._filter_args: idx, flt = self._filter_args[key] value = request.args[n] if flt.validate(value): filters.append((pos, (idx, flt.name, value))) else: flash(gettext('Invalid Filter Value: %(value)s', value=value)) # Sort filters return [v[1] for v in sorted(filters, key=lambda n: n[0])] return None
def edit_view(self): return_url = get_redirect_target() or self.get_url('.index_view') if not self.can_edit: return redirect(return_url) id = get_mdict_item_or_list(request.args, 'id') if id is None: return redirect(return_url) model = self.get_one(id) if model is None: return redirect(return_url) form = self.edit_form(obj=model) if self.validate_form(form): if self.update_model(form, model): if '_continue_editing' in request.form: flash(gettext('Model was successfully saved.')) return redirect(request.url) else: return redirect(return_url) form_widget_args = self.form_widget_args if hasattr(self, 'edit_form_widget_args'): form_widget_args = self.edit_form_widget_args form_opts = FormOpts(widget_args=form_widget_args, form_rules=self._form_edit_rules) template = self.edit_ajax_template if self.edit_ajax == True else self.edit_template return self.render(template, model=model, form=form, form_opts=form_opts, return_url=return_url)
def create_view(self): """ Create model view """ return_url = get_redirect_target() or url_for('.index_view') if not self.can_create: return redirect(return_url) form = self.create_form() if validate_form_on_submit(form): if self.create_model(form): if '_add_another' in request.form: flash(gettext('Model was successfully created.')) return redirect(url_for('.create_view', url=return_url)) else: return redirect(return_url) form_opts = FormOpts(widget_args=self.form_widget_args, form_rules=self._form_create_rules) return self.render(self.create_template, form=form, form_opts=form_opts, return_url=return_url)
def edit_view(self): """ Edit model view """ return_url = request.args.get('url') or url_for('.index_view') if not self.can_edit: return redirect(return_url) id = get_mdict_item_or_list(request.args, 'id') if id is None: return redirect(return_url) model = self.get_one(id) if model is None: return redirect(return_url) form = self.edit_form(obj=model) if validate_form_on_submit(form): if self.update_model(form, model): if '_continue_editing' in request.form: flash(gettext('Model was successfully saved.')) return redirect(request.full_path) else: return redirect(return_url) return self.render(self.edit_template, model=model, form=form, form_opts=get_form_opts(self), form_rules=self._form_edit_rules, return_url=return_url)
def update_model(self, form, model): """ Update model helper :param form: Form instance :param model: Model instance to update """ try: form.populate_obj(model) self._on_model_change(form, model, False) model.save() except Exception as ex: if not self.handle_view_exception(ex): flash(gettext('Failed to update model. %(error)s', error=format_error(ex)), 'error') log.exception('Failed to update model') return False else: self.after_model_change(form, model, False) return True
def action_delete(self, ids): try: model_pk = getattr(self.model, self._primary_key) if self.fast_mass_delete: count = self.model.delete().where(model_pk << ids).execute() else: count = 0 query = self.model.select().filter(model_pk << ids) for m in query: m.delete_instance(recursive=True) count += 1 flash( ngettext( "Model was successfully deleted.", "%(count)s models were successfully deleted.", count, count=count ) ) except Exception as ex: if self._debug: raise flash(gettext("Failed to delete models. %(error)s", error=str(ex)), "error")
def delete_model(self, model): try: model.delete_instance(recursive=True) return True except Exception, ex: flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error') return False
def update_model(self, form, model): """ Update model from form. :param form: Form instance :param model: Model instance """ try: form.populate_obj(model) self._on_model_change(form, model, False) self.session.commit() except Exception as ex: if self._debug: raise flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') logging.exception('Failed to update model') self.session.rollback() return False else: self.after_model_change(form, model, False) return True
def update_model(self, form, model): """更新酒吧和酒吧管理员""" try: form_dict = form_to_dict(form) pub = Pub.query.filter(Pub.id == model.id).first() self._update_pub(pub, form_dict) user = self._get_pub_admin(model.id) if user is None: user = self._get_user(form_dict, pub.id) self.session.add(user) else: if not self._update_user(user, form_dict): return False self._on_model_change(form, model, False) self.session.commit() self.after_update_model(model.id) # 创建菜单,更新数据库资料 except Exception as ex: if self._debug: raise flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') log.exception('Failed to update model') self.session.rollback() return False else: self.after_model_change(form, model, False) return True
def action_delete(self, ids): try: count = 0 id = self.model._meta['id_field'] if id in self.model._fields: if isinstance(self.model._fields[id], IntField): all_ids = [int(pk) for pk in ids] elif isinstance(self.model._fields[id], StringField): all_ids = ids else: all_ids = [self.object_id_converter(pk) for pk in ids] else: all_ids = [self.object_id_converter(pk) for pk in ids] for obj in self.get_query().in_bulk(all_ids).values(): count += self.delete_model(obj) flash(ngettext('Record was successfully deleted.', '%(count)s records were successfully deleted.', count, count=count)) except Exception as ex: if not self.handle_view_exception(ex): flash(gettext('Failed to delete records. %(error)s', error=str(ex)), 'error')
def action_delete(self, ids): try: query = get_query_for_ids(self.get_query(), self.model, ids) if self.fast_mass_delete: count = query.delete(synchronize_session=False) else: count = 0 for m in query.all(): self.session.delete(m) count += 1 self.session.commit() flash(ngettext('Model was successfully deleted.', '%(count)s models were successfully deleted.', count, count=count)) except Exception as ex: if not self.handle_view_exception(ex): raise flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
def action_delete(self, ids): try: query = get_query_for_ids(self.get_query(), self.model, ids) if self.fast_mass_delete: count = query.delete(synchronize_session=False) else: count = 0 for m in query.all(): self.session.delete(m) count += 1 self.session.commit() flash( ngettext( "Model was successfully deleted.", "%(count)s models were successfully deleted.", count, count=count ) ) except Exception as ex: if self._debug: raise flash(gettext("Failed to delete models. %(error)s", error=str(ex)), "error")
def create_model(self, form): """ Create model from form. :param form: Form instance """ try: model = self.model() form.populate_obj(model) self.session.add(model) self._on_model_change(form, model, True) self.session.commit() except Exception as ex: if self._debug: raise flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error') log.exception('Failed to create model') self.session.rollback() return False else: self.after_model_change(form, model, True) return True
def delete_model(self, model): """ Delete model helper :param model: Model instance """ try: pk = self.get_pk_value(model) if not pk: raise ValueError('Document does not have _id') self.on_model_delete(model) self.coll.remove({'_id': pk}) return True except Exception as ex: flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error') log.exception('Failed to delete model') return False
def create_model(self, form): try: model = self.model() form.populate_obj(model) self._on_model_change(form, model, True) model.save() # For peewee have to save inline forms after model was saved save_inline(form, model) except Exception as ex: if self._debug: raise flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error') log.exception('Failed to create model') return False else: self.after_model_change(form, model, True) return True
def edit_view(self): """ Edit model view """ return_url = get_redirect_target() or self.get_url('.index_view') if not self.can_edit: return redirect(return_url) id = get_mdict_item_or_list(request.args, 'id') if id is None: return redirect(return_url) model = self.get_one(id) if model is None: return redirect(return_url) form = self.edit_form(obj=model) if self.validate_form(form): if self.update_model(form, model): if '_continue_editing' in request.form: flash(gettext('Model was successfully saved.')) return redirect(request.url) else: return redirect(return_url) form_widget_args = self.form_widget_args if hasattr(self, 'edit_form_widget_args'): form_widget_args = self.edit_form_widget_args form_opts = FormOpts(widget_args=form_widget_args, form_rules=self._form_edit_rules) return self.render(self.edit_template, model=model, form=form, form_opts=form_opts, return_url=return_url)
def delete(self): """ Delete view method """ path = request.form.get('path') if not path: return redirect(self.get_url('.index')) # Get path and verify if it is valid base_path, full_path, path = self._normalize_path(path) return_url = self._get_dir_url('.index', op.dirname(path)) if not self.can_delete: flash(gettext('Deletion 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 op.isdir(full_path): if not self.can_delete_dirs: flash(gettext('Directory deletion is disabled.')) return redirect(return_url) try: shutil.rmtree(full_path) self.on_directory_delete(full_path, path) flash(gettext('Directory "%(path)s" was successfully deleted.', path=path)) except Exception as ex: flash(gettext('Failed to delete directory: %(error)s', error=ex), 'error') else: try: os.remove(full_path) self.on_file_delete(full_path, path) flash(gettext('File "%(name)s" was successfully deleted.', name=path)) except Exception as ex: flash(gettext('Failed to delete file: %(name)s', name=ex), 'error') return redirect(return_url)
def __call__(self, field, **kwargs): kwargs.setdefault('data-role', 'select2-ajax') kwargs.setdefault('data-url', get_url('.ajax_lookup', name=field.loader.name)) allow_blank = getattr(field, 'allow_blank', False) if allow_blank and not self.multiple: kwargs['data-allow-blank'] = u'1' kwargs.setdefault('id', field.id) kwargs.setdefault('type', 'hidden') if self.multiple: result = [] ids = [] for value in field.data: data = field.loader.format(value) result.append(data) ids.append(as_unicode(data[0])) separator = getattr(field, 'separator', ',') kwargs['value'] = separator.join(ids) kwargs['data-json'] = json.dumps(result) kwargs['data-multiple'] = u'1' else: data = field.loader.format(field.data) if data: kwargs['value'] = data[0] kwargs['data-json'] = json.dumps(data) placeholder = gettext( field.loader.options.get('placeholder', 'Please select model')) kwargs.setdefault('data-placeholder', placeholder) return HTMLString('<input %s>' % html_params(name=field.name, **kwargs))
def create_view(self): """ Create model view """ return_url = request.args.get('url') or url_for('.index_view') if not self.can_create: return redirect(return_url) form = self.create_form(request.form) if form.validate_on_submit(): if self.create_model(form): if '_add_another' in request.form: flash(gettext('Model was successfully created.')) return redirect(url_for('.create_view', url=return_url)) else: return redirect(return_url) return self.render(self.create_template, form=form, return_url=return_url)
def action_delete(self, ids): try: model_pk = getattr(self.model, self._primary_key) if self.fast_mass_delete: count = self.model.delete().where(model_pk << ids).execute() else: count = 0 query = self.model.select().filter(model_pk << ids) for m in query: m.delete_instance(recursive=True) count += 1 flash(ngettext('Record was successfully deleted.', '%(count)s records were successfully deleted.', count, count=count)) except Exception as ex: if not self.handle_view_exception(ex): flash(gettext('Failed to delete records. %(error)s', error=str(ex)), 'error')
def delete_model(self, model): """ Delete model. :param model: Model to delete """ try: self.on_model_delete(model) self.session.flush() self.session.delete(model) self.session.commit() return True except Exception as ex: if self._debug: raise flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error') logging.exception('Failed to delete model') self.session.rollback() return False
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): flash(gettext(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 delete_model(self, model): """ Delete model. :param model: Model to delete """ try: self.on_model_delete(model) self.session.flush() self.session.delete(model) self.session.commit() return True except Exception as ex: if not self.handle_view_exception(ex): flash( gettext('Failed to delete record. %(error)s', error=str(ex)), 'error') log.exception('Failed to delete record.') self.session.rollback() return False
def action_approve(self, ids): try: query = Note.select().where(Note.id << ids) count = 0 for note in query: if not note.printed: note.printed = True note.save() count += 1 flash( ngettext( 'Note was successfully marked printed.', '%(count)s notes were successfully marked as printed.', count, count=count)) except Exception as ex: if not self.handle_view_exception(ex): raise flash( gettext('Failed to mark notes as printed. %(error)s', error=str(ex)), 'error')
def action_delete(self, ids): try: model_pk = getattr(self.model, self._primary_key) query = self.get_query().filter(model_pk.in_(ids)) if self.fast_mass_delete: count = query.delete(synchronize_session=False) else: count = 0 for m in query.all(): self.session.delete(m) count += 1 self.session.commit() flash(ngettext('Model was successfully deleted.', '%(count)s models were successfully deleted.', count, count=count)) except Exception, ex: flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
def action_delete(self, ids): try: query = get_query_for_ids(self.get_query(), self.model, ids) if self.fast_mass_delete: count = query.delete(synchronize_session=False) else: count = 0 for m in query.all(): if self.delete_model(m): count += 1 self.session.commit() flash(ngettext('Model was successfully deleted.', '%(count)s models were successfully deleted.', count, count=count)) except Exception as ex: if not self.handle_view_exception(ex): raise flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
def update_model(self, form, model): """ Update model helper :param form: Form instance :param model: Model instance to update """ try: model.update(form.data) self._on_model_change(form, model, False) pk = self.get_pk_value(model) self.coll.update({'_id': pk}, model) except Exception as ex: flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') log.exception('Failed to update model') return False else: self.after_model_change(form, model, False) return True
def create_model(self, form): """ Create model helper :param form: Form instance """ try: model = self.model() form.populate_obj(model) self._on_model_change(form, model, True) model.save() except Exception as ex: if not self.handle_view_exception(ex): flash(gettext('Failed to create record. %(error)s', error=format_error(ex)), 'error') log.exception('Failed to create record.') return False else: self.after_model_change(form, model, True) return True
def pre_validate(self, form): if (self.data and isinstance(self.data, FileStorage) and not self.is_file_allowed(self.data.filename)): raise ValidationError(gettext('Invalid file extension'))
def _(*args, **kwargs): return gettext(*args, **kwargs)
def operation(self): return gettext('smaller than')
def operation(self): return gettext('greater than')
def operation(self): return gettext('not contains')
def operation(self): return gettext('not equal')
def operation(self): return gettext('equals')
flash(gettext('Directory deletion is disabled.')) return redirect(return_url) try: shutil.rmtree(full_path) flash( gettext('Directory "%s" was successfully deleted.' % path)) except Exception, ex: flash( gettext('Failed to delete directory: %(error)s', error=ex), 'error') else: try: os.remove(full_path) flash( gettext('File "%(name)s" was successfully deleted.', name=path)) except Exception, ex: flash(gettext('Failed to delete file: %(name)s', name=ex), 'error') return redirect(return_url) @expose('/rename/', methods=('GET', 'POST')) def rename(self): """ Rename view method """ path = request.args.get('path') if not path: return redirect(url_for('.index'))
def validate_name(self, field): if not self.regexp.match(field.data): raise wtf.ValidationError(gettext('Invalid directory name'))
def flash_errors(form, message): for field_name, errors in iteritems(form.errors): errors = form[field_name].label.text + u": " + u", ".join(errors) flash(gettext(message, error=str(errors)), 'error')
def operation(self): return gettext('value')
def handle_view_exception(self, exc): if isinstance(exc, IntegrityError): flash(gettext('Integrity error. %(message)s', message=exc.message), 'error') return True return super(ModelView, self).handle_view_exception(exc)
def get_empty_list_message(self): return gettext('There are no items in the table.')
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() error = False if request.method == 'POST': 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: 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 get_instance(self, i): try: return self.model.objects.get(id=i) except self.model.DoesNotExist: flash(gettext("Item not found %(i)s", i=i), "error")