from contextlib import contextmanager from datetime import datetime from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from apollo_main_db.push_notifications.models import PushMessageReduced from apollo_clear_notifications.config import Config _config = Config() engine = create_engine( 'mysql+pymysql://{user}:{password}@{host}:{port}/{database_name}' '?binary_prefix=true'.format( user=_config.DB_USER, password=_config.DB_PASS, host=_config.DB_HOST, port=_config.DB_PORT, database_name=_config.DB_NAME), pool_recycle=_config.DB_POOL_RECYCLE, pool_size=_config.DB_POOL_SIZE ) _session_factory = scoped_session(sessionmaker(bind=engine)) _session = _session_factory() @contextmanager def session_scope(): """Provide a transactional scope around a series of operations.""" try: yield _session _session.commit() except: _session.rollback() raise finally: _session.close() def delete_push_messages(date: datetime): """Clear push messages records before passed date.""" with session_scope() as session: session.query(PushMessageReduced).filter(PushMessageReduced.date < date).delete(synchronize_session=False) session.commit()