@@ -2137,8 +2137,9 @@ def test_run_funnel_report_rest(request_type):
21372137 # Wrap the value into a proper Response obj
21382138 response_value = Response ()
21392139 response_value .status_code = 200
2140- pb_return_value = analytics_data_api .RunFunnelReportResponse .pb (return_value )
2141- json_return_value = json_format .MessageToJson (pb_return_value )
2140+ # Convert return value to protobuf type
2141+ return_value = analytics_data_api .RunFunnelReportResponse .pb (return_value )
2142+ json_return_value = json_format .MessageToJson (return_value )
21422143
21432144 response_value ._content = json_return_value .encode ("UTF-8" )
21442145 req .return_value = response_value
@@ -2259,6 +2260,75 @@ def test_create_audience_list_rest(request_type):
22592260 "state" : 1 ,
22602261 "begin_creating_time" : {"seconds" : 751 , "nanos" : 543 },
22612262 }
2263+ # The version of a generated dependency at test runtime may differ from the version used during generation.
2264+ # Delete any fields which are not present in the current runtime dependency
2265+ # See https://github.com/googleapis/gapic-generator-python/issues/1748
2266+
2267+ # Determine if the message type is proto-plus or protobuf
2268+ test_field = analytics_data_api .CreateAudienceListRequest .meta .fields [
2269+ "audience_list"
2270+ ]
2271+
2272+ def get_message_fields (field ):
2273+ # Given a field which is a message (composite type), return a list with
2274+ # all the fields of the message.
2275+ # If the field is not a composite type, return an empty list.
2276+ message_fields = []
2277+
2278+ if hasattr (field , "message" ) and field .message :
2279+ is_field_type_proto_plus_type = not hasattr (field .message , "DESCRIPTOR" )
2280+
2281+ if is_field_type_proto_plus_type :
2282+ message_fields = field .message .meta .fields .values ()
2283+ # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types
2284+ else : # pragma: NO COVER
2285+ message_fields = field .message .DESCRIPTOR .fields
2286+ return message_fields
2287+
2288+ runtime_nested_fields = [
2289+ (field .name , nested_field .name )
2290+ for field in get_message_fields (test_field )
2291+ for nested_field in get_message_fields (field )
2292+ ]
2293+
2294+ subfields_not_in_runtime = []
2295+
2296+ # For each item in the sample request, create a list of sub fields which are not present at runtime
2297+ # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime
2298+ for field , value in request_init ["audience_list" ].items (): # pragma: NO COVER
2299+ result = None
2300+ is_repeated = False
2301+ # For repeated fields
2302+ if isinstance (value , list ) and len (value ):
2303+ is_repeated = True
2304+ result = value [0 ]
2305+ # For fields where the type is another message
2306+ if isinstance (value , dict ):
2307+ result = value
2308+
2309+ if result and hasattr (result , "keys" ):
2310+ for subfield in result .keys ():
2311+ if (field , subfield ) not in runtime_nested_fields :
2312+ subfields_not_in_runtime .append (
2313+ {
2314+ "field" : field ,
2315+ "subfield" : subfield ,
2316+ "is_repeated" : is_repeated ,
2317+ }
2318+ )
2319+
2320+ # Remove fields from the sample request which are not present in the runtime version of the dependency
2321+ # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime
2322+ for subfield_to_delete in subfields_not_in_runtime : # pragma: NO COVER
2323+ field = subfield_to_delete .get ("field" )
2324+ field_repeated = subfield_to_delete .get ("is_repeated" )
2325+ subfield = subfield_to_delete .get ("subfield" )
2326+ if subfield :
2327+ if field_repeated :
2328+ for i in range (0 , len (request_init ["audience_list" ][field ])):
2329+ del request_init ["audience_list" ][field ][i ][subfield ]
2330+ else :
2331+ del request_init ["audience_list" ][field ][subfield ]
22622332 request = request_type (** request_init )
22632333
22642334 # Mock the http request call within the method and fake a response.
@@ -2441,14 +2511,6 @@ def test_create_audience_list_rest_bad_request(
24412511
24422512 # send a request that will satisfy transcoding
24432513 request_init = {"parent" : "properties/sample1" }
2444- request_init ["audience_list" ] = {
2445- "name" : "name_value" ,
2446- "audience" : "audience_value" ,
2447- "audience_display_name" : "audience_display_name_value" ,
2448- "dimensions" : [{"dimension_name" : "dimension_name_value" }],
2449- "state" : 1 ,
2450- "begin_creating_time" : {"seconds" : 751 , "nanos" : 543 },
2451- }
24522514 request = request_type (** request_init )
24532515
24542516 # Mock the http request call within the method and fake a BadRequest error.
@@ -2552,8 +2614,9 @@ def test_query_audience_list_rest(request_type):
25522614 # Wrap the value into a proper Response obj
25532615 response_value = Response ()
25542616 response_value .status_code = 200
2555- pb_return_value = analytics_data_api .QueryAudienceListResponse .pb (return_value )
2556- json_return_value = json_format .MessageToJson (pb_return_value )
2617+ # Convert return value to protobuf type
2618+ return_value = analytics_data_api .QueryAudienceListResponse .pb (return_value )
2619+ json_return_value = json_format .MessageToJson (return_value )
25572620
25582621 response_value ._content = json_return_value .encode ("UTF-8" )
25592622 req .return_value = response_value
@@ -2670,8 +2733,9 @@ def test_query_audience_list_rest_flattened():
26702733 # Wrap the value into a proper Response obj
26712734 response_value = Response ()
26722735 response_value .status_code = 200
2673- pb_return_value = analytics_data_api .QueryAudienceListResponse .pb (return_value )
2674- json_return_value = json_format .MessageToJson (pb_return_value )
2736+ # Convert return value to protobuf type
2737+ return_value = analytics_data_api .QueryAudienceListResponse .pb (return_value )
2738+ json_return_value = json_format .MessageToJson (return_value )
26752739 response_value ._content = json_return_value .encode ("UTF-8" )
26762740 req .return_value = response_value
26772741
@@ -2739,8 +2803,9 @@ def test_get_audience_list_rest(request_type):
27392803 # Wrap the value into a proper Response obj
27402804 response_value = Response ()
27412805 response_value .status_code = 200
2742- pb_return_value = analytics_data_api .AudienceList .pb (return_value )
2743- json_return_value = json_format .MessageToJson (pb_return_value )
2806+ # Convert return value to protobuf type
2807+ return_value = analytics_data_api .AudienceList .pb (return_value )
2808+ json_return_value = json_format .MessageToJson (return_value )
27442809
27452810 response_value ._content = json_return_value .encode ("UTF-8" )
27462811 req .return_value = response_value
@@ -2818,8 +2883,9 @@ def test_get_audience_list_rest_required_fields(
28182883 response_value = Response ()
28192884 response_value .status_code = 200
28202885
2821- pb_return_value = analytics_data_api .AudienceList .pb (return_value )
2822- json_return_value = json_format .MessageToJson (pb_return_value )
2886+ # Convert return value to protobuf type
2887+ return_value = analytics_data_api .AudienceList .pb (return_value )
2888+ json_return_value = json_format .MessageToJson (return_value )
28232889
28242890 response_value ._content = json_return_value .encode ("UTF-8" )
28252891 req .return_value = response_value
@@ -2944,8 +3010,9 @@ def test_get_audience_list_rest_flattened():
29443010 # Wrap the value into a proper Response obj
29453011 response_value = Response ()
29463012 response_value .status_code = 200
2947- pb_return_value = analytics_data_api .AudienceList .pb (return_value )
2948- json_return_value = json_format .MessageToJson (pb_return_value )
3013+ # Convert return value to protobuf type
3014+ return_value = analytics_data_api .AudienceList .pb (return_value )
3015+ json_return_value = json_format .MessageToJson (return_value )
29493016 response_value ._content = json_return_value .encode ("UTF-8" )
29503017 req .return_value = response_value
29513018
@@ -3009,8 +3076,9 @@ def test_list_audience_lists_rest(request_type):
30093076 # Wrap the value into a proper Response obj
30103077 response_value = Response ()
30113078 response_value .status_code = 200
3012- pb_return_value = analytics_data_api .ListAudienceListsResponse .pb (return_value )
3013- json_return_value = json_format .MessageToJson (pb_return_value )
3079+ # Convert return value to protobuf type
3080+ return_value = analytics_data_api .ListAudienceListsResponse .pb (return_value )
3081+ json_return_value = json_format .MessageToJson (return_value )
30143082
30153083 response_value ._content = json_return_value .encode ("UTF-8" )
30163084 req .return_value = response_value
@@ -3092,10 +3160,9 @@ def test_list_audience_lists_rest_required_fields(
30923160 response_value = Response ()
30933161 response_value .status_code = 200
30943162
3095- pb_return_value = analytics_data_api .ListAudienceListsResponse .pb (
3096- return_value
3097- )
3098- json_return_value = json_format .MessageToJson (pb_return_value )
3163+ # Convert return value to protobuf type
3164+ return_value = analytics_data_api .ListAudienceListsResponse .pb (return_value )
3165+ json_return_value = json_format .MessageToJson (return_value )
30993166
31003167 response_value ._content = json_return_value .encode ("UTF-8" )
31013168 req .return_value = response_value
@@ -3230,8 +3297,9 @@ def test_list_audience_lists_rest_flattened():
32303297 # Wrap the value into a proper Response obj
32313298 response_value = Response ()
32323299 response_value .status_code = 200
3233- pb_return_value = analytics_data_api .ListAudienceListsResponse .pb (return_value )
3234- json_return_value = json_format .MessageToJson (pb_return_value )
3300+ # Convert return value to protobuf type
3301+ return_value = analytics_data_api .ListAudienceListsResponse .pb (return_value )
3302+ json_return_value = json_format .MessageToJson (return_value )
32353303 response_value ._content = json_return_value .encode ("UTF-8" )
32363304 req .return_value = response_value
32373305
0 commit comments