def setUp(self):
     self.domain = create_domain(DOMAIN)
     self.user = CommCareUser.create(DOMAIN, USERNAME, PASSWORD, None, None)
     initialize_index_and_mapping(get_es_new(), CASE_SEARCH_INDEX_INFO)
     CaseSearchConfig.objects.get_or_create(pk=DOMAIN, enabled=True)
     delete_all_cases()
     self.case_id = uuid4().hex
     _, [self.case] = post_case_blocks([
         CaseBlock.deprecated_init(
             create=True,
             case_id=self.case_id,
             case_type=CASE_TYPE,
             case_name=CASE_NAME,
             external_id=CASE_NAME,
             user_id=OWNER_ID,
             owner_id=OWNER_ID,
             update={
                 'opened_by': OWNER_ID
             },
         ).as_xml()
     ], {'domain': DOMAIN})
     domains_needing_search_index.clear()
     CaseSearchReindexerFactory(domain=DOMAIN).build().reindex()
     es = get_es_new()
     es.indices.refresh(CASE_SEARCH_INDEX)
Exemple #2
0
def _enable_search_index(domain, enabled):
    from corehq.apps.case_search.tasks import reindex_case_search_for_domain, delete_case_search_cases_for_domain
    from corehq.pillows.case_search import domains_needing_search_index
    domains_needing_search_index.clear()
    if enabled:
        reindex_case_search_for_domain.delay(domain)
    else:
        delete_case_search_cases_for_domain.delay(domain)
    def test_geopoint_property(self):
        CaseSearchConfig.objects.get_or_create(pk=self.domain, enabled=True)
        domains_needing_search_index.clear()
        self._make_data_dictionary(
            gps_properties=['coords', 'short_coords', 'other_coords'])
        case = self._make_case(
            case_properties={
                'coords': '-33.8561 151.2152 0 0',
                'short_coords': '-33.8561 151.2152',
                'other_coords': '42 Wallaby Way',
                'not_coords': '-33.8561 151.2152 0 0',
            })
        CaseSearchReindexerFactory(domain=self.domain).build().reindex()
        self.elasticsearch.indices.refresh(CASE_SEARCH_INDEX)

        es_case = CaseSearchES().doc_id(case.case_id).run().hits[0]
        self.assertEqual(
            self._get_prop(es_case['case_properties'], 'coords'),
            {
                'key': 'coords',
                'value': '-33.8561 151.2152 0 0',
                'geopoint_value': {
                    'lat': -33.8561,
                    'lon': 151.2152
                },
            },
        )
        self.assertEqual(
            self._get_prop(es_case['case_properties'], 'short_coords'),
            {
                'key': 'short_coords',
                'value': '-33.8561 151.2152',
                'geopoint_value': {
                    'lat': -33.8561,
                    'lon': 151.2152
                },
            },
        )
        self.assertEqual(
            self._get_prop(es_case['case_properties'], 'other_coords'),
            # The value here isn't a valid geopoint
            {
                'key': 'other_coords',
                'value': '42 Wallaby Way',
                'geopoint_value': None
            },
        )
        self.assertEqual(
            self._get_prop(es_case['case_properties'], 'not_coords'),
            # This isn't a geopoint property in the data dictionary
            {
                'key': 'not_coords',
                'value': '-33.8561 151.2152 0 0'
            },
        )
def enable_case_search(domain):
    from corehq.apps.case_search.tasks import reindex_case_search_for_domain
    from corehq.pillows.case_search import domains_needing_search_index

    config, created = CaseSearchConfig.objects.get_or_create(pk=domain)
    if not config.enabled:
        config.enabled = True
        config.save()
        case_search_enabled_for_domain.clear(domain)
        domains_needing_search_index.clear()
        reindex_case_search_for_domain.delay(domain)
Exemple #5
0
def enable_case_search(domain):
    from corehq.apps.case_search.tasks import reindex_case_search_for_domain
    from corehq.pillows.case_search import domains_needing_search_index

    config, created = CaseSearchConfig.objects.get_or_create(pk=domain)
    if not config.enabled:
        config.enabled = True
        config.save()
        case_search_enabled_for_domain.clear(domain)
        domains_needing_search_index.clear()
        reindex_case_search_for_domain.delay(domain)
    return config
def disable_case_search(domain):
    from corehq.apps.case_search.tasks import delete_case_search_cases_for_domain
    from corehq.pillows.case_search import domains_needing_search_index

    try:
        config = CaseSearchConfig.objects.get(pk=domain)
    except CaseSearchConfig.DoesNotExist:
        # CaseSearch was never enabled
        return
    if config.enabled:
        config.enabled = False
        config.save()
        case_search_enabled_for_domain.clear(domain)
        domains_needing_search_index.clear()
        delete_case_search_cases_for_domain.delay(domain)
