Esempio n. 1
0
    def test_slice(self):
        es = FakeXFormES()
        for i in xrange(0, 1300):
            es.add_doc(i, {'i': i})

        queryset = ESQuerySet(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 = ESQuerySet(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 = ESQuerySet(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)
Esempio n. 2
0
    def test_order_by(self):
        es = FakeXFormES()
        for i in xrange(0, 1300):
            es.add_doc(i, {'i': i})
        
        queryset = ESQuerySet(es_client=es, payload={})
        qs_asc = list(queryset.order_by('foo'))
        self.assertEqual(es.queries[0]['sort'], [{'foo': 'asc'}])

        qs_desc = list(queryset.order_by('-foo'))
        self.assertEqual(es.queries[1]['sort'], [{'foo': 'desc'}])

        qs_overwrite = list(queryset.order_by('bizzle').order_by('-baz'))
        self.assertEqual(es.queries[2]['sort'], [{'baz': 'desc'}])

        qs_multi = list(queryset.order_by('one', '-two', 'three'))
        self.assertEqual(es.queries[3]['sort'], [{'one': 'asc'}, {'two': 'desc'}, {'three': 'asc'}])
Esempio n. 3
0
    def test_order_by(self):
        es = FakeXFormES()
        for i in xrange(0, 1300):
            es.add_doc(i, {"i": i})

        queryset = ESQuerySet(es_client=es, payload={})
        qs_asc = list(queryset.order_by("foo"))
        self.assertEqual(es.queries[0]["sort"], [{"foo": "asc"}])

        qs_desc = list(queryset.order_by("-foo"))
        self.assertEqual(es.queries[1]["sort"], [{"foo": "desc"}])

        qs_overwrite = list(queryset.order_by("bizzle").order_by("-baz"))
        self.assertEqual(es.queries[2]["sort"], [{"baz": "desc"}])

        qs_multi = list(queryset.order_by("one", "-two", "three"))
        self.assertEqual(es.queries[3]["sort"], [{"one": "asc"}, {"two": "desc"}, {"three": "asc"}])
Esempio n. 4
0
    def obj_get_list(self, bundle, domain, **kwargs):
        try:
            es_query = es_search(bundle.request, domain)
        except Http400 as e:
            raise BadRequest(e.message)
        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 ESQuerySet(payload = es_query,
                          model = XFormInstance,
                          es_client=self.xform_es(domain)).order_by('-received_on')
Esempio n. 5
0
    def obj_get_list(self, bundle, domain, **kwargs):
        es_query = es_search(bundle.request, domain)
        es_query['filter']['and'].append(
            {'term': {
                'doc_type': 'xforminstance'
            }})

        return ESQuerySet(
            payload=es_query,
            model=XFormInstance,
            es_client=self.xform_es(domain)
        )  # Not that XFormES is used only as an ES client, for `run_query` against the proper index
Esempio n. 6
0
    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']

        return ESQuerySet(payload = query,
                          model = CommCareCase,
                          es_client = self.case_es(domain)).order_by('server_modified_on') # Not that CaseES is used only as an ES client, for `run_query` against the proper index
Esempio n. 7
0
    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']

        return ESQuerySet(
            payload=query,
            model=lambda jvalue: dict_object(
                CommCareCase.wrap(jvalue).get_json()),
            es_client=CaseES(domain)
        )  # Not that XFormES is used only as an ES client, for `run_query` against the proper index
Esempio n. 8
0
    def test_order_by(self):
        es = FakeXFormES()
        for i in xrange(0, 1300):
            es.add_doc(i, {'i': i})
        
        queryset = ESQuerySet(es_client=es, payload={})
        qs_asc = list(queryset.order_by('foo'))
        self.assertEqual(es.queries[0]['sort'], [{'foo': 'asc'}])

        qs_desc = list(queryset.order_by('-foo'))
        self.assertEqual(es.queries[1]['sort'], [{'foo': 'desc'}])

        qs_overwrite = list(queryset.order_by('bizzle').order_by('-baz'))
        self.assertEqual(es.queries[2]['sort'], [{'baz': 'desc'}])

        qs_multi = list(queryset.order_by('one', '-two', 'three'))
        self.assertEqual(es.queries[3]['sort'], [{'one': 'asc'}, {'two': 'desc'}, {'three': 'asc'}])
Esempio n. 9
0
    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'
                }})

        def wrapper(doc):
            if doc['doc_type'] in xform_doc_types:
                return xform_doc_types[doc['doc_type']].wrap(doc)
            else:
                return doc

        # Note that XFormES is used only as an ES client, for `run_query` against the proper index
        return ESQuerySet(
            payload=es_query, model=wrapper,
            es_client=self.xform_es(domain)).order_by('-received_on')