def get_cases(request, domain): if request.couch_user.is_commcare_user(): user_id = request.couch_user.get_id else: user_id = request.REQUEST.get("user_id", "") if not user_id and not request.couch_user.is_web_user(): return HttpResponseBadRequest("Must specify user_id!") ids_only = string_to_boolean(request.REQUEST.get("ids_only", "false")) case_id = request.REQUEST.get("case_id", "") footprint = string_to_boolean(request.REQUEST.get("footprint", "false")) include_children = string_to_boolean(request.REQUEST.get("include_children", "false")) if case_id and not footprint and not include_children: # short circuit everything else and just return the case # NOTE: this allows any user in the domain to access any case given # they know its ID, which is slightly different from the previous # behavior (can only access things you own + footprint). If we want to # change this contract we would need to update this to check the # owned case list + footprint case = CommCareCase.get(case_id) assert case.domain == domain cases = [CaseAPIResult(id=case_id, couch_doc=case, id_only=ids_only)] else: filters = get_filters_from_request(request) status = api_closed_to_status(request.REQUEST.get('closed', 'false')) case_type = filters.get('properties/case_type', None) cases = get_filtered_cases(domain, status=status, case_type=case_type, user_id=user_id, filters=filters, footprint=footprint, ids_only=ids_only, strip_history=True, include_children=include_children) return json_response(cases)
def obj_get_list(self, bundle, domain, **kwargs): user_id = bundle.request.GET.get('user_id') status = api_closed_to_status(bundle.request.REQUEST.get('closed', 'false')) filters = get_filters_from_request(bundle.request, limit_top_level=self.fields) case_type = filters.get('properties/case_type', None) return map(dict_object, get_filtered_cases(domain, status=status, case_type=case_type, user_id=user_id, filters=filters))
def get_cases_vary_on(request, domain): return [ request.couch_user.get_id if request.couch_user.is_commcare_user() else request.REQUEST.get('user_id', ''), request.REQUEST.get('ids_only', 'false'), request.REQUEST.get('case_id', ''), request.REQUEST.get('footprint', 'false'), request.REQUEST.get('closed', 'false'), json.dumps(get_filters_from_request(request)), domain, ]
def obj_get_list(self, bundle, domain, **kwargs): user_id = bundle.request.GET.get('user_id') status = api_closed_to_status( bundle.request.REQUEST.get('closed', 'false')) filters = get_filters_from_request(bundle.request, limit_top_level=self.fields) case_type = filters.get('properties/case_type', None) return map( dict_object, get_filtered_cases(domain, status=status, case_type=case_type, user_id=user_id, filters=filters))
def get_cases(request, domain): if request.couch_user.is_commcare_user(): user_id = request.couch_user.get_id else: user_id = request.REQUEST.get("user_id", "") if not user_id and not request.couch_user.is_web_user(): return HttpResponseBadRequest("Must specify user_id!") ids_only = string_to_boolean(request.REQUEST.get("ids_only", "false")) case_id = request.REQUEST.get("case_id", "") footprint = string_to_boolean(request.REQUEST.get("footprint", "false")) if toggles.HSPH_HACK.enabled(domain): hsph_case_id = request.REQUEST.get('hsph_hack', None) if hsph_case_id != 'None' and hsph_case_id and user_id: case = CommCareCase.get(hsph_case_id) usercase_id = CommCareUser.get_by_user_id(user_id).get_usercase_id() usercase = CommCareCase.get(usercase_id) if usercase_id else None return json_response(map( lambda case: CaseAPIResult(id=case['_id'], couch_doc=case, id_only=ids_only), filter(None, [case, case.parent, usercase]) )) if case_id and not footprint: # short circuit everything else and just return the case # NOTE: this allows any user in the domain to access any case given # they know its ID, which is slightly different from the previous # behavior (can only access things you own + footprint). If we want to # change this contract we would need to update this to check the # owned case list + footprint case = CommCareCase.get(case_id) assert case.domain == domain cases = [CaseAPIResult(id=case_id, couch_doc=case, id_only=ids_only)] else: filters = get_filters_from_request(request) status = api_closed_to_status(request.REQUEST.get('closed', 'false')) case_type = filters.get('properties/case_type', None) cases = get_filtered_cases(domain, status=status, case_type=case_type, user_id=user_id, filters=filters, footprint=footprint, ids_only=ids_only, strip_history=True) return json_response(cases)
case_id = request.REQUEST.get("case_id", "") footprint = string_to_boolean(request.REQUEST.get("footprint", "false")) include_children = string_to_boolean( request.REQUEST.get("include_children", "false")) if case_id and not footprint and not include_children: # short circuit everything else and just return the case # NOTE: this allows any user in the domain to access any case given # they know its ID, which is slightly different from the previous # behavior (can only access things you own + footprint). If we want to # change this contract we would need to update this to check the # owned case list + footprint case = CommCareCase.get(case_id) assert case.domain == domain cases = [CaseAPIResult(id=case_id, couch_doc=case, id_only=ids_only)] else: filters = get_filters_from_request(request) status = api_closed_to_status(request.REQUEST.get('closed', 'false')) case_type = filters.get('properties/case_type', None) cases = get_filtered_cases(domain, status=status, case_type=case_type, user_id=user_id, filters=filters, footprint=footprint, ids_only=ids_only, strip_history=True, include_children=include_children) return json_response(cases) @cloudcare_api