diff --git a/gapic/schema/api.py b/gapic/schema/api.py index ce2fdc802..f7a7669f8 100644 --- a/gapic/schema/api.py +++ b/gapic/schema/api.py @@ -706,13 +706,14 @@ def all_library_settings( for library_setting in self.service_yaml_config.publishing.library_settings } - # Add default settings for the current proto package - if not result: - result = { - self.naming.proto_package: client_pb2.ClientLibrarySettings( - version=self.naming.proto_package + # NOTE: Add default settings for the current proto package + # for the following cases: + # - if library settings are not specified in the service config. + # - if library_settings.version != self.naming.proto_package (proto package name) + if self.naming.proto_package not in result: + result[self.naming.proto_package] = client_pb2.ClientLibrarySettings( + version=self.naming.proto_package ) - } return result diff --git a/tests/unit/schema/test_api.py b/tests/unit/schema/test_api.py index c8bf9706d..afe9b1434 100644 --- a/tests/unit/schema/test_api.py +++ b/tests/unit/schema/test_api.py @@ -2741,6 +2741,35 @@ def test_read_empty_python_settings_from_service_yaml(): == client_pb2.PythonSettings.ExperimentalFeatures() assert api_schema.all_library_settings["google.example.v1beta1"].python_settings.experimental_features.rest_async_io_enabled \ == False + assert api_schema.all_library_settings[api_schema.naming.proto_package].python_settings \ + == client_pb2.PythonSettings() + + +def test_incorrect_library_settings_version(): + # NOTE: This test case ensures that the generator is able to read + # from the default library settings if the version specified against the + # library settings in the service yaml of an API differs from the version + # of the API. + service_yaml_config = { + "apis": [ + {"name": "google.example.v1beta1.ServiceOne.Example1"}, + ], + "publishing": { + "library_settings": [ + { + "version": "google.example.v1", + "python_settings": { + "experimental_features": {"rest_async_io_enabled": True}, + }, + } + ] + }, + } + cli_options = Options(service_yaml_config=service_yaml_config) + fd = get_file_descriptor_proto_for_tests(fields=[]) + api_schema = api.API.build(fd, "google.example.v1beta1", opts=cli_options) + assert api_schema.all_library_settings[api_schema.naming.proto_package].python_settings \ + == client_pb2.PythonSettings() def test_python_settings_duplicate_version_raises_error():