Commits

Sebastian Rahlf committed c7769c9 Merge

Automated merge.

Comments (0)

Files changed (80)

 
 *.pyc
 *.pyo
+*.orig

amazonproduct/api.py

 from amazonproduct.utils import running_on_gae, REQUIRED_KEYS
 from amazonproduct.processors import ITEMS_PAGINATOR, BaseProcessor
 
-
-# first processors successfully imported is used
-PROCESSORS = [
-    'amazonproduct.processors.objectify.Processor',
-    'amazonproduct.processors.etree.Processor',
-    'amazonproduct.processors.minidom.Processor',
-]
-
-
 USER_AGENT = ('python-amazon-product-api/%s '
     '+http://pypi.python.org/pypi/python-amazon-product-api/' % VERSION)
 
     TIMEOUT = 5 #: timeout in seconds
 
     def __init__(self, access_key_id=None, secret_access_key=None, locale=None,
-                 associate_tag=None, processor=None):
+                 associate_tag=None, processor='amazonproduct.processors.objectify'):
         """
         .. versionchanged:: 0.2.6
            Passing parameters ``access_key_id``, ``secret_access_key`` and
         :param secret_access_key: AWS secret key (deprecated).
         :param associate_tag: Amazon Associates tracking id (deprecated).
         :param locale: localise results by using one value from ``LOCALES``.
-        :param processor: result processing function (``None`` if unsure).
+        :param processor: module containing result processing functions. Look
+        in package ``amazonproduct.processors`` for values.
         """
         if not (access_key_id is None and secret_access_key is None
         and associate_tag is None):
         except KeyError:
             raise UnknownLocale(locale)
 
-
         # GAE does not allow timeouts to be specified manually
         if not running_on_gae():
             socket.setdefaulttimeout(self.TIMEOUT)
 
+        # instantiate processor class
+        self._processor_module = processor
+        self.processor = load_class('%s.Processor' % processor)()
+
         self.last_call = datetime(1970, 1, 1)
-        self.debug = 0 # set to 1 if you want to see HTTP headers
-
-        if isinstance(processor, BaseProcessor):
-            self.processor = processor
-        else:
-            self.processor = self._load_processor(processor)()
-
-    @staticmethod
-    def _load_processor(*names):
-        """
-        Loads result processor. If no processor is given (``None``), the first
-        one is taken that can be successfully imported from the list of default
-        processors (:const:`PROCESSORS`).
-        """
-        if len(names) == 0 or names[0] is None:
-            names = PROCESSORS
-        for name in names:
-            # processor was given as string
-            if isinstance(name, (str, unicode)):
-                try:
-                    pclass = load_class(name)
-                    if issubclass(pclass, BaseProcessor):
-                        return pclass
-                except ImportError:
-                    continue
-            # processor was given as class
-            elif isinstance(name, type) and issubclass(name, BaseProcessor):
-                return name
-        # nothing successfully loaded
-        raise ImportError('No processor class could be imported!')
+        self.debug = 0  # set to 1 if you want to see HTTP headers
 
     def __repr__(self):
-        return '<API(%s/%s) at %s>' % (self.VERSION, self.locale, hex(id(self)))
+        return '<API(%s/%s/%s) at %s>' % (
+            self.VERSION, self.locale, self._processor_module, hex(id(self)))
 
     def _build_url(self, **qargs):
         """
 
         """
         try:
-            paginate = params.pop('paginate', False)
+            paginate = params.pop('paginate', None)
             operators = {
                 'Operation': 'ItemLookup',
                 'ItemId': ','.join(ids),
             }
             operators.update(params)
 
-            paginator = self.processor.load_paginator(paginate)
+            paginator = self.processor.paginators.get(paginate)
             if paginator is not None:
                 # Amazon limits returned pages to max 10 pages max
                 if operators.get('limit', 10) > 10:
             }
             operators.update(params)
 
-            paginator = self.processor.load_paginator(paginate)
+            paginator = self.processor.paginators.get(paginate)
             if paginator is not None:
                 # Amazon limits returned pages to max 5
                 # if SearchIndex "All" is used!

amazonproduct/processors/__init__.py

     :class:`BaseProcessor` and override the methods.
     """
 
+    #: contains mapping of paginator types (e.g ``ITEMS_PAGINATOR``) to the
+    #: appropriate subclass of :class:`BaseResultPaginator`
+    paginators = {}
+
     def parse(self, fp):
         """
         Parses a file-like XML source returned from Amazon. This is the most
 
         :return: parsed XML node
         """
-        raise NotImplementedError # pragma: no cover
-
-    @classmethod
-    def load_paginator(cls, paginator_type):
-        """
-        Returns a result paginator for operations like ItemSearch.
-
-        :param paginator_type: will be one of :const:`ITEMS_PAGINATOR` or
-          :const:`RELATEDITEMS_PAGINATOR`.
-        :return: a subclass of :class:`BaseResultPaginator`
-        """
-        return None # pragma: no cover
+        raise NotImplementedError  # pragma: no cover
 
     @classmethod
     def parse_cart(cls, node):
         :param node: parsed XML node (as returned by :meth:`parse`).
         :return: a :class:`~amazonproduct.contrib.Cart` instance
         """
-        raise NotImplementedError # pragma: no cover
+        raise NotImplementedError  # pragma: no cover
 
 
 class BaseResultPaginator (object):

amazonproduct/processors/_lxml.py

+
+"""
+XPath based paginators for lxml.etree and lxml.objectify based processors.
+"""
+
+from amazonproduct.processors import BaseResultPaginator
+
+
+class XPathPaginator (BaseResultPaginator):
+
+    """
+    Result paginator using XPath expressions to extract page and result
+    information from XML.
+    """
+
+    counter = current_page_xpath = total_pages_xpath = total_results_xpath = None
+
+    def paginator_data(self, root):
+        nspace = root.nsmap.get(None, '')
+        def fetch_value(xpath, default):
+            try:
+                node = root.xpath(xpath, namespaces={'aws': nspace})[0]
+                return int(node.text)
+            except (IndexError, ValueError):
+                return default
+        return map(lambda a: fetch_value(*a), [
+            (self.current_page_xpath, 1),
+            (self.total_pages_xpath, 0),
+            (self.total_results_xpath, 0)
+        ])
+
+    def iterate(self, root):
+        nspace = root.nsmap.get(None, '')
+        return root.xpath(self.items, namespaces={'aws': nspace})
+
+
+class SearchPaginator (XPathPaginator):
+
+    counter = 'ItemPage'
+    current_page_xpath = '//aws:Items/aws:Request/aws:ItemSearchRequest/aws:ItemPage'
+    total_pages_xpath = '//aws:Items/aws:TotalPages'
+    total_results_xpath = '//aws:Items/aws:TotalResults'
+    items = '//aws:Items/aws:Item'
+
+
+class RelatedItemsPaginator (XPathPaginator):
+
+    """
+    XPath paginator which will work for both :meth:`item_lookup` and
+    :meth:`item_search`. The corresponding paths are::
+
+        ItemLookupResponse
+          Items
+            Item
+              RelatedItems
+                RelatedItemPage (counter)
+                RelatedItemCount (total_results)
+                RelatedItemPageCount (total_pages)
+
+        ItemSearchResponse
+          Request
+            ItemSearchRequest
+              ItemPage (counter)
+          Items
+            TotalResults (total_results)
+            TotalPages (total_pages)
+
+    """
+    counter = 'RelatedItemPage'
+    current_page_xpath = '//aws:RelatedItemPage'
+    total_pages_xpath = '//aws:RelatedItems/aws:RelatedItemPageCount'
+    total_results_xpath = '//aws:RelatedItems/aws:RelatedItemCount'
+    items = '//aws:RelatedItems/aws:RelatedItem/aws:Item'
+
+

