Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

goldens-prerelease test fails with TypeError: MessageToJson() got an unexpected keyword argument 'including_default_value_fields' #1935

Closed
parthea opened this issue Feb 7, 2024 · 0 comments · Fixed by #1936
Assignees
Labels
priority: p2 Moderately-important priority. Fix may not be included in next release. type: bug Error or flaw in code with unintended results or allowing sub-optimal usage patterns.

Comments

@parthea
Copy link
Contributor

parthea commented Feb 7, 2024

The pre-release test failed in PR #1932 around the time of a protobuf pre-release protobuf==5.26.0rc2. https://pypi.org/project/protobuf/5.26.0rc2/

The test is failing because the including_default_value_fields argument was renamed in MessageToJson.

The default value of including_default_value_fields is False, which is the same value that is being set, so we can remove it from the call to resolve the issue.

version 3.19.6 - default value of including_default_value_fields is False
https://github.com/protocolbuffers/protobuf/blob/5cba162a5d93f8df786d828621019e03e50edb4f/python/google/protobuf/json_format.py#L92

At the time that the argument was removed - default value of including_default_value_fields is False
protocolbuffers/protobuf@2699579#diff-8de817c14d6a087981503c9aea38730b1b3e98f4e306db5ff9d525c7c304f234

=================================== FAILURES ===================================
_________ test_generate_access_token_rest[GenerateAccessTokenRequest] __________

request_type = <class 'google.iam.credentials_v1.types.common.GenerateAccessTokenRequest'>

    @pytest.mark.parametrize("request_type", [
        common.GenerateAccessTokenRequest,
        dict,
    ])
    def test_generate_access_token_rest(request_type):
        client = IAMCredentialsClient(
            credentials=ga_credentials.AnonymousCredentials(),
            transport="rest",
        )
    
        # send a request that will satisfy transcoding
        request_init = {'name': 'projects/sample1/serviceAccounts/sample2'}
        request = request_type(**request_init)
    
        # Mock the http request call within the method and fake a response.
        with mock.patch.object(type(client.transport._session), 'request') as req:
            # Designate an appropriate value for the returned response.
            return_value = common.GenerateAccessTokenResponse(
                  access_token='access_token_value',
            )
    
            # Wrap the value into a proper Response obj
            response_value = Response()
            response_value.status_code = 200
            # Convert return value to protobuf type
            return_value = common.GenerateAccessTokenResponse.pb(return_value)
            json_return_value = json_format.MessageToJson(return_value)
    
            response_value._content = json_return_value.encode('UTF-8')
            req.return_value = response_value
>           response = client.generate_access_token(request)

tests/unit/gapic/credentials_v1/test_iam_credentials.py:1823: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
google/iam/credentials_v1/services/iam_credentials/client.py:724: in generate_access_token
    response = rpc(
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/gapic_v1/method.py:131: in __call__
    return wrapped_func(*args, **kwargs)
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/retry/retry_unary.py:293: in retry_wrapped_func
    return retry_target(
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/retry/retry_unary.py:153: in retry_target
    _retry_error_helper(
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/retry/retry_base.py:212: in _retry_error_helper
    raise final_exc from source_exc
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/retry/retry_unary.py:144: in retry_target
    result = target()
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/timeout.py:120: in func_with_timeout
    return func(*args, **kwargs)
.nox/prerelease_deps/lib/python3.12/site-packages/google/api_core/grpc_helpers.py:76: in error_remapped_callable
    return callable_(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = IAMCredentialsRestTransport._GenerateAccessToken(_session=<google.auth.transport.requests.AuthorizedSession object at ...le.iam.credentials_v1.services.iam_credentials.transports.rest.IAMCredentialsRestInterceptor object at 0x7f0783088f80>)
request = name: "projects/sample1/serviceAccounts/sample2"


    def __call__(self,
            request: common.GenerateAccessTokenRequest, *,
            retry: OptionalRetry=gapic_v1.method.DEFAULT,
            timeout: Optional[float]=None,
            metadata: Sequence[Tuple[str, str]]=(),
            ) -> common.GenerateAccessTokenResponse:
        r"""Call the generate access token method over HTTP.
    
        Args:
            request (~.common.GenerateAccessTokenRequest):
                The request object.
            retry (google.api_core.retry.Retry): Designation of what errors, if any,
                should be retried.
            timeout (float): The timeout for this request.
            metadata (Sequence[Tuple[str, str]]): Strings which should be
                sent along with the request as metadata.
    
        Returns:
            ~.common.GenerateAccessTokenResponse:
    
        """
    
        http_options: List[Dict[str, str]] = [{
            'method': 'post',
            'uri': '/v1/{name=projects/*/serviceAccounts/*}:generateAccessToken',
            'body': '*',
        },
        ]
        request, metadata = self._interceptor.pre_generate_access_token(request, metadata)
        pb_request = common.GenerateAccessTokenRequest.pb(request)
        transcoded_request = path_template.transcode(http_options, pb_request)
    
        # Jsonify the request body
    
>       body = json_format.MessageToJson(
            transcoded_request['body'],
            including_default_value_fields=False,
            use_integers_for_enums=False
        )
E       TypeError: MessageToJson() got an unexpected keyword argument 'including_default_value_fields'

google/iam/credentials_v1/services/iam_credentials/transports/rest.py:325: TypeError
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
priority: p2 Moderately-important priority. Fix may not be included in next release. type: bug Error or flaw in code with unintended results or allowing sub-optimal usage patterns.
Projects
None yet
1 participant