def call_function()

in processors/vertexgenai.py [0:0]


    def call_function(self, name, params):
        method = 'GET'
        if 'method' in params:
            method = params['method'].upper()
        headers = {}
        if 'headers' in params:
            for header in params['headers']:
                headers[header['name'].lower()] = header['value']
        body = ''
        if 'body' in params:
            if isinstance(params['body'], dict):
                body = json.dumps(params['body'])
            else:
                body = params['body']
        loggable_headers = headers
        if 'authorization' in loggable_headers:
            del loggable_headers['authorization']
        if 'x-serverless-authorization' in loggable_headers:
            del loggable_headers['x-serverless-authorization']
        if 'api-key' in loggable_headers:
            del loggable_headers['api-key']
        if 'x-api-key' in loggable_headers:
            del loggable_headers['x-api-key']
        if 'proxy-authorization' in loggable_headers:
            del loggable_headers['proxy-authorization']

        self.logger.info('Calling function: %s' % (name),
                         extra={
                             'url': params['url'],
                             'method': method,
                             'body_length': len(body),
                             'headers': loggable_headers,
                             'id_token': True if 'idToken' in params else False
                         })

        id_token = None
        audience = None
        if 'idToken' in params and params['idToken']:
            if 'audience' in params:
                audience = params['audience']
            else:
                audience = params['url']
            auth_request = google.auth.transport.requests.Request()
            id_token = google.oauth2.id_token.fetch_id_token(
                auth_request, audience)
            headers['authorization'] = 'Bearer %s' % (id_token)

        req = urllib.request.Request(params['url'],
                                     headers=headers,
                                     method=method)
        response = urllib.request.urlopen(req, data=body.encode('utf-8'))
        if response.status < 200 or response.status >= 400:
            self.logger.error('Error calling function: %s' % (name),
                              extra={
                                  'status_code': response.status,
                                  'response': response.data.decode('utf-8')
                              })

        return (response.headers, json.loads(response.read().decode('utf-8')))