api.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from oslo_config import cfg
  2. from oslo_db import api as db_api
  3. from oslo_db import options as db_options
  4. from oslo_db.sqlalchemy import enginefacade
  5. from sqlalchemy import orm
  6. from coriolis.db.sqlalchemy import models
  7. CONF = cfg.CONF
  8. db_options.set_defaults(CONF)
  9. _BACKEND_MAPPING = {'sqlalchemy': 'coriolis.db.sqlalchemy.api'}
  10. IMPL = db_api.DBAPI.from_config(CONF, backend_mapping=_BACKEND_MAPPING)
  11. def get_engine():
  12. return IMPL.get_engine()
  13. def get_session():
  14. return IMPL.get_session()
  15. def db_sync(engine, version=None):
  16. """Migrate the database to `version` or the most recent version."""
  17. return IMPL.db_sync(engine, version=version)
  18. def db_version(engine):
  19. """Display the current database version."""
  20. return IMPL.db_version(engine)
  21. @enginefacade.reader
  22. def get_migrations(context):
  23. return context.session.query(models.Migration).options(
  24. orm.joinedload("operations")).filter_by(
  25. user_id=context.user_id).all()
  26. @enginefacade.reader
  27. def get_migration(context, migration_id):
  28. return context.session.query(models.Migration).options(
  29. orm.joinedload("operations")).filter_by(
  30. user_id=context.user_id, id=migration_id).first()
  31. @enginefacade.writer
  32. def add(context, migration):
  33. context.session.add(migration)
  34. @enginefacade.writer
  35. def update_operation_status(context, operation_id, status):
  36. op = context.session.query(models.Operation).filter_by(
  37. id=operation_id).first()
  38. op.status = status
  39. @enginefacade.writer
  40. def set_operation_host(context, operation_id, host):
  41. op = context.session.query(models.Operation).filter_by(
  42. id=operation_id).first()
  43. op.host = host
  44. @enginefacade.reader
  45. def get_operation(context, operation_id):
  46. return context.session.query(models.Operation).options(
  47. orm.joinedload("migration")).filter_by(
  48. id=operation_id).first()
  49. # TODO: move from here
  50. db_sync(get_engine())