__init__.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import os
  2. import jinja2
  3. from flask import Flask
  4. from flask_login import LoginManager, current_user
  5. from flask_sqlalchemy import SQLAlchemy
  6. from flask_migrate import Migrate
  7. from flask_admin import Admin
  8. from flask_admin.contrib.sqla import ModelView
  9. from flask_restful import Api
  10. from celery import Celery
  11. from nova.fs import Filesystem
  12. __version__ = '0.1.0'
  13. app = Flask(__name__)
  14. app.secret_key = 'KU5bF1K4ZQdjHSg91bJGnAkStAeEDIAg'
  15. app.config.from_object('nova.settings')
  16. app.config.from_envvar('NOVA_SETTINGS', silent=True)
  17. app.config['NOVA_FS_LAYOUT'] = jinja2.Template('{{ root }}/{{ user }}/{{ dataset }}')
  18. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(app.config['NOVA_ROOT_PATH'], 'nova.db')
  19. @app.template_filter('group')
  20. def group(l, n):
  21. for i in range(0, len(l), n):
  22. yield tuple(l[i:i+n])
  23. db = SQLAlchemy(app)
  24. login_manager = LoginManager(app)
  25. login_manager.login_view = 'login'
  26. fs = Filesystem(app)
  27. migrate = Migrate(app, db)
  28. celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
  29. import nova.models
  30. class AdminModelView(ModelView):
  31. def is_accessible(self):
  32. return current_user.is_authenticated and current_user.is_admin
  33. admin = Admin(app)
  34. admin.add_view(AdminModelView(nova.models.User, db.session))
  35. admin.add_view(AdminModelView(nova.models.Collection, db.session))
  36. admin.add_view(AdminModelView(nova.models.Dataset, db.session))
  37. admin.add_view(AdminModelView(nova.models.Access, db.session))
  38. admin.add_view(AdminModelView(nova.models.Notification, db.session))
  39. admin.add_view(AdminModelView(nova.models.Process, db.session))
  40. admin.add_view(AdminModelView(nova.models.Reconstruction, db.session))
  41. from nova.resources import Datasets, Dataset
  42. errors = {
  43. 'BadSignature': {
  44. 'message': "Token signature could not be verified",
  45. 'status': 409,
  46. },
  47. }
  48. api = Api(app, errors=errors)
  49. api.add_resource(Datasets, '/api/datasets')
  50. api.add_resource(Dataset, '/api/datasets/<dataset_id>')
  51. import nova.views