Я хотел бы программно написать метод, который вызывает метод boto3 и изменяет параметры по умолчанию внутри методов.Значения по умолчанию для параметров метода boto3
Например, я хочу использовать свой журнал, если для журнала установлено значение Истина. В противном случае не регистрируйте его. Что-то вроде этого:
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, он не будет сохранен. Поэтому я мог бы сделать это с заявлениями, например:
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
Но это ужасно. И LogUri был просто примером. Я хочу изменить другие параметры. Я просто не могу сделать эти вложенные ifs.
Есть ли значение по умолчанию для различных типов, таких как строки в boto3, которые я могу использовать?
Edit 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 ОГО в:
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 Возможно, это не параметры-client-param для emr?
Я также не вижу «Hello» напечатанный