def test_union_datasource(self): # Given expected_query_dict = { 'queryType': None, 'dataSource': 'things', } builder = QueryBuilder() # when builder_dict = {'datasource': 'things'} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given expected_query_dict = { 'queryType': None, 'dataSource': { 'type': 'union', 'dataSources': ['things', 'others', 'more'] } } builder = QueryBuilder() # when builder_dict = {'datasource': ['things', 'others', 'more']} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given check that it rejects non-string items builder = QueryBuilder() builder_dict = {'datasource': ['things', 123]} with pytest.raises(ValueError): query = builder.build_query(None, builder_dict)
def test_union_datasource(self): # Given expected_query_dict = {"queryType": None, "dataSource": "things"} builder = QueryBuilder() # when builder_dict = {"datasource": "things"} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given expected_query_dict = { "queryType": None, "dataSource": { "type": "union", "dataSources": ["things", "others", "more"], }, } builder = QueryBuilder() # when builder_dict = {"datasource": ["things", "others", "more"]} query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # Given check that it rejects non-string items builder = QueryBuilder() builder_dict = {"datasource": ["things", 123]} with pytest.raises(ValueError): query = builder.build_query(None, builder_dict)
def __init__(self, url, endpoint): self.url = url self.endpoint = endpoint self.query_builder = QueryBuilder() self.username = None self.password = None self.proxies = None
def test_build_query_none_type(self): # given expected_query_dict = { "queryType": None, "dataSource": "things", "aggregations": [{"fieldName": "thing", "name": "count", "type": "count"}], "filter": {"dimension": "one", "type": "selector", "value": 1}, "having": {"aggregation": "sum", "type": "greaterThan", "value": 1}, "dimension": "dim1", } builder = QueryBuilder() # when builder_dict = { "datasource": "things", "aggregations": {"count": aggregators.count("thing")}, "filter": filters.Dimension("one") == 1, "having": having.Aggregation("sum") > 1, "dimension": "dim1", } query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # you should be able to pass `None` to dimension/having/filter for v in ["dimension", "having", "filter"]: expected_query_dict[v] = None builder_dict[v] = None query = builder.build_query(None, builder_dict) assert query.query_dict == expected_query_dict
def test_validate_query(self): # given builder = QueryBuilder() # when builder.validate_query(None, ['validkey'], {'validkey': 'value'}) # then pytest.raises(ValueError, builder.validate_query, *[None, ['validkey'], {'invalidkey': 'value'}])
def __init__(self, url, endpoint, query_builder=None): self.url = url self.endpoint = endpoint if query_builder is None: query_builder = QueryBuilder() self.query_builder = query_builder self.username = None self.password = None self.proxies = None
def test_validate_query(self): # given builder = QueryBuilder() # when builder.validate_query(None, ["validkey"], {"validkey": "value"}) # then pytest.raises(ValueError, builder.validate_query, *[None, ["validkey"], { "invalidkey": "value" }])
def test_build_query_none_type(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{ 'fieldName': 'thing', 'name': 'count', 'type': 'count' }], 'filter': { 'dimension': 'one', 'type': 'selector', 'value': 1 }, 'having': { 'aggregation': 'sum', 'type': 'greaterThan', 'value': 1 }, 'dimension': 'dim1', } builder = QueryBuilder() # when builder_dict = { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'dimension': 'dim1', } query = builder.build_query(None, builder_dict) # then assert query.query_dict == expected_query_dict # you should be able to pass `None` to dimension/having/filter for v in ['dimension', 'having', 'filter']: expected_query_dict[v] = None builder_dict[v] = None query = builder.build_query(None, builder_dict) assert query.query_dict == expected_query_dict
def test_build_query(self): # given expected_query_dict = { 'queryType': None, 'dataSource': 'things', 'aggregations': [{'fieldName': 'thing', 'name': 'count', 'type': 'count'}], 'postAggregations': [{ 'fields': [{ 'fieldName': 'sum', 'type': 'fieldAccess', }, { 'fieldName': 'count', 'type': 'fieldAccess', }], 'fn': '/', 'name': 'avg', 'type': 'arithmetic', }], 'pagingSpec': {'pagingIdentifies': {}, 'threshold': 1}, 'filter': {'dimension': 'one', 'type': 'selector', 'value': 1}, 'having': {'aggregation': 'sum', 'type': 'greaterThan', 'value': 1}, 'new_key': 'value', 'virtualColumns': [{ 'type': 'expression', 'name': 'foo', 'expression': "concat('foo' + page)", 'outputType': 'STRING' }], } builder = QueryBuilder() # when query = builder.build_query(None, { 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'post_aggregations': { 'avg': (postaggregator.Field('sum') / postaggregator.Field('count')), }, 'paging_spec': { 'pagingIdentifies': {}, 'threshold': 1, }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, 'new_key': 'value', 'virtualColumns': [VirtualColumn(type='expression', name='foo', expression="concat('foo' + page)", outputType='STRING')] }) # then assert query.query_dict == expected_query_dict
def test_build_query(self): # given expected_query_dict = { "queryType": None, "dataSource": "things", "aggregations": [{"fieldName": "thing", "name": "count", "type": "count"}], "postAggregations": [ { "fields": [ {"fieldName": "sum", "type": "fieldAccess"}, {"fieldName": "count", "type": "fieldAccess"}, ], "fn": "/", "name": "avg", "type": "arithmetic", } ], "pagingSpec": {"pagingIdentifies": {}, "threshold": 1}, "filter": {"dimension": "one", "type": "selector", "value": 1}, "having": {"aggregation": "sum", "type": "greaterThan", "value": 1}, "new_key": "value", } builder = QueryBuilder() # when query = builder.build_query( None, { "datasource": "things", "aggregations": {"count": aggregators.count("thing")}, "post_aggregations": { "avg": (postaggregator.Field("sum") / postaggregator.Field("count")) }, "paging_spec": {"pagingIdentifies": {}, "threshold": 1}, "filter": filters.Dimension("one") == 1, "having": having.Aggregation("sum") > 1, "new_key": "value", }, ) # then assert query.query_dict == expected_query_dict
def test_build_subquery(self): # given expected_query_dict = { "query": { "queryType": "groupBy", "dataSource": "things", "aggregations": [ {"fieldName": "thing", "name": "count", "type": "count"} ], "postAggregations": [ { "fields": [ {"fieldName": "sum", "type": "fieldAccess"}, {"fieldName": "count", "type": "fieldAccess"}, ], "fn": "/", "name": "avg", "type": "arithmetic", } ], "filter": {"dimension": "one", "type": "selector", "value": 1}, "having": {"aggregation": "sum", "type": "greaterThan", "value": 1}, }, "type": "query", } builder = QueryBuilder() # when subquery_dict = builder.subquery( { "datasource": "things", "aggregations": {"count": aggregators.count("thing")}, "post_aggregations": { "avg": (postaggregator.Field("sum") / postaggregator.Field("count")) }, "filter": filters.Dimension("one") == 1, "having": having.Aggregation("sum") > 1, } ) # then assert subquery_dict == expected_query_dict
def test_build_subquery(self): # given expected_query_dict = { 'query': { 'queryType': 'groupBy', 'dataSource': 'things', 'aggregations': [{'fieldName': 'thing', 'name': 'count', 'type': 'count'}], 'postAggregations': [{ 'fields': [{ 'fieldName': 'sum', 'type': 'fieldAccess', }, { 'fieldName': 'count', 'type': 'fieldAccess', }], 'fn': '/', 'name': 'avg', 'type': 'arithmetic', }], 'filter': {'dimension': 'one', 'type': 'selector', 'value': 1}, 'having': {'aggregation': 'sum', 'type': 'greaterThan', 'value': 1}, }, 'type': 'query' } builder = QueryBuilder() # when subquery_dict = builder.subquery({ 'datasource': 'things', 'aggregations': { 'count': aggregators.count('thing'), }, 'post_aggregations': { 'avg': (postaggregator.Field('sum') / postaggregator.Field('count')), }, 'filter': filters.Dimension('one') == 1, 'having': having.Aggregation('sum') > 1, }) # then assert subquery_dict == expected_query_dict
def __init__(self, url, endpoint): self.url = url self.endpoint = endpoint self.query_builder = QueryBuilder()