def test_count(self): es = FakeFormESView() for i in range(0, 1300): es.add_doc(i, {'i': i}) queryset = ElasticAPIQuerySet(es_client=es, payload={}) self.assertEqual(queryset.count(), 1300)
def test_slice(self): es = FakeFormESView() for i in range(0, 1300): es.add_doc(i, {'i': i}) queryset = ElasticAPIQuerySet(es_client=es, payload={}) qs_slice = list(queryset[3:7]) self.assertEqual(es.queries[0]['from'], 3) self.assertEqual(es.queries[0]['size'], 4) self.assertEqual(len(qs_slice), 4) queryset = ElasticAPIQuerySet(es_client=es, payload={}) qs_slice = list(queryset[10:20]) self.assertEqual(es.queries[1]['from'], 10) self.assertEqual(es.queries[1]['size'], 10) self.assertEqual(len(qs_slice), 10) queryset = ElasticAPIQuerySet(es_client=es, payload={}) qs_slice = list(queryset[500:1000]) self.assertEqual(es.queries[2]['from'], 500) self.assertEqual(es.queries[2]['size'], 500) self.assertEqual(len(qs_slice), 500)
def obj_get_list(self, bundle, domain, **kwargs): include_archived = 'include_archived' in bundle.request.GET try: es_query = es_search(bundle.request, domain, ['include_archived']) except Http400 as e: raise BadRequest(e.message) if include_archived: es_query['filter']['and'].append({ 'or': [ { 'term': { 'doc_type': 'xforminstance' } }, { 'term': { 'doc_type': 'xformarchived' } }, ] }) else: es_query['filter']['and'].append( {'term': { 'doc_type': 'xforminstance' }}) # Note that XFormES is used only as an ES client, for `run_query` against the proper index return ElasticAPIQuerySet( payload=es_query, model=ESXFormInstance, es_client=self.xform_es(domain)).order_by('-received_on')
def _get_form_mock(project, params): # this is mostly copy/paste/modified from XFormInstanceResource include_archived = 'include_archived' in params es_query = es_search_by_params(params, project, ['include_archived']) if include_archived: es_query['filter']['and'].append({ 'or': [ { 'term': { 'doc_type': 'xforminstance' } }, { 'term': { 'doc_type': 'xformarchived' } }, ] }) else: es_query['filter']['and'].append( {'term': { 'doc_type': 'xforminstance' }}) query_set = ElasticAPIQuerySet( payload=es_query, model=ESXFormInstance, es_client=XFormES(project), ).order_by('received_on') return MockApi(query_set, XFormInstanceResource(), XFormInstanceSerializer())
def obj_get_list(self, bundle, domain, **kwargs): try: es_query = es_search(bundle.request, domain) except Http400 as e: raise BadRequest(str(e)) return ElasticAPIQuerySet( payload=es_query, model=ESCase, es_client=self.case_es(domain)).order_by('server_modified_on')
def _get_case_mock(project, params): # this is mostly copy/paste/modified from CommCareCaseResource es_query = es_query_from_get_params(params, project) query_set = ElasticAPIQuerySet( payload=es_query, model=ESCase, es_client=CaseESView(project), ).order_by('server_modified_on') return MockApi(query_set, CommCareCaseResource(), CommCareCaseSerializer())
def test_order_by(self): es = FakeXFormES() for i in range(0, 1300): es.add_doc(i, {'i': i}) queryset = ElasticAPIQuerySet(es_client=es, payload={}) list(queryset.order_by('foo')) asc_ = {'missing': '_first', 'order': 'asc'} desc_ = {'missing': '_last', 'order': 'desc'} self.assertEqual(es.queries[0]['sort'], [{'foo': asc_}]) list(queryset.order_by('-foo')) self.assertEqual(es.queries[1]['sort'], [{'foo': desc_}]) list(queryset.order_by('bizzle').order_by('-baz')) self.assertEqual(es.queries[2]['sort'], [{'baz': desc_}]) list(queryset.order_by('one', '-two', 'three')) self.assertEqual(es.queries[3]['sort'], [{'one': asc_}, {'two': desc_}, {'three': asc_}])
def _get_form_mock(project, params): # this is mostly copy/paste/modified from XFormInstanceResource include_archived = 'include_archived' in params es_query = es_query_from_get_params(params, project, ['include_archived']) query_set = ElasticAPIQuerySet( payload=es_query, model=ESXFormInstance, es_client=FormESView(project), ).order_by('received_on') return MockApi(query_set, XFormInstanceResource(), XFormInstanceSerializer())
def obj_get_list(self, bundle, domain, **kwargs): try: es_query = es_query_from_get_params(bundle.request.GET, domain, ['include_archived']) except Http400 as e: raise BadRequest(str(e)) # Note that FormESView is used only as an ES client, for `run_query` against the proper index return ElasticAPIQuerySet( payload=es_query, model=ESXFormInstance, es_client=self.xform_es(domain) ).order_by('-received_on')
def test_order_by(self): es = FakeFormESView() for i in range(0, 1300): es.add_doc(i, {'i': i}) queryset = ElasticAPIQuerySet(es_client=es, payload={}) list(queryset.order_by('foo')) asc_ = {'missing': '_first', 'order': 'asc'} desc_ = {'missing': '_last', 'order': 'desc'} self.assertEqual(es.queries[0]['sort'], [{'foo': asc_}]) list(queryset.order_by('-foo')) self.assertEqual(es.queries[1]['sort'], [{'foo': desc_}]) list(queryset.order_by('bizzle').order_by('-baz')) self.assertEqual(es.queries[2]['sort'], [{'baz': desc_}]) list(queryset.order_by('one', '-two', 'three')) self.assertEqual(es.queries[3]['sort'], [{ 'one': asc_ }, { 'two': desc_ }, { 'three': asc_ }])
def obj_get_list(self, bundle, domain, **kwargs): filters = v0_3.CaseListFilters(bundle.request.GET).filters # Since tastypie handles the "from" and "size" via slicing, we have to wipe them out here # since ElasticCaseQuery adds them. I believe other APIs depend on the behavior of ElasticCaseQuery # hence I am not modifying that query = ElasticCaseQuery(domain, filters).get_query() if 'from' in query: del query['from'] if 'size' in query: del query['size'] # Note that CaseES is used only as an ES client, for `run_query` against the proper index return ElasticAPIQuerySet( payload=query, model=ESCase, es_client=self.case_es(domain)).order_by('server_modified_on')
def _get_case_mock(project, params): # this is mostly copy/paste/modified from CommCareCaseResource filters = CaseListFilters(params).filters query = ElasticCaseQuery(project, filters).get_query() if 'from' in query: del query['from'] if 'size' in query: del query['size'] query_set = ElasticAPIQuerySet( payload=query, model=ESCase, es_client=CaseES(project), ).order_by('server_modified_on') return MockApi(query_set, CommCareCaseResource(), CommCareCaseSerializer())