11{% extends "_base.py.j2" %}
22
33{% block content %}
4+ {% import "%namespace/%name/%version/%sub/services/%service/_shared_macros.j2" as shared_macros %}
45
56import os
67{% if api .all_method_settings .values ()|map (attribute ="auto_populated_fields" , default =[])|list %}
@@ -39,6 +40,7 @@ from google.oauth2 import service_account
3940from {{ (api.naming.module_namespace + (api.naming.versioned_module_name,) + service.meta.address.subpackage)|join(".") }}.services.{{ service.name|snake_case }} import {{ service.client_name }}
4041from {{ (api.naming.module_namespace + (api.naming.versioned_module_name,) + service.meta.address.subpackage)|join(".") }}.services.{{ service.name|snake_case }} import transports
4142
43+ from google.api_core import api_core_version
4244from google.api_core import client_options
4345from google.api_core import exceptions as core_exceptions
4446from google.api_core import grpc_helpers
@@ -69,6 +71,8 @@ from google.iam.v1 import options_pb2 # type: ignore
6971from google.iam.v1 import policy_pb2 # type: ignore
7072{% endif %}
7173{% endfilter %}
74+ {{ shared_macros.add_google_api_core_version_header_import(service.version) }}
75+
7276
7377{% with uuid 4_re = "[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}" %}
7478
@@ -636,6 +640,35 @@ def test_{{ method_name }}(request_type, transport: str = 'grpc'):
636640 {% endwith %} {# auto_populated_field_sample_value #}
637641
638642
643+ {% if service .version %}
644+ @pytest.mark.parametrize("transport_name", [
645+ {% if 'grpc' in opts .transport %}
646+ ("grpc"),
647+ {% endif %}
648+ {% if 'rest' in opts .transport %}
649+ ("rest"),
650+ {% endif %}
651+ ])
652+ def test_{{ method_name }}_api_version_header(transport_name):
653+ # TODO: Make this test unconditional once the minimum supported version of
654+ # google-api-core becomes 2.19.0 or higher.
655+ api_core_major, api_core_minor = [int(part) for part in api_core_version.__version__.split(".")[0:2]]
656+ if api_core_major > 2 or (api_core_major == 2 and api_core_minor >= 19):
657+ client = {{ service.client_name }}(credentials=ga_credentials.AnonymousCredentials(), transport=transport_name)
658+ # Mock the actual call within the gRPC stub, and fake the request.
659+ with mock.patch.object(
660+ type(client.transport.{{ method.transport_safe_name|snake_case }}),
661+ '__call__'
662+ ) as call:
663+ client.{{ method_name }}()
664+
665+ # Establish that the api version header was sent.
666+ _, _, kw = call.mock_calls[0]
667+ assert kw['metadata'][0] == (version_header.API_VERSION_METADATA_KEY, "{{ service.version }}")
668+ else:
669+ pytest.skip("google-api-core>=2.19.0 is required for `google.api_core.version_header`")
670+ {% endif %} {# service.version #}
671+
639672{% if not method .client_streaming %}
640673def test_{{ method_name }}_empty_call():
641674 # This test is a coverage failsafe to make sure that totally empty calls,
@@ -904,9 +937,9 @@ def test_{{ method_name }}_pager(transport_name: str = "grpc"):
904937 RuntimeError,
905938 )
906939
907- metadata = ()
940+ expected_metadata = ()
908941 {% if method .field_headers %}
909- metadata = tuple(metadata ) + (
942+ expected_metadata = tuple(expected_metadata ) + (
910943 gapic_v1.routing_header.to_grpc_metadata((
911944 {% for field_header in method .field_headers %}
912945 {% if not method .client_streaming %}
@@ -918,7 +951,13 @@ def test_{{ method_name }}_pager(transport_name: str = "grpc"):
918951 {% endif %}
919952 pager = client.{{ method_name }}(request={})
920953
921- assert pager._metadata == metadata
954+ {% if service .version %}
955+ if HAS_GOOGLE_API_CORE_VERSION_HEADER:
956+ expected_metadata = tuple(expected_metadata) + (
957+ version_header.to_api_version_header("{{ service.version }}"),
958+ )
959+ {% endif %}
960+ assert pager._metadata == expected_metadata
922961
923962 results = list(pager)
924963 assert len(results) == 6
0 commit comments