コード例 #1
0
    def _get_forms(self, case_id, from_date, to_date, context):
        domain = context.root_doc['domain']
        xmlns_tuple = tuple(self.xmlns)
        cache_key = (self.__class__.__name__, case_id, self.count, from_date,
                     to_date, xmlns_tuple)

        if context.get_cache_value(cache_key) is not None:
            return context.get_cache_value(cache_key)

        xform_ids = FormsInDateExpressionSpec._get_case_form_ids(
            case_id, context)
        # TODO(Emord) this will eventually break down when cases have a lot of
        # forms associated with them. perhaps change to intersecting two sets
        xforms = FormsInDateExpressionSpec._get_filtered_forms_from_es(
            case_id, xform_ids, context)
        if self.xmlns:
            xforms = [x for x in xforms if x['xmlns'] in xmlns_tuple]
        if from_date:
            xforms = [x for x in xforms if x['timeEnd'] >= from_date]
        if to_date:
            xforms = [x for x in xforms if x['timeEnd'] <= to_date]
        if self.count:
            count = len(xforms)
            context.set_cache_value(cache_key, count)
            return count

        if not ICDS_UCR_ELASTICSEARCH_DOC_LOADING.enabled(
                case_id, NAMESPACE_OTHER):
            form_ids = [x['_id'] for x in xforms]
            xforms = FormAccessors(domain).get_forms(form_ids)
            xforms = FormsInDateExpressionSpec._get_form_json_list(
                case_id, xforms, context, domain)

        context.set_cache_value(cache_key, xforms)
        return xforms
コード例 #2
0
 def setUpClass(cls):
     super(TestFormsExpressionSpecWithFilterEsVersion, cls).setUpClass()
     # enable toggle to 100%
     db_toggle = Toggle(slug=ICDS_UCR_ELASTICSEARCH_DOC_LOADING.slug)
     setattr(db_toggle, DynamicallyPredictablyRandomToggle.RANDOMNESS_KEY,
             1)
     db_toggle.save()
     assert ICDS_UCR_ELASTICSEARCH_DOC_LOADING.enabled(
         uuid.uuid4().hex, NAMESPACE_OTHER)
コード例 #3
0
    def _get_filtered_forms_from_es(case_id, xform_ids, context):
        es_toggle_enabled = ICDS_UCR_ELASTICSEARCH_DOC_LOADING.enabled(case_id, NAMESPACE_OTHER)
        cache_key = (FormsInDateExpressionSpec.__name__, 'es_helper', case_id, tuple(xform_ids),
                     es_toggle_enabled)
        if context.get_cache_value(cache_key) is not None:
            return context.get_cache_value(cache_key)

        source = True if es_toggle_enabled else ['form.meta.timeEnd', 'xmlns', '_id']
        forms = FormsInDateExpressionSpec._bulk_get_forms_from_elasticsearch(xform_ids)
        context.set_cache_value(cache_key, forms)
        return forms