1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00
AdvLabDB/advlabdb/customClasses.py

83 lines
2.3 KiB
Python
Raw Normal View History

from flask_admin import AdminIndexView
from flask_admin.contrib.sqla import ModelView
2021-06-02 21:43:41 +00:00
from flask_security import current_user
2021-07-13 15:22:15 +00:00
from flask import redirect, request, url_for, flash
from advlabdb.exceptions import ModelViewException, DataBaseException
def adminViewIsAccessible():
return current_user.has_role("admin")
class SecureAdminIndexView(AdminIndexView):
def is_accessible(self):
return adminViewIsAccessible()
2021-07-01 12:02:23 +00:00
def inaccessible_callback(self, name, **kwargs):
# Redirect to login page if user doesn't have access
return redirect(url_for("security.login", next=request.url))
class SecureModelView(ModelView):
can_export = True
2021-04-24 12:01:14 +00:00
can_set_page_size = True
2021-07-01 11:12:43 +00:00
create_modal = True
edit_modal = True
details_modal = True
2021-05-17 19:34:49 +00:00
list_template = "admin_list.html"
create_template = "admin_create.html"
edit_template = "admin_edit.html"
queryFilter = None
2021-07-29 22:24:10 +00:00
customCreateModel = None
def is_accessible(self):
return adminViewIsAccessible()
2021-07-01 12:02:23 +00:00
def inaccessible_callback(self, name, **kwargs):
# Redirect to login page if user doesn't have access
return redirect(url_for("security.login", next=request.url))
def get_query(self):
if self.queryFilter:
return super().get_query().filter(self.queryFilter())
else:
return super().get_query()
def get_count_query(self):
if self.queryFilter:
return super().get_count_query().filter(self.queryFilter())
else:
return super().get_count_query()
2021-07-13 15:22:15 +00:00
def handle_view_exception(self, exc):
if type(exc) in (ModelViewException, DataBaseException):
2021-07-13 15:22:15 +00:00
flash(str(exc), "error")
return True
return super().handle_view_exception(exc)
2021-07-29 22:24:10 +00:00
def create_model(self, form):
if not self.customCreateModel:
return super().create_model(form)
else:
try:
model = self.customCreateModel(form)
self.session.add(model)
self.on_model_change(form, model, True)
self.session.commit()
except Exception as ex:
flash(str(ex), "error")
self.session.rollback()
else:
self.after_model_change(form, model, True)
return model