Значения по умолчанию для параметров метода boto3

Я хотел бы программно написать метод, который вызывает метод boto3 и изменяет параметры по умолчанию внутри методов.

Например, я хочу использовать свою корзину для журналов, если для параметра log задано значение True. В противном случае не регистрируйте его. Что-то вроде этого:

def my_run(log=False):
    log_string = "s3://mylogs" if log else None

    result = emr.run_job_flow(Name   = 'EMRTest1',
                              LogUri = log_string ,
                              ...
                              )
    return result

Итак, для значения по умолчанию я использовал None. Однако boto3 ожидает строку. Я попробовал пустую строку по умолчанию, и это недопустимое значение.

Я знаю, что если я не укажу logURI, он не будет сохранен. Поэтому я мог бы сделать это с помощью операторов if, например:

def my_run(log=False):
    if log:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  LogUri = "s3://mylogs" ,
                                  ...
                                  )
    else:
        result = emr.run_job_flow(Name   = 'EMRTest1',
                                  ...
                                  )
    return result

Но это ужасный способ. И ЛогУри был просто примером. Я хочу иметь возможность изменять другие параметры. Я просто не могу сделать эти вложенные ifs.

Есть ли значение по умолчанию для различных типов, таких как строки в boto3, которые я могу использовать?


Изменить 1

Из первого комментария ниже: http://boto3.readthedocs.org/en/latest/guide/events.html#provide-client-params

Интересный API. Хотя документировано не очень хорошо. Их пример для s3 clisnt работает нормально,

s3 = boto3.client('s3')

# Access the event system on the S3 client
event_system = s3.meta.events

# Create a function
def add_my_bucket(params, **kwargs):
    print "Hello"
    # Add the name of the bucket you want to default to.
    if 'Bucket' not in params:
        params['Bucket'] = 'mybucket'

# Register the function to an event
event_system.register('provide-client-params.s3.ListObjects', add_my_bucket)

response = s3.list_objects()

тогда ответ хороший, а также я вижу напечатанное «Привет».

Но теперь я пытаюсь сделать пример для run_job_flow emr:

def my_run(name):
    def setName(params, **kwargs):
        print "Hello"
        params['Name'] = name

    current_emr  = boto3.client('emr')
    event_system = current_emr.meta.events

    event_system.register('provide-client-params.emr.RunJobFlow', setName)

    current_emr.run_job_flow(...)

Когда я запускаю это, я получаю: Отсутствует обязательный параметр ввода: «Имя»

Я как-то использую неправильный синтаксис? Я использовал RunJobFlow, который я получил от current_emr.meta.method_to_api_mapping. Может быть, это не предоставление клиентских параметров для emr?

Я также не вижу напечатанного "Привет"


person Denisevi4    schedule 05.11.2015    source источник


Ответы (1)


Нет никаких значений по умолчанию, кроме тех, которые указаны сервисом, и в этом случае мы просто ничего не отправляем. Если вы хотите изменить параметры во время выполнения, вы можете подключиться к системе событий. Вы можете прочитать об этом здесь. . Примеры там довольно близки к тому, что, я думаю, вы хотите сделать.

person Jordon Phillips    schedule 05.11.2015