add integrations.
This commit is contained in:
		
							parent
							
								
									aaaddf13e8
								
							
						
					
					
						commit
						bd57233b10
					
				| @ -6,6 +6,13 @@ from moto.core.utils import iso_8601_datetime_with_milliseconds | |||||||
| from .utils import create_id | from .utils import create_id | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class Integration(dict): | ||||||
|  |     def __init__(self, integration_type, uri): | ||||||
|  |         super(Integration, self).__init__() | ||||||
|  |         self['type'] = integration_type | ||||||
|  |         self['uri'] = uri | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class MethodResponse(dict): | class MethodResponse(dict): | ||||||
|     def __init__(self, status_code): |     def __init__(self, status_code): | ||||||
|         super(MethodResponse, self).__init__() |         super(MethodResponse, self).__init__() | ||||||
| @ -65,6 +72,17 @@ class Resource(object): | |||||||
|     def get_method(self, method_type): |     def get_method(self, method_type): | ||||||
|         return self.resource_methods[method_type] |         return self.resource_methods[method_type] | ||||||
| 
 | 
 | ||||||
|  |     def add_integration(self, method_type, integration_type, uri): | ||||||
|  |         integration = Integration(integration_type, uri) | ||||||
|  |         self.resource_methods[method_type]['methodIntegration'] = integration | ||||||
|  |         return integration | ||||||
|  | 
 | ||||||
|  |     def get_integration(self, method_type): | ||||||
|  |         return self.resource_methods[method_type]['methodIntegration'] | ||||||
|  | 
 | ||||||
|  |     def delete_integration(self, method_type): | ||||||
|  |         return self.resource_methods[method_type].pop('methodIntegration') | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| class RestAPI(object): | class RestAPI(object): | ||||||
|     def __init__(self, id, name, description): |     def __init__(self, id, name, description): | ||||||
| @ -165,6 +183,19 @@ class APIGatewayBackend(BaseBackend): | |||||||
|         method_response = method.delete_response(response_code) |         method_response = method.delete_response(response_code) | ||||||
|         return method_response |         return method_response | ||||||
| 
 | 
 | ||||||
|  |     def create_integration(self, function_id, resource_id, method_type, integration_type, uri): | ||||||
|  |         resource = self.get_resource(function_id, resource_id) | ||||||
|  |         integration = resource.add_integration(method_type, integration_type, uri) | ||||||
|  |         return integration | ||||||
|  | 
 | ||||||
|  |     def get_integration(self, function_id, resource_id, method_type): | ||||||
|  |         resource = self.get_resource(function_id, resource_id) | ||||||
|  |         return resource.get_integration(method_type) | ||||||
|  | 
 | ||||||
|  |     def delete_integration(self, function_id, resource_id, method_type): | ||||||
|  |         resource = self.get_resource(function_id, resource_id) | ||||||
|  |         return resource.delete_integration(method_type) | ||||||
|  | 
 | ||||||
| apigateway_backends = {} | apigateway_backends = {} | ||||||
| for region_name in ['us-east-1', 'us-west-2', 'eu-west-1', 'ap-northeast-1']:  # Not available in boto yet | for region_name in ['us-east-1', 'us-west-2', 'eu-west-1', 'ap-northeast-1']:  # Not available in boto yet | ||||||
|     apigateway_backends[region_name] = APIGatewayBackend(region_name) |     apigateway_backends[region_name] = APIGatewayBackend(region_name) | ||||||
|  | |||||||
| @ -98,3 +98,22 @@ class APIGatewayResponse(BaseResponse): | |||||||
|         elif self.method == 'DELETE': |         elif self.method == 'DELETE': | ||||||
|             method_response = self.backend.delete_method_response(function_id, resource_id, method_type, response_code) |             method_response = self.backend.delete_method_response(function_id, resource_id, method_type, response_code) | ||||||
|             return 200, headers, json.dumps(method_response) |             return 200, headers, json.dumps(method_response) | ||||||
|  | 
 | ||||||
|  |     def integrations(self, request, full_url, headers): | ||||||
|  |         self.setup_class(request, full_url, headers) | ||||||
|  |         url_path_parts = self.path.split("/") | ||||||
|  |         function_id = url_path_parts[2] | ||||||
|  |         resource_id = url_path_parts[4] | ||||||
|  |         method_type = url_path_parts[6] | ||||||
|  | 
 | ||||||
