0.0.6 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform
Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.
Apache-1.0 - Apache License 1.0Botoinator allows you to apply decorators to boto3 methods on either a class or object level. It works through boto3 sessions to allow you to apply decorators to either all clients/resources of a particular session, or to specific clients/resources of boto3.DEFAULT_SESSION.
You can see the pydoc generated documentation HERE
session = boto3.session.Session()
session.register_client_decorator(service_name, method_names, decorator)Arguments:
session = boto3.session.Session()
session.register_resource_decorator(service_name, resource_name, method_names, decorator)Arguments:
boto3.session.Session.add_client_decorator(service_name, method_names, decorator)Arguments:
boto3.session.Session.add_resource_decorator(service_name, resource_name, method_names, decorator)Arguments:
session = boto3.session.Session()
session.unregister_client_decorator(service_name, method_names)Arguments:
session = boto3.session.Session()
session.unregister_resource_decorator(service_name, resource_name, method_names)Arguments:
boto3.session.Session.remove_client_decorator(service_name, method_names)Arguments:
boto3.session.Session.remove_resource_decorator(service_name, resource_name, method_names)Arguments:
If you use the boto3.client() or boto3.resource() methods, these create a default session object found at boto3.DEFAULT_SESSION.
Changing the default session's decorators requires using the register_xxx and unregister_xxx methods documented here.
For example boto3.DEFAULT_SESSION.register_client_decorator(...).
import boto3
import botoinator
from moto import mock_s3, mock_sqs
""" This is our decorator that we will apply to boto3 methods """
def myDecorator(func):
def test_decorator(*args, **kwargs):
setattr(test_decorator, 'testValue', True) # Add this attribute to the returned function for testing
return func(*args, **kwargs)
return test_decorator
@mock_s3
def testRegisterToClient():
"""
Test registering a decorator to a single boto3 session
"""
# Create a boto3 session
s = boto3.session.Session()
# Register the create_bucket() method to use our decorator for this session
s.register_client_decorator('s3', 'create_bucket', myDecorator)
# Now create our client as we normally would
client1 = s.client('s3')
# Now we can see that create_bucket() was decorated by testing the attribute we added
client1.create_bucket(Bucket='foo')
assert hasattr(client1.create_bucket, 'testValue')
# We can also see that this only applies to calls made by the session we registered by creating a new session through boto3.client() and not registering a decorator
client2 = boto3.client('s3')
client2.create_bucket(Bucket='foo')
# Now we can see that client.create_bucket() is not decorated
assert not hasattr(client2.create_bucket, 'testValue')
# Remove the decorator from the session
s.unregister_client_decorator('s3', 'create_bucket')
# Now create a new client on the same session we created at first
client3 = s.client('s3')
client3.create_bucket(Bucket='bar')
# The session should no longer be decorating methods for new clients
assert not hasattr(client3.create_bucket, 'testValue1')