Source code for vulyk.admin.models
# -*- coding: utf-8 -*-
import flask_login as login
import wtforms
from flask_admin.contrib.mongoengine import ModelView
__all__ = [
'AuthModelView'
]
class CKTextAreaWidget(wtforms.widgets.TextArea):
def __call__(self, field, **kwargs):
if kwargs.get('class'):
kwargs['class'] += ' ckeditor'
else:
kwargs.setdefault('class', 'ckeditor')
return super(CKTextAreaWidget, self).__call__(field, **kwargs)
class CKTextAreaField(wtforms.fields.TextAreaField):
widget = CKTextAreaWidget()
class RequiredBooleanField(wtforms.fields.SelectField):
# Fucking wtforms/flask-admin has a flaw related
# to boolean fields with required=True in the model
# Ultimatelly false values wouldn't pass validation of the form
# thus the workaround
def __init__(self, *args, **kwargs) -> None:
choices = [
(True, 'True'),
(False, 'False'),
]
kwargs['choices'] = choices
kwargs['coerce'] = lambda x: str(x) == 'True'
super(RequiredBooleanField, self).__init__(*args, **kwargs)
[docs]class AuthModelView(ModelView):
"""
Model view that requires authentication and admin status
Comes with useful extra of wysiwyg field
"""
extra_js = ['//cdn.ckeditor.com/4.7.1/standard/ckeditor.js']
[docs] def is_accessible(self) -> bool:
return (
login.current_user.is_authenticated and
login.current_user.is_admin()
)