def catch_signal(sender, **kwargs): from fluff.pillow import get_fluff_pillow_configs if settings.UNIT_TESTING or kwargs['using'] != DEFAULT_DB_ALIAS: return table_pillow_map = {} for config in get_fluff_pillow_configs(): pillow = config.get_instance() for processor in pillow.processors: doc = processor.indicator_class() if doc.save_direct_to_sql: table_pillow_map[doc._table.name] = { 'doc': doc, 'pillow': pillow } print('\tchecking fluff SQL tables for schema changes') engine = connection_manager.get_engine('default') with engine.begin() as connection: migration_context = get_migration_context(connection, list(table_pillow_map)) raw_diffs = compare_metadata(migration_context, fluff_metadata) diffs = reformat_alembic_diffs(raw_diffs) tables_to_rebuild = get_tables_to_rebuild(diffs, list(table_pillow_map)) for table in tables_to_rebuild: info = table_pillow_map[table] rebuild_table(engine, info['pillow'], info['doc']) engine.dispose()
def catch_signal(sender, **kwargs): from fluff.pillow import get_fluff_pillow_configs if settings.UNIT_TESTING or kwargs['using'] != DEFAULT_DB_ALIAS: return table_pillow_map = {} for config in get_fluff_pillow_configs(): pillow = config.get_instance() for processor in pillow.processors: doc = processor.indicator_class() if doc.save_direct_to_sql: table_pillow_map[doc._table.name] = { 'doc': doc, 'pillow': pillow } print('\tchecking fluff SQL tables for schema changes') engine = connection_manager.get_engine('default') with engine.begin() as connection: migration_context = get_migration_context(connection, list(table_pillow_map)) raw_diffs = compare_metadata(migration_context, fluff_metadata) diffs = reformat_alembic_diffs(raw_diffs) tables_to_rebuild = get_tables_to_rebuild(diffs, list(table_pillow_map)) for table in tables_to_rebuild: info = table_pillow_map[table] rebuild_table(engine, info['pillow'], info['doc']) engine.dispose()
def catch_signal(sender, **kwargs): from fluff.pillow import get_fluff_pillow_configs if settings.UNIT_TESTING or kwargs['using'] != DEFAULT_DB_ALIAS: return table_pillow_map = {} for config in get_fluff_pillow_configs(): pillow = config.get_instance() doc = pillow.indicator_class() if doc.save_direct_to_sql: table_pillow_map[doc._table.name] = {'doc': doc, 'pillow': pillow} print '\tchecking fluff SQL tables for schema changes' engine = sqlalchemy.create_engine(settings.SQL_REPORTING_DATABASE_URL) with engine.begin() as connection: migration_context = get_migration_context(connection, table_pillow_map.keys()) raw_diffs = compare_metadata(migration_context, fluff_metadata) diffs = reformat_alembic_diffs(raw_diffs) tables_to_rebuild = get_tables_to_rebuild(diffs, table_pillow_map.keys()) for table in tables_to_rebuild: info = table_pillow_map[table] rebuild_table(engine, info['pillow'], info['doc']) engine.dispose()
def handle(self, pillow_name, **options): fluff_configs = {config.name: config for config in get_fluff_pillow_configs()} if pillow_name not in fluff_configs: raise CommandError('Unrecognised fluff pillow: "{}". Options are:\n\t{}'.format( pillow_name, '\n\t'.join(fluff_configs))) pillow_getter = get_pillow_by_name(pillow_name, instantiate=False) pillow = pillow_getter(delete_filtered=True) domains = options.get('domain') or pillow.domains domains_not_in_pillow = set(domains) - set(pillow.domains) if domains_not_in_pillow: bad_domains = ', '.join(domains_not_in_pillow) available_domains = ', '.join(pillow.domains) raise CommandError( "The following domains aren't for this pillow: {}.\nAvailable domains are: {}".format( bad_domains, available_domains )) if pillow.kafka_topic in (topics.CASE, topics.FORM): couch_db = couch_config.get_db(None) elif pillow.kafka_topic == topics.COMMCARE_USER: couch_db = couch_config.get_db(settings.NEW_USERS_GROUPS_DB) else: raise CommandError('Reindexer not configured for topic: {}'.format(pillow.kafka_topic)) change_provider = CouchDomainDocTypeChangeProvider( couch_db=couch_db, domains=domains, doc_types=[pillow.doc_type], event_handler=ReindexEventHandler(pillow_name), ) PillowChangeProviderReindexer(pillow, change_provider).reindex()
def catch_signal(sender, **kwargs): from fluff.pillow import get_fluff_pillow_configs if settings.UNIT_TESTING or kwargs['using'] != DEFAULT_DB_ALIAS: return table_pillow_map = {} for config in get_fluff_pillow_configs(): pillow = config.get_instance() doc = pillow.indicator_class() if doc.save_direct_to_sql: table_pillow_map[doc._table.name] = { 'doc': doc, 'pillow': pillow } print '\tchecking fluff SQL tables for schema changes' engine = sqlalchemy.create_engine(settings.SQL_REPORTING_DATABASE_URL) with engine.begin() as connection: migration_context = get_migration_context(connection, table_pillow_map.keys()) raw_diffs = compare_metadata(migration_context, fluff_metadata) diffs = reformat_alembic_diffs(raw_diffs) tables_to_rebuild = get_tables_to_rebuild(diffs, table_pillow_map.keys()) for table in tables_to_rebuild: info = table_pillow_map[table] rebuild_table(engine, info['pillow'], info['doc']) engine.dispose()
def _get_designs(self): from fluff.pillow import get_fluff_pillow_configs designs = [] for config in get_fluff_pillow_configs(): pillow = config.get_instance() for processor in pillow.processors: app_label = processor.indicator_class._meta.app_label designs.append( DesignInfo(app_label=self.app_label, db=get_db(app_label), design_path=os.path.join(self.dir, "_design"))) return designs
def _get_designs(self): from fluff.pillow import get_fluff_pillow_configs designs = [] for config in get_fluff_pillow_configs(): pillow = config.get_instance() app_label = pillow.indicator_class._meta.app_label designs.append(DesignInfo( app_label=self.app_label, db=get_db(app_label), design_path=os.path.join(self.dir, "_design") )) return designs
def handle(self, *args, **options): if len(args) < 1: raise CommandError('Usage is ptop_reindexer_fluff %s' % self.args) fluff_configs = { config.name: config for config in get_fluff_pillow_configs() } pillow_name = args[0] if pillow_name not in fluff_configs: raise CommandError( 'Unrecognised fluff pillow: "{}". Options are:\n\t{}'.format( pillow_name, '\n\t'.join(fluff_configs))) pillow_getter = get_pillow_by_name(pillow_name, instantiate=False) pillow = pillow_getter(delete_filtered=True) if len(args) == 1: domains = pillow.domains else: domains = args[1:] domains_not_in_pillow = set(domains) - set(pillow.domains) if domains_not_in_pillow: bad_domains = ', '.join(domains_not_in_pillow) available_domains = ', '.join(pillow.domains) raise CommandError( "The following domains aren't for this pillow: {}.\nAvailable domains are: {}" .format(bad_domains, available_domains)) if pillow.kafka_topic in (topics.CASE, topics.FORM): couch_db = couch_config.get_db(None) elif pillow.kafka_topic == topics.COMMCARE_USER: couch_db = couch_config.get_db(settings.NEW_USERS_GROUPS_DB) else: raise CommandError('Reindexer not configured for topic: {}'.format( pillow.kafka_topic)) change_provider = CouchDomainDocTypeChangeProvider( couch_db=couch_db, domains=domains, doc_types=[pillow.doc_type], event_handler=ReindexEventHandler(pillow_name), ) PillowChangeProviderReindexer(pillow, change_provider).reindex()