'Store a new item or completely replace an existing item
in Amazon DynamoDB.
:type item: :class:`boto.dynamodb.item.Item`
:param item: The Item to write to Amazon DynamoDB.
:type expected_value: dict
:param expected_value: A dictionary of name/value pairs that you expect.
This dictionary should have name/value pairs where the name
is the name of the attribute and the value is either the value
you are expecting or False if you expect the attribute not to
exist.
:type return_values: str
:param return_values: Controls the return of attribute
name-value pairs before then were changed.  Possible
values are: None or \'ALL_OLD\'. If \'ALL_OLD\' is
specified and the item is overwritten, the content
of the old item is returned.'

def put_item(self, item, expected_value=None, return_values=None):

    expected_value = self.dynamize_expected_value(expected_value)
    response = self.layer1.put_item(item.table.name, self.dynamize_item(item), expected_value, return_values, object_hook=self.dynamizer.decode)
    if ('ConsumedCapacityUnits' in response):
        item.consumed_units = response['ConsumedCapacityUnits']
    return response
