def _get_basic_module_view_context(app, module, lang=None): case_property_builder = _setup_case_property_builder(app) case_type = module.case_type form_options = _case_list_form_options(app, module, case_type, lang) # http://manage.dimagi.com/default.asp?178635 allow_with_parent_select = app.build_version >= '2.23' or not module.parent_select.active allow_case_list_form = _case_list_form_not_allowed_reason( module, AllowWithReason(allow_with_parent_select, AllowWithReason.PARENT_SELECT_ACTIVE) ) return { 'parent_modules': _get_parent_modules(app, module, case_property_builder, case_type), 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': form_options, 'case_list_form_not_allowed_reason': allow_case_list_form, 'valid_parent_modules': _get_valid_parent_modules(app, module), 'child_module_enabled': ( toggles.BASIC_CHILD_MODULE.enabled(app.domain) and module.doc_type != "ShadowModule" ), 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'include_closed': module.search_config.include_closed if module_offers_search(module) else False, 'default_properties': module.search_config.default_properties if module_offers_search(module) else [], }
def _get_shared_module_view_context(app, module, case_property_builder, lang=None): ''' Get context items that are used by both basic and advanced modules. ''' case_type = module.case_type return { 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': _case_list_form_options(app, module, case_type, lang), 'valid_parent_modules': _get_valid_parent_modules(app, module), 'js_options': { 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'include_closed': module.search_config.include_closed if module_offers_search(module) else False, 'default_properties': module.search_config.default_properties if module_offers_search(module) else [], 'search_button_display_condition': module.search_config.search_button_display_condition if module_offers_search(module) else "", } }
def post(self, request, *args, **kwargs): from corehq.apps.es.case_search import CaseSearchES if not case_search_enabled_for_domain(self.domain): raise BadRequest("Domain does not have case search enabled") query = json.loads(request.POST.get('q')) case_type = query.get('type') owner_id = query.get('owner_id') search_params = query.get('parameters', []) query_addition = query.get("customQueryAddition", None) search = CaseSearchES() search = search.domain(self.domain).is_closed(False) if case_type: search = search.case_type(case_type) if owner_id: search = search.owner(owner_id) for param in search_params: value = re.sub(param.get('regex', ''), '', param.get('value')) search = search.case_property_query( param.get('key'), value, clause=param.get('clause'), fuzzy=param.get('fuzzy'), ) if query_addition: addition = CaseSearchQueryAddition.objects.get(id=query_addition, domain=self.domain) new_query = merge_queries(search.get_query(), addition.query_addition) search = search.set_query(new_query) search_results = search.values() return json_response({'values': search_results})
def _get_advanced_module_view_context(app, module, lang=None): case_property_builder = _setup_case_property_builder(app) case_type = module.case_type form_options = _case_list_form_options(app, module, case_type, lang) return { 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': form_options, 'case_list_form_not_allowed_reason': _case_list_form_not_allowed_reason( module), 'valid_parent_modules': [ parent_module for parent_module in app.modules if not getattr(parent_module, 'root_module_id', None) ], 'child_module_enabled': True, 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'schedule_phases': [ { 'id': schedule.id, 'anchor': schedule.anchor, 'forms': [ form.schedule_form_id for form in schedule.get_forms() ], } for schedule in module.get_schedule_phases() ], }
def build(self): """Returns a reindexer that will return either all domains with case search enabled, or a single domain if passed in """ limit_to_db = self.options.pop('limit_to_db', None) domain = self.options.pop('domain', None) limit_db_aliases = [limit_to_db] if limit_to_db else None initialize_index_and_mapping(get_es_new(), CASE_SEARCH_INDEX_INFO) try: if domain is not None: if not case_search_enabled_for_domain(domain): raise CaseSearchNotEnabledException( "{} does not have case search enabled".format(domain)) domains = [domain] else: # return changes for all enabled domains domains = case_search_enabled_domains() change_provider = get_domain_case_change_provider( domains=domains, limit_db_aliases=limit_db_aliases) except ProgrammingError: # The db hasn't been intialized yet, so skip this reindex and complain. return _fail_gracefully_and_tell_admins() else: return PillowChangeProviderReindexer( get_case_search_to_elasticsearch_pillow(), change_provider=change_provider, )
def _get_basic_module_view_context(app, module, lang=None): case_property_builder = _setup_case_property_builder(app) case_type = module.case_type form_options = _case_list_form_options(app, module, case_type, lang) # http://manage.dimagi.com/default.asp?178635 allow_with_parent_select = app.build_version >= '2.23' or not module.parent_select.active allow_case_list_form = _case_list_form_not_allowed_reason( module, AllowWithReason(allow_with_parent_select, AllowWithReason.PARENT_SELECT_ACTIVE)) return { 'parent_modules': _get_parent_modules(app, module, case_property_builder, case_type), 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': form_options, 'case_list_form_not_allowed_reason': allow_case_list_form, 'valid_parent_modules': _get_valid_parent_modules(app, module), 'child_module_enabled': (toggles.BASIC_CHILD_MODULE.enabled(app.domain) and module.doc_type != "ShadowModule"), 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], }
def _get_advanced_module_view_context(app, module, lang=None): case_property_builder = _setup_case_property_builder(app) case_type = module.case_type form_options = _case_list_form_options(app, module, case_type, lang) return { 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': form_options, 'case_list_form_not_allowed_reason': _case_list_form_not_allowed_reason(module), 'valid_parent_modules': [ parent_module for parent_module in app.modules if not getattr(parent_module, 'root_module_id', None) ], 'child_module_enabled': True, 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'schedule_phases': [{ 'id': schedule.id, 'anchor': schedule.anchor, 'forms': [form.schedule_form_id for form in schedule.get_forms()], } for schedule in module.get_schedule_phases()], }
def process_change(self, pillow_instance, change): assert isinstance(change, Change) if change.metadata is not None: # Comes from KafkaChangeFeed (i.e. running pillowtop) domain = change.metadata.domain else: # comes from ChangeProvider (i.e reindexing) domain = change.get_document()['domain'] if domain and case_search_enabled_for_domain(domain): super(CaseSearchPillowProcessor, self).process_change(pillow_instance, change)
def post(self, request, *args, **kwargs): from corehq.apps.es.case_search import CaseSearchES if not case_search_enabled_for_domain(self.domain): raise BadRequest("Domain does not have case search enabled") query = json.loads(request.POST.get('q')) case_type = query.get('type') owner_id = query.get('owner_id') search_params = query.get('parameters', []) xpath = query.get("xpath") search = CaseSearchES() search = search.domain(self.domain).size(10) if case_type: search = search.case_type(case_type) if owner_id: search = search.owner(owner_id) for param in search_params: value = re.sub(param.get('regex', ''), '', param.get('value')) if '/' in param.get('key'): query = '{} = "{}"'.format(param.get('key'), value) search = search.xpath_query(self.domain, query, fuzzy=param.get('fuzzy')) else: search = search.case_property_query( param.get('key'), value, clause=param.get('clause'), fuzzy=param.get('fuzzy'), ) if xpath: search = search.xpath_query(self.domain, xpath) include_profile = request.POST.get("include_profile", False) if include_profile: search = search.enable_profiling() search_results = search.run() return json_response({ 'values': search_results.raw_hits, 'count': search_results.total, 'took': search_results.raw['took'], 'query': search_results.query.dumps(pretty=True), 'profile': json.dumps(search_results.raw.get('profile', {}), indent=2), })
def post(self, request, *args, **kwargs): from corehq.apps.es.case_search import CaseSearchES if not case_search_enabled_for_domain(self.domain): raise BadRequest("Domain does not have case search enabled") query = json.loads(request.POST.get('q')) case_type = query.get('type') search_params = query.get('parameters', []) search = CaseSearchES() search = search.domain(self.domain).is_closed(False) if case_type: search = search.case_type(case_type) for param in search_params: search = search.case_property_query(**param) search_results = search.values() return json_response({'values': search_results})
def _get_shared_module_view_context(app, module, case_property_builder, lang=None): ''' Get context items that are used by both basic and advanced modules. ''' case_type = module.case_type context = { 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': _case_list_form_options(app, module, case_type, lang), 'valid_parents_for_child_module': _get_valid_parents_for_child_module(app, module), 'js_options': { 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'include_closed': module.search_config.include_closed if module_offers_search(module) else False, 'default_properties': module.search_config.default_properties if module_offers_search(module) else [], 'search_button_display_condition': module.search_config.search_button_display_condition if module_offers_search(module) else "", 'blacklisted_owner_ids_expression': ( module.search_config.blacklisted_owner_ids_expression if module_offers_search(module) else ""), }, 'legacy_select2': True, } if toggles.CASE_DETAIL_PRINT.enabled(app.domain): slug = 'module_%s_detail_print' % module.unique_id print_template = module.case_details.long.print_template print_uploader = MultimediaHTMLUploadController( slug, reverse( ProcessDetailPrintTemplateUploadView.urlname, args=[app.domain, app.id, module.unique_id], ) ) if not print_template: print_template = { 'path': 'jr://file/commcare/text/%s.html' % slug, } context.update({ 'print_uploader': print_uploader, 'print_uploader_js': print_uploader.js_options, 'print_ref': ApplicationMediaReference( print_template.get('path'), media_class=CommCareMultimedia, ).as_dict(), 'print_media_info': print_template, }) return context
def _get_shared_module_view_context(app, module, case_property_builder, lang=None): ''' Get context items that are used by both basic and advanced modules. ''' case_type = module.case_type context = { 'details': _get_module_details_context(app, module, case_property_builder, case_type), 'case_list_form_options': _case_list_form_options(app, module, case_type, lang), 'valid_parent_modules': _get_valid_parent_modules(app, module), 'js_options': { 'fixture_columns_by_type': _get_fixture_columns_by_type(app.domain), 'is_search_enabled': case_search_enabled_for_domain(app.domain), 'search_properties': module.search_config.properties if module_offers_search(module) else [], 'include_closed': module.search_config.include_closed if module_offers_search(module) else False, 'default_properties': module.search_config.default_properties if module_offers_search(module) else [], 'search_button_display_condition': module.search_config.search_button_display_condition if module_offers_search(module) else "", 'blacklisted_owner_ids_expression': ( module.search_config.blacklisted_owner_ids_expression if module_offers_search(module) else ""), } } if toggles.CASE_DETAIL_PRINT.enabled(app.domain): slug = 'module_%s_detail_print' % module.unique_id print_template = module.case_details.long.print_template print_uploader = MultimediaHTMLUploadController( slug, reverse( ProcessDetailPrintTemplateUploadView.name, args=[app.domain, app.id, module.unique_id], ) ) if not print_template: print_template = { 'path': 'jr://file/commcare/text/%s.html' % slug, } context.update({ 'print_uploader': print_uploader, 'print_uploader_js': print_uploader.js_options, 'print_ref': ApplicationMediaReference( print_template.get('path'), media_class=CommCareMultimedia, ).as_dict(), 'print_media_info': print_template, }) return context
def post(self, request, *args, **kwargs): from corehq.apps.es.case_search import CaseSearchES if not case_search_enabled_for_domain(self.domain): raise BadRequest("Domain does not have case search enabled") query = json.loads(request.POST.get('q')) case_type = query.get('type') owner_id = query.get('owner_id') search_params = query.get('parameters', []) query_addition = query.get("customQueryAddition", None) include_closed = query.get("includeClosed", False) xpath = query.get("xpath") search = CaseSearchES() search = search.domain(self.domain).size(10) if not include_closed: search = search.is_closed(False) if case_type: search = search.case_type(case_type) if owner_id: search = search.owner(owner_id) for param in search_params: value = re.sub(param.get('regex', ''), '', param.get('value')) search = search.case_property_query( param.get('key'), value, clause=param.get('clause'), fuzzy=param.get('fuzzy'), ) if query_addition: addition = CaseSearchQueryAddition.objects.get(id=query_addition, domain=self.domain) new_query = merge_queries(search.get_query(), addition.query_addition) search = search.set_query(new_query) if xpath: search = search.xpath_query(self.domain, xpath) search_results = search.run() return json_response({ 'values': search_results.raw_hits, 'count': search_results.total, 'took': search_results.raw['took'], 'query': search_results.query.dumps(pretty=True), })
def build(self): limit_to_db = self.options.pop('limit_to_db', None) domain = self.options.pop('domain') if not case_search_enabled_for_domain(domain): raise CaseSearchNotEnabledException( "{} does not have case search enabled".format(domain)) assert should_use_sql_backend( domain), '{} can only be used with SQL domains'.format(self.slug) iteration_key = "CaseSearchResumableToElasticsearchPillow_{}_reindexer_{}_{}".format( CASE_SEARCH_INDEX_INFO.index, limit_to_db or 'all', domain or 'all') limit_db_aliases = [limit_to_db] if limit_to_db else None accessor = CaseReindexAccessor(domain=domain, limit_db_aliases=limit_db_aliases) doc_provider = SqlDocumentProvider(iteration_key, accessor) return ResumableBulkElasticPillowReindexer( doc_provider, elasticsearch=get_es_new(), index_info=CASE_SEARCH_INDEX_INFO, doc_transform=transform_case_for_elasticsearch, **self.options)
def get_case_search_reindexer(domain=None): """Returns a reindexer that will return either all domains with case search enabled, or a single domain if passed in """ initialize_index_and_mapping(get_es_new(), CASE_SEARCH_INDEX_INFO) try: if domain is not None: if not case_search_enabled_for_domain(domain): raise CaseSearchNotEnabledException("{} does not have case search enabled".format(domain)) domains = [domain] else: # return changes for all enabled domains domains = case_search_enabled_domains() change_provider = get_domain_case_change_provider(domains=domains) except ProgrammingError: # The db hasn't been intialized yet, so skip this reindex and complain. return _fail_gracefully_and_tell_admins() else: return PillowReindexer( get_case_search_to_elasticsearch_pillow(), change_provider=change_provider )
def get(self, request, *args, **kwargs): if not case_search_enabled_for_domain(self.domain): raise Http404("Domain does not have case search enabled") return self.render_to_response(self.get_context_data())