예제 #1
0
        def add_path(path, parts, parent_id=''):
            child_id = create_id()
            path = path or '/'
            child = Resource(
                id=child_id,
                region_name=rest_api.region_name,
                api_id=rest_api.id,
                path_part=parts[-1] or '/',
                parent_id=parent_id
            )
            for m, payload in body['paths'].get(path, {}).items():
                m = m.upper()
                payload = payload['x-amazon-apigateway-integration']

                child.add_method(
                    m, None, None
                )
                integration = Integration(
                    http_method=m,
                    uri=payload.get('uri'),
                    integration_type=payload['type'],
                    pass_through_behavior=payload.get('passthroughBehavior'),
                    request_templates=payload.get('requestTemplates') or {}
                )
                integration.create_integration_response(
                    status_code=payload.get('responses', {}).get('default', {}).get('statusCode', 200),
                    selection_pattern=None,
                    response_templates=None,
                    content_handling=None
                )
                child.resource_methods[m]['methodIntegration'] = integration

            rest_api.resources[child_id] = child
            return child
예제 #2
0
    def apigateway_models_backend_put_rest_api(self, function_id, body):
        rest_api = self.get_rest_api(function_id)
        # Remove default root
        rest_api.resources = {}
        for path in body['paths']:
            child_id = create_id()
            child = Resource(
                id=child_id,
                region_name=rest_api.region_name,
                api_id=rest_api.id,
                path_part=path,
                parent_id='',
            )
            for m, payload in body['paths'][path].items():
                m = m.upper()
                payload = payload['x-amazon-apigateway-integration']

                child.add_method(m, None, None)
                integration = Integration(
                    http_method=m,
                    uri=None,
                    integration_type=payload['type'],
                    pass_through_behavior=payload['passthroughBehavior'],
                    request_templates=payload['requestTemplates'])
                integration.create_integration_response(
                    status_code=payload['responses']['default']['statusCode'],
                    selection_pattern=None,
                    response_templates=None,
                    content_handling=None)
                child.resource_methods[m]['methodIntegration'] = integration

            rest_api.resources[child_id] = child

        return rest_api
예제 #3
0
    def apigateway_models_backend_put_rest_api(self, function_id, body):
        rest_api = self.get_rest_api(function_id)
        # Remove default root, then add paths from API spec
        rest_api.resources = {}
        for path in body.get('paths', {}):
            child_id = create_id()
            child = Resource(
                id=child_id,
                region_name=rest_api.region_name,
                api_id=rest_api.id,
                path_part=path,
                parent_id='',
            )
            for m, payload in body['paths'][path].items():
                m = m.upper()
                payload = payload['x-amazon-apigateway-integration']

                child.add_method(m, None, None)
                integration = Integration(
                    http_method=m,
                    uri=payload.get('uri'),
                    integration_type=payload['type'],
                    pass_through_behavior=payload.get('passthroughBehavior'),
                    request_templates=payload.get('requestTemplates') or {})
                integration.create_integration_response(
                    status_code=payload.get('responses',
                                            {}).get('default',
                                                    {}).get('statusCode', 200),
                    selection_pattern=None,
                    response_templates=None,
                    content_handling=None)
                child.resource_methods[m]['methodIntegration'] = integration

            rest_api.resources[child_id] = child

        policy = body.get('x-amazon-apigateway-policy')
        if policy:
            policy = json.dumps(policy) if isinstance(policy,
                                                      dict) else str(policy)
            rest_api.policy = policy

        return rest_api