def get_presta_data(self, page_num, page_limit): domain = self.shop.domain headers = {"Authorization": self.shop.authheader} sync_type = self.shop.sync_type.lower() result_dict = {} try: # get products initial_index = page_num * page_limit data = get_xml_data("http://%s/api/%s?display=[id,%s,%s,name]&sort=[id_ASC]&limit=%d,%d&price[base_price][use_reduction]=0&price[base_price][use_tax]=0" % (domain, 'products', sync_type, JOINED_ATTRS, initial_index, page_limit), headers) self._get_presta_data(headers, data, result_dict, domain, sync_type, page_limit, page_num) except urllib2.HTTPError as e: error = PrestaError.get_error(PrestaError.DOMAIN, 'Incorrect value', self) if e.code == 500: # This should never happen after we implemented proper pagination message = e.fp.read() send_email.delay('mail/error', {'domain': domain, 'data_list': str(e.message), 'full_data': str(page_num), 'message': str(message)}, "Client Error") error = {PrestaError.DOMAIN: _('You have some problem with API access configuration,<br>' 'try if API works by manually examining url:<br>') + '<a href="http://%s/api/products">http://%s/api/products</a>' % (domain, domain)} elif e.code in (401, 403): # send email about this send_email.delay('mail/error', {'domain': domain, 'data_list': '', 'full_data': '', 'message': ''}, "Incorrect key") error = PrestaError.get_error(PrestaError.KEY, 'Incorrect value', self) if 'attribute_lang' in result_dict: error = PrestaError.get_error(PrestaError.KEY, PrestaError.PROD_COMBINATIONS, self) elif 'product' in result_dict: error = PrestaError.get_error(PrestaError.KEY, PrestaError.PROD_OPTIONS_VALUES, self) elif e.code == 404 or e.code == 503: error = PrestaError.get_error(PrestaError.DOMAIN, PrestaError.NOT_ACTIVATED, self) return result_dict, error except (urllib2.URLError, socket.timeout): # either timeout or dns error error = PrestaError.get_error(PrestaError.DOMAIN, PrestaError.NOT_REACHABLE, self) return result_dict, error except PrestaError, e: # no products found in the shop error = PrestaError.get_error(PrestaError.DOMAIN, e.message, self) return result_dict, error