docs: def put_item(self, table_name, item,
                   condition_expression=None,
                   expression_attribute_names=None,
                   expression_attribute_values=None,
                   return_consumed_capacity=None,
                   return_item_collection_metrics=None,
                   return_values=None):
          """Invoke the `PutItem`_ function, creating a new item, or replaces an
          old item with a new item. If an item that has the same primary key as
          the new item already exists in the specified table, the new item
          completely replaces the existing item. You can perform a conditional
          put operation (add a new item if one with the specified primary key
          doesn't exist), or replace an existing item if it has certain attribute
          values.
  
          For more information about using this API, see Working with Items in
          the Amazon DynamoDB Developer Guide.
  
          :param str table_name: The table to put the item to
          :param dict item: A map of attribute name/value pairs, one for each
              attribute. Only the primary key attributes are required; you can
              optionally provide other attribute name-value pairs for the item.
  
              You must provide all of the attributes for the primary key. For
              example, with a simple primary key, you only need to provide a
              value for the partition key. For a composite primary key, you must
              provide both values for both the partition key and the sort key.
  
              If you specify any attributes that are part of an index key, then
              the data types for those attributes must match those of the schema
              in the table's attribute definition.
          :param str condition_expression: A condition that must be satisfied in
              order for a conditional *PutItem* operation to succeed. See the
              `AWS documentation for ConditionExpression <http://docs.aws.amazon.
              com/amazondynamodb/latest/APIReference/API_PutItem.html#DDB-Put
              Item-request-ConditionExpression>`_ for more information.
          :param dict expression_attribute_names: One or more substitution tokens
              for attribute names in an expression. See the `AWS documentation
              for ExpressionAttributeNames <http://docs.aws.amazon.com/amazon
              dynamodb/latest/APIReference/API_PutItem.html#DDB-PutItem-request-
              ExpressionAttributeNames>`_ for more information.
          :param dict expression_attribute_values: One or more values that can be
              substituted in an expression. See the `AWS documentation
              for ExpressionAttributeValues <http://docs.aws.amazon.com/amazon
              dynamodb/latest/APIReference/API_PutItem.html#DDB-PutItem-request-
              ExpressionAttributeValues>`_ for more information.
          :param str return_consumed_capacity: Determines the level of detail
              about provisioned throughput consumption that is returned in the
              response. Should be ``None`` or one of ``INDEXES`` or ``TOTAL``
          :param str return_item_collection_metrics: Determines whether item
              collection metrics are returned.
          :param str return_values: Use ``ReturnValues`` if you want to get the
              item attributes as they appeared before they were updated with the
              ``PutItem`` request.
          :rtype: tornado.concurrent.Future
  
          .. _PutItem: http://docs.aws.amazon.com/amazondynamodb/
             latest/APIReference/API_PutItem.html
  
          """
          payload = {'TableName': table_name, 'Item': utils.marshall(item)}
          if condition_expression:
              payload['ConditionExpression'] = condition_expression
          if expression_attribute_names:
              payload['ExpressionAttributeNames'] = expression_attribute_names
          if expression_attribute_values:
              payload['ExpressionAttributeValues'] = expression_attribute_values
          if return_consumed_capacity:
              payload['ReturnConsumedCapacity'] = return_consumed_capacity
          if return_item_collection_metrics:
              payload['ReturnItemCollectionMetrics'] = 'SIZE'
          if return_values:
              _validate_return_values(return_values)
              payload['ReturnValues'] = return_values
          return self.execute('PutItem', payload)