amazonproduct/processors/elementtree.py

+# Copyright (C) 2009-2013 Sebastian Rahlf <basti at redtoad dot de>
+#
+# This program is release under the BSD License. You can find the full text of
+# the license in the LICENSE file.
+
+import re
+from amazonproduct.contrib.cart import Cart, Item
+
+from amazonproduct.errors import AWSError
+from amazonproduct.processors import BaseResultPaginator, BaseProcessor
+from amazonproduct.processors import ITEMS_PAGINATOR, RELATEDITEMS_PAGINATOR
+from amazonproduct.utils import import_module
+
+
+implementations = [
+    'xml.etree.cElementTree',
+    'xml.etree.ElementTree',
+    'cElementTree',
+    'elementtree.ElementTree',
+]
+
+
+def _load_elementtree_module(*modules):
+    """
+    Returns the first importable ElementTree implementation from a list of
+    modules. If ``modules`` is omitted :data:`implementations` is used.
+    """
+    if not modules:
+        modules = implementations
+    for mod in modules:
+        try:
+            return import_module(mod)
+        except ImportError:
+            pass
+    raise ImportError(
+        "Couldn't find any of the ElementTree implementations in %s!" % (
+            list(modules), ))
+
+
+
+_nsreg = re.compile('^({.+?})')
+def extract_nspace(element):
+    """
+    Extracts namespace from XML element. If no namespace is found, ``''``
+    (empty string) is returned.
+    """
+    m = _nsreg.search(element.tag)
+    if m: return m.group(1)
+    return ''
+
+
+class XPathPaginator (BaseResultPaginator):
+
+    """
+    Result paginator using XPath expressions to extract page and result
+    information from XML.
+    """
+
+    counter = current_page_xpath = total_pages_xpath = total_results_xpath = None
+
+    def paginator_data(self, root):
+        nspace = extract_nspace(root)
+        def fetch_value(xpath, default):
+            try:
+                path = xpath.replace('{}', nspace)
+                # ElementTree does not seem to support XPath expressions to
+                # be combined with | separator!
+                for expr in path.split('|'):
+                    node = root.findtext(expr)
+                    if node is not None:
+                        return int(node)
+                return default
+            except (ValueError, TypeError):
+                return default
+        return map(lambda a: fetch_value(*a), [
+            (self.current_page_xpath, 1),
+            (self.total_pages_xpath, 0),
+            (self.total_results_xpath, 0)
+        ])
+
+    def iterate(self, root):
+        nspace = extract_nspace(root)
+        xpath = self.items.replace('{}', nspace)
+        return root.findall(xpath)
+
+
+class ItemPaginator (XPathPaginator):
+
+    counter = 'ItemPage'
+    current_page_xpath = './/{}Items/{}Request/{}ItemSearchRequest/{}ItemPage'
+    total_pages_xpath = './/{}Items/{}TotalPages'
+    total_results_xpath = './/{}Items/{}TotalResults'
+    items = './/{}Items/{}Item'
+
+
+class RelatedItemsPaginator (XPathPaginator):
+
+    counter = 'RelatedItemPage'
+    current_page_xpath = './/{}RelatedItemPage'
+    total_pages_xpath = './/{}RelatedItems/{}RelatedItemPageCount'
+    total_results_xpath = './/{}RelatedItems/{}RelatedItemCount'
+    items = './/{}RelatedItems/{}RelatedItem/{}Item'
+
+
+class Processor (BaseProcessor):
+
+    """
+    Result processor using ElementTree.
+
+    The first implementation of ElementTree which can be successfully imported
+    will be used. Order of import is:
+
+    * xml.etree.cElementTree
+    * xml.etree.ElementTree
+    * cElementTree
+    * elementtree.ElementTree
+
+    """
+
+    paginators = {
+        ITEMS_PAGINATOR: ItemPaginator,
+        RELATEDITEMS_PAGINATOR: RelatedItemsPaginator,
+    }
+
+    def __init__(self, *args, **kwargs):
+        # processor can be told which etree module to use in order to have
+        # multiple processors each using a different implementation
+        etree_mod = kwargs.pop('module', None)
+        try:
+            if etree_mod:
+                self.etree = _load_elementtree_module(etree_mod)
+            else:
+                self.etree = _load_elementtree_module()
+        except (AttributeError, ImportError):
+            self.etree = None
+
+    def parse(self, fp):
+        root = self.etree.parse(fp).getroot()
+        ns = extract_nspace(root)
+        errors = root.findall('.//%sError' % ns)
+        for error in errors:
+            raise AWSError(
+                code=error.findtext('./%sCode' % ns),
+                msg=error.findtext('./%sMessage' % ns),
+                xml=root)
+        return root
+
+    def __repr__(self): # pragma: no cover
+        return '<%s using %s at %s>' % (
+            self.__class__.__name__, getattr(self.etree, '__name__', '???'), hex(id(self)))
+
+    @classmethod
+    def parse_cart(cls, node):
+        """
+        Returns an instance of :class:`amazonproduct.contrib.Cart` based on
+        information extracted from ``node``.
+        """
+        _nspace = extract_nspace(node)
+        _xpath = lambda path: path.replace('{}', _nspace)
+        root = node.find(_xpath('.//{}Cart'))
+
+
+        cart = Cart()
+        cart.cart_id = root.findtext(_xpath('./{}CartId'))
+        cart.hmac = root.findtext(_xpath('./{}HMAC'))
+        cart.url = root.findtext(_xpath('./{}PurchaseURL'))
+
+        def parse_item(item_node):
+            item = Item()
+            item.item_id = item_node.findtext(_xpath('./{}CartItemId'))
+            item.asin = item_node.findtext(_xpath('./{}ASIN'))
+            item.seller = item_node.findtext(_xpath('./{}SellerNickname'))
+            item.quantity = int(item_node.findtext(_xpath('./{}Quantity')))
+            item.title = item_node.findtext(_xpath('./{}Title'))
+            item.product_group = item_node.findtext(_xpath('./{}ProductGroup'))
+            item.price = (
+                int(item_node.findtext(_xpath('./{}Price/{}Amount'))),
+                item_node.findtext(_xpath('./{}Price/{}CurrencyCode')))
+            item.total = (
+                int(item_node.findtext(_xpath('./{}ItemTotal/{}Amount'))),
+                item_node.findtext(_xpath('./{}ItemTotal/{}CurrencyCode')))
+            return item
+
+        try:
+            for item_node in root.findall(_xpath('./{}CartItems/{}CartItem')):
+                cart.items.append(parse_item(item_node))
+            cart.subtotal = (node.SubTotal.Amount, node.SubTotal.CurrencyCode)
+        except AttributeError:
+            cart.subtotal = (None, None)
+        return cart
+
+

