| 
					
				 | 
			
			
				@@ -15,7 +15,7 @@ import abc 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import contextlib 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import functools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import logging 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from typing import Optional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from typing import Optional, List 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Workaround: `grpc` must be imported before `google.protobuf.json_format`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # to prevent "Segmentation fault". Ref https://github.com/grpc/grpc/issues/24897 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -112,9 +112,11 @@ class GcpApiManager: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def networksecurity(self, version): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         api_name = 'networksecurity' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if version == 'v1alpha1': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return self._build_from_discovery_v2(api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 api_key=self.private_api_key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self._build_from_discovery_v2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                api_key=self.private_api_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                visibility_labels=['NETWORKSECURITY_ALPHA']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         raise NotImplementedError(f'Network Security {version} not supported') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -122,9 +124,11 @@ class GcpApiManager: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def networkservices(self, version): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         api_name = 'networkservices' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if version == 'v1alpha1': 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return self._build_from_discovery_v2(api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 api_key=self.private_api_key) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self._build_from_discovery_v2( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                api_key=self.private_api_key, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                visibility_labels=['NETWORKSERVICES_ALPHA']) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         raise NotImplementedError(f'Network Services {version} not supported') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -143,13 +147,28 @@ class GcpApiManager: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._exit_stack.enter_context(api) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _build_from_discovery_v2(self, api_name, version, *, api_key=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        key_arg = f'&key={api_key}' if api_key else '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _build_from_discovery_v2(self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 *, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 api_key: Optional[str] = None, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 visibility_labels: Optional[List] = None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if api_key: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params['key'] = api_key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if visibility_labels: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # Dash-separated list of labels. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params['labels'] = '_'.join(visibility_labels) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params_str = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if params: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            params_str = '&' + ('&'.join(f'{k}={v}' for k, v in params.items())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         api = discovery.build( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             api_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             version, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             cache_discovery=False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            discoveryServiceUrl=f'{self.v2_discovery_uri}{key_arg}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            discoveryServiceUrl=f'{self.v2_discovery_uri}{params_str}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._exit_stack.enter_context(api) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |