From 12a9f6d7dbc69ae574313951765508712bcc2ad2 Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Wed, 13 Jul 2016 14:39:00 -0400 Subject: [PATCH] Give the Database a context manager interface. --- rida.py | 2 +- rida/database.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/rida.py b/rida.py index 3646ba5f..51178c81 100755 --- a/rida.py +++ b/rida.py @@ -50,7 +50,7 @@ app.config.from_envvar("RIDA_SETTINGS", silent=True) conf = rida.config.from_file("rida.conf") rida.logger.init_logging(conf) -db = rida.database.Database() +db = rida.database.Database(conf) @app.route("/rida/module-builds/", methods=["POST"]) def submit_build(): diff --git a/rida/database.py b/rida/database.py index 207d490c..6b602a5f 100644 --- a/rida/database.py +++ b/rida/database.py @@ -62,17 +62,24 @@ Base = declarative_base(cls=RidaBase) class Database(object): """Class for handling database connections.""" - def __init__(self, rdburl=None, debug=False): + def __init__(self, config, debug=False): """Initialize the database object.""" - if not isinstance(rdburl, str): - rdburl = "sqlite:///rida.db" - engine = create_engine(rdburl, echo=debug) - Session = sessionmaker(bind=engine) - self._session = Session() + self.engine = create_engine(config.db, echo=debug) + self._session = None # Lazilly created.. + + def __enter__(self): + return self.session() + + def __exit__(self, *args, **kwargs): + self._session.close() + self._session = None @property def session(self): """Database session object.""" + if not self._session: + Session = sessionmaker(bind=self.engine) + self._session = Session() return self._session @classmethod