繁体   English   中英

boto3方法参数的默认值

[英]Default values for boto3 method parameters

我想以编程方式编写一个调用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()

那么响应是好的,我也看到了“ Hello”字样。

但是现在,我尝试为emr的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的提供客户端参数吗?

我也看不到“ Hello”字样

除服务指定的默认值外,没有其他默认值,在这种情况下,我们什么都不发送。 如果要在运行时更改参数,则可以连接到事件系统。 您可以在这里阅读有关内容。 那里的例子与我想做的非常接近。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM