__init__.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 werkzeug.contrib.cache import NullCache
  7. from .sessions import MySessionInterface
  8. babel = Babel()
  9. db = SQLAlchemy()
  10. sess = MySessionInterface(db)
  11. cache = NullCache()
  12. mail = Mail()
  13. def get_locale():
  14. return request.accept_languages.best_match(current_app.config['LANGUAGES'].keys())
  15. def create_app(config={}):
  16. global babel, db, mail, sess
  17. app = Flask(__name__)
  18. app.config.from_object('ffdnispdb.default_settings')
  19. app.config.from_envvar('FFDNISPDB_SETTINGS', True)
  20. if isinstance(config, dict):
  21. app.config.update(config)
  22. else:
  23. app.config.from_object(config)
  24. babel.init_app(app)
  25. babel.localeselector(get_locale)
  26. db.init_app(app)
  27. with app.app_context():
  28. @event.listens_for(db.engine, "connect")
  29. def connect(sqlite, connection_rec):
  30. sqlite.enable_load_extension(True)
  31. sqlite.execute('select load_extension("libspatialite.so")')
  32. sqlite.enable_load_extension(False)
  33. app.session_interface = sess
  34. mail.init_app(app)
  35. from .views import ispdb
  36. from .views_api import ispdbapi
  37. app.register_blueprint(ispdb)
  38. app.register_blueprint(ispdbapi, url_prefix='/api')
  39. return app
  40. from . import models