Example #1
0
    def _case_results(self, case_id_list):
        def _filter(res):
            if self.filters:
                for path, val in self.filters.items():
                    actual_val = safe_index(res.case_json, path.split("/"))
                    if actual_val != val:
                        # closed=false => case.closed == False
                        if val in ('null', 'true', 'false'):
                            if actual_val != json.loads(val):
                                return False
                        else:
                            return False
                return True

        if not self.ids_only or self.filters or self.footprint:
            # optimization hack - we know we'll need the full cases eventually
            # so just grab them now.
            base_results = [CaseAPIResult(couch_doc=case, id_only=self.ids_only) \
                            for case in self.iter_cases(case_id_list)]
        else:
            base_results = [
                CaseAPIResult(id=id, id_only=True) for id in case_id_list
            ]

        if self.filters:
            base_results = filter(_filter, base_results)

        if self.footprint:
            return [CaseAPIResult(couch_doc=case, id_only=self.ids_only) for case in \
                    get_footprint([res.couch_doc for res in base_results],
                                  strip_history=self.strip_history).values()]
        else:
            return base_results
Example #2
0
    def _case_results(self, case_id_list):
        def _filter(res):
            if self.filters:
                for path, val in self.filters.items():
                    actual_val = safe_index(res.case_json, path.split("/"))
                    if actual_val != val:
                        # closed=false => case.closed == False
                        if val in ('null', 'true', 'false'):
                            if actual_val != json.loads(val):
                                return False
                        else:
                            return False
                return True

        if not self.ids_only or self.filters or self.footprint:
            # optimization hack - we know we'll need the full cases eventually
            # so just grab them now.
            base_results = [CaseAPIResult(couch_doc=case, id_only=self.ids_only) \
                            for case in self.iter_cases(case_id_list)]
        else:
            base_results = [CaseAPIResult(id=id, id_only=True) for id in case_id_list]

        if self.filters:
            base_results = filter(_filter, base_results)

        if self.footprint:
            return [CaseAPIResult(couch_doc=case, id_only=self.ids_only) for case in \
                    get_footprint([res.couch_doc for res in base_results], 
                                  strip_history=self.strip_history).values()]
        else:
            return base_results
Example #3
0
 def _all_relevant_cases_dict(self, cases):
     return get_footprint(cases, domain=self.domain, strip_history=True)