Amazon dynamodb 全局设置boto3 dynamodb端点\u url
我想用于基于python/boto3的应用程序的本地(单元)测试 现在我可以这样做了Amazon dynamodb 全局设置boto3 dynamodb端点\u url,amazon-dynamodb,boto3,Amazon Dynamodb,Boto3,我想用于基于python/boto3的应用程序的本地(单元)测试 现在我可以这样做了 if test_mode: client = boto3.client("dynamodb", endpoint_url="localhost:8000") resource = boto3.resource("dynamodb", endpoint_url="localhost:8000") else: client = boto3.client("dynamodb") res
if test_mode:
client = boto3.client("dynamodb", endpoint_url="localhost:8000")
resource = boto3.resource("dynamodb", endpoint_url="localhost:8000")
else:
client = boto3.client("dynamodb")
resource = boto3.resource("dynamodb")
但是我想避免使用test\u模式
check
我是否可以通过某种方式“准备”boto3以便全局设置dynamodb端点URL
更新
进一步解释我想要什么。我想要某种函数,我可以说:
boto3.setGlobalDynamodbEndpoint("http://localhost:8000")
这样,当调用此函数后,我执行以下操作:
client = boto3.client("dynamodb")
resource = boto3.resource("dynamodb")
端点将自动设置为
”http://localhost:8000“
据我所知,bot3
库中没有内置函数可以为您执行此操作,但您可以使用Python标准库中的实现类似的结果。此工具接受一个和一个或多个参数,并返回一个新的callable,该callable执行相同的操作,但这些参数是“预设的”。在函数式编程行话中,这称为函数(因此名为partial
)
比如说,
import functools
import boto3
URL = "http://localhost:8000"
boto3.client = functools.partial(botot3.client, endpoint_url=URL)
boto3.resource = functools.partial(boto3.resource, endpoint_url=URL)
通过将boto3.client
和boto3.resource
重新定义为我们的新部分,而不是库中的原始版本,我们是boto3
稍后在代码中,当您调用:
client = boto3.client("dynamodb")
resource = boto3.resource("dynamodb")
您不需要显式地传递
endpoint\u url
,因为客户端和资源对象将使用partial
对象中先前设置的url值自动实例化。我刚刚向boto3项目提交了一个PR,以使用一个env var覆盖endpoint\u url,这可能很有用
你所说的
准备
和全球
是什么意思?@helloV我更新了我的问题,试图进一步解释我的意思