Dynamic Dataclasses for the Super Lazy
Project description
awspydk
Async boto3 with Autogenerated JIT Data Classes
Motivation
This library is forked from an internal project that works with a lot of backend AWS APIs, and I got tired of having to constantly parse the returned responses before being able to work with them for (most of the time), a few seconds. Any API-driven application that uses boto3
tends to suffer from being syncronous only. So this library solves a few major problems:
-
Enables both
sync
andasync
from the same client. -
Client can be called implicitly without needing initialization, i.e. you can directly use
AwsClient
without needing to initialize. -
Dynamically generates class functions based on the
boto3.client
child functions, and allows you to call them. This is useful inrepl
oripython
environments where type-hints are always helpful, especially when the names are so long. -
Automatically initializes the
aws
client if its not initialized from the defaults, simply by calling it. -
Translates all results into Automatically Generated Dataclasses through
lazycls
.- Can be disabled by setting
aws.config.AutoCls = False
- Can be disabled by setting
Quickstart
pip install --upgrade aws-sdk
from aws import AwsClient # Sync Method buckets = AwsClient.v1.s3_list_buckets(as_cls=True) # Async Method buckets = await AwsClient.v1.async_s3_list_buckets(as_cls=True) """ Both yield the same results. The underlying classes are auto-generated from Pydantic BaseModels, so anything you can do with Pydantic Models, you can do with these. { 'Buckets': [ AwsS3Bucket(CreationDate=datetime.datetime(2021, 8, 25, 16, 42, 46, tzinfo=tzutc()), Name='...'), AwsS3Bucket(CreationDate=datetime.datetime(2021, 9, 2, 17, 54, 56, tzinfo=tzutc()), Name='...', AwsS3Bucket(CreationDate=datetime.datetime(2021, 9, 3, 4, 20, 10, tzinfo=tzutc()), Name='...'), AwsS3Bucket(CreationDate=datetime.datetime(2021, 9, 1, 20, 50, 33, tzinfo=tzutc()), Name='...'), AwsS3Bucket(CreationDate=datetime.datetime(2021, 9, 2, 4, 2, 28, tzinfo=tzutc()), Name='...') ], 'Owner': AwsS3Owner(DisplayName='...', ID='...') } """ ## Change Regions AwsClient.reset(region='us-west-1') ## Change the defaut clients created from aws.config import DefaultClients ## Modify to only create ec2 client DefaultClients = { 'ec2': 'ec2' } ## Reset implicitly AwsClient.reset() BotoKwargs = { 'AWS_PROFILE': ..., } ## Reset Explicitly AwsClient.reset(clients=DefaultClients, boto_kwargs=BotoKwargs)
Client Defaults
These are found in aws.config
AwsRegion = envToStr('AWS_REGION', 'us-east-1') AutoCls = envToBool('AWSSDK_AUTOCLS', 'true') ## These are the default clients that will be autogenerated. ## Key is the shorthand, value is the actual AWS API Name in boto3 DefaultClients = { 'ec2': 'ec2', 'ecr': 'ecr', 'r53' :'route53', 'acm': 'acm', 'elb': 'elb', 'elbv2': 'elbv2', 'asg': 'autoscaling', 's3': 's3' } ## These are the default resources that will be autogenerated. ## Key is the shorthand, value is the actual AWS Resource API Name in boto3 DefaultResources = { 'Ec2': 'ec2', 'S3': 's3', 'Iam': 'iam' } # These are the default filter args for querying DefaultFilterArgs = { 'string_only': True, 'remove_null': True }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.