view backend/sqlalchemy/Database.py @ 146:8ec20377bcb0

move getting the entries for a feed to the backend so that the couchdb backend can use a custom view for feed entries
author Dirk Olmes <dirk@xanthippe.ping.de>
date Thu, 25 Aug 2011 07:01:45 +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)