class FileView(AdminView): def _list_thumbnail(view, context, model, name): if model.file_type.startswith("image"): return Markup('<img src="%s">' % model.url) return Markup( '<a href="%s" target="_blank">%s</a>' % (model.url, model.name)) def _prefix_name(obj, file_data): part = op.splitext(file_data.filename) obj.name = secure_filename('%s%s' % part) obj.file_type = file_data.content_type obj.size = gen_size(file_data) obj.hash = gen_hash(file_data) file_data.seek(0) return obj.relpath column_filters = ["file_type", "path.name"] column_editable_list = ["name", "path"] column_searchable_list = ["name"] column_exclude_list = ["updated_at"] column_formatters = {'hash': _list_thumbnail} form_excluded_columns = ['hash', "name", "file_type", "size"] form_extra_fields = { "filename": form.FileUploadField( "File", namegen=_prefix_name, base_path=config.UPLOAD_FOLDER, allowed_extensions=config.UPLOAD_ALLOWED_EXTENSIONS, ) }
class FileModelView(SecureModelView): """ModelView for files.""" edit_template = "/admin/edit_file.html" create_template = "/admin/edit_file.html" list_template = "/admin/list_file.html" form_extra_fields = { "file": form.FileUploadField( "Datei", base_path=FILE_DIR ) } def on_model_change(self, form, model, is_created): if form.file.data is None: if request.form["filename"] != request.form["old_filename"]: os.rename( files.path(request.form["old_filename"]), files.path(request.form["filename"]) ) else: if form.filename.data != form.file.data.filename: os.rename( files.path(form.file.data.filename), files.path(form.filename.data) )
class DocumentView(AdminModelView): form_extra_fields = { "filename": form.FileUploadField( "Image", base_path=config("UPLOADED_DOCUMENTS_DEST"), namegen=_imagename_uuid1_gen, ) }
class FileView(AdminModelView): column_list = ["file", "name", "filename", "size", "url"] form_extra_fields = { "filename": form.FileUploadField( "File", base_path=app.config["UPLOADED_ALL_DEST"], namegen=_imagename_uuid1_gen, ) }
class PostAdminView(AdminMixin, BaseModelView, sqla.ModelView): def _list_thumbnail(view, context, model, name): if not model.path: return '' url = url_for('static', filename=os.path.join('img/post_image/', model.path)) if model.type in ['jpg', 'jpeg', 'png', 'svg', 'gif']: return Markup('<img src="%s" width="100">' % url) column_formatters = {'path': _list_thumbnail} form_extra_fields = { 'file': form.FileUploadField('file', base_path='static/img/post_image/') } def _change_path_data(self, _form): try: storage_file = _form.file.data if storage_file is not None: hash = random.getrandbits(128) ext = storage_file.filename.split('.')[-1] path = '%s.%s' % (hash, ext) storage_file.save( os.path.join(app.config['UPLOADED_PATH'], path)) _form.name.data = _form.name.data or storage_file.filename _form.path.data = path _form.type.data = ext del _form.file except Exception as ex: pass return _form def edit_form(self, obj=None): return self._change_path_data( super(PostAdminView, self).edit_form(obj)) def create_form(self, obj=None): return self._change_path_data( super(PostAdminView, self).create_form(obj)) form_columns = [ 'title', 'short_description', 'body', 'tags', 'path', 'type', 'file' ] column_searchable_list = ['id']
class StorageAdminModel(sqla.ModelView): def _list_thumbnail(view, context, model, name): if not model.path: return '' url = url_for('static', filename=os.path.join('storage/', model.path)) if model.type in ['jpg', 'jpeg', 'png', 'svg', 'gif']: return Markup('<img src="%s" width="100">' % url) column_formatters = {'path': _list_thumbnail} form_extra_fields = { 'file': form.FileUploadField('file', '', app.config['STORAGE']) } def _change_path_data(self, _form): try: storage_file = _form.file.data if storage_file is not None: hash = random.getrandbits(128) ext = storage_file.filename.split('.')[-1] path = '%s.%s' % (hash, ext) storage_file.save(os.path.join(app.config['STORAGE'], path)) _form.name.data = _form.name.data or storage_file.filename _form.path.data = path _form.type.data = ext del _form.file except Exception as ex: pass return _form def edit_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).edit_form(obj)) def create_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).create_form(obj))
class SongCustomAdminView(ModelView): form_columns = ['name', 'author', 'difficulty', 'lyrics', 'language', 'song_file'] def is_accessible(self): return current_user.has_role('admin') def inaccessible_callback(self, name, **kwargs): return redirect(url_for('general.index', next=request.url)) def on_model_change(self, form, model, is_created): model.path = form.song_file.data.filename return super(SongCustomAdminView, self).on_model_change(form, model, is_created) form_extra_fields = { 'song_file': form.FileUploadField('Song file', base_path='karaoke_online_hakaton/static/songs', namegen=generate_song_name) }
class FileView(AdminView): # Override form field to use Flask-Admin FileUploadField # form_overrides = { # 'video_name': form.FileUploadField('File') # } # Pass additional parameters to 'path' to FileUploadField constructor # form_args = { # 'img_path': { # 'label': 'File', # 'base_path': MEDIA_PATH, # 'allow_overwrite': False # } # } form_extra_fields = { 'video_name': form.FileUploadField('File', base_path=MEDIA_PATH), } form_excluded_columns = ['video_url', 'content_html']
class ProjectModelView(ModelView): form_extra_fields = { "photo": form.FileUploadField("photo", base_path="static/img") } def _change_path_data(self, _form): try: storage_file = _form.file.data if storage_file is not None: hash = random.getrandbits(64) ext = storage_file.filename.split(".")[-1] path = "%s.%s" % (hash, ext) print(path) storage_file_save(os.path.join(app.config["STORAGE"], path)) _form.photo.data = path del _form.file except Exception as ex: pass return _form def edit_form(self, obj=None): return self._change_path_data( super(ProjectModelView, self).edit_form(obj)) def create_form(self, obj=None): return self._change_path_data( super(ProjectModelView, self).create_form(obj)) def is_accessible(self): if current_user.is_authenticated: return current_user.login == "root" else: pass
class StorageAdminModel(sqla.ModelView): form_extra_fields = { 'file': form.FileUploadField('file') } def _change_path_data(self, _form): try: storage_file = _form.file.data if storage_file is not None: hash = random.getrandbits(128) ext = storage_file.filename.split('.')[-1] path = '%s.%s' % (hash, ext) storage_file.save( os.path.join(app.config['STORAGE'], path) ) _form.name.data = _form.name.data or storage_file.filename _form.path.data = path _form.type.data = ext del _form.file except Exception as ex: pass return _form def edit_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).edit_form(obj) ) def create_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).create_form(obj) )
class TestForm(form.BaseForm): upload = form.FileUploadField('Upload', base_path=path)
class TestForm(form.BaseForm): upload = form.FileUploadField('Upload', base_path=path, relative_path='inner/')
class TestNoOverWriteForm(form.BaseForm): upload = form.FileUploadField("Upload", base_path=path, allow_overwrite=False)
class TestForm(form.BaseForm): upload = form.FileUploadField("Upload", base_path=path, relative_path="inner/")
class StorageAdminModel(RootView): list_template = 'import.html' form_extra_fields = {'file': form.FileUploadField('file')} def chanse(self, names, type): try: if type == "int": if str(names) == "nan": return 0 return int(names) elif type == "str": if str(names) == "nan": return "'" return str(names) else: if str(names) == "nan": return [] return list(names.split(",")) except Exception as e: print(e) # def _change_path_data(self, _form): # try: # storage_file = _form.file.data # # if storage_file is not None: # hash = random.getrandbits(128) # ext = storage_file.filename.split('.')[-1] # path = '%s.%s' % (hash, ext) # # storage_file.save( # os.path.join("files", path) # ) # # _form.name.data = path # _form.type.data = ext # del _form.file # # df = pd.read_excel( os.path.join("files", path), sheet_name='Tablib Dataset') # # for i in range(0, len(df.values.tolist())): # try: # bot = StorageAdminModel.chanse(self, df['Bot'][i], "str") # bot = ''.join(bot) # user_id =StorageAdminModel.chanse(self, df['User Id'][i], "int"), # user_id = user_id[0] # username = StorageAdminModel.chanse(self, df['Username'][i], "str"), # username = ''.join(username) # first_name =StorageAdminModel.chanse(self, df['First Name'][i], "str") , # first_name = ''.join(first_name) # last_name =StorageAdminModel.chanse(self, df['Last Name'][i], "str") , # last_name = ''.join(last_name) # state = StorageAdminModel.chanse(self, df['State'][i], "str"), # state = ''.join(state) # is_admin =StorageAdminModel.chanse(self, df['Is Admin'][i], "str") , # is_admin = ''.join(is_admin) # if is_admin == 'True': # is_admin = True # else: # is_admin = False # city = StorageAdminModel.chanse(self, df['City'][i], "str"), # city = ''.join(city) # good = StorageAdminModel.chanse(self, df['Good'][i], "str"), # good = ''.join(good) # district = StorageAdminModel.chanse(self, df['District'][i], "str"), # district = ''.join(district) # payment = StorageAdminModel.chanse(self, df['Payment'][i], "str"), # payment = ''.join(payment) # code = StorageAdminModel.chanse(self, df['Code'][i], "str"), # code = ''.join(code) # clicked_goods = StorageAdminModel.chanse(self, df['Clicked Goods'][i], "list"), # ordered_goods = StorageAdminModel.chanse(self, df['Ordered Goods'][i], "list"), # balance =StorageAdminModel.chanse(self, df['Balance'][i], "int"), # balance= balance[0] # tax = StorageAdminModel.chanse(self, df['Tax'][i], "int"), # tax = tax[0] # wallet = StorageAdminModel.chanse(self, df['Wallet'][i], "str"), # wallet = ''.join(wallet) # datetime = StorageAdminModel.chanse(self, df['Datetime'][i], "str") # datetime = ''.join(datetime) # try: # bots = BotProfile.objects.get(name=bot) # # print(bots, "@@@@@") # except: # bots = None # try: # city = City.objects.get(name=city) # # print(city, "@@@@@") # except: # city = None # try: # good = Good.objects.get(name=good) # # print(good, "@@@@@") # except: # good = None # try: # cli = [] # clicked_goods = (list(clicked_goods)[0]) # if len(clicked_goods) == 1: # cli.append(Good.objects.get(name=clicked_goods[0])) # else: # for i in clicked_goods: # try: # cli.append(Good.objects.get(name=i.replace(' ', ''))) # except Exception as e: # print(e) # pass # # print(cli, "@@@@@@!") # if cli == []: # cli = None # except Exception as e: # print(e) # cli = None # try: # orde = [] # ordered_goods = (list(ordered_goods)[0]) # if len(ordered_goods) == 1: # orde.append(Good.objects.get(name= ordered_goods[0])) # else: # for i in ordered_goods: # try: # # print(i) # orde.append(Good.objects.get(name= i.replace(' ', ''))) # except Exception as e: # print(e) # pass # # print(orde, "@@@@@@!!") # if orde == []: # orde = None # except: # orde = None # try: # district = District.objects.get(name=district) # # print(district, "@@@@@") # except: # district = None # try: # payment = Payment.objects.get(payment_name=payment) # # print(payment, "@@@@@") # except: # payment = None # try: # User( # bot=bots, # user_id=user_id, # username=username, # first_name=first_name, # last_name=last_name, # state=state, # is_admin=is_admin, # city=city, # good=good, # district=district, # payment=payment, # code=code, # clicked_goods=cli, # ordered_goods=orde, # balance=balance, tax=tax, # wallet=wallet, # datetime=datetime).save() # flash('Отправлено', category='success') # except Exception as e: # print(e) # User( # # bot=bot, # user_id=user_id, # username=username, # first_name=first_name, # last_name=last_name, # state=state, # is_admin=is_admin, # # city=city, # # good=good,district=district, payment=payment, # code=code, # # clicked_goods=clicked_goods, # # ordered_goods=ordered_goods, # balance=balance,tax=tax, # wallet=wallet, # datetime=datetime).save() # flash('Отправлено без связанных полеи', category='success') # except Exception as e: # print(e) # # # except Exception as ex: # print(ex) # return _form def _change_path_data(self, _form): try: storage_file = _form.file.data if storage_file is not None: hash = random.getrandbits(128) ext = storage_file.filename.split('.')[-1] path = '%s.%s' % (hash, ext) storage_file.save(os.path.join("files", path)) _form.name.data = path _form.type.data = ext del _form.file df = pd.read_excel(os.path.join("files", path), sheet_name='Tablib Dataset') for i in range(0, len(df.values.tolist())): try: user_id = StorageAdminModel.chanse( self, df['User Id'][i], "int"), user_id = user_id[0] first_name = StorageAdminModel.chanse( self, df['First Name'][i], "str"), first_name = ''.join(first_name) last_name = StorageAdminModel.chanse( self, df['Last Name'][i], "str"), last_name = ''.join(last_name) try: User(user_id=user_id, first_name=first_name, last_name=last_name).save() flash('Отправлено', category='success') except Exception as e: print(e) flash('Не валидные данные', category='danger') except Exception as e: print(e) except Exception as ex: print(ex) return _form def edit_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).edit_form(obj)) def create_form(self, obj=None): return self._change_path_data( super(StorageAdminModel, self).create_form(obj))
class ContentView(ModelView): column_editable_list = [ 'title', ] column_searchable_list = [ 'title', 'subtitle', ] column_filters = [ 'title', 'id', 'subtitle', ] column_list = [ "id", "title", "subtitle", "cover_art", "script", "source", "audio", "other", "download" ] # edit_modal = True can_export = True page_size = 50 extra_js = ['//cdn.ckeditor.com/4.6.0/standard/ckeditor.js'] can_view_details = True column_display_pk = True column_hide_backrefs = False column_formatters = { "cover_art": lambda v, context, model, name: model.cover_art.url, "source": lambda v, context, model, name: enumerate_objects(model.source.all()), "audio": lambda v, context, model, name: enumerate_objects(model.audio.all()), "other": lambda v, context, model, name: enumerate_objects(model.other.all()), "download": lambda v, context, model, name: enumerate_objects(model.download.all() ), } inline_models = ( Source, Audio, Other, Download, ) column_editable_list = [ 'title', ] can_export = True extra_js = ['//cdn.ckeditor.com/4.6.0/standard/ckeditor.js'] form_overrides = { 'cover_art': form.FileUploadField, 'script': CKTextAreaField } # Pass additional parameters to 'path' to FileUploadField constructor form_extra_fields = { 'cover_art': form.FileUploadField(base_path=tempfile.gettempdir()) } def __init__(self, *args, **kwargs): model = Content session = db.session super().__init__(model, session, *args, **kwargs)
def attach_file_field(path="file", **kwargs): return form.FileUploadField(base_path=f"static/{path}/", **kwargs, relative_path=path)