Beispiel #1
0
    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]
Beispiel #2
0
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
Beispiel #4
0
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)