session.py 866 B

12345678910111213141516171819202122232425262728293031323334
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from celery import conf
  5. from celery.utils.compat import defaultdict
  6. ResultModelBase = declarative_base()
  7. _SETUP = defaultdict(lambda: False)
  8. _ENGINES = {}
  9. def get_engine(dburi, **kwargs):
  10. if dburi not in _ENGINES:
  11. _ENGINES[dburi] = create_engine(dburi, **kwargs)
  12. return _ENGINES[dburi]
  13. def create_session(dburi, **kwargs):
  14. engine = get_engine(dburi, **kwargs)
  15. return engine, sessionmaker(bind=engine)
  16. def setup_results(engine):
  17. if not _SETUP["results"]:
  18. ResultModelBase.metadata.create_all(engine)
  19. _SETUP["results"] = True
  20. def ResultSession(dburi=conf.RESULT_DBURI, **kwargs):
  21. engine, session = create_session(dburi, **kwargs)
  22. setup_results(engine)
  23. return session()