Exemple #1
0
 def test_other_queries_get_skipped(self):
     # GET param _search shouldn't accept any other queries
     query = {
         'filter': {
             'range': {
                 'received_on': {
                     'gt': '2020-06-27T20:51:23.773000'
                 }
             }
         }
     }
     request = RequestFactory().get("/a/test_domain/api/v0.5/form/",
                                    data={'_search': json.dumps(query)})
     with self.assertRaises(Http400):
         es_query_from_get_params(request.GET, 'test_domain')
Exemple #2
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())
Exemple #3
0
    def obj_get_list(self, bundle, domain, **kwargs):
        try:
            es_query = es_query_from_get_params(bundle.request.GET,
                                                domain,
                                                doc_type='case')
        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')
Exemple #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_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())
Exemple #5
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')
 def test_inserted_at_query(self):
     # GET param _search can accept a custom query from a custom API use case
     query = {
         'filter': {
             'range': {
                 'inserted_at': {
                     'gt': '2020-06-27T20:51:23.773000'
                 }
             }
         }
     }
     request = RequestFactory().get("/a/test_domain/api/v0.5/form/",
                                    data={'_search': json.dumps(query)})
     expected = {
         "filter": {
             "and": [{
                 "term": {
                     "domain.exact": "test_domain"
                 }
             }, query['filter']]
         }
     }
     expected = {
         "query": {
             "filtered": {
                 "filter": {
                     "and": [{
                         "term": {
                             "domain.exact": "test_domain"
                         }
                     }, {
                         "term": {
                             "doc_type": "xforminstance"
                         }
                     }, query['filter'], {
                         "match_all": {}
                     }]
                 },
                 "query": {
                     "match_all": {}
                 }
             }
         },
         "size": 1000000
     }
     self.checkQuery(es_query_from_get_params(request.GET, 'test_domain'),
                     expected,
                     is_raw_query=True)
Exemple #7
0
 def test_search_param(self):
     # GET param _search can accept a custom query from Data export tool
     self.maxDiff = None
     range_expression = {
         'gte': datetime(2019, 1, 1).isoformat(),
         'lte': datetime(2019, 1, 2).isoformat()
     }
     server_modified_missing = {
         "missing": {
             "field": "server_modified_on",
             "null_value": True,
             "existence": True
         }
     }
     query = {
         'filter': {
             "or": ({
                 "and": ({
                     "not": server_modified_missing
                 }, {
                     "range": {
                         "server_modified_on": range_expression
                     }
                 })
             }, {
                 "and": (server_modified_missing, {
                     "range": {
                         "received_on": range_expression
                     }
                 })
             })
         }
     }
     request = RequestFactory().get("/a/test_domain/api/v0.5/form/",
                                    data={'_search': json.dumps(query)})
     expected = {
         "query": {
             "bool": {
                 "filter": [{
                     "term": {
                         "domain.exact": "test_domain"
                     }
                 }, {
                     "term": {
                         "doc_type": "xforminstance"
                     }
                 }, {
                     "bool": {
                         "should": [{
                             "bool": {
                                 "filter": [{
                                     "bool": {
                                         "must_not": {
                                             "bool": {
                                                 "must_not": {
                                                     "exists": {
                                                         "field":
                                                         "server_modified_on"
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }, {
                                     "range": {
                                         "server_modified_on": {
                                             "gte": "2019-01-01T00:00:00",
                                             "lte": "2019-01-02T00:00:00"
                                         }
                                     }
                                 }]
                             }
                         }, {
                             "bool": {
                                 "filter": [{
                                     "bool": {
                                         "must_not": {
                                             "exists": {
                                                 "field":
                                                 "server_modified_on"
                                             }
                                         }
                                     }
                                 }, {
                                     "range": {
                                         "received_on": {
                                             "gte": "2019-01-01T00:00:00",
                                             "lte": "2019-01-02T00:00:00"
                                         }
                                     }
                                 }]
                             }
                         }]
                     }
                 }, {
                     "match_all": {}
                 }],
                 "must": {
                     "match_all": {}
                 }
             }
         },
         "size": 1000000
     }
     self.checkQuery(es_query_from_get_params(request.GET, 'test_domain'),
                     expected,
                     is_raw_query=True)