def drop(yes_i_know=False, quiet=False): """Drop database tables.""" print(">>> Going to drop tables and related data on filesystem ...") from invenio.utils.date import get_time_estimator from invenio.utils.text import wrap_text_in_a_box, wait_for_user from invenio.ext.sqlalchemy.utils import test_sqla_connection, \ test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine # Step 0: confirm deletion wait_for_user( wrap_text_in_a_box( "WARNING: You are going to destroy your database tables and related " "data on filesystem!")) # Step 1: test database connection test_sqla_connection() test_sqla_utf8_chain() list(models) # Step 2: destroy associated data tables = list(reversed(db.metadata.sorted_tables)) def _dropper(items, prefix, dropper): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) dropped = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress(1.0 * (i + 1) / N, prefix=prefix, suffix=str( datetime.timedelta(seconds=e()[0]))) dropper(table) dropped += 1 except Exception: print('\r>>> problem with dropping {0}'.format(table)) current_app.logger.exception(table) if dropped == N: print(">>> Everything has been dropped successfully.") else: print("ERROR: not all items were properly dropped.") print(">>> Dropped", dropped, 'out of', N) _dropper(StorageEngine.__storage_engine_registry__, '>>> Dropping {0} storage engines ...', lambda api: api.storage_engine.drop()) _dropper(tables, '>>> Dropping {0} tables ...', lambda table: table.drop(bind=db.engine, checkfirst=True))
def drop(yes_i_know=False, quiet=False): """Drop database tables.""" print(">>> Going to drop tables and related data on filesystem ...") from invenio.utils.date import get_time_estimator from invenio.utils.text import wrap_text_in_a_box, wait_for_user from invenio.ext.sqlalchemy.utils import test_sqla_connection, \ test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine # Step 0: confirm deletion wait_for_user(wrap_text_in_a_box( "WARNING: You are going to destroy your database tables and related " "data on filesystem!")) # Step 1: test database connection test_sqla_connection() test_sqla_utf8_chain() list(models) # Step 2: destroy associated data tables = list(reversed(db.metadata.sorted_tables)) def _dropper(items, prefix, dropper): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) dropped = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress( 1.0 * (i + 1) / N, prefix=prefix, suffix=str(datetime.timedelta(seconds=e()[0]))) dropper(table) dropped += 1 except Exception: print('\r>>> problem with dropping {0}'.format(table)) current_app.logger.exception(table) if dropped == N: print(">>> Everything has been dropped successfully.") else: print("ERROR: not all items were properly dropped.") print(">>> Dropped", dropped, 'out of', N) _dropper(StorageEngine.__storage_engine_registry__, '>>> Dropping {0} storage engines ...', lambda api: api.storage_engine.drop()) _dropper(tables, '>>> Dropping {0} tables ...', lambda table: table.drop(bind=db.engine, checkfirst=True))
def create(default_data=True, quiet=False): """Create database tables from sqlalchemy models.""" print(">>> Going to create tables...") from invenio.utils.date import get_time_estimator from invenio.ext.sqlalchemy.utils import test_sqla_connection, \ test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine test_sqla_connection() test_sqla_utf8_chain() list(models) tables = db.metadata.sorted_tables def _creator(items, prefix, creator): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) created = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress(1.0 * (i + 1) / N, prefix=prefix, suffix=str( datetime.timedelta(seconds=e()[0]))) creator(table) created += 1 except Exception: print('\r>>> problem with creating {0}'.format(table)) current_app.logger.exception(table) if created == N: print(">>> Everything has been created successfully.") else: print("ERROR: not all items were properly created.") print(">>> Created", created, 'out of', N) _creator(tables, '>>> Creating {0} tables ...', lambda table: table.create(bind=db.engine)) _creator(StorageEngine.__storage_engine_registry__, '>>> Creating {0} storage engines ...', lambda api: api.storage_engine.create())
def create(default_data=True, quiet=False): """Create database tables from sqlalchemy models.""" print(">>> Going to create tables...") from invenio.utils.date import get_time_estimator from invenio.ext.sqlalchemy.utils import test_sqla_connection, \ test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine test_sqla_connection() test_sqla_utf8_chain() list(models) tables = db.metadata.sorted_tables def _creator(items, prefix, creator): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) created = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress( 1.0 * (i+1) / N, prefix=prefix, suffix=str(datetime.timedelta(seconds=e()[0]))) creator(table) created += 1 except Exception: print('\r>>> problem with creating {0}'.format(table)) current_app.logger.exception(table) if created == N: print(">>> Everything has been created successfully.") else: print("ERROR: not all items were properly created.") print(">>> Created", created, 'out of', N) _creator(tables, '>>> Creating {0} tables ...', lambda table: table.create(bind=db.engine)) _creator(StorageEngine.__storage_engine_registry__, '>>> Creating {0} storage engines ...', lambda api: api.storage_engine.create())
def create(default_data=True, quiet=False): """Create database tables from sqlalchemy models.""" print(">>> Going to create tables...") from sqlalchemy import event from invenio.utils.date import get_time_estimator from invenio.ext.sqlalchemy.utils import test_sqla_connection, test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine test_sqla_connection() test_sqla_utf8_chain() list(models) def cfv_after_create(target, connection, **kw): print print(">>> Modifing table structure...") from invenio.legacy.dbquery import run_sql run_sql("ALTER TABLE collection_field_fieldvalue DROP PRIMARY KEY") run_sql("ALTER TABLE collection_field_fieldvalue ADD INDEX id_collection(id_collection)") run_sql("ALTER TABLE collection_field_fieldvalue CHANGE id_fieldvalue id_fieldvalue mediumint(9) unsigned") # print(run_sql('SHOW CREATE TABLE collection_field_fieldvalue')) from invenio.modules.search.models import CollectionFieldFieldvalue event.listen(CollectionFieldFieldvalue.__table__, "after_create", cfv_after_create) tables = db.metadata.sorted_tables def _creator(items, prefix, creator): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) created = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress(1.0 * (i + 1) / N, prefix=prefix, suffix=str(datetime.timedelta(seconds=e()[0]))) creator(table) created += 1 except Exception: print("\r", ">>> problem with creating ", table) current_app.logger.exception(table) if created == N: print(">>> Everything has been created successfully.") else: print("ERROR: not all items were properly created.") print(">>> Created", created, "out of", N) _creator(tables, ">>> Creating {0} tables ...", lambda table: table.create(bind=db.engine)) _creator( StorageEngine.__storage_engine_registry__, ">>> Creating {0} storage engines ...", lambda api: api.storage_engine.create(), )
def create(default_data=True, quiet=False): """Create database tables from sqlalchemy models.""" print(">>> Going to create tables...") from sqlalchemy import event from invenio.utils.date import get_time_estimator from invenio.ext.sqlalchemy.utils import test_sqla_connection, \ test_sqla_utf8_chain from invenio.ext.sqlalchemy import db, models from invenio.modules.jsonalchemy.wrappers import StorageEngine test_sqla_connection() test_sqla_utf8_chain() list(models) def cfv_after_create(target, connection, **kw): print print(">>> Modifing table structure...") from invenio.legacy.dbquery import run_sql run_sql('ALTER TABLE collection_field_fieldvalue DROP PRIMARY KEY') run_sql( 'ALTER TABLE collection_field_fieldvalue ADD INDEX id_collection(id_collection)' ) run_sql( 'ALTER TABLE collection_field_fieldvalue CHANGE id_fieldvalue id_fieldvalue mediumint(9) unsigned' ) #print(run_sql('SHOW CREATE TABLE collection_field_fieldvalue')) from invenio.modules.search.models import CollectionFieldFieldvalue event.listen(CollectionFieldFieldvalue.__table__, "after_create", cfv_after_create) tables = db.metadata.sorted_tables def _creator(items, prefix, creator): N = len(items) prefix = prefix.format(N) e = get_time_estimator(N) created = 0 if quiet: print(prefix) for i, table in enumerate(items): try: if not quiet: print_progress(1.0 * (i + 1) / N, prefix=prefix, suffix=str( datetime.timedelta(seconds=e()[0]))) creator(table) created += 1 except Exception: print('\r', '>>> problem with creating ', table) current_app.logger.exception(table) if created == N: print(">>> Everything has been created successfully.") else: print("ERROR: not all items were properly created.") print(">>> Created", created, 'out of', N) _creator(tables, '>>> Creating {0} tables ...', lambda table: table.create(bind=db.engine)) _creator(StorageEngine.__storage_engine_registry__, '>>> Creating {0} storage engines ...', lambda api: api.storage_engine.create())