コード例 #1
0
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 [],
    }
コード例 #2
0
ファイル: modules.py プロジェクト: alemat/commcare-hq
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 "",
        }
    }
コード例 #3
0
    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})
コード例 #4
0
ファイル: modules.py プロジェクト: saketkanth/commcare-hq
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()
        ],
    }
コード例 #5
0
ファイル: case_search.py プロジェクト: mekete/commcare-hq
    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,
            )
コード例 #6
0
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 [],
    }
コード例 #7
0
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()],
    }
コード例 #8
0
ファイル: case_search.py プロジェクト: saketkanth/commcare-hq
 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)
コード例 #9
0
 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)
コード例 #10
0
ファイル: views.py プロジェクト: caktus/commcare-hq
    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),
        })
コード例 #11
0
ファイル: views.py プロジェクト: zbidi/commcare-hq
    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})
コード例 #12
0
ファイル: modules.py プロジェクト: kkrampa/commcare-hq
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
コード例 #13
0
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
コード例 #14
0
ファイル: views.py プロジェクト: twymer/commcare-hq
    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),
        })
コード例 #15
0
ファイル: views.py プロジェクト: dimagi/commcare-hq
    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),
        })
コード例 #16
0
ファイル: case_search.py プロジェクト: mekete/commcare-hq
    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)
コード例 #17
0
ファイル: case_search.py プロジェクト: saketkanth/commcare-hq
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
        )
コード例 #18
0
ファイル: views.py プロジェクト: zbidi/commcare-hq
    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())