Esempio n. 1
0
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()
Esempio n. 2
0
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()
Esempio n. 3
0
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()
Esempio n. 4
0
    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()
Esempio n. 5
0
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()
Esempio n. 6
0
 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
Esempio n. 7
0
 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
Esempio n. 8
0
    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()