PutRequest

A PutRequest is used to perform a put_item transaction on DynamoDB. It is required that the Item attribute includes the entire primary key (including the sort key if it is defined on the table)

https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html

class cerami.request.PutRequest(client, tablename='', request_attributes=None, reconstructor=None)

A class to perform the put_item request

__init__(client, tablename='', request_attributes=None, reconstructor=None)

constructor for base request

Parameters
  • client – A boto3.client('dynamodb')

  • tablename – the name of the table to perform the request on

  • request_attributes

    a dict of SearchAttribute objects whose keys represent options that can be passed to client upon execution For example, it may include a FilterExpression key whose value is a SearchAttribute that resolves to a string of filters. This is typically None but can be used to manually build requests:

    Parent.scan.filter(Parent.name == 'Mom').project(Parent.name)
    # The search_attributes can be manually specified
    ScanRequest(client=client, tablename='parents', search_attributes={
        'FilterExpression': SearchAttribute('name = Mom'),
        'ProjectionExpression': SearchAttribute('name'),
    })
    

  • reconstructor – a Reconstructor object

add_attribute(attr_class, name, value)

add a search attribute to a to the request_attributes dict

All search attributes must be unique keys. When the key already exists, it will update that value by calling add(). Depending on the attr_class, this can overwrite, append, change the value of the existing search attribute.

Parameters
  • attr_class – a SearchAttribute class

  • name – the name of the attribute

  • value – the value that will be added to the SearchAttribute

For example:

Person.scan.limit(10)
# or ...
Person.scan.add_attribute(SearchAttribute, 'Limit', 10)
build()

build the dict used by dynamodb

Returns

a dict whose keys matching the keys of the request_attributes and whose values are string versions of each attribute

For example:

User.scan.filter(User.email == 'test@test.com').build()
{
    "TableName": "Users",
    "FilterExpression": "#__email = :_email_dpxqm",
    "ExpressionAttributeNames": {
        "#__email": "email"
    },
    "ExpressionAttributeValues": {
        ":_email_dpxqm": {
            "S": "test@test.com"
        }
    }
}
execute()

perform the put_item request

Returns

a SaveResponse object built from the put_item response

For example:

Person.put.item({"email": {"S": "test@test.com"}}).execute()
item(item_dict)

add the item_dict to the search_attributes

Adds the Item to the request_attributes dict

Parameters

item_dict – a dict mapped to the DynamoDB format. Typically this is done through Model.as_item()

Returns

the caller of the method. This allows for chaining

For example:

person = Person(email="person@test.com")
Person.put.item(person.as_item())
Person.put.item({"email": {"S": "test@test.com"}).build()
{
    "TableName": "people",
    "Item": {
        "email": {
            "S": "test@test.com"
        }
    }
}