googleapis / gapic-generator-python

Generate Python API client libraries from Protocol Buffers.
Apache License 2.0
121 stars 66 forks source link

Improve support for `X-Goog-FieldMask` header #2054

Open gregbrowndev opened 3 months ago

gregbrowndev commented 3 months ago

Environment details

Steps to reproduce

  1. Set up PlacesAsyncClient
  2. Make a search_text request

Code example

from google.auth.api_key import Credentials
from google.maps import places_v1
from google.protobuf import field_mask_pb2
from google.type import latlng_pb2

async def sample_search_text():
    api_key = "..."

    # Field mask goes where?
    field_mask=field_mask_pb2.FieldMask(paths=["places.displayName", "places.id"]),

    client = places_v1.PlacesAsyncClient(
        credentials=Credentials(token=api_key)
    )

    request = places_v1.SearchTextRequest(
        text_query="21 Great Winchester Street, London",
        location_bias=places_v1.SearchTextRequest.LocationBias(
            circle=places_v1.Circle(
                center=latlng_pb2.LatLng(
                    latitude=51.519993, longitude=-0.0813288
                ),
                radius=1000,
            )
        ),
        max_result_count=20,
    )

    response = await client.search_text(request=request)

    print(response)

if __name__ == "__main__":
    import asyncio

    asyncio.run(sample_search_text())

Stack trace

google.api_core.exceptions.InvalidArgument: 400 FieldMask is a required parameter. See https://cloud.google.com/apis/docs/system-parameters on how to provide it. As an example, you can set the header 'X-Goog-FieldMask' to value 'places.displayName', 'places.id' to ask for the display name and the place id of a place. You can also set the value to '*' in manual testing to get all the available response fields.

Making sure to follow these steps will guarantee the quickest resolution possible.

Thanks!

parthea commented 3 months ago

Hi @gregbrowndev,

Please see the code snippet in https://github.com/googleapis/google-cloud-python/issues/12083#issuecomment-1841330241 which shows how X-Goog-FieldMask can be set.

I'm going to keep this issue open as a feature request to improve support for setting X-Goog-FieldMask similar to https://github.com/googleapis/google-cloud-cpp/issues/13929

parthea commented 3 months ago

I'm going to transfer this issue to gapic-generator-python which is the repository for the Cloud SDK Python Client Code generator where the feature request can be triaged.