Beispiel #1
0
    def _actual_owned_cases(self):
        """
        This returns a list of case dicts. Each dict will either be an actual case dict or else
        a dict containing only these keys: '_id', 'type', 'indices'. These 'minimal cases' are
        created from CaseState objects from the previous SyncLog.
        """
        def _case_domain_match(case):
            return not self.domain or self.domain == case.get('domain')

        case_ids = self._get_case_ids()
        if self.use_minimal_cases:
            # First we check to see if there is a case state available that we can use
            # rather than fetching the whole case.
            minimal_cases = []
            cases_to_fetch = []
            for case_id in case_ids:
                minimal_case = self.global_state.minimal_cases.get(case_id)
                if minimal_case:
                    minimal_cases.append(minimal_case)
                else:
                    cases_to_fetch.append(case_id)

            logger.debug(
                "%s cases found in previous SyncLog. %s still to fetch",
                len(minimal_cases), len(cases_to_fetch)
            )

            if cases_to_fetch:
                cases = CommCareCase.bulk_get_lite(cases_to_fetch, wrap=False, chunksize=self.chunksize)
                minimal_cases.extend(
                    case_doc for case_doc in cases
                    if _case_domain_match(case_doc)
                )
            return minimal_cases
        else:
            lite_cases = list(iter_lite_cases_json(case_ids, self.chunksize))
            logger.debug("No previous SyncLog. Fetched %s cases", len(lite_cases))
            return lite_cases
Beispiel #2
0
 def bulk_get_lite(cls, ids, wrap=True, chunksize=100):
     from corehq.apps.hqcase.dbaccessors import iter_lite_cases_json
     wrapper = lambda doc: cls.get_wrap_class(doc).wrap(doc) if wrap else doc
     for lite_case_json in iter_lite_cases_json(ids, chunksize=chunksize):
         yield wrapper(lite_case_json)
Beispiel #3
0
 def bulk_get_lite(cls, ids, wrap=True, chunksize=100):
     from corehq.apps.hqcase.dbaccessors import iter_lite_cases_json
     wrapper = lambda doc: cls.get_wrap_class(doc).wrap(doc
                                                        ) if wrap else doc
     for lite_case_json in iter_lite_cases_json(ids, chunksize=chunksize):
         yield wrapper(lite_case_json)