Penyelesaian kode dan ketikkan boto3

gambar


Gambar milik boto3-type-annotations, Allie Fitter


Saat ini, beberapa orang menulis proyek Python besar tanpa jenis anotasi. Ini sederhana dan memungkinkan Anda untuk menangkap banyak kesalahan pada tahap penulisan kode, dan bekerja sangat cerdas. Tetapi perlu menambahkan boto3 sebagai ketergantungan , dan mypy mulai penuh dengan pesan yang mengetik anotasi boto3yang tidak ada di alam.


, boto3 botostubs. , mypy .


boto3-type-annotations, , mypy .


boto3, ?


mypy


, boto3 1.11.9 EC2, DynamoDB S3. Python 3.6.9 . , , boto3-stubs 1.11.9.x .


#   boto3 ,     
pip install boto3-stubs[s3,ec2,dynamodb]==1.11.9.0

#     pip, pipfile  poetry,
#    whl-,     
#   
python -m mypy_boto3

… ! mypy , , , boto3, .


- !


, .


VSCode , . boto3.client, boto3_session.client,boto3.resource, boto3_session.resource, client.get_waiter client.get_paginator.


PyCharm - , 15 , .


import boto3

from mypy_boto3 import dynamodb

#   ,    
client: dynamodb.DynamoDBClient = boto3.client("dynamodb")

# IDE        
client.query("my_table")


import boto3

from mypy_boto3 import s3

# PyCharm  mypy      ,   
client: s3.S3Client = boto3.client("s3")

# IDE   ,  ,  --
client.create_bucket(Bucket="bucket")

# ,   mypy     

# (mypy) error: Missing positional argument "Key" in call to "get_object" of "S3Client"
client.get_object(Bucket="bucket")

# (mypy) error: Argument "Key" to "get_object" of "S3Client" has incompatible type "None"; expected "str"
client.get_object(Bucket="bucket", Key=None)

resource: s3.S3ServiceResource = boto3.Session(region_name="us-west-1").resource("s3")

#   -     
bucket = resource.Bucket("bucket")

# (mypy) error: Unexpected keyword argument "key" for "upload_file" of "Bucket"; did you mean "Key"?
bucket.upload_file(Filename="my.txt", key="my-txt")

# waiter'   paginator'  
#         
waiter: s3.BucketExistsWaiter = client.get_waiter("bucket_exists")
paginator: s3.ListMultipartUploadsPaginator = client.get_paginator(
    "list_multipart_uploads"
)


mypy-boto3-builder - boto3. boto3, .


json- botocore , boto3 .



, , .


post-install , whl-. ?


Karena boto3banyak metode dan kelas dalam file yang sama disebut sama, untuk operasi anotasi yang benar, modul mengimpor sendiri. Ini tidak berfungsi di Python 3.6.5 dan tidak terlihat sangat bagus. Apa alternatifnya?


Dan akhirnya, jika semuanya baik-baik saja dengan C #, Anda dapat menambahkan dukungan literal ke fungsi-fungsi berlebih untuk Server Bahasa Python sehingga semuanya bekerja di luar kotak di VSCode juga. Saya tidak bisa dan menyerah.


Terimakasih untuk semua!

Source: https://habr.com/ru/post/undefined/


All Articles