def create_app(config='config.ProductionDevelopmentConfig', apptype='profi'): app = Flask(__name__, static_folder='./static') app.config.from_object(config) # babel = Babel(app) app.teardown_request(close_database) app.config['DEBUG'] = True app.before_request(load_database(app.config['SQLALCHEMY_DATABASE_URI'])) app.before_request(lambda: load_user(apptype)) app.before_request(setup_authomatic(app)) def add_map_headers_to_less_files(response): response.headers.add('Access-Control-Allow-Origin', '*') if request.path and re.search(r'\.css$', request.path): mapfile = re.sub(r'\.css$', r'.css.map', request.path) if os.path.isfile( os.path.realpath(os.path.dirname(__file__)) + mapfile): response.headers.add('X-Sourcemap', mapfile) return response app.after_request(add_map_headers_to_less_files) if apptype == 'front': # relative paths def join_path(template, parent): return os.path.join(os.path.dirname(parent), template) app.jinja_env.join_path = join_path def load_portal(): # class RelEnvironment(jinja2.Environment): # """Override join_path() to enable relative template paths.""" # def join_path(self, template, parent): # return os.path.join(os.path.dirname(parent), template) from profapp.models.portal import Portal portal = g.db.query(Portal).filter_by(host=request.host).one() g.portal = portal g.portal_id = portal.id g.portal_layout_path = portal.layout.path g.lang = g.portal.lang if g.portal else g.user_dict['lang'] app.before_request(load_portal) from profapp.controllers.blueprints_register import register_front as register_blueprints_front register_blueprints_front(app) elif apptype == 'static': from profapp.controllers.blueprints_register import register_static as register_blueprints_static register_blueprints_static(app) elif apptype == 'file': from profapp.controllers.blueprints_register import register_file as register_blueprints_file register_blueprints_file(app) else: from profapp.controllers.blueprints_register import register_profi as register_blueprints_profi register_blueprints_profi(app) bootstrap.init_app(app) mail.init_app(app) moment.init_app(app) login_manager.init_app(app) login_manager.session_protection = 'basic' @login_manager.user_loader def load_user_manager(user_id): return g.db.query(User).get(user_id) csrf.init_app(app) # read this: http://stackoverflow.com/questions/6036082/call-a-python-function-from-jinja2 # app.jinja_env.globals.update(flask_endpoint_to_angular=flask_endpoint_to_angular) app.jinja_env.globals.update(raw_url_for=raw_url_for) app.jinja_env.globals.update(pre=pre) app.jinja_env.globals.update(translates=translates) app.jinja_env.globals.update(fileUrl=fileUrl) app.jinja_env.globals.update(prImage=prImage) app.jinja_env.globals.update(url_page=url_page) app.jinja_env.globals.update(config_variables=config_variables) app.jinja_env.globals.update(_=translate_phrase) app.jinja_env.globals.update(__=translate_html) app.jinja_env.globals.update( tinymce_format_groups=HtmlHelper.tinymce_format_groups) app.jinja_env.globals.update(pr_help_tooltip=pr_help_tooltip) app.jinja_env.filters['nl2br'] = nl2br # see: http://flask.pocoo.org/docs/0.10/patterns/sqlalchemy/ # Flask will automatically remove database sessions at the end of the # request or when the application shuts down: # from db_init import db_session # @app.teardown_appcontext # def shutdown_session(exception=None): # try: # db_session.commit() # except Exception: # session.rollback() # raise # finally: # session.close() # optional, depends on use case # # db_session.remove() session_opts = { 'session.type': 'ext:memcached', 'session.url': 'memcached.profi:11211' } class BeakerSessionInterface(SessionInterface): def open_session(self, app, request): _session = request.environ['beaker.session'] return _session def save_session(self, app, session, response): session.save() app.wsgi_app = SessionMiddleware(app.wsgi_app, session_opts) app.session_interface = BeakerSessionInterface() return app
def create_app(config='config.ProductionDevelopmentConfig', front='n', host='localhost'): app = Flask(__name__) app.config.from_object(config) app.config['SERVER_NAME'] = host babel = Babel(app) app.teardown_request(close_database) app.before_request(load_database(app.config['SQLALCHEMY_DATABASE_URI'])) app.config['DEBUG'] = True app.before_request(load_user) app.before_request(setup_authomatic(app)) if front == 'y': app.before_request(load_portal_id(app)) register_blueprints_front(app) my_loader = jinja2.ChoiceLoader([ app.jinja_loader, jinja2.FileSystemLoader('templates_front'), ]) app.jinja_loader = my_loader if front == 'f': register_blueprints_file(app) else: register_blueprints(app) bootstrap.init_app(app) mail.init_app(app) moment.init_app(app) login_manager.init_app(app) # if not app.debug and not app.testing and not app.config['SSL_DISABLE']: # from flask.ext.sslify import SSLify # sslify = SSLify(app) @login_manager.user_loader def load_user_manager(user_id): return g.db.query(User).get(user_id) csrf.init_app(app) # read this: http://stackoverflow.com/questions/6036082/call-a-python-function-from-jinja2 app.jinja_env.globals.update(flask_endpoint_to_angular=flask_endpoint_to_angular) app.jinja_env.globals.update(raw_url_for=raw_url_for) app.jinja_env.globals.update(pre=pre) app.jinja_env.globals.update(translates=translates) app.jinja_env.globals.update(file_url=file_url) app.jinja_env.globals.update(config_variables=config_variables) app.jinja_env.globals.update(_=translate_phrase) # see: http://flask.pocoo.org/docs/0.10/patterns/sqlalchemy/ # Flask will automatically remove database sessions at the end of the # request or when the application shuts down: # from db_init import db_session # @app.teardown_appcontext # def shutdown_session(exception=None): # try: # db_session.commit() # except Exception: # session.rollback() # raise # finally: # session.close() # optional, depends on use case # # db_session.remove() return app
def create_app(config='config.ProductionDevelopmentConfig', apptype='profi'): app = Flask(__name__, static_folder='./static') app.config.from_object(config) # babel = Babel(app) app.teardown_request(close_database) app.config['DEBUG'] = True app.before_request(load_database(app.config['SQLALCHEMY_DATABASE_URI'])) app.before_request(lambda: load_user(apptype)) app.before_request(setup_authomatic(app)) def add_map_headers_to_less_files(response): response.headers.add('Access-Control-Allow-Origin', '*') if request.path and re.search(r'\.css$', request.path): mapfile = re.sub(r'\.css$', r'.css.map', request.path) if os.path.isfile(os.path.realpath(os.path.dirname(__file__)) + mapfile): response.headers.add('X-Sourcemap', mapfile) return response app.after_request(add_map_headers_to_less_files) if apptype == 'front': # relative paths def join_path(template, parent): return os.path.join(os.path.dirname(parent), template) app.jinja_env.join_path = join_path def load_portal(): # class RelEnvironment(jinja2.Environment): # """Override join_path() to enable relative template paths.""" # def join_path(self, template, parent): # return os.path.join(os.path.dirname(parent), template) from profapp.models.portal import Portal portal = g.db.query(Portal).filter_by(host=request.host).one() g.portal = portal g.portal_id = portal.id g.portal_layout_path = portal.layout.path g.lang = g.portal.lang if g.portal else g.user_dict['lang'] app.before_request(load_portal) from profapp.controllers.blueprints_register import register_front as register_blueprints_front register_blueprints_front(app) elif apptype == 'static': from profapp.controllers.blueprints_register import register_static as register_blueprints_static register_blueprints_static(app) elif apptype == 'file': from profapp.controllers.blueprints_register import register_file as register_blueprints_file register_blueprints_file(app) else: from profapp.controllers.blueprints_register import register_profi as register_blueprints_profi register_blueprints_profi(app) bootstrap.init_app(app) mail.init_app(app) moment.init_app(app) login_manager.init_app(app) login_manager.session_protection = 'basic' @login_manager.user_loader def load_user_manager(user_id): return g.db.query(User).get(user_id) csrf.init_app(app) # read this: http://stackoverflow.com/questions/6036082/call-a-python-function-from-jinja2 # app.jinja_env.globals.update(flask_endpoint_to_angular=flask_endpoint_to_angular) app.jinja_env.globals.update(raw_url_for=raw_url_for) app.jinja_env.globals.update(pre=pre) app.jinja_env.globals.update(translates=translates) app.jinja_env.globals.update(fileUrl=fileUrl) app.jinja_env.globals.update(prImage=prImage) app.jinja_env.globals.update(url_page=url_page) app.jinja_env.globals.update(config_variables=config_variables) app.jinja_env.globals.update(_=translate_phrase) app.jinja_env.globals.update(__=translate_html) app.jinja_env.globals.update(tinymce_format_groups=HtmlHelper.tinymce_format_groups) app.jinja_env.globals.update(pr_help_tooltip=pr_help_tooltip) app.jinja_env.filters['nl2br'] = nl2br # see: http://flask.pocoo.org/docs/0.10/patterns/sqlalchemy/ # Flask will automatically remove database sessions at the end of the # request or when the application shuts down: # from db_init import db_session # @app.teardown_appcontext # def shutdown_session(exception=None): # try: # db_session.commit() # except Exception: # session.rollback() # raise # finally: # session.close() # optional, depends on use case # # db_session.remove() session_opts = { 'session.type': 'ext:memcached', 'session.url': 'memcached.profi:11211' } class BeakerSessionInterface(SessionInterface): def open_session(self, app, request): _session = request.environ['beaker.session'] return _session def save_session(self, app, session, response): session.save() app.wsgi_app = SessionMiddleware(app.wsgi_app, session_opts) app.session_interface = BeakerSessionInterface() return app