amazonproduct/processors/etree.py

 # This program is release under the BSD License. You can find the full text of
 # the license in the LICENSE file.
 
-import re
+from lxml import etree
+
 from amazonproduct.contrib.cart import Cart, Item
+from amazonproduct.errors import AWSError
+from amazonproduct.processors import BaseProcessor
+from amazonproduct.processors import ITEMS_PAGINATOR, RELATEDITEMS_PAGINATOR
 
-from amazonproduct.errors import AWSError
-from amazonproduct.processors import BaseResultPaginator, BaseProcessor
-from amazonproduct.processors import ITEMS_PAGINATOR, RELATEDITEMS_PAGINATOR
-from amazonproduct.utils import import_module
-
-
-implementations = [
-    'lxml.etree',
-    'xml.etree.cElementTree',
-    'xml.etree.ElementTree',
-    'cElementTree',
-    'elementtree.ElementTree',
-]
-
-def load_elementtree_module(*modules):
-    """
-    Returns the first importable ElementTree implementation from a list of
-    modules. If ``modules`` is omitted :data:`implementations` is used.
-    """
-    if not modules:
-        modules = implementations
-    for mod in modules:
-        try:
-            return import_module(mod)
-        except ImportError:
-            pass
-    raise ImportError(
-        "Couldn't find any of the ElementTree implementations in %s!" % (
-            list(modules), ))
-
-
-
-_nsreg = re.compile('^({.+?})')
-def extract_nspace(element):
-    """
-    Extracts namespace from XML element. If no namespace is found, ``''``
-    (empty string) is returned.
-    """
-    m = _nsreg.search(element.tag)
-    if m: return m.group(1)
-    return ''
+from amazonproduct.processors._lxml import SearchPaginator
+from amazonproduct.processors._lxml import RelatedItemsPaginator
 
 
 class Processor (BaseProcessor):
 
     """
-    Result processor using ElementTree.
-
-    The first implementation of ElementTree which can be successfully imported
-    will be used. Order of import is:
-
-    * lxml.etree
-    * xml.etree.cElementTree
-    * xml.etree.ElementTree
-    * cElementTree
-    * elementtree.ElementTree
-
+    Result processor using lxml.etree.
     """
 
-    def __init__(self, *args, **kwargs):
-        # processor can be told which etree module to use in order to have
-        # multiple processors each using a different implementation
-        etree_mod = kwargs.pop('module', None)
-        try:
-            if etree_mod:
-                self.etree = load_elementtree_module(etree_mod)
-            else:
-                self.etree = load_elementtree_module()
-        except (AttributeError, ImportError):
-            self.etree = None
+    paginators = {
+        ITEMS_PAGINATOR: SearchPaginator,
+        RELATEDITEMS_PAGINATOR: RelatedItemsPaginator,
+    }
 
     def parse(self, fp):
-        root = self.etree.parse(fp).getroot()
-        ns = extract_nspace(root)
-        errors = root.findall('.//%sError' % ns)
+        root = etree.parse(fp).getroot()
+        nspace = {'aws': root.nsmap.get(None, '')}
+        errors = root.xpath('//aws:Error', namespaces=nspace)
         for error in errors:
-            raise AWSError(code=error.findtext('./%sCode' % ns),
-                msg=error.findtext('./%sMessage' % ns), xml=root)
+            raise AWSError(
+                code=error.findtext('./aws:Code', namespaces=nspace),
+                msg=error.findtext('./aws:Message', namespaces=nspace),
+                xml=root)
         return root
 
-    def __repr__(self): # pragma: no cover
+    def __repr__(self):  # pragma: no cover
         return '<%s using %s at %s>' % (
             self.__class__.__name__, getattr(self.etree, '__name__', '???'), hex(id(self)))
 
         Returns an instance of :class:`amazonproduct.contrib.Cart` based on
         information extracted from ``node``.
         """
-        _nspace = extract_nspace(node)
-        _xpath = lambda path: path.replace('{}', _nspace)
-        root = node.find(_xpath('.//{}Cart'))
-
+        nspace = {'aws': node.nsmap.get(None, '')}
+        root = node.find('.//aws:Cart', namespaces=nspace)
+        _extract = lambda node, xpath: node.findtext(xpath, namespaces=nspace)
 
         cart = Cart()
-        cart.cart_id = root.findtext(_xpath('./{}CartId'))
-        cart.hmac = root.findtext(_xpath('./{}HMAC'))
-        cart.url = root.findtext(_xpath('./{}PurchaseURL'))
+        cart.cart_id = _extract(root, './aws:CartId')
+        cart.hmac = _extract(root, './aws:HMAC')
+        cart.url = _extract(root, './aws:PurchaseURL')
 
         def parse_item(item_node):
             item = Item()
-            item.item_id = item_node.findtext(_xpath('./{}CartItemId'))
-            item.asin = item_node.findtext(_xpath('./{}ASIN'))
-            item.seller = item_node.findtext(_xpath('./{}SellerNickname'))
-            item.quantity = int(item_node.findtext(_xpath('./{}Quantity')))
-            item.title = item_node.findtext(_xpath('./{}Title'))
-            item.product_group = item_node.findtext(_xpath('./{}ProductGroup'))
+            item.item_id = _extract(item_node, './aws:CartItemId')
+            item.asin = _extract(item_node, './aws:ASIN')
+            item.seller = _extract(item_node, './aws:SellerNickname')
+            item.quantity = int(_extract(item_node, './aws:Quantity'))
+            item.title = _extract(item_node, './aws:Title')
+            item.product_group = _extract(item_node, './aws:ProductGroup')
             item.price = (
-                int(item_node.findtext(_xpath('./{}Price/{}Amount'))),
-                item_node.findtext(_xpath('./{}Price/{}CurrencyCode')))
+                int(_extract(item_node, './aws:Price/aws:Amount')),
+                _extract(item_node, './aws:Price/aws:CurrencyCode'))
             item.total = (
-                int(item_node.findtext(_xpath('./{}ItemTotal/{}Amount'))),
-                item_node.findtext(_xpath('./{}ItemTotal/{}CurrencyCode')))
+                int(_extract(item_node, './aws:ItemTotal/aws:Amount')),
+                _extract(item_node, './aws:ItemTotal/aws:CurrencyCode'))
             return item
 
         try:
-            for item_node in root.findall(_xpath('./{}CartItems/{}CartItem')):
+            for item_node in root.findall('./aws:CartItems/aws:CartItem', namespaces=nspace):
                 cart.items.append(parse_item(item_node))
             cart.subtotal = (node.SubTotal.Amount, node.SubTotal.CurrencyCode)
         except AttributeError:
             cart.subtotal = (None, None)
         return cart
 
-    @classmethod
-    def load_paginator(cls, paginator_type):
-        try:
-            return {
-                ITEMS_PAGINATOR: ItemPaginator,
-                RELATEDITEMS_PAGINATOR: RelatedItemsPaginator,
-            }[paginator_type]
-        except KeyError:
-            return None
-
-
-class XPathPaginator (BaseResultPaginator):
-
-    """
-    Result paginator using XPath expressions to extract page and result
-    information from XML.
-    """
-
-    counter = current_page_xpath = total_pages_xpath = total_results_xpath = None
-
-    def paginator_data(self, root):
-        nspace = extract_nspace(root)
-        def fetch_value(xpath, default):
-            try:
-                path = xpath.replace('{}', nspace)
-                # ElementTree does not seem to support XPath expressions to
-                # be combined with | separator!
-                for expr in path.split('|'):
-                    node = root.findtext(expr)
-                    if node is not None:
-                        return int(node)
-                return default
-            except (ValueError, TypeError):
-                return default
-        return map(lambda a: fetch_value(*a), [
-            (self.current_page_xpath, 1),
-            (self.total_pages_xpath, 0),
-            (self.total_results_xpath, 0)
-        ])
-
-    def iterate(self, root):
-        nspace = extract_nspace(root)
-        xpath = self.items.replace('{}', nspace)
-        return root.findall(xpath)
-
-
-class ItemPaginator (XPathPaginator):
-
-    counter = 'ItemPage'
-    current_page_xpath = './/{}Items/{}Request/{}ItemSearchRequest/{}ItemPage'
-    total_pages_xpath = './/{}Items/{}TotalPages'
-    total_results_xpath = './/{}Items/{}TotalResults'
-    items = './/{}Items/{}Item'
-
-
-class RelatedItemsPaginator (XPathPaginator):
-
-    counter = 'RelatedItemPage'
-    current_page_xpath = './/{}RelatedItemPage'
-    total_pages_xpath = './/{}RelatedItems/{}RelatedItemPageCount'
-    total_results_xpath = './/{}RelatedItems/{}RelatedItemCount'
-    items = './/{}RelatedItems/{}RelatedItem/{}Item'

amazonproduct/processors/objectify.py

 
 from amazonproduct.contrib.cart import Cart, Item
 from amazonproduct.errors import AWSError
-from amazonproduct.processors import BaseResultPaginator, BaseProcessor
+from amazonproduct.processors import BaseProcessor
 from amazonproduct.processors import ITEMS_PAGINATOR, RELATEDITEMS_PAGINATOR
 
+from amazonproduct.processors._lxml import SearchPaginator
+from amazonproduct.processors._lxml import RelatedItemsPaginator
+
 
 class SelectiveClassLookup(etree.CustomElementClassLookup):
     """
 
     # pylint: disable-msg=R0903
 
