Действие не привело к созданию действительного объекта JSON в файле Python - PullRequest
0 голосов
/ 08 октября 2019

Я использую два действия облачной функции IBM - write1 и write2 (оба используют PYTHON).

Я создал последовательность, которая должна передавать значение от write1 до write2.

Я написал код PYTHON в действии write1, но выдает ошибку JSON .

Записать 1 файл Python: *

    import os
    import sys
    import json
    import requests
    import ibm_boto3
    from ibm_botocore.client import Config, ClientError

    cos = ibm_boto3.resource("s3",
          ibm_api_key_id='my-api-key',
          ibm_service_instance_id='my-instance-id',
          config=Config(signature_version="oauth"),
         endpoint_url='https://s3.eu-gb.cloud-object-storage.appdomain.cloud'
         )

    def get_item(bucket_name, item_name):
      a={"Retrieving item from bucket":bucket_name , "key": item_name}
      print(json.dumps(a))
    try:
        file = cos.Object(bucket_name, item_name).get()
        return file["Body"].read()
    except ClientError as be:
        w={"CLIENT ERROR":be}
        print(json.dumps(w))
    except Exception as e:
        y={"Unable to retrieve file contents":e}
        print(json.dumps(y))


    def test():
      x = get_item('cloud-college-bucket0','abc.txt') 
      print(x.decode('utf-8'))

    if x is not None:
        string_in_uppercase = x.upper();
        n={"String in Uppercase =":string_in_uppercase.decode('utf-8')}
        b=json.dumps(n)
        print(b)

    def main(dict):
      return test()      

    if __name__ == '__main__':
      main()

Ошибка, которую выдает:

Результаты:

{
  "error": "**The action did not produce a valid JSON response**: null\n"
}

Logs:

[
  "2019-10-08T13:01:56.339677Z    stderr: /usr/local/lib/python3.7/site-packages/ibm_botocore/vendored/requests/api.py:67: DeprecationWarning: You are using the post() function from 'ibm_botocore.vendored.requests'.  This is not a public API in ibm_botocore and will be removed in the future. Additionally, this version of requests is out of date.  We recommend you install the requests package, 'import requests' directly, and use the requests.post() function instead.",

  "2019-10-08T13:01:56.339748Z    stderr: DeprecationWarning",

  "2019-10-08T13:01:56.339755Z    stderr: /usr/local/lib/python3.7/site-packages/ibm_botocore/vendored/requests/models.py:169: DeprecationWarning: 

Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working",

  "2019-10-08T13:01:56.339759Z    stderr: if isinstance(hook, collections.Callable):",

  "2019-10-08T13:01:56.339678Z    stdout: {\"Retrieving item from bucket\": \"cloud-college-bucket0\", \"key\": \"abc.txt\"}",

  "2019-10-08T13:01:56.339772Z    stdout: hello friends",

  "2019-10-08T13:01:56.339776Z    stdout: {\"String in Uppercase =\": \"HELLO FRIENDS\"}",

  "2019-10-08T13:01:56.340Z       stderr: The action did not initialize or run as expected. Log data might be missing."

]

Там написано import request, что я и сделал, но проблема все еще сохраняется.

Я также говорю, используйте функцию request.post, но как и где использовать, я не могу понять. А как решить эту проблему JSON?

И желаемый вывод показывается в логах.

1 Ответ

0 голосов
/ 09 октября 2019

С самого начала я мог видеть, что функция test только печатает JSON, но никогда не возвращает его. Но если вы видите пример действия Python, он всегда должен возвращать JSON

import sys

def main(dict):
    return { 'message': 'Hello world' }

Кроме того, вы можете проверить список поддерживаемых пакетов с Python runtime здесь , прежде чем использовать их в своем действии. .

Если у вас есть пакет, которого нет в списке, вы всегда можете упаковать код Python с виртуальной средой в файлы .zip или Упаковка кода в изображения Docker

...