view backend/sqlalchemy/Database.py @ 155:a05719a6175e

move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
author Dirk Olmes <dirk@xanthippe.ping.de>
date Sat, 27 Aug 2011 08:52:03 +0200
parents 5b131f82057d
children bb3c851b18b1
line wrap: on
line source


from sqlalchemy.engine import create_engine
from sqlalchemy.orm import sessionmaker
import Mapping
import argparse
import util

# Keep the connection to the database only once. The feed updater and the GUI app will
# operate on a single engine/session but this comes in handy for interactive use
engine = None
SessionMaker = None

def createSession(databaseUrl=None):
    if databaseUrl is None:
        databaseUrl = _getDatabaseUrl()
    initEngine(databaseUrl)
    Mapping.createMapping(engine)
    initSessionMaker()
    return SessionMaker()

def _getDatabaseUrl():
    parser = argparse.ArgumentParser()
    parser.add_argument("--dburl", nargs="?", required=True, help="Database URL for the sqlalchemy backend")
    args = parser.parse_known_args()
    return args[0].dburl

def initEngine(databaseUrl):
    global engine
    if engine is None:
        verbose = util.databaseLoggingEnabled()
        engine = create_engine(databaseUrl, echo=verbose)

def initSessionMaker():
    global SessionMaker
    if SessionMaker is None:
        SessionMaker = sessionmaker(bind=engine)