+    paginators = {
+        ITEMS_PAGINATOR: SearchPaginator,
+        RELATEDITEMS_PAGINATOR: RelatedItemsPaginator,
+    }
+
     def __init__(self):
         self._parser = etree.XMLParser()
         lookup = SelectiveClassLookup()
 
         try:
             nspace = root.nsmap[None]
-            errors = root.xpath('//aws:Error', namespaces={'aws' : nspace})
+            errors = root.xpath('//aws:Error', namespaces={'aws': nspace})
         except KeyError:
             errors = root.xpath('//Error')
 
         for error in errors:
-            raise AWSError(code=error.Code.text,
-                msg=error.Message.text, xml=root)
+            raise AWSError(
+                code=error.Code.text,
+                msg=error.Message.text,
+                xml=root)
 
         return root
 
             cart.subtotal = None
         return cart
 
-    @classmethod
-    def load_paginator(cls, paginator_type):
-        try:
-            return {
-                ITEMS_PAGINATOR: SearchPaginator,
-                RELATEDITEMS_PAGINATOR: RelatedItemsPaginator,
-            }[paginator_type]
-        except KeyError:
-            return None
-
-
-class XPathPaginator (BaseResultPaginator):
-
-    """
-    Result paginator using lxml and XPath expressions to extract page and
-    result information from XML.
-    """
-
-    current_page_xpath = None
-    total_pages_xpath = None
-    total_results_xpath = None
-
-    def paginator_data(self, root):
-        nspace = root.nsmap.get(None, '')
-        def fetch_value(xpath, default):
-            try:
-                return root.xpath(xpath, namespaces={'aws' : nspace})[0]
-            except AttributeError:
-                # node has no attribute pyval so it better be a number
-                return int(root)
-            except IndexError:
-                return default
-        return map(lambda a: fetch_value(*a), [
-            (self.current_page_xpath, 1),
-            (self.total_pages_xpath, 0),
-            (self.total_results_xpath, 0)
-        ])
-
-    def iterate(self, root):
-        nspace = root.nsmap.get(None, '')
-        return root.xpath(self.items, namespaces={'aws' : nspace})
-
-
-class SearchPaginator (XPathPaginator):
-
-    counter = 'ItemPage'
-    current_page_xpath = '//aws:Items/aws:Request/aws:ItemSearchRequest/aws:ItemPage'
-    total_pages_xpath = '//aws:Items/aws:TotalPages'
-    total_results_xpath = '//aws:Items/aws:TotalResults'
-    items = '//aws:Items/aws:Item'
-
-
-class RelatedItemsPaginator (XPathPaginator):
-
-    """
-    XPath paginator which will work for both :meth:`item_lookup` and
-    :meth:`item_search`. The corresponding paths are::
-
-        ItemLookupResponse
-          Items
-            Item
-              RelatedItems
-                RelatedItemPage (counter)
-                RelatedItemCount (total_results)
-                RelatedItemPageCount (total_pages)
-
-        ItemSearchResponse
-          Request
-            ItemSearchRequest
-              ItemPage (counter)
-          Items
-            TotalResults (total_results)
-            TotalPages (total_pages)
-
-    """
-    counter = 'RelatedItemPage'
-    current_page_xpath = '//aws:RelatedItemPage'
-    total_pages_xpath = '//aws:RelatedItems/aws:RelatedItemPageCount'
-    total_results_xpath = '//aws:RelatedItems/aws:RelatedItemCount'
-    items = '//aws:RelatedItems/aws:RelatedItem/aws:Item'
-

tests/2011-08-01/CartAdd-es-adding-empty-items-fails-3.xml

 <CartAddResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>1PGT82360SHEVX2JFHPP</RequestId>
+    <RequestId>0QQFHBMRH7YG0PVCPZW9</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Item.1.ASIN" Value="0451462009"/>
+      <Argument Name="Item.1.ASIN" Value="0201896834"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
       <Argument Name="Operation" Value="CartAdd"/>
       <Argument Name="CartId" Value="275-2447492-9865853"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T07:24:33Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:18Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.00407695770263672</RequestProcessingTime>
+    <RequestProcessingTime>0.00454306602478027</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>
         <HMAC>MF+0ZGPcWdoyYA06/7yAM2aPIIM=</HMAC>
         <Items>
           <Item>
-            <ASIN>0451462009</ASIN>
+            <ASIN>0201896834</ASIN>
             <Quantity>0</Quantity>
           </Item>
         </Items>

tests/2011-08-01/CartAdd-it-adding-empty-items-fails-3.xml

 <CartAddResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>078YQKYZA8EXVPRNKZER</RequestId>
+    <RequestId>13F2XQJ1WD28TNPY8BZ2</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Item.1.ASIN" Value="0451462009"/>
+      <Argument Name="Item.1.ASIN" Value="0201896834"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
       <Argument Name="Operation" Value="CartAdd"/>
       <Argument Name="CartId" Value="280-2299440-8852612"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T08:25:58Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:17Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.00423312187194824</RequestProcessingTime>
+    <RequestProcessingTime>0.00408697128295898</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>
         <HMAC>e0HASDMNbm6mnVy7+Wgz+mKXIXc=</HMAC>
         <Items>
           <Item>
-            <ASIN>0451462009</ASIN>
+            <ASIN>0201896834</ASIN>
             <Quantity>0</Quantity>
           </Item>
         </Items>

tests/2011-08-01/CartCreate-es-creating-basket-with-empty-items-fails-2.xml

 <CartCreateResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>168TQ48H8GSBMBTS48D1</RequestId>
+    <RequestId>15QGHDYP29EFBJFZ17E7</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Item.1.ASIN" Value="0451462009"/>
+      <Argument Name="Item.1.ASIN" Value="0201896834"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
       <Argument Name="Operation" Value="CartCreate"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T07:24:24Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:15Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.00383687019348145</RequestProcessingTime>
+    <RequestProcessingTime>0.0040280818939209</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>
       <CartCreateRequest>
         <Items>
           <Item>
-            <ASIN>0451462009</ASIN>
+            <ASIN>0201896834</ASIN>
             <Quantity>0</Quantity>
           </Item>
         </Items>

tests/2011-08-01/CartCreate-it-creating-basket-with-empty-items-fails-2.xml

 <CartCreateResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>0B1PYHCR7PCBGPWPZWQ0</RequestId>
+    <RequestId>1GSE61XH7TGPS45RDXNM</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Item.1.ASIN" Value="0451462009"/>
+      <Argument Name="Item.1.ASIN" Value="0201896834"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
       <Argument Name="Operation" Value="CartCreate"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T08:25:54Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:13Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.00393199920654297</RequestProcessingTime>
+    <RequestProcessingTime>0.00388193130493164</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>
       <CartCreateRequest>
         <Items>
           <Item>
-            <ASIN>0451462009</ASIN>
+            <ASIN>0201896834</ASIN>
             <Quantity>0</Quantity>
           </Item>
         </Items>

tests/2011-08-01/CartModify-cn-modifying-does-not-work-with-asin-2.xml

 <CartModifyResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>1AVTYT68TE295C2H1NN2</RequestId>
+    <RequestId>1F1C51K4FBF2FF9DFR63</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
-      <Argument Name="Item.1.CartItemId" Value="0201896842"/>
+      <Argument Name="Item.1.CartItemId" Value="B005DRCQZ2"/>
       <Argument Name="HMAC" Value="fIjrCbDt+ghyfjxBpVo+mxngLwM="/>
       <Argument Name="Operation" Value="CartModify"/>
       <Argument Name="CartId" Value="476-5247810-3653060"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-13T12:07:35Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:21Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.0891799926757812</RequestProcessingTime>
+    <RequestProcessingTime>0.0126280784606934</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>

tests/2011-08-01/CartModify-es-modifying-does-not-work-with-asin-2.xml

 <CartModifyResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>1JN7N40783W0GA40JEFV</RequestId>
+    <RequestId>0RD6PNW6BPDKQFH0067R</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
-      <Argument Name="Item.1.CartItemId" Value="0201896842"/>
+      <Argument Name="Item.1.CartItemId" Value="0201896834"/>
       <Argument Name="HMAC" Value="dmzlYl62GhS507Gak37QvoxPEns="/>
       <Argument Name="Operation" Value="CartModify"/>
       <Argument Name="CartId" Value="280-4121999-9511055"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T07:25:05Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:24Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.122709989547729</RequestProcessingTime>
+    <RequestProcessingTime>0.0492291450500488</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>

tests/2011-08-01/CartModify-it-modifying-does-not-work-with-asin-2.xml

 <CartModifyResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>1EQBH963P6KDBAAVC1CW</RequestId>
+    <RequestId>0WR01C1VW5FB8VY5DAXT</RequestId>
     <Arguments>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Item.1.Quantity" Value="0"/>
-      <Argument Name="Item.1.CartItemId" Value="0201896842"/>
+      <Argument Name="Item.1.CartItemId" Value="0201896834"/>
       <Argument Name="HMAC" Value="G2430cISQbEKLkFJto8VsTPc1PA="/>
       <Argument Name="Operation" Value="CartModify"/>
       <Argument Name="CartId" Value="280-6953222-1380435"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-09T08:27:49Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:23Z"/>
       <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.0980250835418701</RequestProcessingTime>
+    <RequestProcessingTime>0.057650089263916</RequestProcessingTime>
   </OperationRequest>
   <Cart>
     <Request>

tests/2011-08-01/ItemSearch-ca-invalid-parameter-combination.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/fc8fd5fbdf85 +http://pypi.python.org/pypi/python-amazon-product-api/"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>1490db95-bc71-4a61-a6df-388921b99185</RequestId>
+    <RequestId>69fafd60-c130-48a7-8d2c-89c9303181e7</RequestId>
     <Arguments>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
-      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-12-02T01:11:59Z"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="ItemPage" Value="1"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="SearchIndex" Value="All"/>
       <Argument Name="BrowseNode" Value="132"/>
       <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:09Z"/>
+      <Argument Name="SearchIndex" Value="All"/>
     </Arguments>
-    <RequestProcessingTime>0.0021500000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0029280000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>

tests/2011-08-01/ItemSearch-ca-invalid-response-group.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/fc8fd5fbdf85 +http://pypi.python.org/pypi/python-amazon-product-api/"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>d983cedf-bda5-4694-b135-1f1ec24f938c</RequestId>
+    <RequestId>0f6dc4df-908b-4d34-b752-a213d46481fe</RequestId>
     <Arguments>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="Version" Value="2011-08-01"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-12-02T01:11:43Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:45Z"/>
       <Argument Name="ResponseGroup" Value="???"/>
       <Argument Name="SearchIndex" Value="All"/>
     </Arguments>
-    <RequestProcessingTime>0.0024690000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0026610000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>

tests/2011-08-01/ItemSearch-ca-invalid-search-index.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>a3a1f412-40cf-42f3-9fba-644afed38fdd</RequestId>
+    <RequestId>6d8e9cae-4546-4f33-ae5b-53db93c7c9fe</RequestId>
     <Arguments>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="BrowseNode" Value="132"/>
       <Argument Name="Version" Value="2011-08-01"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-08T21:14:44Z"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:55Z"/>
       <Argument Name="SearchIndex" Value="???"/>
     </Arguments>
-    <RequestProcessingTime>0.0025840000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0023290000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>
         <Error>
           <Code>AWS.InvalidEnumeratedParameter</Code>
           <Message>The value you specified for SearchIndex is invalid. Valid values include [
-				'All','Blended','Books','Classical','DVD','Electronics','ForeignBooks','Kitchen','Music','SportingGoods','Software','SoftwareVideoGames','Tools','VHS','Video','VideoGames','Watches'
+				'All','Baby','Beauty','Blended','Books','Classical','DVD','Electronics','ForeignBooks','HealthPersonalCare','KindleStore','Kitchen','LawnAndGarden','Marketplace','Music','PetSupplies','SportingGoods','Software','SoftwareVideoGames','Tools','VHS','Video','VideoGames','Watches'
 				].</Message>
         </Error>
-        <Error>
-          <Code>AWS.RestrictedParameterValueCombination</Code>
-          <Message>Your request contained a restricted parameter combination.  When SearchIndex equals ???, BrowseNode cannot be present.</Message>
-        </Error>
       </Errors>
     </Request>
   </Items>

tests/2011-08-01/ItemSearch-ca-no-parameters.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>b1e4352f-0e38-4508-b0cd-10a61259ac0b</RequestId>
+    <RequestId>3bd627cb-be3f-4358-9650-9b5684dd834f</RequestId>
     <Arguments>
+      <Argument Name="Service" Value="AWSECommerceService"/>
+      <Argument Name="ItemPage" Value="1"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:25Z"/>
       <Argument Name="Operation" Value="ItemSearch"/>
-      <Argument Name="Service" Value="AWSECommerceService"/>
+      <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="SearchIndex" Value="Books"/>
+      <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-08T21:14:35Z"/>
-      <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="ItemPage" Value="1"/>
-      <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="SearchIndex" Value="Books"/>
-      <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.0025610000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0026780000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>

tests/2011-08-01/ItemSearch-ca-unicode-parameter.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>7d766087-16c2-47e6-bac3-025a35cc94bd</RequestId>
+    <RequestId>f50b8bc3-6bae-4194-a5fc-5546328d5169</RequestId>
     <Arguments>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
       <Argument Name="Author" Value="F&#233;lix J. Palma"/>
-      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-08T21:14:38Z"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="ItemPage" Value="1"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:34Z"/>
       <Argument Name="SearchIndex" Value="Books"/>
-      <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.6094050000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.6966410000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>
         <SearchIndex>Books</SearchIndex>
       </ItemSearchRequest>
     </Request>
-    <TotalResults>12</TotalResults>
-    <TotalPages>2</TotalPages>
-    <MoreSearchResultsUrl>http://www.amazon.ca/gp/redirect.html?camp=2025&amp;creative=386005&amp;location=http%3A%2F%2Fwww.amazon.ca%2Fgp%2Fsearch%3Fkeywords%3DF%25C3%25A9lix%2BJ.%2BPalma%26url%3Dsearch-alias%253Dbooks-single-index&amp;linkCode=xm2&amp;tag=redtoad-21&amp;SubscriptionId=AKIAJTJID3GQ4PAFYOEQ</MoreSearchResultsUrl>
+    <TotalResults>31</TotalResults>
+    <TotalPages>4</TotalPages>
+    <MoreSearchResultsUrl>http://www.amazon.ca/gp/redirect.html?camp=2025&amp;creative=386005&amp;location=http%3A%2F%2Fwww.amazon.ca%2Fgp%2Fsearch%3Fkeywords%3DF%25C3%25A9lix%2BJ.%2BPalma%26url%3Dsearch-alias%253Dbooks-single-index&amp;linkCode=xm2&amp;tag=redtoad-20&amp;SubscriptionId=AKIAJTJID3GQ4PAFYOEQ</MoreSearchResultsUrl>
     <Item>
-      <ASIN>1439167397</ASIN>
-      <DetailPageURL>http://www.amazon.ca/Map-Time-Felix-J-Palma/dp/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1439167397</DetailPageURL>
+      <ASIN>B007USA5WS</ASIN>
+      <DetailPageURL>http://www.amazon.ca/Atria-Summer-2012-Beach-Read-ebook/dp/B007USA5WS%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB007USA5WS</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1439167397%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3DB007USA5WS%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB007USA5WS</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/B007USA5WS%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB007USA5WS</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+          <URL>http://www.amazon.ca/review/product/B007USA5WS%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB007USA5WS</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/B007USA5WS%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB007USA5WS</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
-        <Author>Felix J. Palma</Author>
-        <Manufacturer>Simon &amp; Schuster Canada</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>Map of Time, The</Title>
+        <Author>Jennifer Weiner</Author>
+        <Author>Felix J Palma</Author>
+        <Author>Lisa Tucker</Author>
+        <Manufacturer>Atria Books</Manufacturer>
+        <ProductGroup>eBooks</ProductGroup>
+        <Title>The Atria Summer 2012 Beach-Read Bag: Escape the Heat with Excerpts from Cool Reads</Title>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>2221114825</ASIN>
-      <DetailPageURL>http://www.amazon.ca/carte-du-temps-F%C3%A9lix-Palma/dp/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D2221114825</DetailPageURL>
+      <ASIN>1451660324</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Sky-A-Novel/dp/1451660324%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1451660324</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D2221114825%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1451660324%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660324</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/1451660324%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660324</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
+          <URL>http://www.amazon.ca/review/product/1451660324%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660324</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
-        </ItemLink>
-      </ItemLinks>
-      <ItemAttributes>
-        <Author>F&#233;lix J. Palma</Author>
-        <Manufacturer>Robert Laffont</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>carte du temps (La)</Title>
-      </ItemAttributes>
-    </Item>
-    <Item>
-      <ASIN>8420691186</ASIN>
-      <DetailPageURL>http://www.amazon.ca/mapa-del-tiempo-Time-Map/dp/8420691186%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D8420691186</DetailPageURL>
-      <ItemLinks>
-        <ItemLink>
-          <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D8420691186%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8420691186</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/8420691186%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8420691186</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/8420691186%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8420691186</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/8420691186%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8420691186</URL>
-        </ItemLink>
-      </ItemLinks>
-      <ItemAttributes>
-        <Author>Felix J. Palma</Author>
-        <Manufacturer>Alianza Editorial Sa</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>El mapa del tiempo / The Time Map</Title>
-      </ItemAttributes>
-    </Item>
-    <Item>
-      <ASIN>8876154892</ASIN>
-      <DetailPageURL>http://www.amazon.ca/mappa-del-tempo-F%C3%A9lix-Palma/dp/8876154892%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D8876154892</DetailPageURL>
-      <ItemLinks>
-        <ItemLink>
-          <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D8876154892%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8876154892</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/8876154892%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8876154892</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/8876154892%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8876154892</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/8876154892%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8876154892</URL>
-        </ItemLink>
-      </ItemLinks>
-      <ItemAttributes>
-        <Author>F&#233;lix J. Palma</Author>
-        <Manufacturer>Castelvecchi</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>La mappa del tempo</Title>
-      </ItemAttributes>
-    </Item>
-    <Item>
-      <ASIN>1451668309</ASIN>
-      <DetailPageURL>http://www.amazon.ca/El-mapa-del-tiempo-novela/dp/1451668309%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1451668309</DetailPageURL>
-      <ItemLinks>
-        <ItemLink>
-          <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1451668309%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451668309</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/1451668309%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451668309</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/1451668309%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451668309</URL>
-        </ItemLink>
-        <ItemLink>
-          <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/1451668309%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451668309</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/1451660324%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660324</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
         <Author>Felix J Palma</Author>
         <Manufacturer>Atria Books</Manufacturer>
         <ProductGroup>Book</ProductGroup>
