Release Date: April 20th, 2022

  • Fixed handling of timeout errors in httpx.


Release Date: February 14th, 2022

  • Fixed 503 errors from DynamoDB not being retried.
  • Fixed mypy type hint errors introduced in 22.2


Release Date: February 7th, 2022

  • Fixed a critical bug introduced in 22.2 where errors from DynamoDB were not correctly handled when retrying requests.


Release Date: February 3rd, 2022

Breaking Changes

HTTP Client Adaptor Interface

The HTTP Client Adaptor Interface has changed completely. This change should only affect users who implement their own adaptor or use the interface directly, for example when implementing a custom Credentials Loader.

Previously, the interface required the adaptor to be a class with two methods, one for GET and one for POST, with different semantics for both. Further, adaptors were required to handle DynamoDB errors themselves. This was confusing, led to issues with error handling and limited its use in Credential Loaders.

The new interface is a callable which takes a aiodynamo.http.types.Request and returns an awaitable aiodynamo.http.types.Response.

Both built-in adaptors still use the same interface for initialization, so no changes should be required by most users.

Retry and Throttling Unification

Previously, aiodynamo had two very similar types to handle retrying and client side throttling: aiodynamo.models.ThrottleConfig and aiodynamo.models.WaitConfig. These have been combined into aiodynamo.models.RetryConfig.

aiodynamo.models.ThrottleConfig was used to configure the aiodynamo.client.Client and if you used a custom configuration, you will need to replace it with the equivalent aiodynamo.models.RetryConfig implementation.

aiodynamo.models.WaitConfig was used in table-level operations such as aiodynamo.client.Client.create_table() along others to wait for the table operation to actually complete. If you used a custom wait configuration, you will need to replace it with the equivalent aiodynamo.models.RetryConfig implementation.

Credentials Loader Changes

The internal, undocumented method fetch_with_retry in aiodynamo.credentials.Credentials has been removed.



Release Date: December 20th, 2021

  • Breaking Change aiodynamo.expressions.F.set() no longer treats empty strings or empty bytes are removes.
  • aiodynamo.expressions.F now supports __eq__ and __repr__`
  • Added aiodynamo.errors.ResourceInUse


Release Date: November 16th, 2021


Release Date: October 7th, 2021

  • Added support for PAY_PER_REQUEST billing mode
  • Explicit typing imports to support static type checkers


Release Date: September 1st, 2021


Release Date: August 24th, 2021

  • Allow wider version range for httpx optional dependency


Release Date: July 30th, 2021

  • Improved performance of DynamoDB Item deserialization, by @stupoid


Release Date: June 16th, 2021


Release Date: November 30th, 2020


Release Date: October 15th, 2020


Release Date: October 13th, 2020


Release Date: May 22nd, 2020

  • Removed special handling of empty strings, as DynamoDB now supports empty strings for non-key, non-index fields. Detection of empty strings is handled by the server now and will raise a aiodynamo.errors.ValidationError.
  • Retry API calls on internal DynamoDB errors.


Release Date: April 22nd, 2020

  • Fixed handling of missing credentials


Release Date: April 15th, 2020


Release Date: April 13th, 2020

  • Fixed put_item and delete_item with a condition which does not carry any values.
  • Wrap underlying HTTP client errors, such as connection issues, so networking issues during requests are retried.


Release Date: April 3rd, 2020

  • Fixed scan with a projection but no filter_expression.
  • Fixed logs leaking session tokens (request sending) and keys (metadata fetch).


Release Date: March 31st, 2020

  • Added TTL support
  • Added support for pluggable HTTP clients. Built in support for httpx and aiohttp.
  • Added custom client implementation.
  • Added custom credentials loaders, with support for custom credential loaders.
  • Fixed a typo in delete_item
  • Improved item deserialization performance
  • Improved overall client performance, especially for query, scan and count, which are now up to twice as fast.
  • Changed condition, key condition and filter expression APIs to not rely on boto3.
  • Moved aiodynamo.models.F to aiodynamo.expressions.F.
  • Removed boto3 dependency
  • Removed botocore dependency
  • Removed aiobotocore dependency


Release Date: September 6th, 2019

  • Fixed bug in UpdateExpression encoder incorrectly encoding booleans as integers or vice versa.


Release Date: March 4th, 2019

  • Initial public release