__init__.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # -*- coding: utf-8 -*-
  2. from flask import Flask, g, current_app, request
  3. from flask.ext.babel import Babel
  4. from flask.ext.sqlalchemy import SQLAlchemy, event
  5. from flask.ext.mail import Mail
  6. from flask.ext.cache import Cache
  7. from .sessions import MySessionInterface
  8. babel = Babel()
  9. db = SQLAlchemy()
  10. sess = MySessionInterface(db)
  11. cache = Cache()
  12. mail = Mail()
  13. def get_locale():
  14. if request.cookies.get('locale') in current_app.config['LANGUAGES'].keys():
  15. return request.cookies.get('locale')
  16. return request.accept_languages.best_match(current_app.config['LANGUAGES'].keys())
  17. def create_app(config={}):
  18. global babel, db, mail, sess
  19. app = Flask(__name__)
  20. app.config.from_object('ffdnispdb.default_settings')
  21. app.config.from_envvar('FFDNISPDB_SETTINGS', True)
  22. if isinstance(config, dict):
  23. app.config.update(config)
  24. else:
  25. app.config.from_object(config)
  26. babel.init_app(app)
  27. babel.localeselector(get_locale)
  28. db.init_app(app)
  29. with app.app_context():
  30. @event.listens_for(db.engine, "connect")
  31. def connect(sqlite, connection_rec):
  32. sqlite.enable_load_extension(True)
  33. sqlite.execute('select load_extension("libspatialite.so")')
  34. sqlite.enable_load_extension(False)
  35. app.session_interface = sess
  36. mail.init_app(app)
  37. cache.init_app(app)
  38. from .views import ispdb
  39. from .views_api import ispdbapi
  40. app.register_blueprint(ispdb)
  41. app.register_blueprint(ispdbapi, url_prefix='/api')
  42. return app
  43. from . import models