A collection of tools to try and make AWS boto3 more pythonic
Project description
awspytools
##DynamoDBDataStore
This is a helper python package to make DynamoDB easier to work with.
To get started, import DynamoDBDatastore from awspytools:
from awspytools import DynamoDBDataStore
Initialize a store using the Table Name:
store = DynamoDBDataStore(table_name='DynamoDB Table Name')
By default, we assume the following hash, sort and index keys:
hash_key = 'PK'
sort_key = 'SK'
GSI1_HASH_KEY = 'GSI1PK'
GSI1_SORT_KEY = 'GSI1SK'
GSI2_HASH_KEY = 'GSI2PK'
GSI2_SORT_KEY = 'GSI2SK'
To override these values, you may define your store as follows:
store = DynamoDBDataStore(
table_name='DynamoDB Table Name',
hash_key='custom_hash',
sort_key='custom_sort',
use_default_index_keys=False
)
You may add custom Index keys as follows:
store.add_index_key('custom gsi 1')
or you may add many index keys as follows:
store.add_index_keys(['custom gsi 1 hash', 'custom gsi 1 sort'])
To get a document, do the following:
result = store.get_document(index=('hash_key', 'sort_key'), return_index=True)
If you specify:
return_index=False
The response object will not have the hash /sort key or GSI keys specified in the response.
To save a document, simple do:
store.save_document(
document={
"number": 1,
"hello": "world",
"foo": ['bar', 'spam'],
"foo": {
"spam": "eggs"
}
},
index=('hash_id', 'sort_id')
)
To get multiple documents, you need to provide a query. Note this paginates the result for you so all documents are returned!
query = {
'ExpressionAttributeNames': {'#PK': 'PK'},
'ExpressionAttributeValues': {':PK': {'S': 'hash_key'}},
'KeyConditionExpression': '#PK = :PK'
}
result = store.get_documents(query)
To delete a document: result = store.delete_document(index=('hash_key', 'sort_key'))
To perform a batch request, we have a wrapper for boto3's batch_write_item:
batch_request = store.batch_request(
request_items=[
{
"DeleteRequest": {...}, #As per boto3's parameter structure
"PutRequest": {...} #As per boto3's document structure parameter structure
}
]
)
To perform a transaction:
transaction_items = [
{
'Update': {
'Key': {
'PK': {'S': 'hash'},
'SK': {'S': 'sort'},
},
'UpdateExpression': 'SET some_key = :some_value',
'ExpressionAttributeValues': {
':some_value': {'S': 'hello world'},
},
'TableName': store.table_name
}
},
{
'Update': {
'Key': {
'PK': {'S': 'hash'},
'SK': {'S': 'sort'},
},
'UpdateExpression': 'SET new_key = :new_value',
'ExpressionAttributeValues': {
':new_value': {'S': 'hello world'},
},
'TableName': store.table_name
}
}
]
store.transaction_write(transaction_items, "some_unique_id")
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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file awspytools-0.1.1.tar.gz.
File metadata
- Download URL: awspytools-0.1.1.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
496a4e19943329781c74c3ff5260c6f3c4d658e015ee57882357505481bc9f2d
|
|
| MD5 |
6d2a1c66386afae73f3f1d690b32372d
|
|
| BLAKE2b-256 |
84fbfae418e6a13f335a6b31cb0bdcaf869be0bc78875052ac1c7d0e92ae9c3b
|
File details
Details for the file awspytools-0.1.1-py3-none-any.whl.
File metadata
- Download URL: awspytools-0.1.1-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a196cd312aa08d68d619b3a6dd410e9d0ffeed1c36a4d6ff67977cb1607856f
|
|
| MD5 |
c0f9c74a007748c68293eff29a7cd01b
|
|
| BLAKE2b-256 |
4a5c7f501a9ee501d1a541435cff76f29b587c7e6792eb11932602855e17c499
|