Introduction
Pynamodb Utils is a collection of small helper functions, utilities and classes which make common patterns easier. It helped me make my job easier in the past.
Examples are:
- Models with automatic
updated_at,created_atanddeleted_atfields - Attributes for enums and dynamic mappings
- Class with methods that allow to generate from JSON/dict query/scan conditions
To install:
Run pip install pynamodb-utils or execute python setup.py install in the source directory
Example of Usage
To setup pynamodb models with authomaticly generated timestamps and useful functions allowing serialization of scan conditions from JSON input from API.
from datetime import timezone, datetime
from pynamodb.attributes import UnicodeAttribute
from pynamodb_utils import DynamicMapAttribute, AsDictModel,
JSONQueryModel, TimestampedModel
class CategoryEnum(enum.Enum):
finance = enum.auto()
politics = enum.auto()
class PostCategoryCreatedAtGSI(GlobalSecondaryIndex):
category = EnumAttribute(hash_key=True, enum=CategoryEnum)
created_at = UTCDateTimeAttribute(range_key=True)
class Meta:
index_name = "example-index-name"
projection = AllProjection
class Post(AsDictModel, JSONQueryModel, TimestampedModel):
name = UnicodeAttribute(hash_key=True)
sub_name = UnicodeAttribute(range_key=True)
category = EnumAttribute(enum=CategoryEnum, default=CategoryEnum.finance)
content = UnicodeAttribute()
tags = DynamicMapAttribute(default={})
category_created_at_gsi = PostCategoryCreatedAtGSI()
class Meta:
table_name = 'example-table-name'
TZINFO = timezone.utc
Post.create_table(read_capacity_units=10, write_capacity_units=10)
post = Post(
name='A weekly news.',
sub_name='Shocking revelations',
content='Last week took place...',
category=CategoryEnum.finance,
tags={
"type": "news",
"topics": ["stock exchange", "NYSE"]
}
)
post.save()
condition = Post.make_index_query(
query={
"created_at__lte": str(datetime.now()),
"sub_name__exists": None,
"category__equals": "finance",
"OR": {"tags.type__equals": "news", "tags.topics__contains": ["NYSE"]},
}
) # class method executes query on the most optimal index
print(next(results).as_dict())
That lines of code should result with following output
{
'name': 'A weekly news.',
'created_at': '2019-01-01 00:00:00+00:00',
'updated_at': '2019-01-01 00:00:00+00:00',
'deleted_at': None,
'content': 'Last week took place...',
'tags': {
'type': 'news',
'topics': ['stock exchange', 'NYSE']
}
}
Links
Metadata
Release files for pynamodb-utils 1.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pynamodb_utils-1.5.2.tar.gz | 11.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pynamodb_utils-1.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.5 kB
Release files / pynamodb_utils-1.5.2.tar.gz
| Download URL | pynamodb_utils-1.5.2.tar.gz |
|---|---|
| Size | 11.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d6641ccc7f0b6050c05fa51860c93ec26a360a9efad54688169142a31ea18c3
|
|
BLAKE2b-256 checksum How to use checksums |
3c1376132884194b460c1760309679b29f98115333e75b94a0aaab72889f04dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / pynamodb_utils-1.5.2-py3-none-any.whl
| Download URL | pynamodb_utils-1.5.2-py3-none-any.whl |
|---|---|
| Size | 12.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
99aaad207d1d056a896963788dd1fb32a2d033417a1c545f7ab69720ce69546b
|
|
BLAKE2b-256 checksum How to use checksums |
5f0a801d3062e6cabea25c509cf7af1fdf878a9f923641d097da4a894da59f14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|