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)
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)
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)
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 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 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()
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())
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))