""" Helpers for initializing and dropping schemas. """ # stdlib imports import logging # antiorm imports from antipool import dbpool def reset_sql(schemas): """ Drop and recreate the given schemas. """ drop_sql(schemas) initialize_sql(schemas) def initialize_sql(schemas): """ Insures that the given schemas are created. """ conn, cursor = dbpool().connection(1) try: cursor.execute(""" SELECT table_name FROM information_schema.tables """) tables = set(x[0] for x in cursor.fetchall()) for table_name, schema in schemas: if table_name not in tables: logging.info('Creating SQL schema %s' % table_name) cursor.execute(schema) conn.commit() finally: conn.release() def drop_sql(schemas): """ Drop the given list of schemes. """ dbapi = dbpool().module() conn, cursor = dbpool().connection(1) try: cursor.execute(""" SELECT table_name FROM information_schema.tables """) tables = set(x[0] for x in cursor.fetchall()) names = [x for x, s in schemas if x in tables] for n in names: try: cursor.execute('DROP TABLE "%s" CASCADE' % n) conn.commit() except dbapi.Error: conn.rollback() # ignore errors due to dependencies. finally: conn.release()