Skip to content

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

Closed
@parthea

Description

@parthea

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

Metadata

Metadata

Assignees

Labels

priority: p2Moderately-important priority. Fix may not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions