'Retrieve attributes for a given item in a domain.
:type domain_or_name: string or :class:`boto.sdb.domain.Domain` object.
:param domain_or_name: Either the name of a domain or a Domain object
:type item_name: string
:param item_name: The name of the item whose attributes are
being retrieved.
:type attribute_names: string or list of strings
:param attribute_names: An attribute name or list of attribute names.
This parameter is optional.  If not supplied, all attributes will
be retrieved for the item.
:type consistent_read: bool
:param consistent_read: When set to true, ensures that the most recent
data is returned.
:type item: :class:`boto.sdb.item.Item`
:keyword item: Instead of instantiating a new Item object, you may
specify one to update.
:rtype: :class:`boto.sdb.item.Item`
:return: An Item with the requested attribute name/values set on it'

def get_attributes(self, domain_or_name, item_name, attribute_names=None, consistent_read=False, item=None):

    (domain, domain_name) = self.get_domain_and_name(domain_or_name)
    params = {'DomainName': domain_name, 'ItemName': item_name}
    if consistent_read:
        params['ConsistentRead'] = 'true'
    if attribute_names:
        if (not isinstance(attribute_names, list)):
            attribute_names = [attribute_names]
        self.build_list_params(params, attribute_names, 'AttributeName')
    response = self.make_request('GetAttributes', params)
    body = response.read()
    if (response.status == 200):
        if (item is None):
            item = self.item_cls(domain, item_name)
        h = handler.XmlHandler(item, self)
        xml.sax.parseString(body, h)
        return item
    else:
        raise SDBResponseError(response.status, response.reason, body)
