import sys
import traceback
from os import getenv
from flask_admin import Admin
from flask_basicauth import BasicAuth
from flask_caching import Cache
from flask_debugtoolbar import DebugToolbarExtension
from flask_login import LoginManager
from flask_assets import Environment as Assets
from flask_mail import Mail, Message
from flask_sessionstore import Session
from flask_session_captcha import FlaskSessionCaptcha
from flaskr.models import User
# Setup flask cache
cache = Cache()
# Flask assets
assets_env = Assets()
# Session Store for captcha and perhaps visits counter
session = Session()
# Captcha
captcha = FlaskSessionCaptcha()
# Mail handler
mail = Mail()
# Debug toolbar for easy dev (disabled in prod)
debug_toolbar = DebugToolbarExtension()
# Basic auth
login_manager = LoginManager()
login_manager.login_view = "main.login"
login_manager.login_message_category = "warning"
# Admin backoffice
admin = Admin()
basic_auth = BasicAuth()
@login_manager.user_loader
def load_user(userid):
return User.query.get(userid)
def send_email(to_recipient, subject, message):
if 'production' != getenv('FLASK_ENV', 'production'):
print("Skipping sending email because we are not in production.")
return
try:
msg = Message(
subject=subject,
html=message,
sender=getenv('MAIL_DEFAULT_SENDER'),
recipients=[to_recipient],
bcc=[
'antoine@goutenoir.com', # :(|)
],
)
mail.send(msg)
except Exception as e:
print("ERROR Sending email:\n%s" % str(e))
traceback.print_exc(file=sys.stderr)
def icon2html(text):
import re
icon_html = r""""""
return re.sub(
"",
icon_html,
text
)