Code-Vervollständigung und Typprüfung für boto3

Bild


Bild mit freundlicher Genehmigung von Boto3-Typ-Anmerkungen, Allie Fitter


Derzeit schreiben nur wenige Leute große Python-Projekte ohne Typanmerkung. Es ist einfach und ermöglicht es Ihnen, bereits beim Schreiben von Code eine Reihe von Fehlern zu erkennen. Es funktioniert sehr intelligent. Es lohnt sich jedoch, boto3 zur Abhängigkeit hinzuzufügen , und mypy ist voll von Nachrichten, deren Typanmerkungenboto3 in der Natur nicht vorhanden sind.


, 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-. ?


Da boto3viele Methoden und Klassen in derselben Datei als gleich bezeichnet werden, importiert sich das Modul für den korrekten Betrieb von Anmerkungen selbst. Dies funktioniert in Python 3.6.5 nicht und sieht nicht sehr gut aus. Was sind die Alternativen?


Und schließlich, wenn mit C # alles in Ordnung ist, können Sie überladenen Funktionen für den Python Language Server Literalunterstützung hinzufügen, sodass auch in VSCode alles sofort funktioniert. Ich konnte nicht und gab auf.


Danke an alle!

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


All Articles