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
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)
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