-        <Title>El mapa del tiempo: una novela</Title>
+        <Title>The Map of the Sky: A Novel</Title>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>8497400216</ASIN>
-      <DetailPageURL>http://www.amazon.ca/interioridades-Private-Matters-Felix-Palma/dp/8497400216%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D8497400216</DetailPageURL>
+      <ASIN>B004G8QNL2</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Time-Novel-ebook/dp/B004G8QNL2%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB004G8QNL2</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D8497400216%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8497400216</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3DB004G8QNL2%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB004G8QNL2</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/8497400216%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8497400216</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/B004G8QNL2%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB004G8QNL2</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/8497400216%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8497400216</URL>
+          <URL>http://www.amazon.ca/review/product/B004G8QNL2%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB004G8QNL2</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/8497400216%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8497400216</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/B004G8QNL2%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB004G8QNL2</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
-        <Author>Felix J. Palma</Author>
-        <Manufacturer>Editorial Castalia</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>Las interioridades / The Private Matters</Title>
+        <Author>F&#233;lix J Palma</Author>
+        <Manufacturer>Atria Books</Manufacturer>
+        <ProductGroup>eBooks</ProductGroup>
+        <Title>The Map of Time: A Novel</Title>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>1439167419</ASIN>
-      <DetailPageURL>http://www.amazon.ca/Map-Time-Novel-Felix-Palma/dp/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1439167419</DetailPageURL>
+      <ASIN>1451660316</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Sky-A-Novel/dp/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1451660316</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1439167419%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1451660316%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+          <URL>http://www.amazon.ca/review/product/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
+        </ItemLink>
+      </ItemLinks>
+      <ItemAttributes>
+        <Author>Felix J Palma</Author>
+        <Manufacturer>Atria Books</Manufacturer>
+        <ProductGroup>Book</ProductGroup>
+        <Title>The Map of the Sky: A Novel</Title>
+      </ItemAttributes>
+    </Item>
+    <Item>
+      <ASIN>1451683030</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Time-A-Novel/dp/1451683030%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1451683030</DetailPageURL>
+      <ItemLinks>
+        <ItemLink>
+          <Description>Add To Wishlist</Description>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1451683030%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451683030</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>Tell A Friend</Description>
+          <URL>http://www.amazon.ca/gp/pdp/taf/1451683030%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451683030</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Customer Reviews</Description>
+          <URL>http://www.amazon.ca/review/product/1451683030%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451683030</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Offers</Description>
+          <URL>http://www.amazon.ca/gp/offer-listing/1451683030%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451683030</URL>
+        </ItemLink>
+      </ItemLinks>
+      <ItemAttributes>
+        <Author>Felix J Palma</Author>
+        <Manufacturer>Pocket Books</Manufacturer>
+        <ProductGroup>Book</ProductGroup>
+        <Title>The Map of Time: A Novel</Title>
+      </ItemAttributes>
+    </Item>
+    <Item>
+      <ASIN>1439167397</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Time-A-Novel/dp/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1439167397</DetailPageURL>
+      <ItemLinks>
+        <ItemLink>
+          <Description>Add To Wishlist</Description>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1439167397%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>Tell A Friend</Description>
+          <URL>http://www.amazon.ca/gp/pdp/taf/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Customer Reviews</Description>
+          <URL>http://www.amazon.ca/review/product/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Offers</Description>
+          <URL>http://www.amazon.ca/gp/offer-listing/1439167397%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167397</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>1451660316</ASIN>
-      <DetailPageURL>http://www.amazon.ca/Map-Sky-Novel-Felix-Palma/dp/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1451660316</DetailPageURL>
+      <ASIN>B0061PVQVU</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Sky-Novel-ebook/dp/B0061PVQVU%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0061PVQVU</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1451660316%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3DB0061PVQVU%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061PVQVU</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/B0061PVQVU%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061PVQVU</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
+          <URL>http://www.amazon.ca/review/product/B0061PVQVU%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061PVQVU</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/1451660316%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1451660316</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/B0061PVQVU%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061PVQVU</URL>
+        </ItemLink>
+      </ItemLinks>
+      <ItemAttributes>
+        <Author>Felix J Palma</Author>
+        <Manufacturer>Atria Books</Manufacturer>
+        <ProductGroup>eBooks</ProductGroup>
+        <Title>The Map of the Sky: A Novel</Title>
+      </ItemAttributes>
+    </Item>
+    <Item>
+      <ASIN>1439167419</ASIN>
+      <DetailPageURL>http://www.amazon.ca/The-Map-Time-A-Novel/dp/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1439167419</DetailPageURL>
+      <ItemLinks>
+        <ItemLink>
+          <Description>Add To Wishlist</Description>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D1439167419%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>Tell A Friend</Description>
+          <URL>http://www.amazon.ca/gp/pdp/taf/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Customer Reviews</Description>
+          <URL>http://www.amazon.ca/review/product/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
+        </ItemLink>
+        <ItemLink>
+          <Description>All Offers</Description>
+          <URL>http://www.amazon.ca/gp/offer-listing/1439167419%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D1439167419</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
         <Author>Felix J Palma</Author>
         <Manufacturer>Atria Books</Manufacturer>
         <ProductGroup>Book</ProductGroup>
-        <Title>The Map of the Sky: A Novel</Title>
+        <Title>The Map of Time: A Novel</Title>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>8483930544</ASIN>
-      <DetailPageURL>http://www.amazon.ca/menor-espectaculo-mundo-Smallest-World/dp/8483930544%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D8483930544</DetailPageURL>
+      <ASIN>2221114825</ASIN>
+      <DetailPageURL>http://www.amazon.ca/La-carte-temps-Felix-Palma/dp/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D2221114825</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D8483930544%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8483930544</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D2221114825%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/8483930544%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8483930544</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/8483930544%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8483930544</URL>
+          <URL>http://www.amazon.ca/review/product/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/8483930544%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8483930544</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/2221114825%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D2221114825</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
         <Author>Felix J. Palma</Author>
-        <Manufacturer>Paginas de Espuma</Manufacturer>
+        <Author>Marianne Millon</Author>
+        <Manufacturer>Robert Laffont</Manufacturer>
         <ProductGroup>Book</ProductGroup>
