"""Database level utility class. Used for constructing and seeding the test SQLite database for Snowflake. """ import datetime import sys import sqlalchemy from social_analytics import config from social_analytics.connectors import snowflake from social_analytics.models import metric facts = [ { 'social_profile_id': 5, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 3898077.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 10), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 10), }, { 'social_profile_id': 5, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 3898087.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 12), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 12), }, { 'social_profile_id': 3, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 198087.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 12), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 12), }, { 'social_profile_id': 3, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 4598087.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 13), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 13), }, { 'social_profile_id': 4, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 3897559.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 14), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 14), }, { 'social_profile_id': 2, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 3897521.0, 'processed_datetime': datetime.datetime(2017, 9, 22, 11, 19, 15), 'activity_datetime': datetime.datetime(2017, 9, 22, 11, 19, 15), }, { 'social_profile_id': 2, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 200.0, 'processed_datetime': datetime.datetime(2017, 9, 23, 11, 19, 15), 'activity_datetime': datetime.datetime(2017, 9, 23, 11, 19, 15), }, { 'social_profile_id': 2, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 350.0, 'processed_datetime': datetime.datetime(2017, 9, 24, 11, 19, 15), 'activity_datetime': datetime.datetime(2017, 9, 24, 11, 19, 15), }, { 'social_profile_id': 2, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 200.0, 'processed_datetime': datetime.datetime(2017, 9, 25, 11, 19, 15), 'activity_datetime': datetime.datetime(2017, 9, 23, 11, 19, 15), }, { 'social_profile_id': 2, 'platform_id': 1, 'label_id': 1, 'metric_id': 2, 'metric_value': 350.0, 'processed_datetime': datetime.datetime(2017, 9, 26, 11, 19, 15), 'activity_datetime': datetime.datetime(2017, 9, 24, 11, 19, 15), } ] def create_tables(): """Create tables defined in social_analytics.models.""" if config.ENVIRONMENT != config.TEST_ENVIRONMENT: return snowflake.BaseModel.metadata.drop_all(snowflake.snowflake_db_engine) snowflake.BaseModel.metadata.create_all(snowflake.snowflake_db_engine) @snowflake.db_session_wrap def seed_data(session): """Insert test data into fact social profile metrics table.""" if config.ENVIRONMENT != config.TEST_ENVIRONMENT: return try: session.execute(metric.Metric.__table__.insert().values(facts)) except sqlalchemy.exc.CompileError as error: print('Seeding error: SQL compile:', error) except sqlalchemy.exc.IntegrityError as error: print('Seeding error: Integrity error:', error) except: print('Unexpected error while seeding:', sys.exc_info()[0]) session.commit()