Exemple #1
0
    def get_infos_resource_types(
        self,
        form_json: dict,
        fhir_version: str,
    ) -> Tuple[List[CaseTriggerInfo], Dict[str, FHIRResourceType]]:

        form_question_values = get_form_question_values(form_json)
        case_blocks = extract_case_blocks(form_json)
        cases_by_id = _get_cases_by_id(self.domain, case_blocks)
        resource_types_by_case_type = _get_resource_types_by_case_type(
            self.domain,
            fhir_version,
            cases_by_id.values(),
        )

        case_trigger_info_list = []
        for case_block in case_blocks:
            try:
                case = cases_by_id[case_block['@case_id']]
            except KeyError:
                form_id = form_json[TAG_FORM][TAG_META]['instanceID']
                raise CaseNotFound(
                    f"Form {form_id!r} touches case {case_block['@case_id']!r} "
                    "but that case is not found."
                )
Exemple #2
0
def get_first_claims(domain, user_id, case_ids):
    """
    Returns the first claim by user_id of case_ids, or None
    """
    case_ids_found = CommCareCase.objects.get_case_ids_that_exist(
        domain, case_ids)
    cases_not_found = [case for case in case_ids if case not in case_ids_found]

    if len(cases_not_found) != 0:
        raise CaseNotFound(", ".join(cases_not_found))

    potential_claim_cases = CommCareCase.objects.get_reverse_indexed_cases(
        domain, case_ids_found, case_types=[CLAIM_CASE_TYPE], is_closed=False)

    def _get_host_case_id(case):
        """The actual index identifier is irrelevant so return the referenced case ID
        from the first live extension index"""
        for index in case.live_indices:
            if index.relationship == CASE_INDEX_EXTENSION:
                return index.referenced_id

    previously_claimed_ids = {
        _get_host_case_id(case)
        for case in potential_claim_cases if case.owner_id == user_id
    }
Exemple #3
0
def _get_case_update(request, domain, update_model):
    try:
        request_json = json.loads(request.body)
    except ValueError:
        raise ApiError(msg="Malformed JSON", status_code=400)
    try:
        update = update_model.wrap(request_json)
    except BadValueError as e:
        raise ApiError(msg=e.message, status_code=400)
    try:
        case = get_case(domain, update.case_id)
        if case.type != update.case_type:
            raise CaseNotFound()
Exemple #4
0
def _handle_individual_get(request, case_id):
    try:
        case = CaseAccessors(request.domain).get_case(case_id)
        if case.domain != request.domain:
            raise CaseNotFound()
Exemple #5
0
def _handle_individual_get(request, case_id):
    try:
        case = CommCareCase.objects.get_case(case_id, request.domain)
        if case.domain != request.domain:
            raise CaseNotFound()
Exemple #6
0
 def get(cls, id, **kwargs):
     try:
         return super(CommCareCase, cls).get(id, **kwargs)
     except ResourceNotFound:
         raise CaseNotFound(id)