-        <Title>El menor espectaculo del mundo / The Smallest Show of the World</Title>
+        <Title>La carte du temps</Title>
       </ItemAttributes>
     </Item>
     <Item>
-      <ASIN>8498771595</ASIN>
-      <DetailPageURL>http://www.amazon.ca/mapa-del-tiempo-weather-map/dp/8498771595%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D8498771595</DetailPageURL>
+      <ASIN>B0061Q68P8</ASIN>
+      <DetailPageURL>http://www.amazon.ca/El-mapa-del-tiempo-ebook/dp/B0061Q68P8%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0061Q68P8</DetailPageURL>
       <ItemLinks>
         <ItemLink>
           <Description>Add To Wishlist</Description>
-          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3D8498771595%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8498771595</URL>
+          <URL>http://www.amazon.ca/gp/registry/wishlist/add-item.html%3Fasin.0%3DB0061Q68P8%26SubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061Q68P8</URL>
         </ItemLink>
         <ItemLink>
           <Description>Tell A Friend</Description>
-          <URL>http://www.amazon.ca/gp/pdp/taf/8498771595%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8498771595</URL>
+          <URL>http://www.amazon.ca/gp/pdp/taf/B0061Q68P8%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061Q68P8</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Customer Reviews</Description>
-          <URL>http://www.amazon.ca/review/product/8498771595%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8498771595</URL>
+          <URL>http://www.amazon.ca/review/product/B0061Q68P8%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061Q68P8</URL>
         </ItemLink>
         <ItemLink>
           <Description>All Offers</Description>
-          <URL>http://www.amazon.ca/gp/offer-listing/8498771595%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-21%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3D8498771595</URL>
+          <URL>http://www.amazon.ca/gp/offer-listing/B0061Q68P8%3FSubscriptionId%3DAKIAJTJID3GQ4PAFYOEQ%26tag%3Dredtoad-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386005%26creativeASIN%3DB0061Q68P8</URL>
         </ItemLink>
       </ItemLinks>
       <ItemAttributes>
-        <Author>Felix J. Palma</Author>
-        <Manufacturer>Algaida Editores S a</Manufacturer>
-        <ProductGroup>Book</ProductGroup>
-        <Title>El mapa del tiempo/ The weather map</Title>
+        <Author>Felix J Palma</Author>
+        <Manufacturer>Atria Books</Manufacturer>
+        <ProductGroup>eBooks</ProductGroup>
+        <Title>El mapa del tiempo: una novela (Atria Espanol)</Title>
       </ItemAttributes>
     </Item>
   </Items>

tests/2011-08-01/ItemSearch-cn-invalid-parameter-combination.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>34cda4a3-1383-4118-ba84-f1a138bbae4f</RequestId>
+    <RequestId>15140744-65fe-4b84-8179-232aa877e32c</RequestId>
     <Arguments>
-      <Argument Name="limit" Value="5"/>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
-      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-13T11:48:23Z"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="ItemPage" Value="1"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="SearchIndex" Value="All"/>
       <Argument Name="BrowseNode" Value="132"/>
       <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:12:11Z"/>
+      <Argument Name="SearchIndex" Value="All"/>
     </Arguments>
-    <RequestProcessingTime>0.0026570000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0022580000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>

tests/2011-08-01/ItemSearch-cn-invalid-response-group.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>a0435d01-cbf4-4c8b-9e1b-2d1f571d01be</RequestId>
+    <RequestId>f15f92d0-0306-4e66-9853-44b25c7199b4</RequestId>
     <Arguments>
-      <Argument Name="limit" Value="5"/>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
-      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-13T11:48:18Z"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="ResponseGroup" Value="???"/>
       <Argument Name="ItemPage" Value="1"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:41Z"/>
+      <Argument Name="ResponseGroup" Value="???"/>
       <Argument Name="SearchIndex" Value="All"/>
-      <Argument Name="Version" Value="2011-08-01"/>
     </Arguments>
-    <RequestProcessingTime>0.0032890000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0026490000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>

tests/2011-08-01/ItemSearch-cn-invalid-search-index.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>
-      <Header Name="UserAgent" Value="Python-urllib/2.6"/>
+      <Header Name="UserAgent" Value="python-amazon-product-api/0.2.6pre/59eb0080b5aa+ +http://pypi.python.org/pypi/python-amazon-product-api/"/>
     </HTTPHeaders>
-    <RequestId>0ea73ff3-f64a-42b3-b465-8c45130643d1</RequestId>
+    <RequestId>03dd4f35-e004-440c-b442-78a02dd298c8</RequestId>
     <Arguments>
       <Argument Name="Operation" Value="ItemSearch"/>
       <Argument Name="Service" Value="AWSECommerceService"/>
-      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="Timestamp" Value="2011-11-13T11:48:20Z"/>
       <Argument Name="Signature" Value="XXXXXXXXXXXXXXX"/>
       <Argument Name="ItemPage" Value="1"/>
       <Argument Name="AssociateTag" Value="XXXXXXXXXXXXXXX"/>
-      <Argument Name="SearchIndex" Value="???"/>
       <Argument Name="BrowseNode" Value="132"/>
       <Argument Name="Version" Value="2011-08-01"/>
+      <Argument Name="AWSAccessKeyId" Value="XXXXXXXXXXXXXXX"/>
+      <Argument Name="Timestamp" Value="2013-06-05T21:11:49Z"/>
+      <Argument Name="SearchIndex" Value="???"/>
     </Arguments>
-    <RequestProcessingTime>0.0030380000000000</RequestProcessingTime>
+    <RequestProcessingTime>0.0021620000000000</RequestProcessingTime>
   </OperationRequest>
   <Items>
     <Request>
         <Error>
           <Code>AWS.InvalidEnumeratedParameter</Code>
           <Message>The value you specified for SearchIndex is invalid. Valid values include [
-				'All','Apparel','Appliances','Automotive','Baby','Beauty','Blended','Books','Electronics','Grocery','HealthPersonalCare','Home','HomeImprovement','Jewelry','Misc','Music','OfficeProducts','Photo','Shoes','Software','SportingGoods','Toys','Video','VideoGames','Watches'
+				'All','Apparel','Appliances','Automotive','Baby','Beauty','Books','Electronics','Grocery','HealthPersonalCare','Home','HomeImprovement','Jewelry','KindleStore','Misc','Music','OfficeProducts','PetSupplies','Photo','Shoes','Software','SportingGoods','Toys','Video','VideoGames','Watches'
 				].</Message>
         </Error>
-        <Error>
-          <Code>AWS.RestrictedParameterValueCombination</Code>
-          <Message>Your request contained a restricted parameter combination.  When SearchIndex equals ???, ItemPage cannot be present.</Message>
-        </Error>
-        <Error>
-          <Code>AWS.RestrictedParameterValueCombination</Code>
-          <Message>Your request contained a restricted parameter combination.  When SearchIndex equals ???, BrowseNode cannot be present.</Message>
-        </Error>
       </Errors>
     </Request>
   </Items>

tests/2011-08-01/ItemSearch-cn-lookup-by-title.xml

 <ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
   <OperationRequest>
     <HTTPHeaders>