Amazon dynamodb 全局设置boto3 dynamodb端点\u url

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

我想用于基于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")
    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我更新了我的问题,试图进一步解释我的意思