Skip to content

Instantly share code, notes, and snippets.

@tikismoke
Created October 20, 2015 17:20
Show Gist options
  • Save tikismoke/e7e738e5756ef3af2259 to your computer and use it in GitHub Desktop.
Save tikismoke/e7e738e5756ef3af2259 to your computer and use it in GitHub Desktop.
root@domogik0:/home/domogik# cat src/domogik/admin/application.py
from domogik.common.utils import get_packages_directory, get_libraries_directory
import sys
import os
from flask import Flask, g
try:
from flask_wtf import Form, RecaptchaField
except ImportError:
from flaskext.wtf import Form, RecaptchaField
pass
import flask_login
from flask_login import LoginManager, current_user
try:
from flask.ext.babel import Babel, get_locale, format_datetime
except ImportError:
from flask_babel import Babel, get_locale, format_datetime
pass
from wtforms import TextField, HiddenField, ValidationError, RadioField,\
BooleanField, SubmitField
from wtforms.validators import Required
try:
from wtforms.fields import HiddenField
except ImportError:
def is_hidden_field_filter(field):
raise RuntimeError('WTForms is not installed.')
else:
def is_hidden_field_filter(field):
return isinstance(field, HiddenField)
from flask.ext.themes2 import Themes, render_theme_template
import traceback
### init Flask
login_manager = LoginManager()
babel = Babel()
app = Flask(__name__)
### next steps...
#app.debug = True
login_manager.init_app(app)
babel.init_app(app)
Themes(app, app_identifier='domogik-admin')
app.jinja_env.globals['bootstrap_is_hidden_field'] =\
is_hidden_field_filter
app.jinja_env.add_extension('jinja2.ext.do')
# in a real app, these should be configured through Flask-Appconfig
app.config['SECRET_KEY'] = 'devkey'
app.config['RECAPTCHA_PUBLIC_KEY'] = \
'6Lfol9cSAAAAADAkodaYl9wvQCwBMr3qGR_PPHcw'
app.config['BABEL_DEFAULT_TIMEZONE'] = 'Europe/Paris'
# jinja 2 filters
def format_babel_datetime(value, format='medium'):
if format == 'full':
format="EEEE, d. MMMM y 'at' HH:mm"
elif format == 'medium':
format="EE dd.MM.y HH:mm"
elif format == 'basic':
format="dd.MM.y HH:mm"
return format_datetime(value, format)
def sort_by_id(value):
return sorted(value.items(), key=lambda x: x[1]['id'])
app.jinja_env.filters['datetime'] = format_babel_datetime
app.jinja_env.filters['sortid'] = sort_by_id
# create acces_log
@app.after_request
def write_access_log_after(response):
app.logger.debug(' => response status code: {0}'.format(response.status_code))
app.logger.debug(' => response content_type: {0}'.format(response.content_type))
#app.logger.debug(' => response data: {0}'.format(response.response))
return response
@app.before_request
def write_acces_log_before():
app.logger.info('http request for {0} received'.format(request.path))
# render a template, later on we can select the theme it here
def render_template(template, **context):
user = flask_login.current_user
if not hasattr(user, 'skin_used') or user.skin_used == '':
user.skin_used = 'default'
return render_theme_template(user.skin_used, template, **context)
### error pages
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
@app.errorhandler(500)
def server_error(e):
return render_template('500.html'), 500
### packages admin pages
sys.path.append(get_libraries_directory())
from domogik.admin.views.client_advanced_empty import nothing_adm
for a_client in os.listdir(get_packages_directory()):
try:
if os.path.isdir(os.path.join(get_packages_directory(), a_client)):
# check if there is an "admin" folder with an __init__.py file in it
print(a_client)
if os.path.isfile(os.path.join(get_packages_directory(), a_client, "admin", "__init__.py")):
print("=> admin")
app.logger.info("Load advanced page for package '{0}'".format(a_client))
pkg = "domogik_packages.{0}.admin".format(a_client)
pkg_adm = "{0}_adm".format(a_client)
print(u"Try to import module : {0} => {1}_adm".format(pkg, a_client))
the_adm = getattr(__import__(pkg, fromlist=[pkg_adm], level=1), pkg_adm)
app.register_blueprint(the_adm, url_prefix="/{0}".format(a_client))
# if no admin for the client, include the generic empty page
else:
app.register_blueprint(nothing_adm, url_prefix="/{0}".format(a_client))
except:
app.logger.error("Error while trying to load package '{0}' advanced page in the admin. The error is : {1}".format(a_client, traceback.format_exc()))
print("Error while trying to load package '{0}' advanced page in the admin. The error is : {1}".format(a_client, traceback.format_exc()))
### import all files inside the view module
from domogik.admin.views.index import *
from domogik.admin.views.login import *
from domogik.admin.views.clients import *
from domogik.admin.views.orphans import *
from domogik.admin.views.account import *
from domogik.admin.views.person import *
from domogik.admin.views.rest import *
from domogik.admin.views.scenario import *
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment