"""MySQL connector.""" from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker _engine, _session_factory, _session = None, None, None def init_db(host: str, port: int, user: str, password: str, database_name: str): global _engine, _session_factory, _session if _session: return _engine = create_engine( "mysql+pymysql://{user}:{password}@{host}:{port}/{database_name}".format( user=user, password=password, host=host, port=port, database_name=database_name ) ) _session_factory = scoped_session(sessionmaker(bind=_engine)) _session = _session_factory() @contextmanager def session_scope(): try: yield _session _session.commit() except Exception: _session.rollback() raise finally: _session.close()