vil*_*asv 5 python amazon-web-services python-3.x aws-sdk boto3
该boto3
库提供了几种返回资源的工厂方法。例如:
dynamo = (
boto3
.resource('dynamodb')
.Table(os.environ['DYNAMODB_TABLE'])
)
Run Code Online (Sandbox Code Playgroud)
我想注释这些资源,以便可以更好地进行类型检查和完成,但是唯一可以找到的类型是from boto3.dynamodb.table import TableResource
。
当我添加该注释时:
dynamo: TableResource = (
boto3
.resource('dynamodb')
.Table(os.environ['DYNAMODB_TABLE'])
)
Run Code Online (Sandbox Code Playgroud)
batch_writer(self, overwrite_by_pkeys)
即使文档列出了其他几种,自动补全提供的唯一方法也是。
这是用作注释的错误类吗?在终端中检查该变量类型,我可以看到它是<class 'boto3.resources.factory.dynamodb.Table'>
,但似乎不可能静态获得该类型。
And*_*kin 10
可以在此库的帮助下输入使用 DynamoDB 的注释代码: https: //github.com/vemel/mypy_boto3。
安装:
pip install boto3-stubs[dynamodb]
Run Code Online (Sandbox Code Playgroud)
用法:
from mypy_boto3_dynamodb import ServiceResource
dynamodb: ServiceResource = boto3.resource(
"dynamodb", region_name=region
)
# now type checker or IDE can infer type of `table`
# and find its methods
table = dynamodb.Table("example")
Run Code Online (Sandbox Code Playgroud)
还可以注释许多其他 boto3 服务,请参阅该库的 GitHub 页面。
除了 Alex Hall 的回答。 前向引用可以用来解决这个问题。
dynamo: 'boto3.resources.factory.dynamodb.Table' = (
boto3
.resource('dynamodb')
.Table(os.environ['DYNAMODB_TABLE']))
Run Code Online (Sandbox Code Playgroud)
类型和API方法不是静态存在的。boto3使用数据驱动的体系结构,这是一种非常动态的设计,它使用JSON格式的数据(此处是示例)来确定可以进行哪些API调用。他们这样做是为了轻松地更新库以包括新的API更改。我不确定,但我认为他们可能会对其他语言的SDK使用相同的策略,因此只需很少的重复工作即可对多个SDK进行更改。
图书馆必须适应用户需求的变化,还必须适应用户运行平台的变化。随着AWS多年来的增长加速,我们API的更新速度也越来越快。这就要求我们设计一种可扩展的方法,以每周快速提供对多个API更新的支持,这就是为什么Boto3中的AWS API支持几乎完全由数据驱动的原因。Boto3具有“客户端”类,这些类由描述AWS API的JSON格式的API模型驱动,因此大多数新服务功能仅需要简单的模型更新。这使我们能够以一致且可靠的方式非常快速地提供对API更改的支持。
您还可以通过进入诸如resource.Table
调试器之类的方法调用来了解这种情况。
归档时间: |
|
查看次数: |
758 次 |
最近记录: |