Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
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,
    ]
Ejemplo n.º 4
0
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,
    ]
Ejemplo n.º 5
0
 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))
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
    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