Esempio n. 1
0
 def composite_filter(property_filters) -> CompositeFilter:
     return CompositeFilter(
         operator=CompositeFilterOperator.AND,
         filters=[
             Filter(property_filters[0]),
             Filter(property_filters[1])
         ])
Esempio n. 2
0
    def test_composite_filter_from_repr(property_filters):
        original_filter = CompositeFilter(
            operator=CompositeFilterOperator.AND,
            filters=[Filter(property_filters[0]),
                     Filter(property_filters[1])])
        data = {
            'op':
            original_filter.operator,
            'filters': [
                {
                    'propertyFilter': {
                        'property': {
                            'name':
                            original_filter.filters[0].inner_filter.prop
                        },
                        'op': original_filter.filters[0].inner_filter.operator,
                        'value': property_filters[0].value.to_repr()
                    }
                },
                {
                    'propertyFilter': {
                        'property': {
                            'name':
                            original_filter.filters[1].inner_filter.prop
                        },
                        'op': original_filter.filters[1].inner_filter.operator,
                        'value': property_filters[1].value.to_repr()
                    }
                },
            ]
        }

        output_filter = CompositeFilter.from_repr(data)

        assert output_filter == original_filter
Esempio n. 3
0
    def test_filter_from_repr_unexpected_filter_name():
        unexpected_filter_name = 'unexpectedFilterName'
        data = {unexpected_filter_name: 'DoesNotMatter'}

        with pytest.raises(ValueError) as ex_info:
            Filter.from_repr(data)

        assert unexpected_filter_name in ex_info.value.args[0]
Esempio n. 4
0
    def test_filter_from_repr(composite_filter):
        original_filter = Filter(inner_filter=composite_filter)

        data = {'compositeFilter': original_filter.inner_filter.to_repr()}

        output_filter = Filter.from_repr(data)

        assert output_filter == original_filter
Esempio n. 5
0
    def test_property_filter_to_repr(self, property_filters):
        property_filter = property_filters[0]
        query_filter = Filter(inner_filter=property_filter)

        r = query_filter.to_repr()

        self._assert_is_correct_prop_dict_for_property_filter(
            r['propertyFilter'], property_filter)
Esempio n. 6
0
async def test_query(creds: str, kind: str, project: str) -> None:
    async with Session() as s:
        ds = Datastore(project=project, service_file=creds, session=s)

        property_filter = PropertyFilter(prop='value',
                                         operator=PropertyFilterOperator.EQUAL,
                                         value=Value(42))
        query = Query(kind=kind, query_filter=Filter(property_filter))

        before = await ds.runQuery(query, session=s)
        num_results = len(before.entity_results)

        transaction = await ds.beginTransaction(session=s)
        mutations = [
            ds.make_mutation(Operation.INSERT,
                             Key(project, [PathElement(kind)]),
                             properties={'value': 42}),
            ds.make_mutation(Operation.INSERT,
                             Key(project, [PathElement(kind)]),
                             properties={'value': 42}),
        ]
        await ds.commit(mutations, transaction=transaction, session=s)

        after = await ds.runQuery(query, session=s)
        assert len(after.entity_results) == num_results + 2
Esempio n. 7
0
    def test_composite_filter_to_repr(self, property_filters):
        composite_filter = CompositeFilter(
            operator=CompositeFilterOperator.AND,
            filters=[Filter(property_filters[0]),
                     Filter(property_filters[1])])
        query_filter = Filter(composite_filter)

        r = query_filter.to_repr()

        composite_filter_dict = r['compositeFilter']
        assert composite_filter_dict['op'] == 'AND'
        self._assert_is_correct_prop_dict_for_property_filter(
            composite_filter_dict['filters'][0]['propertyFilter'],
            property_filters[0])
        self._assert_is_correct_prop_dict_for_property_filter(
            composite_filter_dict['filters'][1]['propertyFilter'],
            property_filters[1])
Esempio n. 8
0
    def test_composite_filter_from_repr(property_filters):
        # pylint: disable=line-too-long
        original_filter = CompositeFilter(operator=CompositeFilterOperator.AND,
                                          filters=[
                                              Filter(property_filters[0]),
                                              Filter(property_filters[1]),
                                          ])
        data = {
            'op':
            original_filter.operator,
            'filters': [
                {
                    'propertyFilter': {
                        'property': {
                            'name':
                            original_filter.filters[0].inner_filter.prop,
                        },
                        'op': original_filter.filters[0].inner_filter.operator,
                        'value': property_filters[0].value.to_repr(),
                    },
                },
                {
                    'propertyFilter': {
                        'property': {
                            'name':
                            original_filter.filters[1].inner_filter.prop,
                        },
                        'op': original_filter.filters[1].inner_filter.operator,
                        'value': property_filters[1].value.to_repr(),
                    },
                },
            ],
        }

        output_filter = CompositeFilter.from_repr(data)

        assert output_filter == original_filter
Esempio n. 9
0
async def test_query_with_key_projection(creds: str, kind: str,
                                         project: str) -> None:
    async with Session() as s:
        ds = Datastore(project=project, service_file=creds, session=s)
        # setup test data
        await ds.insert(Key(project, [PathElement(kind)]), {'value': 30}, s)
        property_filter = PropertyFilter(
            prop='value', operator=PropertyFilterOperator.EQUAL,
            value=Value(30))
        projection = [Projection.from_repr({'property': {'name': '__key__'}})]

        query = Query(kind=kind, query_filter=Filter(property_filter), limit=1,
                      projection=projection)
        result = await ds.runQuery(query, session=s)
        assert result.entity_results[0].entity.properties == {}
        assert result.entity_result_type.value == 'KEY_ONLY'
        # clean up test data
        await ds.delete(result.entity_results[0].entity.key, s)
Esempio n. 10
0
 def query_filter() -> Filter:
     inner_filter = PropertyFilter(
         prop='property_name',
         operator=PropertyFilterOperator.EQUAL,
         value=Value(123))
     return Filter(inner_filter)
Esempio n. 11
0
 def query_filter(composite_filter) -> Filter:
     return Filter(inner_filter=composite_filter)
Esempio n. 12
0
    def test_filter_to_repr(composite_filter):
        test_filter = Filter(inner_filter=composite_filter)

        r = test_filter.to_repr()

        assert r['compositeFilter'] == test_filter.inner_filter.to_repr()