Skip to main content

Botoinator

A python module that allows for declaring decorators to be added to boto3 methods

Overview

Botoinator 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.

Generated documentation

You can see the pydoc generated documentation HERE

Usage

Decorate a method belonging to a client object to a single session

session = boto3.session.Session()
session.register_client_decorator(service_name, method_names, decorator)

Arguments:

  • service_name -- the boto3 name (as a string) of the client to apply the decorator to.
  • method_names -- one or more method names of the client to apply the decorator to. Single names can be a string, while multiple names can be a list/tuple/set.
  • decorator -- the decorator function. Must be a function that takes a function and returns a function. The returned function must take (*args, **kwargs) as arguments.

Decorate a method belonging to a resource object in a single session

session = boto3.session.Session()
session.register_resource_decorator(service_name, resource_name, method_names, decorator)

Arguments:

  • service_name -- the boto3 name (as a string) of the service to apply the decorator to.
  • resource_name -- the boto3 name of the resource of the service to apply the decorator to.
  • method_names -- one or more method names of the resource to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set.
  • decorator -- the decorator function. Must be a function that takes a function and returns a function. The returned function must take (*args, **kwargs) as arguments

Decorate a method for clients created in any session

boto3.session.Session.add_client_decorator(service_name, method_names, decorator)

Arguments:

  • service_name -- the boto3 name (as a string) of the client to apply the decorator to.
  • method_names -- one or more method names of the client to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set.
  • decorator -- the decorator function. Must be a function that takes a function and returns a function. The returned function must take (*args, **kwargs) as arguments.

Decorate a method of a resource in all sessions

boto3.session.Session.add_resource_decorator(service_name, resource_name, method_names, decorator)

Arguments:

  • service_name -- the boto3 name of the service to apply the decorator to.
  • resource_name -- the boto3 name of the resource of the service to apply the decorator to.
  • method_names -- one or more method names of the resource to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set
  • decorator -- the decorator function. Must be a function that takes a function and returns a function. The returned function must take (*args, **kwargs) as arguments

Unregister a decorator so that future clients will not have their methods decorated. Clients that have already registered decorators to methods will retain their decoration.

session = boto3.session.Session()
session.unregister_client_decorator(service_name, method_names)

Arguments:

  • service_name -- the boto3 name of the service to apply the decorator to.
  • method_names -- one or more method names of the client to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set

Unregister a decorator so that future resources will not have their methods decorated. Resources that have already registered decorators to methods will retain their decoration.

session = boto3.session.Session()
session.unregister_resource_decorator(service_name, resource_name, method_names)

Arguments:

  • service_name -- the boto3 name of the service to apply the decorator to.
  • resource_name -- the boto3 name of the resource of the service to apply the decorator to.
  • method_names -- one or more method names of the resource to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set

Undecorate a method for clients created in any session.

boto3.session.Session.remove_client_decorator(service_name, method_names)

Arguments:

  • service_name -- the boto3 name (as a string) of the client to apply the decorator to.
  • method_names -- one or more method names of the client to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set.

Undecorate a method of a resource in all sessions

boto3.session.Session.remove_resource_decorator(service_name, resource_name, method_names)

Arguments:

  • service_name -- the boto3 name of the service to apply the decorator to.
  • resource_name -- the boto3 name of the resource of the service to apply the decorator to.
  • method_names -- one or more method names of the resource to apply the decorator to. Single names can be a string, while multiple names should be a list/tuple/set

boto3 convienence methods

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(...).

Example of decorating create_bucket() on a single boto3 session

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')

View more examples in the project documentation directory.

Metadata

Release files for botoinator 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for botoinator 0.0.6
File Size Uploaded Provenance Actions
botoinator-0.0.6.tar.gz 4.3 kB Without provenance Details for botoinator-0.0.6.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for botoinator 0.0.6
File Interpreter ABI Platform Actions
botoinator-0.0.6-py2.py3-none-any.whl Python 2, Python 3 none any Details for botoinator-0.0.6-py2.py3-none-any.whl

Total release size: 12.9 kB

Release files / botoinator-0.0.6.tar.gz

Download URL botoinator-0.0.6.tar.gz
Size 4.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9794ccf955d167719345436b85bf8b34242278a522f85e96e30c4724cd4fcc2b
BLAKE2b-256 checksum
How to use checksums
828145ea71b2978f75b1c6ba85881257ee407b1b35fd5bc54d492ee2031ca9b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.8.0 tqdm/4.46.1 CPython/3.7.7

Release files / botoinator-0.0.6-py2.py3-none-any.whl

Download URL botoinator-0.0.6-py2.py3-none-any.whl
Size 8.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
34ff9910289a5244325d1e6c9f03419a334feb9bb569493ff87fda4da831d521
BLAKE2b-256 checksum
How to use checksums
6f41cb1692ffe669c02cd92a11419f58bfe834c74bd8272859b767c8333d4b8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.8.0 tqdm/4.46.1 CPython/3.7.7

Security for botoinator 0.0.6

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page