我想以编程方式编写调用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
因此,对于默认值,我使用无。但是,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
但这是可怕的方式。 LogUri只是一个例子。我希望能够改变其他参数。我不能让那些嵌套的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一个例子:
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(...)
当我跑,我得到: 缺少必需的参数输入:“名称”
我使用错误的语法不知何故? 我确实使用了从current_emr.meta.method_to_api_mapping得到的RunJobFlow 也许这不是emr的provide-client-params?
我还没有看到“你好”印刷