Exemple #7
0
    def test_case_search_reindex_by_domain(self):
        """
        Tests reindexing for a particular domain only
        """
        other_domain = "yunkai"
        CaseSearchConfig.objects.get_or_create(pk=other_domain, enabled=True)
        domains_needing_search_index.clear()

        desired_case = self._make_case(domain=other_domain)
        undesired_case = self._make_case(domain=self.domain)  # noqa

        with self.assertRaises(CaseSearchNotEnabledException):
            CaseSearchReindexerFactory(domain=self.domain).build().reindex()

        CaseSearchReindexerFactory(domain=other_domain).build().reindex()
        self._assert_case_in_es(other_domain, desired_case)
Exemple #8
0
def disable_case_search(domain):
    from corehq.apps.case_search.tasks import delete_case_search_cases_for_domain
    from corehq.pillows.case_search import domains_needing_search_index

    try:
        config = CaseSearchConfig.objects.get(pk=domain)
    except CaseSearchConfig.DoesNotExist:
        # CaseSearch was never enabled
        return None
    if config.enabled:
        config.enabled = False
        config.save()
        case_search_enabled_for_domain.clear(domain)
        domains_needing_search_index.clear()
        delete_case_search_cases_for_domain.delay(domain)
    return config
    def test_case_search_reindex_by_domain(self):
        """
        Tests reindexing for a particular domain only
        """
        other_domain = "yunkai"
        CaseSearchConfig.objects.get_or_create(pk=other_domain, enabled=True)
        domains_needing_search_index.clear()

        desired_case = self._make_case(domain=other_domain)
        undesired_case = self._make_case(domain=self.domain)  # noqa

        with self.assertRaises(CaseSearchNotEnabledException):
            CaseSearchReindexerFactory(domain=self.domain).build().reindex()

        CaseSearchReindexerFactory(domain=other_domain).build().reindex()
        self._assert_case_in_es(other_domain, desired_case)
 def setUp(self):
     self.domain = create_domain(DOMAIN)
     self.user = CommCareUser.create(DOMAIN, USERNAME, PASSWORD, None, None)
     initialize_index_and_mapping(get_es_new(), CASE_SEARCH_INDEX_INFO)
     CaseSearchConfig.objects.get_or_create(pk=DOMAIN, enabled=True)
     delete_all_cases()
     self.case_id = uuid4().hex
     _, [self.case] = post_case_blocks([CaseBlock(
         create=True,
         case_id=self.case_id,
         case_type=CASE_TYPE,
         case_name=CASE_NAME,
         external_id=CASE_NAME,
         user_id=OWNER_ID,
         owner_id=OWNER_ID,
         update={'opened_by': OWNER_ID},
     ).as_xml()], {'domain': DOMAIN})
     self.additional_case_id = uuid4().hex
     _, [self.additional_case] = post_case_blocks([CaseBlock.deprecated_init(
         create=True,
         case_id=self.additional_case_id,
         case_type=CASE_TYPE,
         case_name="Bilbo Baggins",
         external_id="Bilbo Baggins",
         user_id=OWNER_ID,
         owner_id=OWNER_ID,
         update={'opened_by': OWNER_ID},
     ).as_xml()], {'domain': DOMAIN})
     self.case_ids = set([self.case_id, self.additional_case_id])
     domains_needing_search_index.clear()
     CaseSearchReindexerFactory(domain=DOMAIN).build().reindex()
     es = get_es_new()
     es.indices.refresh(CASE_SEARCH_INDEX)
     self.client = Client()
     self.client.login(username=USERNAME, password=PASSWORD)
     self.url = reverse('claim_case', kwargs={'domain': DOMAIN})
     self.synclog = SyncLogSQL.objects.bulk_create([
         self.make_synclog(self.domain, 'u1', '2022-04-12')
     ])[0]
     self.synclog.doc['case_ids_on_phone'] = [self.case_id]
     with patch('casexml.apps.phone.change_publishers.publish_synclog_saved'):
         self.synclog.save()
Exemple #11
0
    def test_case_search_reindexer(self):
        es = get_es_new()
        FormProcessorTestUtils.delete_all_cases()
        case = _create_and_save_a_case()

        ensure_index_deleted(CASE_SEARCH_INDEX)

        # With case search not enabled, case should not make it to ES
        CaseSearchConfig.objects.all().delete()
        domains_needing_search_index.clear()
        reindex_and_clean('case-search')
        es.indices.refresh(CASE_SEARCH_INDEX)  # as well as refresh the index
        self._assert_es_empty(esquery=CaseSearchES())

        # With case search enabled, it should get indexed
        with mock.patch('corehq.pillows.case_search.domains_needing_search_index',
                        mock.MagicMock(return_value=[self.domain])):
            reindex_and_clean('case-search')

        es.indices.refresh(CASE_SEARCH_INDEX)  # as well as refresh the index
        self._assert_case_is_in_es(case, esquery=CaseSearchES())
Exemple #12
0
 def migrate_domain(self, domain):
     self.stdout.write('Migrating {}...\n'.format(domain))
     ECD_MIGRATED_DOMAINS.set(domain, True, NAMESPACE_DOMAIN)
     domains_needing_search_index.clear()
     CaseSearchReindexerFactory(domain=domain).build().reindex()
     self.stdout.write('Done...\n\n'.format(domain))