我正在尝试围绕 boto3 键入注释,但模块 'botocore.client' 没有属性 'EC2'
I'm trying to type annotate around boto3, but module 'botocore.client' has no attribute 'EC2'
我正在围绕 boto3 编写自己的包装器以实现快速触发功能。
我正在尝试输入注释 boto3.session().client('ec2')
returns。
调试器说它是 <class 'botocore.client.EC2'>
,但如果我这样写下来,python 会因运行时错误而崩溃
ec2: botocore.client.EC2
AttributeError: module 'botocore.client' has no attribute 'EC2'
删除类型注释适用于运行时,但它使 linting 非常有限。
是否有一种相当快速的方法或破解方法来使用此 boto3 案例进行打字?
我说的代码如下:
class AWS_Client:
# debugger says it's <class 'botocore.client.EC2'>,
# but mypy says this class does not exist
ec2: botocore.client.EC2
asg: botocore.client.AutoScaling
region: str
instance_id: str
def __init__(self,
profile_name: Optional[str] = None,
instance_id: str = '',
region_name: str = '',
**kwargs) -> None:
global config
self.instance_id = instance_id or ec2_meta('instance-id').text
self.region = region_name or ec2_meta(
'placement/availability-zone').text[:-1]
boto3.set_stream_logger('botocore', level=logging.DEBUG)
self.session = call_partial(
boto3.Session,
region_name=self.region,
profile_name=profile_name,
**kwargs)
self.ec2 = self.session.client('ec2', region_name=self.region, **kwargs)
self.asg = self.session.client(
'autoscaling', region_name=self.region, **kwargs)
def get_tags(self) -> Dict[str, str]:
self.tags = self.ec2.describe_tags(Filters=[{
'Name': 'resource-id',
'Values': [self.instance_id]
}])['Tags']
return self.tags
aws = AWS_Client()
print(aws.get_tags())
试试 mypy-boto3 mypy 插件。
您可以通过
安装它
python -m pip install 'boto3-stubs[ec2]'
import boto3
from mypy_boto3_ec2 import EC2Client
def foo(ec2_client: EC2Client) -> None:
...
ec2_client = boto3.client("ec2")
foo(ec2_client) # OK
我正在围绕 boto3 编写自己的包装器以实现快速触发功能。
我正在尝试输入注释 boto3.session().client('ec2')
returns。
调试器说它是 <class 'botocore.client.EC2'>
,但如果我这样写下来,python 会因运行时错误而崩溃
ec2: botocore.client.EC2
AttributeError: module 'botocore.client' has no attribute 'EC2'
删除类型注释适用于运行时,但它使 linting 非常有限。
是否有一种相当快速的方法或破解方法来使用此 boto3 案例进行打字?
我说的代码如下:
class AWS_Client:
# debugger says it's <class 'botocore.client.EC2'>,
# but mypy says this class does not exist
ec2: botocore.client.EC2
asg: botocore.client.AutoScaling
region: str
instance_id: str
def __init__(self,
profile_name: Optional[str] = None,
instance_id: str = '',
region_name: str = '',
**kwargs) -> None:
global config
self.instance_id = instance_id or ec2_meta('instance-id').text
self.region = region_name or ec2_meta(
'placement/availability-zone').text[:-1]
boto3.set_stream_logger('botocore', level=logging.DEBUG)
self.session = call_partial(
boto3.Session,
region_name=self.region,
profile_name=profile_name,
**kwargs)
self.ec2 = self.session.client('ec2', region_name=self.region, **kwargs)
self.asg = self.session.client(
'autoscaling', region_name=self.region, **kwargs)
def get_tags(self) -> Dict[str, str]:
self.tags = self.ec2.describe_tags(Filters=[{
'Name': 'resource-id',
'Values': [self.instance_id]
}])['Tags']
return self.tags
aws = AWS_Client()
print(aws.get_tags())
试试 mypy-boto3 mypy 插件。
您可以通过
安装它python -m pip install 'boto3-stubs[ec2]'
import boto3
from mypy_boto3_ec2 import EC2Client
def foo(ec2_client: EC2Client) -> None:
...
ec2_client = boto3.client("ec2")
foo(ec2_client) # OK