«Синтаксическая ошибка» в лямбда-функции, но с правильными вкладками и работающая в тестовом примере?

#python #amazon-web-services #amazon-s3 #aws-lambda

#python #amazon-веб-сервисы #amazon-s3 #aws-lambda

Вопрос:

У меня есть лямбда-функция, которая используется для захвата загруженного пользователем файла через веб-приложение react, отправки его в корзину s3, затем лямбда-функция с использованием python, которая извлекает указанное изображение из корзины, переводит его и отправляет переведенную версию этого файла обратно в корзину.

Проблема в том, что эта программа работает только с тестовыми примерами / в теории. Для экстраполяции я ввожу имя файла в качестве «события» для лямбда-функции и переношу его в различные другие функции следующим образом:

 def get_kv_map(event): 
    filePath = event
    fileExt = filePath.get('body')
    s3 = boto3.resource('s3')
    bucket = s3.Bucket('myBucket')
    obj = bucket.Object(bucket)
    client = boto3.client('textract') #We utilize boto3's textract
    response = client.analyze_document(Document={'S3Object': {'Bucket': 'myBucket', 'Name': fileExt}}, FeatureTypes=['FORMS'])
# Get the text blocks
    blocks=response['Blocks']     #We make a blocks variable that will be the blocks we find in the document
# get key and value maps
    key_map = {}
    value_map = {}
    block_map = {}
    for block in blocks:        #Traverse the blocks found in the document
        block_id = block['Id']          #Set variable for blockId to the Id's found on that block location
        block_map[block_id] = block                 #Make the block map at that ID be the block variable
        if block['BlockType'] == "KEY_VALUE_SET":       #if we see that the type of block we're on is a key and value set pair, we check if it's a key or not. If it's not a key, we know it's a value. We send it to the respective map. 
            if 'KEY' in block['EntityTypes']:
                key_map[block_id] = block
            else:
                value_map[block_id] = block
    return key_map, value_map, block_map                    #######LINE WITH ERROR ######
  

Почему именно эта строка вызывает ошибку, и, что более важно, почему это происходит только на веб-сайте? Когда я использую программу в cloud9 с моими тестовыми примерами, все отлично. Но в тот момент, когда я пытаюсь заставить веб-сайт отправить данные для функции, чтобы «выполнить свою работу», кажется, что она останавливается сразу после загрузки файла и переходит к этой строке из всех строк. Я пробовал проверять табуляции / пробелы и все остальное. Я очень озадачен.

Спасибо за любую помощь, я сегодня рвал на себе волосы.

Итак, я попытался проанализировать, что я привожу (событие) и что оно содержит. Кажется, что это ошибка разрешения, но я не могу понять почему. Я предоставил себе полный доступ к различным функциям в AWS. Ниже приведен код ошибки, который я получаю, когда использую тестовый пример в качестве своего события, которое я вижу при вводе.

 "errorType": "InvalidS3ObjectException",
"errorMessage": "An error occurred (InvalidS3ObjectException) when calling the AnalyzeDocument operation: Unable to get object metadata from S3. Check object key, region and/or access permissions.",
"stackTrace": [
    "  File "/var/task/scrapeShow/lambda_function.py", line 133, in mainn    key_map, value_map, block_map = get_kv_map(event)   #Take map variables in to get the key and value map we need.n",
    "  File "/var/task/scrapeShow/lambda_function.py", line 39, in get_kv_mapn    response = client.analyze_document(Document={'S3Object': {'Bucket': 'myBucket', 'Name': fileExt}}, FeatureTypes=['FORMS'])n",
    "  File "/var/runtime/botocore/client.py", line 316, in _api_calln    return self._make_api_call(operation_name, kwargs)n",
    "  File "/var/runtime/botocore/client.py", line 626, in _make_api_calln    raise error_class(parsed_response, operation_name)n"
]}
  

Комментарии:

1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.

2. поместите код с правильными отступами

3. Все, что я получаю из журналов cloudwatch, это синтаксическая ошибка в модуле func / lambda_function’: недопустимый синтаксис (lambda_function.py, строка 55)

4. Вы уверены, что синтаксическая ошибка в return key_map, value_map, block_map ? Потому что это правильно и является допустимым кодом python.

5. пожалуйста, поделитесь точной ошибкой.