def __init__(self, response, save_to=None): self.xmls = response.text # xml as string if save_to: open(save_to, 'w', encoding='utf-8').write(self.xmls) logging_mgr.ok_msg("Saved xml response to", save_to) self.root = ET.fromstring(self.xmls) self.body = self.root[0] try: # Handle fault self.success = self.body[0][0][1].text assert self.success == "true" except IndexError: logging_mgr.err_msg("Unexpected XML response:", self.body) raise IndexError except AssertionError: error_msg = self.body[0][0][0].text logging_mgr.err_msg("Error on SoapResponse: {}".format(error_msg)) raise AssertionError self.xmldict = xmltodict.parse(self.xmls) self.enveloppe = self.xmldict['s:Envelope'] self.body = self.enveloppe['s:Body'] self.sa_response = self.body[list(self.body.keys())[0]] self.sa_result = self.sa_response[list(self.sa_response.keys())[1]] # Parse soap action name prefix = list(self.sa_response.keys())[1] self.soapaction_name = prefix[:-6]
def generate_categories_list(): categories = api.get_categories() n = len(categories) expires = (datetime.datetime.now() + datetime.timedelta(days=1)).timestamp() payload = {'expires': expires, 'data': categories} json.dump(payload, open(setup.cache_categories_list, 'w', encoding='utf-8')) logging_mgr.ok_msg('Stored {} categories into {}'.format( n, setup.cache_categories_list)) return True
def get_token(username, password): """ Use basic auth to retrieve api token """ logging_mgr.ok_msg("Retrieving token") auth = HTTPBasicAuth(username, password) url = "https://sts.cdiscount.com/users/httpIssue.svc/?realm=https://wsvc.cdiscount.com/MarketplaceAPIService.svc" response = requests.get(url, auth=auth) responsedict = xmltodict.parse(response.text) token = responsedict['string']['#text'] logging_mgr.ok_msg("Got token:", token) return token
def generate_models_list(category_code): """ Generate the cached list of models """ filename = setup.cache_model_list(category_code) models_dic = api.model_by_category(category_code) expires = (datetime.datetime.now() + datetime.timedelta(days=1)).timestamp() payload = { 'expires': expires, 'data': [model.to_json() for model in models_dic] } json.dump(payload, open(filename, 'w', encoding='utf-8')) logging_mgr.ok_msg('Stored {} models of category {} into {}'.format( len(models_dic), category_code, filename))
def create(self): logging_mgr.process_msg( "Creating package in location <{}> and public url <{}>".format( self.arcname, self.zipfile_url)) dirname = ".tmp_to_zip" self.products_xml.download_all_pics(setup.cache_images_dir) self._create_tmp_dir(dirname) shutil.make_archive(os.path.splitext(self.arcname)[0], "zip", dirname) self._delete_tmp_dir(dirname) logging_mgr.ok_msg("Create archive", self.arcname) logging_mgr.ok_msg("Deleted temporary directory", dirname) return self.arcname
def __init__(self, products_and_categories, zipfile_name="auto", tmp_dir_name=".tmp_product", pkg_name='auto'): assert len(products_and_categories ) != 0, "Products list passed to ProductPackage is empty" if pkg_name == 'auto': pkg_name = self.get_auto_name() self.pkg_name = pkg_name if zipfile_name == 'auto': zipfile_name = self.pkg_name + '.zip' self.products_xml = ProductsXML(products_and_categories, pkg_name=self.pkg_name) self.dest_dir = os.path.join(setup.results_path, pkg_name) if os.path.exists(self.dest_dir): shutil.rmtree(self.dest_dir) logging_mgr.ok_msg("Removed old archive", self.dest_dir) os.mkdir(self.dest_dir) self.url_to_dir = urlparse.urljoin(setup.basedir_url, self.dest_dir) # pics pics_dir_name = 'images' os.mkdir(os.path.join(self.dest_dir, pics_dir_name)) self.path_to_pics = os.path.join(self.dest_dir, pics_dir_name) self.url_to_pics = urlparse.urljoin(self.url_to_dir, pics_dir_name) # tmp dir self.tmp_dir_name = tmp_dir_name # zipfile self.arcname = os.path.join(self.dest_dir, zipfile_name) self.zipfile_url = join_url(self.url_to_dir, zipfile_name) # init self.is_submitted = False self.submit_status = None self.pkg_id = None
def download_pictures(self, dest): urls = self.get_pictures_remote_urls() for url in urls: name = url.split('/')[-1] if not url: continue filepath = os.path.join(dest, name) if os.path.exists(filepath): continue img_converter.download_img(url, filepath) img_name = img_converter.jpg_to_jpeg(filepath) if os.path.getsize(img_name) == 0: self.bad_urls.append(url) logging_mgr.err_msg("Bad image url: {}".format(url), verbose_lvl=4) else: logging_mgr.ok_msg("Downloaded image from {}".format(url), verbose_lvl=4)