Ejemplo n.º 1
0
async def test_query(creds: str, kind: str, project: str) -> None:
    async with aiohttp.ClientSession(conn_timeout=10, read_timeout=10) as s:
        ds = Datastore(project, creds, session=s)

        query = GQLQuery(f'SELECT * FROM {kind} WHERE value = @value',
                         named_bindings={'value': 42})

        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}),
            ds.make_mutation(Operation.INSERT,
                             Key(project, [PathElement(kind)]),
                             properties={'value': 42}),
        ]
        await ds.commit(transaction, mutations=mutations, session=s)

        after = await ds.runQuery(query, session=s)
        assert len(after.entity_results) == num_results + 3
Ejemplo n.º 2
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
Ejemplo n.º 3
0
async def test_gql_query_pagination(creds: str, kind: str,
                                    project: str) -> None:
    async with Session() as s:
        query_string = (f'SELECT __key__ FROM {kind}'
                        'WHERE value = @value LIMIT @limit OFFSET @offset')
        named_bindings = {'value': 42, 'limit': 2**31 - 1, 'offset': 0}

        ds = Datastore(project=project, service_file=creds, session=s)

        before = await ds.runQuery(GQLQuery(query_string,
                                            named_bindings=named_bindings),
                                   session=s)

        insertion_count = 8
        transaction = await ds.beginTransaction(session=s)
        mutations = [
            ds.make_mutation(Operation.INSERT,
                             Key(project, [PathElement(kind)]),
                             properties=named_bindings)
        ] * insertion_count
        await ds.commit(mutations, transaction=transaction, session=s)

        page_size = 5
        named_bindings['limit'] = page_size
        named_bindings['offset'] = GQLCursor(before.end_cursor)
        first_page = await ds.runQuery(GQLQuery(query_string,
                                                named_bindings=named_bindings),
                                       session=s)
        assert (len(first_page.entity_results)) == page_size

        named_bindings['offset'] = GQLCursor(first_page.end_cursor)
        second_page = await ds.runQuery(GQLQuery(
            query_string, named_bindings=named_bindings),
                                        session=s)
        assert len(second_page.entity_results) == insertion_count - page_size
Ejemplo n.º 4
0
    def test_make_mutation_from_value_object(key):
        value = Value(30, exclude_from_indexes=True)
        properties = {'value': value}

        results = Datastore.make_mutation(Operation.INSERT, key, properties)

        assert results['insert']['properties']['value'] == value.to_repr()
Ejemplo n.º 5
0
async def test_transaction(creds: str, kind: str, project: str) -> None:
    key = Key(project, [PathElement(kind, name=f'test_record_{uuid.uuid4()}')])

    async with Session() as s:
        ds = Datastore(project=project, service_file=creds, session=s)

        transaction = await ds.beginTransaction(session=s)
        actual = await ds.lookup([key], transaction=transaction, session=s)
        assert len(actual['missing']) == 1

        mutations = [
            ds.make_mutation(Operation.INSERT, key,
                             properties={'animal': 'three-toed sloth'}),
            ds.make_mutation(Operation.UPDATE, key,
                             properties={'animal': 'aardvark'}),
        ]
        await ds.commit(mutations, transaction=transaction, session=s)

        actual = await ds.lookup([key], session=s)
        assert actual['found'][0].entity.properties == {'animal': 'aardvark'}