__init__.py 2.1 KB

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