code: def put_attributes(self, item_name, attributes,
                         replace=True, expected_value=None):
          
          return self.connection.put_attributes(self, item_name, attributes,
                                                replace, expected_value)
docs: Store attributes for a given item.
  
          :type item_name: string
          :param item_name: The name of the item whose attributes are being stored.
  
          :type attribute_names: dict or dict-like object
          :param attribute_names: The name/value pairs to store as attributes
  
          :type expected_value: list
          :param expected_value: If supplied, this is a list or tuple consisting
              of a single attribute name and expected value. The list can be 
              of the form:
  
               * ['name', 'value']
  
              In which case the call will first verify that the attribute 
              "name" of this item has a value of "value".  If it does, the delete
              will proceed, otherwise a ConditionalCheckFailed error will be 
              returned. The list can also be of the form:
              
               * ['name', True|False]
              
              which will simply check for the existence (True) or non-existence 
              (False) of the attribute.
  
          :type replace: bool
          :param replace: Whether the attribute values passed in will replace
                          existing values or will be added as addition values.
                          Defaults to True.
  
          :rtype: bool
          :return: True if successful