|  |         if self.method == 'GET': | ||||||
|  |             integration_response = self.backend.get_integration(function_id, resource_id, method_type) | ||||||
|  |             return 200, headers, json.dumps(integration_response) | ||||||
|  |         elif self.method == 'PUT': | ||||||
|  |             integration_type = self._get_param('type') | ||||||
|  |             uri = self._get_param('uri') | ||||||
|  |             integration_response = self.backend.create_integration(function_id, resource_id, method_type, integration_type, uri) | ||||||
|  |             return 200, headers, json.dumps(integration_response) | ||||||
|  |         elif self.method == 'DELETE': | ||||||
|  |             integration_response = self.backend.delete_integration(function_id, resource_id, method_type) | ||||||
|  |             return 200, headers, json.dumps(integration_response) | ||||||
|  | |||||||
| @ -12,4 +12,5 @@ url_paths = { | |||||||
|     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/?$': APIGatewayResponse().resource_individual, |     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/?$': APIGatewayResponse().resource_individual, | ||||||
|     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/methods/(?P<method_name>[^/]+)/?$': APIGatewayResponse().resource_methods, |     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/methods/(?P<method_name>[^/]+)/?$': APIGatewayResponse().resource_methods, | ||||||
|     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/methods/(?P<method_name>[^/]+)/responses/200$': APIGatewayResponse().resource_method_responses, |     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/methods/(?P<method_name>[^/]+)/responses/200$': APIGatewayResponse().resource_method_responses, | ||||||
|  |     '{0}/restapis/(?P<function_id>[^/]+)/resources/(?P<resource_id>[^/]+)/methods/(?P<method_name>[^/]+)/integration/?$': APIGatewayResponse().integrations, | ||||||
| } | } | ||||||
|  | |||||||
| @ -208,12 +208,6 @@ def test_integrations(): | |||||||
|         authorizationType='none', |         authorizationType='none', | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     client.get_method( |  | ||||||
|         restApiId=api_id, |  | ||||||
|         resourceId=root_id, |  | ||||||
|         httpMethod='GET' |  | ||||||
|     ) |  | ||||||
| 
 |  | ||||||
|     client.put_method_response( |     client.put_method_response( | ||||||
|         restApiId=api_id, |         restApiId=api_id, | ||||||
|         resourceId=root_id, |         resourceId=root_id, | ||||||
| @ -228,3 +222,40 @@ def test_integrations(): | |||||||
|         type='HTTP', |         type='HTTP', | ||||||
|         uri='http://httpbin.org/robots.txt', |         uri='http://httpbin.org/robots.txt', | ||||||
|     ) |     ) | ||||||
|  |     response.should.equal({ | ||||||
|  |         'type': 'HTTP', | ||||||
|  |         'uri': 'http://httpbin.org/robots.txt', | ||||||
|  |         'ResponseMetadata': {'HTTPStatusCode': 200} | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     response = client.get_integration( | ||||||
|  |         restApiId=api_id, | ||||||
|  |         resourceId=root_id, | ||||||
|  |         httpMethod='GET' | ||||||
|  |     ) | ||||||
|  |     response.should.equal({ | ||||||
|  |         'type': 'HTTP', | ||||||
|  |         'uri': 'http://httpbin.org/robots.txt', | ||||||
|  |         'ResponseMetadata': {'HTTPStatusCode': 200} | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     response = client.get_resource( | ||||||
|  |         restApiId=api_id, | ||||||
|  |         resourceId=root_id, | ||||||
|  |     ) | ||||||
|  |     response['resourceMethods']['GET']['methodIntegration'].should.equal({ | ||||||
|  |         'type': 'HTTP', | ||||||
|  |         'uri': 'http://httpbin.org/robots.txt' | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     client.delete_integration( | ||||||
|  |         restApiId=api_id, | ||||||
|  |         resourceId=root_id, | ||||||
|  |         httpMethod='GET' | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     response = client.get_resource( | ||||||
|  |         restApiId=api_id, | ||||||
|  |         resourceId=root_id, | ||||||
|  |     ) | ||||||
|  |     response['resourceMethods']['GET'].shouldnt.contain("methodIntegration") | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user