Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
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'
                }})

        # 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')
Пример #4
0
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())
Пример #5
0
    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')
Пример #6
0
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())
Пример #7
0
    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_}])
Пример #8
0
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())
Пример #9
0
    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')
Пример #10
0
    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_
        }])
Пример #11
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']

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