From ba339b4dd800697e9ba442cf4fc88b9ddb90f3da Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 2 Aug 2012 05:23:50 -0700 Subject: [PATCH] clean up db.util, add core_schema_installed() --- edbob/db/util.py | 132 +++++++++-------------------------------------- 1 file changed, 24 insertions(+), 108 deletions(-) diff --git a/edbob/db/util.py b/edbob/db/util.py index 04df33f..26a6552 100644 --- a/edbob/db/util.py +++ b/edbob/db/util.py @@ -26,90 +26,41 @@ ``edbob.db.util`` -- Database Utilities """ -import os.path - import sqlalchemy.exc -# import migrate.versioning.api -# import migrate.exceptions - -# import rattail -# from rattail.db import exc as exceptions -# from rattail.db import Session -# from rattail.db.classes import Role -# from rattail.db.model import get_metadata -# from rattail.db.perms import get_administrator import edbob.db -from edbob.db import exceptions -from edbob.db.model import Base -# from edbob.db.model import get_metadata +from edbob.db.model import ActiveExtension -# def core_schema_installed(engine=None): -# """ -# Returns boolean indicating whether or not the core schema has been -# installed to the database represented by ``engine``. If ``engine`` is not -# provided, then ``rattail.engine`` will be assumed. -# """ - -# if engine is None: -# engine = rattail.engine - -# try: -# get_database_version(engine) -# except exceptions.CoreSchemaNotInstalled: -# return False -# return True - - -# def get_database_version(engine=None, extension=None): -# """ -# Returns a SQLAlchemy-Migrate version number found in the database -# represented by ``engine``. - -# If no engine is provided, :attr:`edbob.db.engine` is assumed. - -# If ``extension`` is provided, the version for its schema is returned; -# otherwise the core schema is assumed. -# """ - -# if engine is None: -# engine = edbob.db.engine - -# try: -# version = migrate.versioning.api.db_version( -# str(engine.url), get_repository_path(extension)) - -# except (sqlalchemy.exc.NoSuchTableError, -# migrate.exceptions.DatabaseNotControlledError): -# raise exceptions.CoreSchemaNotInstalled(engine) - -# return version - - -def get_repository_path(extension=None): +def core_schema_installed(engine=None): """ - Returns the absolute filesystem path to the SQLAlchemy-Migrate repository - for ``extension``. + Returns boolean indicating whether the core schema has been installed to + the database represented by ``engine``. - If no extension is provided, ``edbob``'s core repository is assumed. + If no engine is provided, :attr:`edbob.db.engine` is assumed. """ - - if not extension: - from edbob.db import schema - return os.path.dirname(schema.__file__) - - return os.path.dirname(extension.schema.__file__) - -# def get_repository_version(extension=None): -# """ -# Returns the version of the SQLAlchemy-Migrate repository for ``extension``. + if engine is None: + engine = edbob.db.engine -# If no extension is provided, ``edbob``'s core repository is assumed. -# """ + # Check database existence and/or connectivity. + try: + conn = engine.connect() + except sqlalchemy.exc.OperationalError: + return False + else: + conn.close() -# return migrate.versioning.api.version(get_repository_path(extension)) + # Issue "bogus" query to verify core table existence. + session = edbob.db.Session(bind=engine) + try: + session.query(ActiveExtension).count() + except sqlalchemy.exc.ProgrammingError: + return False + finally: + session.close() + + return True def install_core_schema(engine=None): @@ -126,41 +77,6 @@ def install_core_schema(engine=None): conn = engine.connect() conn.close() - # # Check DB version to see if core schema is already installed. - # try: - # db_version = get_database_version(engine) - # except exceptions.CoreSchemaNotInstalled: - # pass - # else: - # raise exceptions.CoreSchemaAlreadyInstalled(db_version) - # Create tables for core schema. - # metadata = get_metadata() - # Base.metadata.create_all(engine) meta = edbob.db.get_core_metadata() meta.create_all(engine) - - # # Add versioning for core schema. - # migrate.versioning.api.version_control( - # str(engine.url), get_repository_path(), get_repository_version()) - - # WTF - # session = Session(bind=engine) - # get_administrator(session) - # session.commit() - # session.close() - - -# def upgrade_schema(extension=None, engine=None): -# """ -# Upgrades a schema within the database represented by ``engine`` (or -# ``rattail.engine`` if none is provided). If ``extension`` is provided, -# then its schema will be upgraded; otherwise the core is assumed. -# """ - -# if engine is None: -# engine = rattail.engine -# repo_version = get_repository_version(extension) -# db_version = get_database_version(engine, extension) -# if db_version < repo_version: -# migrate.versioning.api.upgrade(str(engine.url), get_repository_path(extension), repo_version)