From 0528e56f4c604c2861b7935c8b3492ba9a3d5931 Mon Sep 17 00:00:00 2001
From: "sergio.teruel"
Date: Mon, 29 May 2017 17:25:12 +0200
Subject: [PATCH 01/99] [MIG] connector_prestashop: Begin of migration to v10
---
connector_prestashop/README.rst | 171 +
connector_prestashop/__init__.py | 7 +
connector_prestashop/__manifest__.py | 62 +
connector_prestashop/backend.py | 15 +
connector_prestashop/connector.py | 12 +
connector_prestashop/consumer.py | 69 +
connector_prestashop/data/cron.xml | 95 +
connector_prestashop/data/ecommerce_data.xml | 43 +
.../data/product_decimal_precision.xml | 6 +
connector_prestashop/demo/backend.xml | 13 +
connector_prestashop/models/__init__.py | 28 +
.../models/account_invoice/__init__.py | 4 +
.../models/account_invoice/common.py | 93 +
.../models/account_invoice/importer.py | 269 +
.../models/account_payment_mode/__init__.py | 4 +
.../models/account_payment_mode/common.py | 45 +
.../models/account_payment_mode/importer.py | 49 +
.../models/account_tax/__init__.py | 4 +
.../models/account_tax/common.py | 40 +
.../models/account_tax/importer.py | 25 +
.../models/account_tax_group/__init__.py | 4 +
.../models/account_tax_group/common.py | 53 +
.../models/account_tax_group/importer.py | 46 +
.../models/binding/__init__.py | 4 +
connector_prestashop/models/binding/common.py | 51 +
.../models/delivery_carrier/__init__.py | 5 +
.../models/delivery_carrier/common.py | 69 +
.../models/delivery_carrier/exporter.py | 2 +
.../models/delivery_carrier/importer.py | 76 +
.../models/mail_message/__init__.py | 4 +
.../models/mail_message/common.py | 40 +
.../models/mail_message/importer.py | 67 +
.../models/prestashop_backend/__init__.py | 4 +
.../models/prestashop_backend/common.py | 323 +
.../models/prestashop_backend/importer.py | 35 +
.../models/product_category/__init__.py | 4 +
.../models/product_category/common.py | 63 +
.../models/product_category/importer.py | 116 +
.../models/product_image/__init__.py | 5 +
.../models/product_image/common.py | 93 +
.../models/product_image/deleter.py | 15 +
.../models/product_image/importer.py | 119 +
.../models/product_pricelist/__init__.py | 4 +
.../models/product_pricelist/common.py | 41 +
.../models/product_pricelist/importer.py | 52 +
.../models/product_product/__init__.py | 6 +
.../models/product_product/common.py | 256 +
.../models/product_product/deleter.py | 15 +
.../models/product_product/exporter.py | 16 +
.../models/product_product/importer.py | 396 +
.../models/product_supplierinfo/__init__.py | 4 +
.../models/product_supplierinfo/common.py | 92 +
.../models/product_supplierinfo/importer.py | 186 +
.../models/product_template/__init__.py | 5 +
.../models/product_template/common.py | 213 +
.../models/product_template/exporter.py | 50 +
.../models/product_template/importer.py | 678 +
.../models/res_country/__init__.py | 4 +
.../models/res_country/common.py | 42 +
.../models/res_country/importer.py | 24 +
.../models/res_currency/__init__.py | 4 +
.../models/res_currency/common.py | 43 +
.../models/res_currency/importer.py | 19 +
.../models/res_lang/__init__.py | 4 +
.../models/res_lang/common.py | 47 +
.../models/res_lang/importer.py | 22 +
.../models/res_partner/__init__.py | 4 +
.../models/res_partner/common.py | 172 +
.../models/res_partner/importer.py | 241 +
.../models/res_partner_category/__init__.py | 4 +
.../models/res_partner_category/common.py | 53 +
.../models/res_partner_category/importer.py | 57 +
.../models/sale_order/__init__.py | 4 +
.../models/sale_order/common.py | 169 +
.../models/sale_order/importer.py | 504 +
.../models/sale_order_state/__init__.py | 5 +
.../models/sale_order_state/common.py | 77 +
.../models/sale_order_state/exporter.py | 46 +
.../models/sale_order_state/importer.py | 42 +
.../models/stock_move/__init__.py | 3 +
.../models/stock_move/common.py | 53 +
.../models/stock_tracking/__init__.py | 4 +
.../models/stock_tracking/common.py | 12 +
.../models/stock_tracking/exporter.py | 61 +
.../models/stock_warehouse/__init__.py | 4 +
.../models/stock_warehouse/common.py | 61 +
.../models/stock_warehouse/importer.py | 43 +
.../security/ir.model.access.csv | 43 +
.../security/prestashop_security.xml | 60 +
.../static/description/icon.png | Bin 0 -> 7665 bytes
.../static/description/icon.svg | 230 +
connector_prestashop/tests/.gitignore | 1 +
connector_prestashop/tests/__init__.py | 12 +
connector_prestashop/tests/common.py | 355 +
.../fixtures/cassettes/sync_metadata.yaml | 144 +
.../fixtures/cassettes/test_auth_failure.yaml | 28 +
.../fixtures/cassettes/test_auth_success.yaml | 25 +
.../cassettes/test_export_stock_quantity.yaml | 109 +
.../test_export_tracking_number.yaml | 112 +
.../cassettes/test_import_basedata.yaml | 10909 ++++++++++++++++
.../cassettes/test_import_carrier_batch.yaml | 43 +
.../test_import_carrier_record_2.yaml | 43 +
.../test_import_inventory_batch.yaml | 185 +
...st_import_inventory_record_template_1.yaml | 32 +
...est_import_inventory_record_variant_1.yaml | 32 +
.../cassettes/test_import_metadata.yaml | 144 +
.../test_import_partner_address_batch.yaml | 43 +
.../test_import_partner_address_record_1.yaml | 42 +
.../cassettes/test_import_partner_batch.yaml | 86 +
...test_import_partner_category_record_1.yaml | 67 +
.../test_import_partner_record_1.yaml | 49 +
.../cassettes/test_import_product_batch.yaml | 112 +
...test_import_product_category_record_1.yaml | 262 +
...test_import_product_template_record_1.yaml | 3886 ++++++
.../cassettes/test_import_sale_batch.yaml | 86 +
.../cassettes/test_import_sale_record_5.yaml | 320 +
connector_prestashop/tests/test_auth.py | 24 +
.../tests/test_export_stock_qty.py | 61 +
.../tests/test_export_stock_qty_job.py | 74 +
.../tests/test_export_tracking.py | 157 +
.../tests/test_import_backend_data.py | 78 +
.../tests/test_import_carrier.py | 95 +
.../tests/test_import_inventory.py | 113 +
.../tests/test_import_partner.py | 228 +
.../tests/test_import_products.py | 236 +
.../tests/test_import_sale.py | 230 +
connector_prestashop/unit/__init__.py | 13 +
.../unit/auto_matching_importer.py | 118 +
connector_prestashop/unit/backend_adapter.py | 222 +
connector_prestashop/unit/binder.py | 43 +
connector_prestashop/unit/deleter.py | 29 +
connector_prestashop/unit/exception.py | 8 +
.../unit/export_synchronizer.py | 198 +
connector_prestashop/unit/exporter.py | 350 +
connector_prestashop/unit/importer.py | 504 +
connector_prestashop/unit/mapper.py | 128 +
connector_prestashop/unit/version_key.py | 59 +
connector_prestashop/views/account_view.xml | 52 +
.../views/connector_prestashop_menu.xml | 40 +
connector_prestashop/views/delivery_view.xml | 50 +
connector_prestashop/views/image_view.xml | 20 +
connector_prestashop/views/partner_view.xml | 136 +
.../views/prestashop_model_view.xml | 277 +
.../views/product_category_view.xml | 56 +
connector_prestashop/views/product_view.xml | 173 +
connector_prestashop/views/sale_view.xml | 155 +
connector_prestashop/views/stock_view.xml | 18 +
147 files changed, 27499 insertions(+)
create mode 100644 connector_prestashop/README.rst
create mode 100644 connector_prestashop/__init__.py
create mode 100644 connector_prestashop/__manifest__.py
create mode 100644 connector_prestashop/backend.py
create mode 100644 connector_prestashop/connector.py
create mode 100644 connector_prestashop/consumer.py
create mode 100644 connector_prestashop/data/cron.xml
create mode 100644 connector_prestashop/data/ecommerce_data.xml
create mode 100644 connector_prestashop/data/product_decimal_precision.xml
create mode 100644 connector_prestashop/demo/backend.xml
create mode 100644 connector_prestashop/models/__init__.py
create mode 100644 connector_prestashop/models/account_invoice/__init__.py
create mode 100644 connector_prestashop/models/account_invoice/common.py
create mode 100644 connector_prestashop/models/account_invoice/importer.py
create mode 100644 connector_prestashop/models/account_payment_mode/__init__.py
create mode 100644 connector_prestashop/models/account_payment_mode/common.py
create mode 100644 connector_prestashop/models/account_payment_mode/importer.py
create mode 100644 connector_prestashop/models/account_tax/__init__.py
create mode 100644 connector_prestashop/models/account_tax/common.py
create mode 100644 connector_prestashop/models/account_tax/importer.py
create mode 100644 connector_prestashop/models/account_tax_group/__init__.py
create mode 100644 connector_prestashop/models/account_tax_group/common.py
create mode 100644 connector_prestashop/models/account_tax_group/importer.py
create mode 100644 connector_prestashop/models/binding/__init__.py
create mode 100644 connector_prestashop/models/binding/common.py
create mode 100644 connector_prestashop/models/delivery_carrier/__init__.py
create mode 100644 connector_prestashop/models/delivery_carrier/common.py
create mode 100644 connector_prestashop/models/delivery_carrier/exporter.py
create mode 100644 connector_prestashop/models/delivery_carrier/importer.py
create mode 100644 connector_prestashop/models/mail_message/__init__.py
create mode 100644 connector_prestashop/models/mail_message/common.py
create mode 100644 connector_prestashop/models/mail_message/importer.py
create mode 100644 connector_prestashop/models/prestashop_backend/__init__.py
create mode 100644 connector_prestashop/models/prestashop_backend/common.py
create mode 100644 connector_prestashop/models/prestashop_backend/importer.py
create mode 100644 connector_prestashop/models/product_category/__init__.py
create mode 100644 connector_prestashop/models/product_category/common.py
create mode 100644 connector_prestashop/models/product_category/importer.py
create mode 100644 connector_prestashop/models/product_image/__init__.py
create mode 100644 connector_prestashop/models/product_image/common.py
create mode 100644 connector_prestashop/models/product_image/deleter.py
create mode 100644 connector_prestashop/models/product_image/importer.py
create mode 100644 connector_prestashop/models/product_pricelist/__init__.py
create mode 100644 connector_prestashop/models/product_pricelist/common.py
create mode 100644 connector_prestashop/models/product_pricelist/importer.py
create mode 100644 connector_prestashop/models/product_product/__init__.py
create mode 100644 connector_prestashop/models/product_product/common.py
create mode 100644 connector_prestashop/models/product_product/deleter.py
create mode 100644 connector_prestashop/models/product_product/exporter.py
create mode 100644 connector_prestashop/models/product_product/importer.py
create mode 100644 connector_prestashop/models/product_supplierinfo/__init__.py
create mode 100644 connector_prestashop/models/product_supplierinfo/common.py
create mode 100644 connector_prestashop/models/product_supplierinfo/importer.py
create mode 100644 connector_prestashop/models/product_template/__init__.py
create mode 100644 connector_prestashop/models/product_template/common.py
create mode 100644 connector_prestashop/models/product_template/exporter.py
create mode 100644 connector_prestashop/models/product_template/importer.py
create mode 100644 connector_prestashop/models/res_country/__init__.py
create mode 100644 connector_prestashop/models/res_country/common.py
create mode 100644 connector_prestashop/models/res_country/importer.py
create mode 100644 connector_prestashop/models/res_currency/__init__.py
create mode 100644 connector_prestashop/models/res_currency/common.py
create mode 100644 connector_prestashop/models/res_currency/importer.py
create mode 100644 connector_prestashop/models/res_lang/__init__.py
create mode 100644 connector_prestashop/models/res_lang/common.py
create mode 100644 connector_prestashop/models/res_lang/importer.py
create mode 100644 connector_prestashop/models/res_partner/__init__.py
create mode 100644 connector_prestashop/models/res_partner/common.py
create mode 100644 connector_prestashop/models/res_partner/importer.py
create mode 100644 connector_prestashop/models/res_partner_category/__init__.py
create mode 100644 connector_prestashop/models/res_partner_category/common.py
create mode 100644 connector_prestashop/models/res_partner_category/importer.py
create mode 100644 connector_prestashop/models/sale_order/__init__.py
create mode 100644 connector_prestashop/models/sale_order/common.py
create mode 100644 connector_prestashop/models/sale_order/importer.py
create mode 100644 connector_prestashop/models/sale_order_state/__init__.py
create mode 100644 connector_prestashop/models/sale_order_state/common.py
create mode 100644 connector_prestashop/models/sale_order_state/exporter.py
create mode 100644 connector_prestashop/models/sale_order_state/importer.py
create mode 100644 connector_prestashop/models/stock_move/__init__.py
create mode 100644 connector_prestashop/models/stock_move/common.py
create mode 100644 connector_prestashop/models/stock_tracking/__init__.py
create mode 100644 connector_prestashop/models/stock_tracking/common.py
create mode 100644 connector_prestashop/models/stock_tracking/exporter.py
create mode 100644 connector_prestashop/models/stock_warehouse/__init__.py
create mode 100644 connector_prestashop/models/stock_warehouse/common.py
create mode 100644 connector_prestashop/models/stock_warehouse/importer.py
create mode 100644 connector_prestashop/security/ir.model.access.csv
create mode 100644 connector_prestashop/security/prestashop_security.xml
create mode 100644 connector_prestashop/static/description/icon.png
create mode 100644 connector_prestashop/static/description/icon.svg
create mode 100644 connector_prestashop/tests/.gitignore
create mode 100644 connector_prestashop/tests/__init__.py
create mode 100644 connector_prestashop/tests/common.py
create mode 100644 connector_prestashop/tests/fixtures/cassettes/sync_metadata.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_auth_failure.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_auth_success.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_export_stock_quantity.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_export_tracking_number.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_carrier_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_carrier_record_2.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_template_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_variant_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_metadata.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_record_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_partner_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_partner_category_record_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_partner_record_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_product_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_product_category_record_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_product_template_record_1.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_sale_batch.yaml
create mode 100644 connector_prestashop/tests/fixtures/cassettes/test_import_sale_record_5.yaml
create mode 100644 connector_prestashop/tests/test_auth.py
create mode 100644 connector_prestashop/tests/test_export_stock_qty.py
create mode 100644 connector_prestashop/tests/test_export_stock_qty_job.py
create mode 100644 connector_prestashop/tests/test_export_tracking.py
create mode 100644 connector_prestashop/tests/test_import_backend_data.py
create mode 100644 connector_prestashop/tests/test_import_carrier.py
create mode 100644 connector_prestashop/tests/test_import_inventory.py
create mode 100644 connector_prestashop/tests/test_import_partner.py
create mode 100644 connector_prestashop/tests/test_import_products.py
create mode 100644 connector_prestashop/tests/test_import_sale.py
create mode 100644 connector_prestashop/unit/__init__.py
create mode 100644 connector_prestashop/unit/auto_matching_importer.py
create mode 100644 connector_prestashop/unit/backend_adapter.py
create mode 100644 connector_prestashop/unit/binder.py
create mode 100644 connector_prestashop/unit/deleter.py
create mode 100644 connector_prestashop/unit/exception.py
create mode 100644 connector_prestashop/unit/export_synchronizer.py
create mode 100644 connector_prestashop/unit/exporter.py
create mode 100644 connector_prestashop/unit/importer.py
create mode 100644 connector_prestashop/unit/mapper.py
create mode 100644 connector_prestashop/unit/version_key.py
create mode 100644 connector_prestashop/views/account_view.xml
create mode 100644 connector_prestashop/views/connector_prestashop_menu.xml
create mode 100644 connector_prestashop/views/delivery_view.xml
create mode 100644 connector_prestashop/views/image_view.xml
create mode 100644 connector_prestashop/views/partner_view.xml
create mode 100644 connector_prestashop/views/prestashop_model_view.xml
create mode 100644 connector_prestashop/views/product_category_view.xml
create mode 100644 connector_prestashop/views/product_view.xml
create mode 100644 connector_prestashop/views/sale_view.xml
create mode 100644 connector_prestashop/views/stock_view.xml
diff --git a/connector_prestashop/README.rst b/connector_prestashop/README.rst
new file mode 100644
index 000000000..e53c35ec7
--- /dev/null
+++ b/connector_prestashop/README.rst
@@ -0,0 +1,171 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+=========================
+Odoo PrestaShop Connector
+=========================
+
+This module connects Odoo and PrestaShop.
+
+PrestaShop (http://www.prestashop.com/) is a popular e-commerce platform
+written in PHP/MySQL and published under the Open Software licence v3.0.
+
+This module allows the synchronization of the following objects from PrestaShop
+to Odoo:
+
+* Websites
+* Stores and languages
+* Carriers
+* Product categories
+* Products
+* Combinations of products
+* Partner categories
+* Customers
+
+Once these objects are synchronised, it will allow the import of sales orders,
+together with the related customers.
+
+As an extra feature, you can also export the stock quantities back to
+PrestaShop.
+
+If you want to export from Odoo to PrestaShop changes made on the products,
+product categories or product images, you need to install
+*connector_prestashop_catalog_manager* module in this same repository.
+
+This connector supports PrestaShop version up to 1.6.11. Maybe later versions
+are also supported, but they haven't been tested. It uses the webservices of
+PrestaShop.
+
+Installation
+============
+
+It doesn't require any plug-in in PrestaShop, but requires an extra Python
+library in Odoo server side, called prestapyt:
+
+https://github.com/prestapyt/prestapyt/
+
+You can use pip install system to install it
+
+`sudo pip install prestapyt`
+
+Configuration
+=============
+
+To configure this module, you need to set several things in both PrestaShop
+and Odoo:
+
+Steps in PrestaShop
+-------------------
+
+#. Go to the control panel (usually at /adminps).
+#. Login into the system.
+#. Go to *Advanced Parameters > Web service*
+#. Add a new entry.
+#. Generate a new API key that will be needed later.
+#. Grant all the needed access according your security policy.
+
+Steps in Odoo
+-------------
+
+#. Go to *Connectors > PrestaShop > Backends*.
+#. Create a new record for registering a PrestaShop backend. You will bind
+ this backend to an specific company and warehouse.
+#. Define the main URL of the PrestaShop web, and the webservice key you
+ got in PrestaShop.
+#. Define other parameters like the discount and shipping products, or if the
+ taxes are included in the price.
+#. Click on "Synchronize Metadata" button. This will bring the basic shop
+ information that you can find on *Websites* and *Stores* menus.
+#. Click on "Synchronize Base Data" button. This will import carriers,
+ languages, tax groups and the rest of base data that are needed for the
+ proper work.
+#. Go to *Accounting > Configuration > Taxes > Tax Groups*, and include
+ for each of the tax definition imported from PrestaShop, the corresponding
+ taxes in Odoo.
+#. Activate the job runner, checking the connector documentation for setting
+ the server correctly for using it in
+ http://odoo-connector.com/guides/jobrunner.html
+#. Alternatively, if you are not able to activate it, you can enable the
+ scheduled job called "Enqueue Jobs".
+#. Activate the scheduled jobs for importing the records you want:
+
+ * PrestaShop - Export Stock Quantities
+ * PrestaShop - Import Carriers
+ * PrestaShop - Import Customers and Groups
+ * PrestaShop - Import Products and Categories
+ * PrestaShop - Import Sales Orders
+ * PrestaShop - Import suppliers
+ * PrestaShop - Payment methods
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to *Connectors > Queue > Jobs*, and check the correct enqueuing of
+ the tasks.
+#. Check on each menu the resulting imported records (Customers, Sales
+ Orders...)
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+ :alt: Try me on Runbot
+ :target: https://runbot.odoo-community.org/runbot/108/9.0
+
+Test dependencies
+=================
+
+Extra libs are required to run the tests:
+* ``vcrpy``
+* ``freezegun``
+
+Known issues / Roadmap
+======================
+
+* Work with multiple warehouses.
+* Tests.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues
+`_. In case of trouble, please
+check there if your issue has already been reported. If you spotted it first,
+help us smashing it by providing a detailed and welcomed feedback.
+
+Credits
+=======
+
+Images
+------
+
+* `PrestaShop logo `_.
+* `Odoo logo `_.
+* `Cable `_.
+
+Contributors
+------------
+
+* Sébastien Beau
+* Benoît Guillot
+* Alexis de Lattre
+* Guewen Baconnier
+* Sergio Teruel
+* Mikel Arregi
+* Pedro M. Baeza
+* Simone Orsi
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+To contribute to this module, please visit https://odoo-community.org.
diff --git a/connector_prestashop/__init__.py b/connector_prestashop/__init__.py
new file mode 100644
index 000000000..881f759b5
--- /dev/null
+++ b/connector_prestashop/__init__.py
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import backend
+from . import connector
+from . import consumer
+from . import models
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
new file mode 100644
index 000000000..eb727dad4
--- /dev/null
+++ b/connector_prestashop/__manifest__.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+# Copyright 2011-2013 Camptocamp
+# Copyright 2011-2013 Akretion
+# Copyright 2015 AvanzOSC
+# Copyright 2015-2016 Tecnativa
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+ "name": "PrestaShop-Odoo connector",
+ "version": "10.0.1.0.0",
+ "license": "AGPL-3",
+ "depends": [
+ "account",
+ "product",
+ "product_multi_category", # oca/product-attribute
+ "connector_ecommerce", # oca/connector-ecommerce
+ "product_multi_image", # oca/product-attribute
+ "purchase",
+ "product_variant_supplierinfo", # oca/product-variant
+ # TODO: perhaps not needed:
+ # "product_variant_cost_price", # oca/product-variant
+ ],
+ "external_dependencies": {
+ 'python': [
+ "html2text",
+ "prestapyt",
+ # tests dependencies
+ "freezegun",
+ "vcr",
+ "bs4",
+ ],
+ },
+ "author": "Akretion,"
+ "Camptocamp,"
+ "AvanzOSC,"
+ "Tecnativa,"
+ "Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/connector-prestashop",
+ "category": "Connector",
+ 'demo': [
+ 'demo/backend.xml',
+ ],
+ 'data': [
+ 'data/cron.xml',
+ 'data/product_decimal_precision.xml',
+ 'views/prestashop_model_view.xml',
+ 'views/product_view.xml',
+ 'views/product_category_view.xml',
+ 'views/image_view.xml',
+ 'views/delivery_view.xml',
+ 'views/connector_prestashop_menu.xml',
+ 'views/partner_view.xml',
+ 'views/sale_view.xml',
+ 'views/account_view.xml',
+ 'views/stock_view.xml',
+ 'security/ir.model.access.csv',
+ 'security/prestashop_security.xml',
+ 'data/ecommerce_data.xml',
+ ],
+ 'installable': True,
+ "application": True,
+}
diff --git a/connector_prestashop/backend.py b/connector_prestashop/backend.py
new file mode 100644
index 000000000..714a088cd
--- /dev/null
+++ b/connector_prestashop/backend.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import openerp.addons.connector.backend as backend
+
+
+prestashop = backend.Backend('prestashop')
+# version < 1.6.0.9
+prestashop_1_5_0_0 = backend.Backend(parent=prestashop, version='1.5')
+# version 1.6.0.9 - 1.6.0.10
+prestashop_1_6_0_9 = backend.Backend(parent=prestashop, version='1.6.0.9')
+# version >= 1.6.0.11
+prestashop_1_6_0_11 = backend.Backend(parent=prestashop, version='1.6.0.11')
+# version >= 1.6.1.2
+prestashop_1_6_1_2 = backend.Backend(parent=prestashop, version='1.6.1.2')
diff --git a/connector_prestashop/connector.py b/connector_prestashop/connector.py
new file mode 100644
index 000000000..0c65664a1
--- /dev/null
+++ b/connector_prestashop/connector.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+def get_environment(session, model_name, backend_id):
+ _logger.warn('deprecated: please use PrestashopBackend.get_environment')
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ return backend.get_environment(model_name, session=session)
diff --git a/connector_prestashop/consumer.py b/connector_prestashop/consumer.py
new file mode 100644
index 000000000..6e43a5b1d
--- /dev/null
+++ b/connector_prestashop/consumer.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo.addons.connector.event import on_record_write
+from odoo.addons.connector_ecommerce.models.event import (
+ on_tracking_number_added,
+)
+from .models.sale_order_state.exporter import export_sale_state
+from .models.stock_tracking.exporter import export_tracking_number
+
+def delay_export(session, model_name, record_id, fields=None, priority=20):
+ """ Delay a job which export a binding record.
+
+ (A binding record being a ``external.res.partner``,
+ ``external.product.product``, ...)
+ """
+ if session.context.get('connector_no_export'):
+ return
+ export_record.delay(
+ session, model_name, record_id, fields=fields, priority=priority)
+
+
+def delay_export_all_bindings(
+ session, model_name, record_id, fields=None, priority=20):
+ """ Delay a job which export all the bindings of a record.
+
+@on_record_write(model_names=[
+ 'prestashop.product.template',
+ 'prestashop.product.combination'
+])
+def prestashop_product_stock_updated(
+ env, model_name, record_id, fields=None):
+ if env.context.get('connector_no_export'):
+ return
+ inventory_fields = list(set(fields).intersection(INVENTORY_FIELDS))
+ if inventory_fields:
+ env[model_name].browse(record_id).with_delay(
+ priority=20).export_inventory(fields=inventory_fields)
+
+
+@on_record_write(model_names='sale.order')
+def prestashop_sale_state_modified(env, model_name, record_id,
+ fields=None):
+ if 'state' in fields:
+ sale = env[model_name].browse(record_id)
+ if not sale.prestashop_bind_ids:
+ return
+ # a quick test to see if it is worth trying to export sale state
+ states = env['sale.order.state.list'].search(
+ [('name', '=', sale.state)]
+ )
+ if states:
+ export_sale_state.delay(env, 'prestashop.sale.order',
+ record_id, priority=20)
+
+
+@on_tracking_number_added
+def delay_export_tracking_number(env, model_name, record_id):
+ """
+ Call a job to export the tracking number to a existing picking that
+ must be in done state.
+ """
+ picking = env['stock.picking'].browse(record_id)
+ for binding in picking.sale_id.prestashop_bind_ids:
+ export_tracking_number.delay(env,
+ binding._model._name,
+ binding.id,
+ priority=20)
diff --git a/connector_prestashop/data/cron.xml b/connector_prestashop/data/cron.xml
new file mode 100644
index 000000000..73b6d6f1f
--- /dev/null
+++ b/connector_prestashop/data/cron.xml
@@ -0,0 +1,95 @@
+
+
+
+
+ PrestaShop - Import Sales Orders
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Export Stock Quantities
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Import Customers and Groups
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Import Products and Categories
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Import suppliers
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Import Carriers
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
+ PrestaShop - Payment modes
+
+
+ 1
+ days
+ -1
+
+
+
+
+
+
+
diff --git a/connector_prestashop/data/ecommerce_data.xml b/connector_prestashop/data/ecommerce_data.xml
new file mode 100644
index 000000000..d1e52e5f7
--- /dev/null
+++ b/connector_prestashop/data/ecommerce_data.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ Total Amount differs from PrestaShop
+ The amount computed in Odoo doesn't match with the amount in PrestaShop.
+
+Cause:
+The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.
+
+Resolution:
+Check your taxes and fiscal positions configuration and correct them if necessary.
+ 30
+ sale
+ sale.order
+ if order.prestashop_bind_ids and abs(order.amount_total - order.prestashop_bind_ids[0].total_amount) >= 0.001:
+ failed = True
+
+
+
+
+ Total Tax Amount differs from PrestaShop
+ The tax amount computed in Odoo doesn't match with the tax amount in PrestaShop.
+
+Cause:
+The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.
+
+Resolution:
+Check your taxes and fiscal positions configuration and correct them if necessary.
+ 30
+ sale
+ sale.order
+ # By default, a cent of difference for the tax amount is allowed, feel free to customise it in your own module
+if order.prestashop_bind_ids:
+ ps_amount = order.prestashop_bind_ids[0].total_amount_tax
+ oerp_amount = order.amount_tax
+ if (ps_amount == 0.0 and oerp_amount != 0.0) or (ps_amount and abs(1 - oerp_amount / ps_amount) > 0.02):
+ failed = True
+
+
+
+
+
diff --git a/connector_prestashop/data/product_decimal_precision.xml b/connector_prestashop/data/product_decimal_precision.xml
new file mode 100644
index 000000000..b4564658d
--- /dev/null
+++ b/connector_prestashop/data/product_decimal_precision.xml
@@ -0,0 +1,6 @@
+
+
+
+ 3
+
+
diff --git a/connector_prestashop/demo/backend.xml b/connector_prestashop/demo/backend.xml
new file mode 100644
index 000000000..e8f1cb8e4
--- /dev/null
+++ b/connector_prestashop/demo/backend.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Prestashop
+ 1.6.1.2
+ http://localhost:8080
+
+
+
+
+
+
diff --git a/connector_prestashop/models/__init__.py b/connector_prestashop/models/__init__.py
new file mode 100644
index 000000000..01c7714fc
--- /dev/null
+++ b/connector_prestashop/models/__init__.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+
+from . import binding
+
+from . import account_invoice
+from . import account_payment_mode
+from . import account_tax
+from . import account_tax_group
+from . import delivery_carrier
+from . import mail_message
+from . import prestashop_backend
+from . import product_category
+from . import product_image
+from . import product_pricelist
+from . import product_product
+from . import product_supplierinfo
+from . import product_template
+from . import res_country
+from . import res_currency
+from . import res_lang
+from . import res_partner
+from . import res_partner_category
+from . import sale_order
+from . import sale_order_state
+from . import stock_warehouse
+from . import stock_move
+from . import stock_tracking
diff --git a/connector_prestashop/models/account_invoice/__init__.py b/connector_prestashop/models/account_invoice/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/account_invoice/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
new file mode 100644
index 000000000..e8961cdf9
--- /dev/null
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+from ...backend import prestashop
+from ...unit.backend_adapter import GenericAdapter
+
+
+class AccountInvoice(models.Model):
+ _inherit = 'account.invoice'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.refund',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings'
+ )
+
+ def action_move_create(self):
+ so_obj = self.env['prestashop.sale.order']
+ line_replacement = {}
+ for invoice in self:
+ sale_order = so_obj.search([('name', '=', invoice.origin)])
+ if not sale_order:
+ continue
+ sale_order = sale_order[0]
+ discount_product_id = sale_order.backend_id.discount_product_id.id
+ for invoice_line in invoice.invoice_line_ids:
+ if invoice_line.product_id.id != discount_product_id:
+ continue
+ amount = invoice_line.price_subtotal
+ partner = invoice.partner_id.commercial_partner_id
+ refund = self._find_refund(-1 * amount, partner)
+ if refund:
+ invoice_line.unlink()
+ line_replacement[invoice] = refund
+ invoice.button_reset_taxes()
+ result = super(AccountInvoice, self).action_move_create()
+ # reconcile invoice with refund
+ for invoice, refund in line_replacement.items():
+ self._reconcile_invoice_refund(invoice, refund)
+ return result
+
+ @api.model
+ def _reconcile_invoice_refund(self, invoice, refund):
+ move_line_obj = self.env['account.move.line']
+ move_lines = move_line_obj.search([
+ ('move_id', '=', invoice.move_id.id),
+ ('debit', '!=', 0.0),
+ ])
+ move_lines += move_line_obj.search([
+ ('move_id', '=', refund.move_id.id),
+ ('credit', '!=', 0.0),
+ ])
+ move_lines.reconcile_partial()
+
+ @api.model
+ def _find_refund(self, amount, partner):
+ records = self.search([
+ ('amount_untaxed', '=', amount),
+ ('type', '=', 'out_refund'),
+ ('state', '=', 'open'),
+ ('partner_id', '=', partner.id),
+ ])
+ return records[:1].id
+
+
+class PrestashopRefund(models.Model):
+ _name = 'prestashop.refund'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'account.invoice': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='account.invoice',
+ required=True,
+ ondelete='cascade',
+ string='Invoice',
+ oldname='openerp_id',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class RefundAdapter(GenericAdapter):
+ _model_name = 'prestashop.refund'
+
+ @property
+ def _prestashop_model(self):
+ return self.backend_record.get_version_ps_key('order_slip')
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
new file mode 100644
index 000000000..8203c27cc
--- /dev/null
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -0,0 +1,269 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, fields
+
+from odoo.addons.connector.exception import MappingError
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import (
+ mapping,
+ ImportMapper,
+ only_create,
+)
+
+from ...backend import prestashop
+from ...unit.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
+
+
+@prestashop
+class RefundImporter(PrestashopImporter):
+ _model_name = 'prestashop.refund'
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ self._import_dependency(
+ record['id_customer'], 'prestashop.res.partner'
+ )
+ self._import_dependency(record['id_order'], 'prestashop.sale.order')
+
+ def _open_refund(self, binding):
+ invoice = binding.odoo_id
+ if invoice.amount_total == float(self.prestashop_record['amount']):
+ invoice.signal_workflow('invoice_open')
+ else:
+ self.backend_record.add_checkpoint(
+ model='account.invoice',
+ record_id=invoice.id,
+ message=_('The refund for order %s has a different amount '
+ 'in PrestaShop and in Odoo.') % invoice.origin
+ )
+
+ def _after_import(self, binding):
+ super(RefundImporter, self)._after_import(binding)
+ self._open_refund(binding)
+
+
+@prestashop
+class RefundMapper(ImportMapper):
+ _model_name = 'prestashop.refund'
+
+ direct = [
+ ('id', 'name'),
+ ('date_add', 'date_invoice'),
+ ]
+
+ @mapping
+ def journal(self, record):
+ journal = self.backend_record.refund_journal_id
+ if not journal:
+ raise MappingError(
+ _('The refund journal must be configured on '
+ 'the PrestaShop Backend.')
+ )
+ return {'journal_id': journal.id}
+
+ def _get_order(self, record):
+ binder = self.binder_for('prestashop.sale.order')
+ return binder.to_internal(record['id_order'])
+
+ @mapping
+ def from_sale_order(self, record):
+ sale_order = self._get_order(record)
+ fiscal_position = None
+ if sale_order.fiscal_position_id:
+ fiscal_position = sale_order.fiscal_position_id.id
+ return {
+ 'origin': sale_order['name'],
+ 'fiscal_position_id': fiscal_position,
+ }
+
+ @mapping
+ def comment(self, record):
+ return {'comment': _('PrestaShop amount: %s') % record['amount']}
+
+ @mapping
+ @only_create
+ def invoice_lines(self, record):
+ slip_details = record.get(
+ 'associations', {}
+ ).get('order_slip_details', []).get(
+ self.backend_record.get_version_ps_key('order_slip_detail'), [])
+ if isinstance(slip_details, dict):
+ slip_details = [slip_details]
+ lines = []
+ order_binding = self._get_order(record)
+ fpos = order_binding.fiscal_position_id
+ shipping_line = self._invoice_line_shipping(record, fpos)
+ if shipping_line:
+ lines.append((0, 0, shipping_line))
+ for slip_detail in slip_details:
+ line = self._invoice_line(slip_detail, fpos)
+ lines.append((0, 0, line))
+ return {'invoice_line_ids': lines}
+
+ def _invoice_line_shipping(self, record, fpos):
+ order_line = self._get_shipping_order_line(record)
+ if not order_line:
+ return None
+ if record['shipping_cost'] == '1':
+ price_unit = order_line['price_unit']
+ else:
+ price_unit = record['shipping_cost_amount']
+ if price_unit in [0.0, '0.00']:
+ return None
+ product = self.env['product.product'].browse(
+ order_line['product_id'][0]
+ )
+ account_id = product.property_account_income_id.id
+ if not account_id:
+ account_id = product.categ_id.property_account_income_categ_id.id
+ if fpos:
+ fpos_obj = self.env['account.fiscal.position']
+ account_id = fpos_obj.map_account(
+ self.session.cr,
+ self.session.uid,
+ fpos,
+ account_id
+ )
+ return {
+ 'quantity': 1,
+ 'product_id': product.id,
+ 'name': order_line['name'],
+ 'invoice_line_tax_id': [(6, 0, order_line['tax_id'])],
+ 'price_unit': price_unit,
+ 'discount': order_line['discount'],
+ 'account_id': account_id,
+ }
+
+ def _get_shipping_order_line(self, record):
+ binder = self.binder_for('prestashop.sale.order')
+ sale_order = binder.to_internal(record['id_order'], unwrap=True)
+ if not sale_order.carrier_id:
+ return None
+ sale_order_line_ids = self.env['sale.order.line'].search([
+ ('order_id', '=', sale_order.id),
+ ('product_id', '=', sale_order.carrier_id.product_id.id),
+ ])
+ if not sale_order_line_ids:
+ return None
+ return sale_order_line_ids[0].read([])
+
+ def _invoice_line(self, record, fpos):
+ order_line = self._get_order_line(record['id_order_detail'])
+ tax_ids = []
+ if order_line is None:
+ product_id = None
+ name = "Order line not found"
+ account_id = None
+ else:
+ product = order_line.product_id
+ product_id = product.id
+ name = order_line.name
+ for tax in order_line.tax_id:
+ tax_ids.append(tax.id)
+ account_id = product.property_account_income_id.id
+ if not account_id:
+ categ = product.categ_id
+ account_id = categ.property_account_income_categ_id.id
+ if fpos and account_id:
+ fpos_obj = self.session.pool['account.fiscal.position']
+ account_id = fpos_obj.map_account(
+ self.session.cr,
+ self.session.uid,
+ fpos,
+ account_id
+ )
+ if record['product_quantity'] == '0':
+ quantity = 1
+ else:
+ quantity = record['product_quantity']
+
+ if self.backend_record.taxes_included:
+ price_unit = record['amount_tax_incl']
+ else:
+ price_unit = record['amount_tax_excl']
+
+ try:
+ price_unit = float(price_unit) / float(quantity)
+ except ValueError:
+ pass
+
+ discount = False
+ if price_unit in ['0.00', ''] and order_line is not None:
+ price_unit = order_line['price_unit']
+ discount = order_line['discount']
+ return {
+ 'quantity': quantity,
+ 'product_id': product_id,
+ 'name': name,
+ 'invoice_line_tax_id': [(6, 0, tax_ids)],
+ 'price_unit': price_unit,
+ 'discount': discount,
+ 'account_id': account_id,
+ }
+
+ def _get_order_line(self, order_details_id):
+ order_line = self.env['prestashop.sale.order.line'].search([
+ ('prestashop_id', '=', order_details_id),
+ ('backend_id', '=', self.backend_record.id),
+ ])
+ if not order_line:
+ return None
+ return order_line.with_context(
+ company_id=self.backend_record.company_id.id)
+
+ @mapping
+ def type(self, record):
+ return {'type': 'out_refund'}
+
+ @mapping
+ def partner_id(self, record):
+ binder = self.binder_for('prestashop.res.partner')
+ partner = binder.to_internal(record['id_customer'], unwrap=True)
+ return {'partner_id': partner.id}
+
+ @mapping
+ def account_id(self, record):
+ binder = self.binder_for('prestashop.sale.order')
+ binder = self.binder_for('prestashop.res.partner')
+ partner = binder.to_internal(record['id_customer'])
+ partner = partner.with_context(
+ company_id=self.backend_record.company_id.id,
+ )
+ return {'account_id': partner.property_account_receivable.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+@prestashop
+class RefundBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.refund'
+
+
+@job(default_channel='root.prestashop')
+def import_refunds(session, backend_id, since_date, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ result = import_batch(
+ session,
+ 'prestashop.refund',
+ backend_id,
+ filters,
+ **kwargs
+ )
+ session.env['prestashop.backend'].browse(backend_id).write({
+ 'import_refunds_since': now_fmt
+ })
+ return result
diff --git a/connector_prestashop/models/account_payment_mode/__init__.py b/connector_prestashop/models/account_payment_mode/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/account_payment_mode/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/account_payment_mode/common.py b/connector_prestashop/models/account_payment_mode/common.py
new file mode 100644
index 000000000..ecb525fa4
--- /dev/null
+++ b/connector_prestashop/models/account_payment_mode/common.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.connector import Binder
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+@prestashop
+class PaymentModeAdapter(GenericAdapter):
+ _model_name = 'account.payment.mode'
+ _prestashop_model = 'orders'
+ _export_node_name = 'order'
+
+ def search(self, filters=None):
+ res = self.client.get(self._prestashop_model, options=filters)
+ if not res['orders']:
+ return []
+ methods = res[self._prestashop_model][self._export_node_name]
+ if isinstance(methods, dict):
+ return [methods]
+ return methods
+
+
+@prestashop
+class PaymentModeBinder(Binder):
+ _model_name = 'account.payment.mode'
+
+ _external_field = 'name'
+
+ def to_openerp(self, external_id, unwrap=False, company=None):
+ if company is None:
+ company = self.backend_record.company_id
+ bindings = self.model.with_context(active_test=False).search(
+ [(self._external_field, '=', external_id),
+ ('company_id', '=', company.id),
+ ]
+ )
+ if not bindings:
+ return self.model.browse()
+ bindings.ensure_one()
+ return bindings
+
+ def bind(self, external_id, binding_id):
+ raise TypeError('%s cannot be synchronized' % self.model._name)
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
new file mode 100644
index 000000000..ee4c34c23
--- /dev/null
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from ...unit.importer import BatchImporter
+from ...backend import prestashop
+
+
+@prestashop
+class PaymentModeBatchImporter(BatchImporter):
+ _model_name = 'account.payment.mode'
+
+ def run(self, filters=None, **kwargs):
+ if filters is None:
+ filters = {}
+ filters['display'] = '[id,payment]'
+ return super(PaymentModeBatchImporter, self).run(
+ filters, **kwargs
+ )
+
+ def _import_record(self, record, **kwargs):
+ """ Create the missing payment method
+
+ If we have only 1 bank journal, we link the payment method to it,
+ otherwise, the user will have to create manually the payment mode.
+ """
+ if self.binder_for().to_internal(record['payment']):
+ return # already exists
+ method_xmlid = 'account.account_payment_method_manual_in'
+ payment_method = self.env.ref(method_xmlid, raise_if_not_found=False)
+ if not payment_method:
+ return
+ journals = self.env['account.journal'].search(
+ [('type', '=', 'bank'),
+ ('company_id', '=', self.backend_record.company_id.id),
+ ],
+ )
+ if len(journals) != 1:
+ return
+ mode = self.model.create({
+ 'name': record['payment'],
+ 'company_id': self.backend_record.company_id.id,
+ 'bank_account_link': 'fixed',
+ 'fixed_journal_id': journals.id,
+ 'payment_method_id': payment_method.id
+ })
+ self.backend_record.add_checkpoint(
+ model=self.model._name,
+ record_id=mode.id,
+ )
diff --git a/connector_prestashop/models/account_tax/__init__.py b/connector_prestashop/models/account_tax/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/account_tax/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/account_tax/common.py b/connector_prestashop/models/account_tax/common.py
new file mode 100644
index 000000000..a83c94968
--- /dev/null
+++ b/connector_prestashop/models/account_tax/common.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class PrestashopAccountTax(models.Model):
+ _name = 'prestashop.account.tax'
+ # Do not inherit from `prestashop.binding.odoo`
+ # because we do not want the constraint `prestashop_erp_uniq`.
+ # This allows us to create duplicated taxes.
+ _inherit = 'prestashop.binding'
+ _inherits = {'account.tax': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='account.tax',
+ string='Tax',
+ required=True,
+ ondelete='cascade'
+ )
+
+
+class AccountTax(models.Model):
+ _inherit = 'account.tax'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.account.tax',
+ inverse_name='openerp_id',
+ string='prestashop Bindings',
+ readonly=True,
+ )
+
+
+@prestashop
+class AccountTaxAdapter(GenericAdapter):
+ _model_name = 'prestashop.account.tax'
+ _prestashop_model = 'taxes'
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
new file mode 100644
index 000000000..ecfceae89
--- /dev/null
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...backend import prestashop
+
+
+@prestashop
+class AccountTaxImporter(AutoMatchingImporter):
+ _model_name = 'prestashop.account.tax'
+ _erp_field = 'amount'
+ _ps_field = 'rate'
+
+ def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
+ if self.backend_record.taxes_included and erp_dict['price_include']:
+ taxes_inclusion_test = True
+ else:
+ taxes_inclusion_test = not erp_dict['price_include']
+ if not taxes_inclusion_test:
+ return False
+ return (erp_dict['type_tax_use'] == 'sale' and
+ erp_dict['amount_type'] == 'percent' and
+ abs(erp_val - float(ps_val)) < 0.01 and
+ self.backend_record.company_id.id == erp_dict['company_id'][0])
diff --git a/connector_prestashop/models/account_tax_group/__init__.py b/connector_prestashop/models/account_tax_group/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/account_tax_group/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
new file mode 100644
index 000000000..397f04c4a
--- /dev/null
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class AccountTaxGroup(models.Model):
+ _inherit = 'account.tax.group'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.account.tax.group',
+ inverse_name='openerp_id',
+ string='PrestaShop Bindings',
+ readonly=True
+ )
+ company_id = fields.Many2one(
+ comodel_name='res.company',
+ index=True,
+ required=True,
+ string='Company',
+ )
+ tax_ids = fields.One2many(
+ comodel_name='account.tax',
+ inverse_name='tax_group_id',
+ string='Taxes',
+ )
+
+
+class PrestashopAccountTaxGroup(models.Model):
+ _name = 'prestashop.account.tax.group'
+ _inherit = 'prestashop.binding'
+ _inherits = {'account.tax.group': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='account.tax.group',
+ string='Tax Group',
+ required=True,
+ ondelete='cascade',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class TaxGroupAdapter(GenericAdapter):
+ _model_name = 'prestashop.account.tax.group'
+ _prestashop_model = 'tax_rule_groups'
diff --git a/connector_prestashop/models/account_tax_group/importer.py b/connector_prestashop/models/account_tax_group/importer.py
new file mode 100644
index 000000000..acbbd895b
--- /dev/null
+++ b/connector_prestashop/models/account_tax_group/importer.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import (
+ ImportMapper,
+ mapping,
+ only_create,
+)
+from ...unit.importer import PrestashopImporter, DirectBatchImporter
+from ...backend import prestashop
+
+
+@prestashop
+class TaxGroupMapper(ImportMapper):
+ _model_name = 'prestashop.account.tax.group'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @only_create
+ @mapping
+ def odoo_id(self, record):
+ tax_group = self.env['account.tax.group'].search([
+ ('name', '=', record['name'])
+ ])
+ if tax_group:
+ return {'odoo_id': tax_group.id}
+
+
+@prestashop
+class TaxGroupImporter(PrestashopImporter):
+ _model_name = 'prestashop.account.tax.group'
+
+
+@prestashop
+class TaxGroupBatchImporter(DirectBatchImporter):
+ _model_name = 'prestashop.account.tax.group'
diff --git a/connector_prestashop/models/binding/__init__.py b/connector_prestashop/models/binding/__init__.py
new file mode 100644
index 000000000..ef553a8fb
--- /dev/null
+++ b/connector_prestashop/models/binding/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from . import common
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
new file mode 100644
index 000000000..335a41445
--- /dev/null
+++ b/connector_prestashop/models/binding/common.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields, api
+from odoo.addons.queue_job.job import job
+from ...unit.importer import PrestashopImporter, BatchImporter
+from ...unit.importer import import_record
+
+
+class PrestashopBinding(models.AbstractModel):
+ _name = 'prestashop.binding'
+ _inherit = 'external.binding'
+ _description = 'PrestaShop Binding (abstract)'
+
+ # 'openerp_id': openerp-side id must be declared in concrete model
+ backend_id = fields.Many2one(
+ comodel_name='prestashop.backend',
+ string='PrestaShop Backend',
+ required=True,
+ ondelete='restrict'
+ )
+ prestashop_id = fields.Integer('ID on PrestaShop')
+
+ _sql_constraints = [
+ ('prestashop_uniq', 'unique(backend_id, prestashop_id)',
+ 'A record with same ID on PrestaShop already exists.'),
+ ]
+
+ @job(default_channel='root.prestashop')
+ def import_record(self, backend, prestashop_id, **kwargs):
+ """ Import a record from PrestaShop """
+ env = backend.get_environment(self._name)
+ importer = env.get_connector_unit(PrestashopImporter)
+ return importer.run(prestashop_id, **kwargs)
+
+ @job(default_channel='root.prestashop')
+ def import_batch(self, backend=None, filters=None, **kwargs):
+ """ Prepare a batch import of records from PrestaShop """
+ env = backend.get_environment(self._name)
+ importer = env.get_connector_unit(BatchImporter)
+ return importer.run(filters=filters, **kwargs)
+
+ @api.multi
+ def resync(self):
+ func = import_record
+ if self.env.context.get('connector_delay'):
+ func = import_record.delay
+ for record in self:
+ func(self.env, self._name, record.backend_id.id,
+ record.prestashop_id)
+ return True
diff --git a/connector_prestashop/models/delivery_carrier/__init__.py b/connector_prestashop/models/delivery_carrier/__init__.py
new file mode 100644
index 000000000..05691dc17
--- /dev/null
+++ b/connector_prestashop/models/delivery_carrier/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import exporter
+from . import importer
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
new file mode 100644
index 000000000..d537d92cc
--- /dev/null
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+
+from odoo import models, fields
+
+from ...backend import prestashop
+from ...unit.backend_adapter import GenericAdapter
+
+_logger = logging.getLogger(__name__)
+
+
+class PrestashopDeliveryCarrier(models.Model):
+ _name = 'prestashop.delivery.carrier'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'delivery.carrier': 'odoo_id'}
+ _description = 'PrestaShop Carrier'
+
+ odoo_id = fields.Many2one(
+ comodel_name='delivery.carrier',
+ string='Delivery carrier',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ id_reference = fields.Integer(
+ string='Reference ID',
+ help="In PrestaShop, carriers can be copied with the same 'Reference "
+ "ID' (only the last copied carrier will be synchronized with the "
+ "ERP)"
+ )
+ name_ext = fields.Char(
+ string='Name in PrestaShop',
+ )
+ active_ext = fields.Boolean(
+ string='Active in PrestaShop',
+ )
+ export_tracking = fields.Boolean(
+ string='Export tracking numbers to PrestaShop',
+ )
+
+
+class DeliveryCarrier(models.Model):
+ _inherit = "delivery.carrier"
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.delivery.carrier',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+ company_id = fields.Many2one(
+ comodel_name='res.company',
+ string='Company',
+ index=True,
+ )
+
+
+@prestashop
+class DeliveryCarrierAdapter(GenericAdapter):
+ _model_name = 'prestashop.delivery.carrier'
+ _prestashop_model = 'carriers'
+
+ def search(self, filters=None):
+ if filters is None:
+ filters = {}
+ filters['filter[deleted]'] = 0
+
+ return super(DeliveryCarrierAdapter, self).search(filters)
diff --git a/connector_prestashop/models/delivery_carrier/exporter.py b/connector_prestashop/models/delivery_carrier/exporter.py
new file mode 100644
index 000000000..2977e4d65
--- /dev/null
+++ b/connector_prestashop/models/delivery_carrier/exporter.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
new file mode 100644
index 000000000..842a0c7ed
--- /dev/null
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import logging
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import (mapping,
+ ImportMapper,
+ )
+from ...unit.importer import (
+ DelayedBatchImporter,
+ PrestashopImporter,
+ import_batch,
+)
+from ...backend import prestashop
+
+_logger = logging.getLogger(__name__)
+
+
+@prestashop
+class DeliveryCarrierImporter(PrestashopImporter):
+ _model_name = ['prestashop.delivery.carrier']
+
+
+@prestashop
+class CarrierImportMapper(ImportMapper):
+ _model_name = 'prestashop.delivery.carrier'
+ direct = [
+ ('name', 'name_ext'),
+ ('name', 'name'),
+ ('id_reference', 'id_reference'),
+ ]
+
+ @mapping
+ def active(self, record):
+ return {'active_ext': record['active'] == '1'}
+
+ @mapping
+ def product_id(self, record):
+ if self.backend_record.shipping_product_id:
+ return {'product_id': self.backend_record.shipping_product_id.id}
+ product = self.env.ref('connector_ecommerce.product_product_shipping')
+ return {'product_id': product.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+
+@prestashop
+class DeliveryCarrierBatchImporter(DelayedBatchImporter):
+ """ Import the PrestaShop Carriers.
+ """
+ _model_name = ['prestashop.delivery.carrier']
+
+ def run(self, filters=None, **kwargs):
+ """ Run the synchronization """
+ record_ids = self.backend_adapter.search(filters=filters)
+ _logger.info('search for prestashop carriers %s returned %s',
+ filters, record_ids)
+ for record_id in record_ids:
+ self._import_record(record_id, **kwargs)
+
+
+@job(default_channel='root.prestashop')
+def import_carriers(session, backend_id, **kwargs):
+ return import_batch(
+ session,
+ 'prestashop.delivery.carrier',
+ backend_id,
+ priority=5,
+ **kwargs
+ )
diff --git a/connector_prestashop/models/mail_message/__init__.py b/connector_prestashop/models/mail_message/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/mail_message/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
new file mode 100644
index 000000000..884f60031
--- /dev/null
+++ b/connector_prestashop/models/mail_message/common.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models, fields
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class MailMessage(models.Model):
+ _inherit = 'mail.message'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.mail.message',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopMailMessage(models.Model):
+ _name = "prestashop.mail.message"
+ _inherit = "prestashop.binding.odoo"
+ _inherits = {'mail.message': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='mail.message',
+ required=True,
+ ondelete='cascade',
+ string='Message',
+ oldname='openerp_id',
+ )
+
+
+@prestashop
+class MailMessageAdapter(GenericAdapter):
+ _model_name = 'prestashop.mail.message'
+
+ @property
+ def _prestashop_model(self):
+ return self.backend_record.get_version_ps_key('messages')
diff --git a/connector_prestashop/models/mail_message/importer.py b/connector_prestashop/models/mail_message/importer.py
new file mode 100644
index 000000000..ef8f244c6
--- /dev/null
+++ b/connector_prestashop/models/mail_message/importer.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...unit.importer import PrestashopImporter, DelayedBatchImporter
+from ...backend import prestashop
+
+
+@prestashop
+class MailMessageMapper(ImportMapper):
+ _model_name = 'prestashop.mail.message'
+
+ direct = [
+ ('message', 'body'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def type(self, record):
+ return {'type': 'comment'}
+
+ @mapping
+ def object_ref(self, record):
+ binder = self.binder_for('prestashop.sale.order')
+ order = binder.to_internal(record['id_order'], unwrap=True)
+ return {
+ 'model': 'sale.order',
+ 'res_id': order.id,
+ }
+
+ @mapping
+ def author_id(self, record):
+ if record['id_customer'] != '0':
+ binder = self.binder_for('prestashop.res.partner')
+ partner = binder.to_internal(record['id_customer'], unwrap=True)
+ return {'author_id': partner.id}
+ return {}
+
+
+@prestashop
+class MailMessageImporter(PrestashopImporter):
+ """ Import one simple record """
+ _model_name = 'prestashop.mail.message'
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ self._import_dependency(record['id_order'], 'prestashop.sale.order')
+ if record['id_customer'] != '0':
+ self._import_dependency(
+ record['id_customer'], 'prestashop.res.partner'
+ )
+
+ def _has_to_skip(self):
+ record = self.prestashop_record
+ if not record.get('id_order'):
+ return 'no id_order'
+ binder = self.binder_for('prestashop.sale.order')
+ order_binding = binder.to_internal(record['id_order'])
+ return record['id_order'] == '0' or not order_binding
+
+
+@prestashop
+class MailMessageBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.mail.message'
diff --git a/connector_prestashop/models/prestashop_backend/__init__.py b/connector_prestashop/models/prestashop_backend/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/prestashop_backend/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
new file mode 100644
index 000000000..7cee33f8a
--- /dev/null
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -0,0 +1,323 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+from contextlib import contextmanager
+
+from odoo import models, fields, api, exceptions, _
+
+from odoo.addons.connector.connector import ConnectorEnvironment
+from ...unit.importer import import_batch, import_record
+from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...unit.backend_adapter import GenericAdapter, api_handle_errors
+from ...unit.version_key import VersionKey
+from ...backend import prestashop
+
+from ..product_template.exporter import export_product_quantities
+from ..product_template.importer import import_inventory
+from ..res_partner.importer import import_customers_since
+from ..delivery_carrier.importer import import_carriers
+from ..product_supplierinfo.importer import import_suppliers
+from ..account_invoice.importer import import_refunds
+from ..product_template.importer import import_products
+from ..sale_order.importer import import_orders_since
+
+
+_logger = logging.getLogger(__name__)
+
+
+class PrestashopBackend(models.Model):
+ _name = 'prestashop.backend'
+ _description = 'PrestaShop Backend Configuration'
+ _inherit = 'connector.backend'
+
+ _backend_type = 'prestashop'
+
+ def _select_versions(self):
+ """ Available versions
+
+ Can be inherited to add custom versions.
+ """
+ return [
+ ('1.5', '< 1.6.0.9'),
+ ('1.6.0.9', '1.6.0.9 - 1.6.0.10'),
+ ('1.6.0.11', '>= 1.6.0.11 - <1.6.1.2'),
+ ('1.6.1.2', '=1.6.1.2')
+ ]
+ version = fields.Selection(
+ selection='_select_versions',
+ string='Version',
+ required=True,
+ )
+ location = fields.Char('Location')
+ webservice_key = fields.Char(
+ string='Webservice key',
+ help="You have to put it in 'username' of the PrestaShop "
+ "Webservice api path invite"
+ )
+ warehouse_id = fields.Many2one(
+ comodel_name='stock.warehouse',
+ string='Warehouse',
+ required=True,
+ help='Warehouse used to compute the stock quantities.'
+ )
+ stock_location_id = fields.Many2one(
+ comodel_name='stock.location',
+ string='Stock Location',
+ help='Location used to import stock quantities.'
+ )
+ pricelist_id = fields.Many2one(
+ comodel_name='product.pricelist',
+ string='Pricelist',
+ required=True,
+ default=lambda self: self._default_pricelist_id(),
+ help="Pricelist used in sales orders",
+ )
+ sale_team_id = fields.Many2one(
+ comodel_name='crm.team',
+ string='Sales Team',
+ help="Sales Team assigned to the imported sales orders.",
+ )
+
+ refund_journal_id = fields.Many2one(
+ comodel_name='account.journal',
+ string='Refund Journal',
+ )
+
+ taxes_included = fields.Boolean("Use tax included prices")
+ import_partners_since = fields.Datetime('Import partners since')
+ import_orders_since = fields.Datetime('Import Orders since')
+ import_products_since = fields.Datetime('Import Products since')
+ import_refunds_since = fields.Datetime('Import Refunds since')
+ import_suppliers_since = fields.Datetime('Import Suppliers since')
+ language_ids = fields.One2many(
+ comodel_name='prestashop.res.lang',
+ inverse_name='backend_id',
+ string='Languages',
+ )
+ company_id = fields.Many2one(
+ comodel_name='res.company',
+ index=True,
+ required=True,
+ default=lambda self: self.env['res.company']._company_default_get(
+ 'prestashop.backend'),
+ string='Company',
+ )
+ discount_product_id = fields.Many2one(
+ comodel_name='product.product',
+ index=True,
+ required=True,
+ string='Discount Product',
+ )
+ shipping_product_id = fields.Many2one(
+ comodel_name='product.product',
+ index=True,
+ required=True,
+ string='Shipping Product',
+ )
+
+ @api.model
+ def _default_pricelist_id(self):
+ return self.env['product.pricelist'].search([], limit=1)
+
+ @api.multi
+ def get_environment(self, model_name,):
+ self.ensure_one()
+ return ConnectorEnvironment(self, model_name)
+
+ @api.multi
+ def synchronize_metadata(self):
+ for backend in self:
+ for model_name in [
+ 'prestashop.shop.group',
+ 'prestashop.shop'
+ ]:
+ # import directly, do not delay because this
+ # is a fast operation, a direct return is fine
+ # and it is simpler to import them sequentially
+ self.env[model_name].import_batch(backend=backend)
+ return True
+
+ @api.multi
+ def synchronize_basedata(self):
+ for backend in self:
+ for model_name in [
+ 'prestashop.res.lang',
+ 'prestashop.res.country',
+ 'prestashop.res.currency',
+ 'prestashop.account.tax',
+ ]:
+ env = backend.get_environment(model_name)
+ importer = env.get_connector_unit(AutoMatchingImporter)
+ importer.run()
+ self.env['prestashop.account.tax.group'].import_batch(
+ backend=backend)
+ self.env['prestashop.sale.order.state'].import_batch(
+ backend=backend)
+ return True
+
+ @api.multi
+ def _check_connection(self):
+ self.ensure_one()
+ env = self.get_environment(self._name)
+ adapter = env.get_connector_unit(GenericAdapter)
+ with api_handle_errors('Connection failed'):
+ adapter.head()
+
+ @api.multi
+ def button_check_connection(self):
+ self._check_connection()
+ raise exceptions.UserError(_('Connection successful'))
+
+ @api.multi
+ def import_customers_since(self):
+ for backend_record in self:
+ connector_env = backend_record.get_environment('res.partner')
+ since_date = backend_record.import_partners_since
+ connector_env.env['res.partner'].with_delay(
+ priority=10
+ ).import_customers_since(
+ backend_record=backend_record, since_date=since_date)
+ return True
+
+ @api.multi
+ def import_products(self):
+ for backend_record in self:
+ since_date = backend_record.import_products_since
+ backend_record.env['prestashop.product.template'].with_delay(
+ priority=10).import_products(backend_record, since_date)
+ return True
+
+ @api.multi
+ def import_carriers(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ import_carriers.delay(session, backend_record.id, priority=10)
+ return True
+
+ @api.multi
+ def update_product_stock_qty(self):
+ for backend_record in self:
+ backend_record.env['prestashop.product.template']\
+ .with_delay().export_product_quantities(backend=backend_record)
+ backend_record.env['prestashop.product.product']\
+ .with_delay().export_product_quantities(backend=backend_record)
+ return True
+
+ @api.multi
+ def import_stock_qty(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ import_inventory.delay(session, backend_record.id)
+
+ @api.multi
+ def import_sale_orders(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ since_date = backend_record.import_orders_since
+ import_orders_since.delay(
+ session,
+ backend_record.id,
+ since_date,
+ priority=5,
+ )
+ return True
+
+ @api.multi
+ def import_payment_modes(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ import_batch.delay(session, 'account.payment.mode',
+ backend_record.id)
+ return True
+
+ @api.multi
+ def import_refunds(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ since_date = backend_record.import_refunds_since
+ import_refunds.delay(session, backend_record.id, since_date)
+ return True
+
+ @api.multi
+ def import_suppliers(self):
+ session = ConnectorSession.from_env(self.env)
+ for backend_record in self:
+ since_date = backend_record.import_suppliers_since
+ import_suppliers.delay(session, backend_record.id, since_date)
+ return True
+
+ def get_version_ps_key(self, key):
+ self.ensure_one()
+ env = self.get_environment('_prestashop.version.key')
+ keys = env.get_connector_unit(VersionKey)
+ return keys.get_key(key)
+
+ @api.model
+ def _scheduler_update_product_stock_qty(self, domain=None):
+ self.search(domain or []).update_product_stock_qty()
+
+ @api.model
+ def _scheduler_import_sale_orders(self, domain=None):
+ self.search(domain or []).import_sale_orders()
+
+ @api.model
+ def _scheduler_import_customers(self, domain=None):
+ self.search(domain or []).import_customers_since()
+
+ @api.model
+ def _scheduler_import_products(self, domain=None):
+ self.search(domain or []).import_products()
+
+ @api.model
+ def _scheduler_import_carriers(self, domain=None):
+ self.search(domain or []).import_carriers()
+
+ @api.model
+ def _scheduler_import_payment_methods(self, domain=None):
+ backends = self.search(domain or [])
+ backends.import_payment_methods()
+ backends.import_refunds()
+
+ @api.model
+ def _scheduler_import_suppliers(self, domain=None):
+ self.search(domain or []).import_suppliers()
+
+ @api.multi
+ def import_record(self, model_name, ext_id):
+ self.ensure_one()
+ session = ConnectorSession.from_env(self.env)
+ import_record(session, model_name, self.id, ext_id)
+ return True
+
+
+class PrestashopShopGroup(models.Model):
+ _name = 'prestashop.shop.group'
+ _inherit = 'prestashop.binding'
+ _description = 'PrestaShop Shop Group'
+
+ name = fields.Char('Name', required=True)
+ shop_ids = fields.One2many(
+ comodel_name='prestashop.shop',
+ inverse_name='shop_group_id',
+ readonly=True,
+ string="Shops",
+ )
+ company_id = fields.Many2one(
+ related='backend_id.company_id',
+ comodel_name="res.company",
+ string='Company'
+ )
+
+
+@prestashop
+class NoModelAdapter(GenericAdapter):
+ """ Used to test the connection """
+ _model_name = 'prestashop.backend'
+ _prestashop_model = ''
+
+
+@prestashop
+class ShopGroupAdapter(GenericAdapter):
+ _model_name = 'prestashop.shop.group'
+ _prestashop_model = 'shop_groups'
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
new file mode 100644
index 000000000..08204cf53
--- /dev/null
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import _
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...unit.importer import PrestashopImporter, DirectBatchImporter
+from ...backend import prestashop
+
+
+@prestashop
+class ShopGroupImportMapper(ImportMapper):
+ _model_name = 'prestashop.shop.group'
+
+ direct = [('name', 'name')]
+
+ @mapping
+ def name(self, record):
+ name = record['name']
+ if name is None:
+ name = _('Undefined')
+ return {'name': name}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+@prestashop
+class ShopGroupImporter(PrestashopImporter):
+ _model_name = 'prestashop.shop.group'
+
+
+@prestashop
+class ShopGroupBatchImporter(DirectBatchImporter):
+ _model_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/product_category/__init__.py b/connector_prestashop/models/product_category/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/product_category/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/product_category/common.py b/connector_prestashop/models/product_category/common.py
new file mode 100644
index 000000000..645ad7876
--- /dev/null
+++ b/connector_prestashop/models/product_category/common.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models, fields
+
+from ...unit.backend_adapter import GenericAdapter
+
+from ...backend import prestashop
+
+
+class ProductCategory(models.Model):
+ _inherit = 'product.category'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.category',
+ inverse_name='odoo_id',
+ string="PrestaShop Bindings",
+ )
+
+
+class PrestashopProductCategory(models.Model):
+ _name = 'prestashop.product.category'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.category': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.category',
+ required=True,
+ ondelete='cascade',
+ string='Product Category',
+ oldname='openerp_id',
+ )
+ default_shop_id = fields.Many2one(comodel_name='prestashop.shop')
+ date_add = fields.Datetime(
+ string='Created At (on PrestaShop)',
+ readonly=True
+ )
+ date_upd = fields.Datetime(
+ string='Updated At (on PrestaShop)',
+ readonly=True
+ )
+ description = fields.Html(
+ string='Description', translate=True,
+ help='HTML description from PrestaShop')
+ link_rewrite = fields.Char(string='Friendly URL', translate=True)
+ meta_description = fields.Char('Meta description', translate=True)
+ meta_keywords = fields.Char(string='Meta keywords', translate=True)
+ meta_title = fields.Char(string='Meta title', translate=True)
+ active = fields.Boolean(string='Active', default=True)
+ position = fields.Integer(string='Position')
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class ProductCategoryAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.category'
+ _prestashop_model = 'categories'
+ _export_node_name = 'category'
+ _export_node_name_res = 'category'
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
new file mode 100644
index 000000000..6370e852e
--- /dev/null
+++ b/connector_prestashop/models/product_category/importer.py
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import _
+from odoo.addons.connector.unit.mapper import (mapping,
+ ImportMapper)
+from odoo.addons.connector.unit.mapper import external_to_m2o
+from ...unit.importer import TranslatableRecordImporter, DelayedBatchImporter
+from ...backend import prestashop
+
+import datetime
+import logging
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt import PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class ProductCategoryMapper(ImportMapper):
+ _model_name = 'prestashop.product.category'
+
+ direct = [
+ ('description', 'description'),
+ ('link_rewrite', 'link_rewrite'),
+ ('meta_description', 'meta_description'),
+ ('meta_keywords', 'meta_keywords'),
+ ('meta_title', 'meta_title'),
+ (external_to_m2o('id_shop_default'), 'default_shop_id'),
+ ('active', 'active'),
+ ('position', 'position')
+ ]
+
+ @mapping
+ def name(self, record):
+ if record['name'] is None:
+ return {'name': ''}
+ return {'name': record['name']}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def parent_id(self, record):
+ if record['id_parent'] == '0':
+ return {}
+ category = self.binder_for('prestashop.product.category').to_internal(
+ record['id_parent'], unwrap=True)
+ return {
+ 'parent_id': category.id,
+ }
+
+ @mapping
+ def data_add(self, record):
+ if record['date_add'] == '0000-00-00 00:00:00':
+ return {'date_add': datetime.datetime.now()}
+ return {'date_add': record['date_add']}
+
+ @mapping
+ def data_upd(self, record):
+ if record['date_upd'] == '0000-00-00 00:00:00':
+ return {'date_upd': datetime.datetime.now()}
+ return {'date_upd': record['date_upd']}
+
+
+@prestashop
+class ProductCategoryImporter(TranslatableRecordImporter):
+ _model_name = [
+ 'prestashop.product.category',
+ ]
+
+ _translatable_fields = {
+ 'prestashop.product.category': [
+ 'name',
+ 'description',
+ 'link_rewrite',
+ 'meta_description',
+ 'meta_keywords',
+ 'meta_title'
+ ],
+ }
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ if record['id_parent'] != '0':
+ try:
+ self._import_dependency(record['id_parent'],
+ 'prestashop.product.category')
+ except PrestaShopWebServiceError, e:
+ msg = _(
+ 'Parent category for `%s` '
+ 'cannot be imported. '
+ 'Error: %s'
+ )
+ binder = self.binder_for()
+ category = binder.to_internal(record['id'])
+ if category:
+ name = category.name
+ else:
+ # not imported yet, retrieve name in default lang
+ values = self._split_per_language(
+ record, fields=['name', ])
+ name = values[self._default_language]['name']
+
+ self.backend_record.add_checkpoint(
+ model=category._name,
+ record_id=category.id,
+ message=msg % (name, str(e))
+ )
+
+
+@prestashop
+class ProductCategoryBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.product.category'
diff --git a/connector_prestashop/models/product_image/__init__.py b/connector_prestashop/models/product_image/__init__.py
new file mode 100644
index 000000000..be91db619
--- /dev/null
+++ b/connector_prestashop/models/product_image/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import deleter
+from . import importer
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
new file mode 100644
index 000000000..c6dc40f55
--- /dev/null
+++ b/connector_prestashop/models/product_image/common.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import base64
+
+from odoo import models, fields
+
+from ...unit.backend_adapter import (
+ PrestaShopCRUDAdapter,
+ PrestaShopWebServiceImage,
+)
+from ...backend import prestashop
+
+
+class ProductImage(models.Model):
+ _inherit = 'base_multi_image.image'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.image',
+ inverse_name='openerp_id',
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopProductImage(models.Model):
+ _name = 'prestashop.product.image'
+ _inherit = 'prestashop.binding'
+ _inherits = {'base_multi_image.image': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='base_multi_image.image',
+ required=True,
+ ondelete='cascade',
+ string='Product image',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class ProductImageAdapter(PrestaShopCRUDAdapter):
+ _model_name = 'prestashop.product.image'
+ _prestashop_image_model = 'products'
+ _prestashop_model = '/images/products'
+ _export_node_name = '/images/products'
+ _export_node_name_res = 'image'
+
+ def read(self, product_tmpl_id, image_id, options=None):
+ api = PrestaShopWebServiceImage(self.prestashop.api_url,
+ self.prestashop.webservice_key)
+ return api.get_image(
+ self._prestashop_image_model,
+ product_tmpl_id,
+ image_id,
+ options=options
+ )
+
+ def create(self, attributes=None):
+ api = PrestaShopWebServiceImage(
+ self.prestashop.api_url, self.prestashop.webservice_key)
+ # TODO: odoo logic in the adapter? :-(
+ url = '{}/{}'.format(self._prestashop_model, attributes['id_product'])
+ return api.add(url, files=[(
+ 'image',
+ attributes['filename'].encode('utf-8'),
+ base64.b64decode(attributes['content'])
+ )])
+
+ def write(self, id, attributes=None):
+ api = PrestaShopWebServiceImage(
+ self.prestashop.api_url, self.prestashop.webservice_key)
+ # TODO: odoo logic in the adapter? :-(
+ url = '{}/{}'.format(self._prestashop_model, attributes['id_product'])
+ url_del = '{}/{}/{}/{}'.format(
+ api._api_url, self._prestashop_model, attributes['id_product'], id)
+ try:
+ api._execute(url_del, 'DELETE')
+ except:
+ pass
+ return api.add(url, files=[(
+ 'image',
+ attributes['filename'].encode('utf-8'),
+ base64.b64decode(attributes['content'])
+ )])
+
+ def delete(self, resource, id):
+ """ Delete a record on the external system """
+ api = PrestaShopWebServiceImage(
+ self.prestashop.api_url, self.prestashop.webservice_key)
+ return api.delete(resource, resource_ids=id)
diff --git a/connector_prestashop/models/product_image/deleter.py b/connector_prestashop/models/product_image/deleter.py
new file mode 100644
index 000000000..c64863822
--- /dev/null
+++ b/connector_prestashop/models/product_image/deleter.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.deleter import PrestashopDeleter
+from ...backend import prestashop
+
+
+@prestashop
+class ProductImageDelete(PrestashopDeleter):
+ _model_name = 'prestashop.product.image'
+
+ def delete(self, id):
+ """ Delete a record on the external system """
+ return self._call('%s.delete' % self._prestashop_model, [int(id)])
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
new file mode 100644
index 000000000..12a5e385d
--- /dev/null
+++ b/connector_prestashop/models/product_image/importer.py
@@ -0,0 +1,119 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import (mapping,
+ ImportMapper)
+
+from ...backend import prestashop
+from ...unit.importer import PrestashopImporter
+
+import mimetypes
+import logging
+
+from odoo import _
+
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt import PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class ProductImageMapper(ImportMapper):
+ _model_name = 'prestashop.product.image'
+
+ direct = [
+ # ('content', 'file_db_store'),
+ ]
+
+ @mapping
+ def from_template(self, record):
+ binder = self.binder_for('prestashop.product.template')
+ template = binder.to_internal(record['id_product'], unwrap=True)
+ name = '%s_%s' % (template.name, record['id_image'])
+ return {'owner_id': template.id, 'name': name}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def extension(self, record):
+ return {'extension': mimetypes.guess_extension(record['type'])}
+
+ @mapping
+ def image_url(self, record):
+ return {'url': record['full_public_url']}
+
+ @mapping
+ def filename(self, record):
+ return {'filename': '%s.jpg' % record['id_image']}
+
+ @mapping
+ def storage(self, record):
+ return {'storage': 'url'}
+ # return {'storage': 'db'}
+
+ @mapping
+ def owner_model(self, record):
+ return {'owner_model': 'product.template'}
+
+
+@prestashop
+class ProductImageImporter(PrestashopImporter):
+ _model_name = [
+ 'prestashop.product.image',
+ ]
+
+ def _get_prestashop_data(self):
+ """ Return the raw PrestaShop data for ``self.prestashop_id`` """
+ return self.backend_adapter.read(self.template_id, self.image_id)
+
+ def run(self, template_id, image_id, **kwargs):
+ self.template_id = template_id
+ self.image_id = image_id
+
+ try:
+ super(ProductImageImporter, self).run(image_id, **kwargs)
+ except PrestaShopWebServiceError as error:
+ binder = self.binder_for('prestashop.product.template')
+ template = binder.to_internal(template_id, unwrap=True)
+ if template:
+ msg = _(
+ 'Import of image id `%s` failed. '
+ 'Error: `%s`'
+ ) % (image_id, error.msg)
+ self.backend_record.add_checkpoint(
+ model='product.template',
+ record_id=template.id,
+ message=msg)
+ else:
+ msg = _(
+ 'Import of image id `%s` of PrestaShop product '
+ 'with id `%s` failed. '
+ 'Error: `%s`'
+ ) % (image_id, template_id, error.msg)
+ self.backend_record.add_checkpoint(message=msg)
+
+
+@job(default_channel='root.prestashop')
+def import_product_image(session, model_name, backend_id, product_tmpl_id,
+ image_id, **kwargs):
+ """Import a product image"""
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ env = backend.get_environment(model_name, session=session)
+ with env.session.change_context(ctx):
+ importer = env.get_connector_unit(PrestashopImporter)
+ return importer.run(product_tmpl_id, image_id)
+
+
+@job(default_channel='root.prestashop')
+def set_product_image_variant(
+ session, model_name, backend_id, combination_ids):
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ env = backend.get_environment(model_name, session=session)
+ importer = env.get_connector_unit(PrestashopImporter)
+ importer.set_variant_images(combination_ids, **kwargs)
diff --git a/connector_prestashop/models/product_pricelist/__init__.py b/connector_prestashop/models/product_pricelist/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/product_pricelist/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
new file mode 100644
index 000000000..664bed47f
--- /dev/null
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class ProductPricelist(models.Model):
+ _inherit = 'product.pricelist'
+
+ prestashop_groups_bind_ids = fields.One2many(
+ comodel_name='prestashop.groups.pricelist',
+ inverse_name='openerp_id',
+ string='PrestaShop user groups',
+ )
+
+
+class PrestashopGroupsPricelist(models.Model):
+ _name = 'prestashop.groups.pricelist'
+ _inherit = 'prestashop.binding'
+ _inherits = {'product.pricelist': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='product.pricelist',
+ required=True,
+ ondelete='cascade',
+ string='Openerp Pricelist',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class PricelistAdapter(GenericAdapter):
+ _model_name = 'prestashop.groups.pricelist'
+ _prestashop_model = 'groups'
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
new file mode 100644
index 000000000..00b8f7999
--- /dev/null
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import (
+ ImportMapper,
+ mapping,
+)
+from ...unit.importer import TranslatableRecordImporter
+from ...backend import prestashop
+
+
+@prestashop
+class ProductPricelistMapper(ImportMapper):
+ _model_name = 'prestashop.groups.pricelist'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @mapping
+ def static(self, record):
+ return {'active': True}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def versions(self, record):
+ item = {
+ 'min_quantity': 0,
+ 'sequence': 5,
+ 'base': 'list_price',
+ 'compute_price': 'percentage',
+ 'percent_price': float(record['reduction']),
+ }
+ return {'item_ids': [(5,), (0, 0, item)]}
+
+
+@prestashop
+class ProductPricelistImporter(TranslatableRecordImporter):
+ _model_name = [
+ 'prestashop.groups.pricelist',
+ ]
+
+ _translatable_fields = {
+ 'prestashop.groups.pricelist': ['name'],
+ }
diff --git a/connector_prestashop/models/product_product/__init__.py b/connector_prestashop/models/product_product/__init__.py
new file mode 100644
index 000000000..b76444be0
--- /dev/null
+++ b/connector_prestashop/models/product_product/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import deleter
+from . import exporter
+from . import importer
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
new file mode 100644
index 000000000..c8ff8a33a
--- /dev/null
+++ b/connector_prestashop/models/product_product/common.py
@@ -0,0 +1,256 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+from odoo.addons import decimal_precision as dp
+
+from odoo.addons.queue_job.job import job
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+from exporter import CombinationInventoryExporter
+
+
+class ProductProduct(models.Model):
+ _inherit = 'product.product'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.combination',
+ inverse_name='openerp_id',
+ copy=False,
+ string='PrestaShop Bindings',
+ )
+ prestashop_combinations_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.combination',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings (combinations)',
+ )
+ default_on = fields.Boolean(string='Default On')
+ impact_price = fields.Float(
+ string="Price Impact", digits=dp.get_precision('Product Price'))
+
+ @api.multi
+ def update_prestashop_qty(self):
+ for product in self:
+ for combination_binding in product.prestashop_bind_ids:
+ combination_binding.recompute_prestashop_qty()
+
+ @api.multi
+ def update_prestashop_quantities(self):
+ for product in self:
+ product_template = product.product_tmpl_id
+ prestashop_combinations = (
+ len(product_template.product_variant_ids) > 1 and
+ product_template.product_variant_ids) or []
+ if not prestashop_combinations:
+ for prestashop_product in product_template.prestashop_bind_ids:
+ prestashop_product.recompute_prestashop_qty()
+ else:
+ for prestashop_combination in prestashop_combinations:
+ for combination_binding in \
+ prestashop_combination.prestashop_bind_ids:
+ combination_binding.recompute_prestashop_qty()
+ return True
+
+ @api.multi
+ @api.depends('impact_price', 'product_tmpl_id.list_price')
+ def _compute_lst_price(self):
+ for product in self:
+ price = product.list_price + product.impact_price
+ if 'uom' in self.env.context:
+ # `uos_id` comes from `product_uos`
+ # which could be not installed
+ uom = hasattr(product, 'uos_id') \
+ and product.uos_id or product.uom_id
+ price = uom._compute_price(
+ product.uom_id.id, price, self.env.context['uom'])
+ product.lst_price = price
+
+ lst_price = fields.Float(
+ compute='_compute_lst_price')
+
+ @api.multi
+ def _set_variants_default_on(self, default_on_list=None):
+ if self.env.context.get('skip_check_default_variant', False):
+ return True
+ templates = self.mapped('product_tmpl_id')
+ for template in templates:
+ variants = template.with_context(
+ skip_check_default_variant=True
+ ).product_variant_ids.filtered('default_on')
+ if not variants:
+ active_variants = template.with_context(
+ skip_check_default_variant=True
+ ).product_variant_ids.filtered('active')
+ active_variants[:1].write({'default_on': True})
+ elif len(variants) > 1:
+ if default_on_list:
+ variants.filtered(
+ lambda x: x.id not in default_on_list
+ ).write({'default_on': False})
+ else:
+ variants[1:].write({'default_on': False})
+
+ @api.model
+ def create(self, vals):
+ res = super(ProductProduct, self).create(vals)
+ res._set_variants_default_on()
+ return res
+
+ @api.multi
+ def write(self, vals):
+ if not vals.get('active', True):
+ vals['default_on'] = False
+ res = super(ProductProduct, self).write(vals)
+ default_on_list = vals.get('default_on', False) and self.ids or []
+ self._set_variants_default_on(default_on_list)
+ return res
+
+ @api.multi
+ def unlink(self):
+ self.write({'default_on': False})
+ res = super(ProductProduct, self).unlink()
+ return res
+
+ @api.multi
+ def open_product_template(self):
+ """
+ Utility method used to add an "Open Product Template"
+ button in product.product views
+ """
+ self.ensure_one()
+ return {'type': 'ir.actions.act_window',
+ 'res_model': 'product.template',
+ 'view_mode': 'form',
+ 'res_id': self.product_tmpl_id.id,
+ 'target': 'new',
+ 'flags': {'form': {'action_buttons': True}}}
+
+
+class PrestashopProductCombination(models.Model):
+ _name = 'prestashop.product.combination'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.product': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.product',
+ string='Product',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ main_template_id = fields.Many2one(
+ comodel_name='prestashop.product.template',
+ string='Main Template',
+ required=True,
+ ondelete='cascade',
+ )
+ quantity = fields.Float(
+ string='Computed Quantity',
+ help='Last computed quantity to send on PrestaShop.'
+ )
+ reference = fields.Char(string='Original reference')
+
+ @api.multi
+ def recompute_prestashop_qty(self):
+ for product_binding in self:
+ if product_binding.quantity != product_binding.qty_available:
+ product_binding.quantity = product_binding.qty_available
+ return True
+
+ @api.model
+ def _prestashop_qty(self, product):
+ return product.qty_available
+
+ @job(default_channel='root.prestashop')
+ def export_inventory(self, backend, fields=None, **kwargs):
+ """ Export the inventory configuration and quantity of a product. """
+ env = backend.get_environment(self._name)
+ inventory_exporter = env.get_connector_unit(
+ CombinationInventoryExporter)
+ return inventory_exporter.run(self.id, fields, **kwargs)
+
+ @api.model
+ @job(default_channel='root.prestashop')
+ def export_product_quantities(self, backend):
+ self.search([
+ ('backend_id', 'in', backend.ids),
+ ]).recompute_prestashop_qty()
+
+
+class ProductAttribute(models.Model):
+ _inherit = 'product.attribute'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.combination.option',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings (combinations)',
+ )
+
+
+class PrestashopProductCombinationOption(models.Model):
+ _name = 'prestashop.product.combination.option'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.attribute': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.attribute',
+ string='Attribute',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ prestashop_position = fields.Integer('PrestaShop Position')
+ group_type = fields.Selection([
+ ('color', 'Color'),
+ ('radio', 'Radio'),
+ ('select', 'Select')], string='Type', default='select')
+ public_name = fields.Char(string='Public Name', translate=True)
+
+
+class ProductAttributeValue(models.Model):
+ _inherit = 'product.attribute.value'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.combination.option.value',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopProductCombinationOptionValue(models.Model):
+ _name = 'prestashop.product.combination.option.value'
+ _inherit = 'prestashop.binding'
+ _inherits = {'product.attribute.value': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.attribute.value',
+ string='Attribute',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ prestashop_position = fields.Integer(
+ string='PrestaShop Position',
+ default=1,
+ )
+ id_attribute_group = fields.Many2one(
+ comodel_name='prestashop.product.combination.option')
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class ProductCombinationAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.combination'
+ _prestashop_model = 'combinations'
+ _export_node_name = 'combination'
+
+
+@prestashop
+class ProductCombinationOptionAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.combination.option'
+ _prestashop_model = 'product_options'
+ _export_node_name = 'product_options'
diff --git a/connector_prestashop/models/product_product/deleter.py b/connector_prestashop/models/product_product/deleter.py
new file mode 100644
index 000000000..790efe7e7
--- /dev/null
+++ b/connector_prestashop/models/product_product/deleter.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.deleter import PrestashopDeleter
+from ...backend import prestashop
+
+
+@prestashop
+class ProductCombinationDelete(PrestashopDeleter):
+ _model_name = 'prestashop.product.combination'
+
+ def delete(self, id):
+ """ Delete a record on the external system """
+ return self._call('%s.delete' % self._prestashop_model, [int(id)])
diff --git a/connector_prestashop/models/product_product/exporter.py b/connector_prestashop/models/product_product/exporter.py
new file mode 100644
index 000000000..5f6f91c12
--- /dev/null
+++ b/connector_prestashop/models/product_product/exporter.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from ...backend import prestashop
+from ..product_template.exporter import ProductInventoryExporter
+
+
+@prestashop
+class CombinationInventoryExporter(ProductInventoryExporter):
+ _model_name = ['prestashop.product.combination']
+
+ def get_filter(self, template):
+ return {
+ 'filter[id_product]': template.main_template_id.prestashop_id,
+ 'filter[id_product_attribute]': template.prestashop_id,
+ }
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
new file mode 100644
index 000000000..1c2b33c3e
--- /dev/null
+++ b/connector_prestashop/models/product_product/importer.py
@@ -0,0 +1,396 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models
+
+from odoo.addons.connector.unit.backend_adapter import BackendAdapter
+from odoo.addons.connector.unit.mapper import (
+ mapping,
+ only_create,
+ ImportMapper,
+)
+from ...unit.importer import (
+ PrestashopImporter,
+ import_batch,
+ TranslatableRecordImporter,
+ DelayedBatchImporter,
+)
+from ...unit.backend_adapter import GenericAdapter, PrestaShopCRUDAdapter
+from ...backend import prestashop
+
+import logging
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt import PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class ProductCombinationImporter(PrestashopImporter):
+ _model_name = 'prestashop.product.combination'
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ ps_key = self.backend_record.get_version_ps_key('product_option_value')
+ option_values = record.get('associations', {}).get(
+ 'product_option_values', {}).get(ps_key, [])
+ if not isinstance(option_values, list):
+ option_values = [option_values]
+ backend_adapter = self.unit_for(
+ BackendAdapter, 'prestashop.product.combination.option.value')
+ for option_value in option_values:
+ option_value = backend_adapter.read(option_value['id'])
+ self._import_dependency(
+ option_value['id_attribute_group'],
+ 'prestashop.product.combination.option')
+ self._import_dependency(
+ option_value['id'],
+ 'prestashop.product.combination.option.value')
+
+ def _after_import(self, binding):
+ super(ProductCombinationImporter, self)._after_import(binding)
+ self.import_supplierinfo(binding)
+
+ def set_variant_images(self, combinations):
+ backend_adapter = self.unit_for(
+ PrestaShopCRUDAdapter, 'prestashop.product.combination')
+ for combination in combinations:
+ try:
+ record = backend_adapter.read(combination['id'])
+ associations = record.get('associations', {})
+ ps_images = associations.get('images', {}).get(
+ self.backend_record.get_version_ps_key('image'), {})
+ binder = self.binder_for('prestashop.product.image')
+ if not isinstance(ps_images, list):
+ ps_images = [ps_images]
+ if 'id' in ps_images[0]:
+ images = [
+ binder.to_internal(x.get('id'), unwrap=True)
+ for x in ps_images
+ ]
+ else:
+ images = []
+ if images:
+ product_binder = self.binder_for(
+ 'prestashop.product.combination')
+ product_product = product_binder.to_internal(
+ combination['id'], unwrap=True)
+ product_product.with_context(
+ connector_no_export=True).write(
+ {'image_ids': [(6, 0, [x.id for x in images])]})
+ except PrestaShopWebServiceError:
+ # TODO: don't we track anything here? Maybe a checkpoint?
+ pass
+
+ def import_supplierinfo(self, binding):
+ ps_id = self._get_prestashop_data()['id']
+ filters = {
+ # 'filter[id_product]': ps_id,
+ 'filter[id_product_attribute]': ps_id
+ }
+ import_batch(
+ self.session,
+ 'prestashop.product.supplierinfo',
+ self.backend_record.id,
+ filters=filters
+ )
+ ps_product_template = binding
+ ps_supplierinfos = self.env['prestashop.product.supplierinfo']. \
+ search([('product_tmpl_id', '=', ps_product_template.id)])
+ for ps_supplierinfo in ps_supplierinfos:
+ try:
+ ps_supplierinfo.resync()
+ except PrestaShopWebServiceError:
+ ps_supplierinfo.odoo_id.unlink()
+
+
+@prestashop
+class ProductCombinationMapper(ImportMapper):
+ _model_name = 'prestashop.product.combination'
+
+ direct = [
+ ]
+
+ from_main = []
+
+ @mapping
+ def combination_default(self, record):
+ return {'default_on': bool(int(record['default_on'] or 0))}
+
+ @mapping
+ def product_tmpl_id(self, record):
+ template = self.get_main_template_binding(record)
+ return {'product_tmpl_id': template.openerp_id.id}
+
+ @mapping
+ def from_main_template(self, record):
+ main_template = self.get_main_template_binding(record)
+ result = {}
+ for attribute in self.from_main:
+ if attribute not in main_template:
+ continue
+ if hasattr(main_template[attribute], 'id'):
+ result[attribute] = main_template[attribute].id
+ elif type(main_template[attribute]) is models.BaseModel:
+ ids = []
+ for element in main_template[attribute]:
+ ids.append(element.id)
+ result[attribute] = [(6, 0, ids)]
+ else:
+ result[attribute] = main_template[attribute]
+ return result
+
+ def get_main_template_binding(self, record):
+ template_binder = self.binder_for('prestashop.product.template')
+ return template_binder.to_internal(record['id_product'])
+
+ def _get_option_value(self, record):
+ option_values = record.get('associations', {}).get(
+ 'product_option_values', {}).get(
+ self.backend_record.get_version_ps_key('product_option_value'), [])
+ if type(option_values) is dict:
+ option_values = [option_values]
+
+ for option_value in option_values:
+ option_value_binder = self.binder_for(
+ 'prestashop.product.combination.option.value')
+ option_value_binding = option_value_binder.to_internal(
+ option_value['id']
+ )
+ assert option_value_binding, "must have a binding for the option"
+ yield option_value_binding.odoo_id
+
+ @mapping
+ def name(self, record):
+ template = self.get_main_template_binding(record)
+ options = []
+ for option_value_object in self._get_option_value(record):
+ key = option_value_object.attribute_id.name
+ value = option_value_object.name
+ options.append('%s:%s' % (key, value))
+ return {'name_template': template.name}
+
+ @mapping
+ def attribute_value_ids(self, record):
+ results = []
+ for option_value_object in self._get_option_value(record):
+ results.append(option_value_object.id)
+ return {'attribute_value_ids': [(6, 0, results)]}
+
+ @mapping
+ def main_template_id(self, record):
+ template_binding = self.get_main_template_binding(record)
+ return {'main_template_id': template_binding.id}
+
+ def _template_code_exists(self, code):
+ model = self.session.env['product.product']
+ combination_binder = self.binder_for('prestashop.product.combination')
+ template_ids = model.search([
+ ('default_code', '=', code),
+ ('company_id', '=', self.backend_record.company_id.id),
+ ], limit=1)
+ return template_ids and not combination_binder.to_external(
+ template_ids, wrap=True)
+
+ @mapping
+ def default_code(self, record):
+ code = record.get('reference')
+ if not code:
+ code = "%s_%s" % (record['id_product'], record['id'])
+ if not self._template_code_exists(code):
+ return {'default_code': code}
+ i = 1
+ current_code = '%s_%s' % (code, i)
+ while self._template_code_exists(current_code):
+ i += 1
+ current_code = '%s_%s' % (code, i)
+ return {'default_code': current_code}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def barcode(self, record):
+ barcode = record.get('barcode') or record.get('ean13')
+ check_ean = self.env['barcode.nomenclature'].check_ean
+ if barcode in ['', '0']:
+ backend_adapter = self.unit_for(
+ GenericAdapter, 'prestashop.product.template')
+ template = backend_adapter.read(record['id_product'])
+ barcode = template.get('barcode') or template.get('ean13')
+ if barcode and barcode != '0' and check_ean(barcode):
+ return {'barcode': barcode}
+ return {}
+
+ def _get_tax_ids(self, record):
+ product_tmpl_adapter = self.unit_for(
+ GenericAdapter, 'prestashop.product.template')
+ tax_group = product_tmpl_adapter.read(record['id_product'])
+ tax_group = self.binder_for('prestashop.account.tax.group').to_internal(
+ tax_group['id_tax_rules_group'], unwrap=True)
+ return tax_group.tax_ids
+
+ def _apply_taxes(self, tax, price):
+ if self.backend_record.taxes_included == tax.price_include:
+ return price
+ factor_tax = tax.price_include and (1 + tax.amount / 100) or 1.0
+ if self.backend_record.taxes_included:
+ if not tax.price_include:
+ return price / factor_tax
+ else:
+ if tax.price_include:
+ return price * factor_tax
+
+ @mapping
+ def specific_price(self, record):
+ product = self.binder_for(
+ 'prestashop.product.combination').to_internal(
+ record['id'], unwrap=True
+ )
+ product_template = self.binder_for(
+ 'prestashop.product.template').to_internal(record['id_product'])
+ tax = product.product_tmpl_id.taxes_id[:1] or self._get_tax_ids(record)
+ impact = float(self._apply_taxes(tax, float(record['price'] or '0.0')))
+ cost_price = float(record['wholesale_price'] or '0.0')
+ return {
+ 'list_price': product_template.list_price,
+ 'standard_price': cost_price or product_template.wholesale_price,
+ 'impact_price': impact
+ }
+
+ @only_create
+ @mapping
+ def odoo_id(self, record):
+ product = self.env['product.product'].search([
+ ('default_code', '=', record['reference']),
+ ('prestashop_bind_ids', '=', False),
+ ], limit=1)
+ if product:
+ return {'odoo_id': product.id}
+
+
+@prestashop
+class ProductCombinationOptionImporter(PrestashopImporter):
+ _model_name = 'prestashop.product.combination.option'
+
+ def _import_values(self, attribute_binding):
+ record = self.prestashop_record
+ option_values = record.get('associations', {}).get(
+ 'product_option_values', {}).get(
+ self.backend_record.get_version_ps_key('product_option_value'), [])
+ if not isinstance(option_values, list):
+ option_values = [option_values]
+ for option_value in option_values:
+ self._import_dependency(
+ option_value['id'],
+ 'prestashop.product.combination.option.value'
+ )
+
+ def _after_import(self, binding):
+ super(ProductCombinationOptionImporter, self)._after_import(binding)
+ self._import_values(binding)
+
+
+@prestashop
+class ProductCombinationOptionMapper(ImportMapper):
+ _model_name = 'prestashop.product.combination.option'
+
+ direct = []
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @only_create
+ @mapping
+ def odoo_id(self, record):
+ name = self.name(record)
+ binding = self.env['product.attribute'].search(
+ [('name', '=', name)],
+ limit=1,
+ )
+ if binding:
+ return {'odoo_id': binding.id}
+
+ @mapping
+ def name(self, record):
+ name = None
+ if 'language' in record['name']:
+ language_binder = self.binder_for('prestashop.res.lang')
+ languages = record['name']['language']
+ if not isinstance(languages, list):
+ languages = [languages]
+ for lang in languages:
+ erp_language = language_binder.to_internal(
+ lang['attrs']['id'])
+ if not erp_language:
+ continue
+ if erp_language.code == 'en_US':
+ name = lang['value']
+ break
+ if name is None:
+ name = languages[0]['value']
+ else:
+ name = record['name']
+ return {'name': name}
+
+
+@prestashop
+class ProductCombinationOptionValueAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.combination.option.value'
+ _prestashop_model = 'product_option_values'
+ _export_node_name = 'product_option_value'
+
+
+@prestashop
+class ProductCombinationOptionValueImporter(TranslatableRecordImporter):
+ _model_name = 'prestashop.product.combination.option.value'
+
+ _translatable_fields = {
+ 'prestashop.product.combination.option.value': ['name'],
+ }
+
+
+@prestashop
+class ProductCombinationOptionValueMapper(ImportMapper):
+ _model_name = 'prestashop.product.combination.option.value'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @only_create
+ @mapping
+ def odoo_id(self, record):
+ attribute_binder = self.binder_for(
+ 'prestashop.product.combination.option'
+ )
+ attribute = attribute_binder.to_internal(
+ record['id_attribute_group'],
+ unwrap=True
+ )
+ assert attribute
+ binding = self.env['product.attribute.value'].search(
+ [('name', '=', record['name']),
+ ('attribute_id', '=', attribute.id)],
+ limit=1,
+ )
+ if binding:
+ return {'odoo_id': binding.id}
+
+ @mapping
+ def attribute_id(self, record):
+ binder = self.binder_for('prestashop.product.combination.option')
+ attribute = binder.to_internal(record['id_attribute_group'], unwrap=True)
+ return {'attribute_id': attribute.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+@prestashop
+class ProductProductBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.product.product'
diff --git a/connector_prestashop/models/product_supplierinfo/__init__.py b/connector_prestashop/models/product_supplierinfo/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/product_supplierinfo/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
new file mode 100644
index 000000000..e99a919da
--- /dev/null
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models, fields
+
+from ...unit.backend_adapter import (
+ PrestaShopCRUDAdapter,
+ PrestaShopWebServiceImage,
+ GenericAdapter,
+)
+from ...backend import prestashop
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ prestashop_supplier_bind_ids = fields.One2many(
+ comodel_name='prestashop.supplier',
+ inverse_name='odoo_id',
+ string="PrestaShop supplier bindings",
+ )
+
+
+class PrestashopSupplier(models.Model):
+ _name = 'prestashop.supplier'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'res.partner': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='res.partner',
+ string='Partner',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+
+
+class ProductSupplierinfo(models.Model):
+ _inherit = 'product.supplierinfo'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.supplierinfo',
+ inverse_name='odoo_id',
+ string="PrestaShop bindings",
+ )
+
+
+class PrestashopProductSupplierinfo(models.Model):
+ _name = 'prestashop.product.supplierinfo'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.supplierinfo': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.supplierinfo',
+ string='Supplier info',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+@prestashop
+class SupplierImageAdapter(PrestaShopCRUDAdapter):
+ _model_name = 'prestashop.supplier.image'
+ _prestashop_image_model = 'suppliers'
+
+ def read(self, supplier_id, options=None):
+ client = PrestaShopWebServiceImage(self.prestashop.api_url,
+ self.prestashop.webservice_key)
+ res = client.get_image(
+ self._prestashop_image_model,
+ supplier_id,
+ options=options
+ )
+ return res['content']
+
+
+@prestashop
+class SupplierAdapter(GenericAdapter):
+ _model_name = 'prestashop.supplier'
+ _prestashop_model = 'suppliers'
+
+
+@prestashop
+class SupplierInfoAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.supplierinfo'
+ _prestashop_model = 'product_suppliers'
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
new file mode 100644
index 000000000..5f022376b
--- /dev/null
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields
+from odoo.addons.queue_job.exception import FailedJobError
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+
+from ...unit.backend_adapter import PrestaShopCRUDAdapter
+from ...unit.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
+from ...backend import prestashop
+
+import logging
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt import PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class SupplierMapper(ImportMapper):
+ _model_name = 'prestashop.supplier'
+
+ direct = [
+ ('name', 'name'),
+ ('id', 'prestashop_id'),
+ ('active', 'active'),
+ ]
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def supplier(self, record):
+ return {
+ 'supplier': True,
+ 'is_company': True,
+ 'customer': False,
+ }
+
+ @mapping
+ def image(self, record):
+ supplier_image_adapter = self.unit_for(
+ PrestaShopCRUDAdapter, 'prestashop.supplier.image'
+ )
+ try:
+ return {'image': supplier_image_adapter.read(record['id'])}
+ except:
+ return {}
+
+
+@prestashop
+class SupplierImporter(PrestashopImporter):
+ """ Import one simple record """
+ _model_name = 'prestashop.supplier'
+
+ def _create(self, record):
+ try:
+ return super(SupplierImporter, self)._create(record)
+ except ZeroDivisionError:
+ del record['image']
+ return super(SupplierImporter, self)._create(record)
+
+ def _after_import(self, binding):
+ super(SupplierImporter, self)._after_import(binding)
+ binder = self.binder_for()
+ ps_id = binder.to_external(binding)
+ import_batch(
+ self.session,
+ 'prestashop.product.supplierinfo',
+ self.backend_record.id,
+ filters={'filter[id_supplier]': '%d' % ps_id},
+ priority=10,
+ )
+
+
+@prestashop
+class SupplierBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.supplier'
+
+
+@prestashop
+class SupplierInfoMapper(ImportMapper):
+ _model_name = 'prestashop.product.supplierinfo'
+
+ direct = [
+ ('product_supplier_reference', 'product_code'),
+ ]
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def name(self, record):
+ binder = self.binder_for('prestashop.supplier')
+ partner = binder.to_internal(record['id_supplier'], unwrap=True)
+ return {'name': partner.id}
+
+ @mapping
+ def product_id(self, record):
+ if record['id_product_attribute'] != '0':
+ binder = self.binder_for('prestashop.product.combination')
+ product = binder.to_internal(
+ record['id_product_attribute'],
+ unwrap=True,
+ )
+ return {'product_id': product.id}
+ return {}
+
+ @mapping
+ def product_tmpl_id(self, record):
+ binder = self.binder_for('prestashop.product.template')
+ template = binder.to_internal(record['id_product'], unwrap=True)
+ return {'product_tmpl_id': template.id}
+
+ @mapping
+ def required(self, record):
+ return {'min_qty': 0.0, 'delay': 1}
+
+
+@prestashop
+class SupplierInfoImporter(PrestashopImporter):
+ _model_name = 'prestashop.product.supplierinfo'
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ try:
+ self._import_dependency(
+ record['id_supplier'], 'prestashop.supplier'
+ )
+ self._import_dependency(
+ record['id_product'], 'prestashop.product.template'
+ )
+
+ if record['id_product_attribute'] != '0':
+ self._import_dependency(
+ record['id_product_attribute'],
+ 'prestashop.product.combination'
+ )
+ except PrestaShopWebServiceError:
+ raise FailedJobError('Error fetching a dependency')
+
+
+@prestashop
+class SupplierInfoBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.product.supplierinfo'
+
+
+@job(default_channel='root.prestashop')
+def import_suppliers(session, backend_id, since_date, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ result = import_batch(
+ session,
+ 'prestashop.supplier',
+ backend_id,
+ filters,
+ **kwargs
+ ) or ''
+ result += import_batch(
+ session,
+ 'prestashop.product.supplierinfo',
+ backend_id,
+ **kwargs
+ ) or ''
+ session.env['prestashop.backend'].browse(backend_id).write({
+ 'import_suppliers_since': now_fmt
+ })
+ return result
diff --git a/connector_prestashop/models/product_template/__init__.py b/connector_prestashop/models/product_template/__init__.py
new file mode 100644
index 000000000..05691dc17
--- /dev/null
+++ b/connector_prestashop/models/product_template/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import exporter
+from . import importer
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
new file mode 100644
index 000000000..07da481de
--- /dev/null
+++ b/connector_prestashop/models/product_template/common.py
@@ -0,0 +1,213 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import api, fields, models
+from odoo.addons import decimal_precision as dp
+
+from odoo.addons.queue_job.job import job
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+from exporter import ProductInventoryExporter
+
+import logging
+
+_logger = logging.getLogger(__name__)
+
+try:
+ from prestapyt import PrestaShopWebServiceDict
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.product.template',
+ inverse_name='odoo_id',
+ copy=False,
+ string='PrestaShop Bindings',
+ )
+ prestashop_default_category_id = fields.Many2one(
+ comodel_name='product.category',
+ string='PrestaShop Default Category',
+ ondelete='restrict'
+ )
+
+ @api.multi
+ def update_prestashop_quantities(self):
+ for template in self:
+ # Recompute product template PrestaShop qty
+ template.mapped('prestashop_bind_ids').recompute_prestashop_qty()
+ # Recompute variant PrestaShop qty
+ template.mapped(
+ 'product_variant_ids.prestashop_bind_ids'
+ ).recompute_prestashop_qty()
+ return True
+
+
+class PrestashopProductTemplate(models.Model):
+ _name = 'prestashop.product.template'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.template': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='product.template',
+ required=True,
+ ondelete='cascade',
+ string='Template',
+ oldname='openerp_id',
+ )
+ # TODO FIXME what name give to field present in
+ # prestashop_product_product and product_product
+ always_available = fields.Boolean(
+ string='Active',
+ default=True,
+ help='If checked, this product is considered always available')
+ quantity = fields.Float(
+ string='Computed Quantity',
+ help="Last computed quantity to send to PrestaShop."
+ )
+ description_html = fields.Html(
+ string='Description',
+ translate=True,
+ help="HTML description from PrestaShop",
+ )
+ description_short_html = fields.Html(
+ string='Short Description',
+ translate=True,
+ )
+ date_add = fields.Datetime(
+ string='Created at (in PrestaShop)',
+ readonly=True
+ )
+ date_upd = fields.Datetime(
+ string='Updated at (in PrestaShop)',
+ readonly=True
+ )
+ default_shop_id = fields.Many2one(
+ comodel_name='prestashop.shop',
+ string='Default shop',
+ required=True
+ )
+ link_rewrite = fields.Char(
+ string='Friendly URL',
+ translate=True,
+ )
+ available_for_order = fields.Boolean(
+ string='Available for Order Taking',
+ default=True,
+ )
+ show_price = fields.Boolean(string='Display Price', default=True)
+ combinations_ids = fields.One2many(
+ comodel_name='prestashop.product.combination',
+ inverse_name='main_template_id',
+ string='Combinations'
+ )
+ reference = fields.Char(string='Original reference')
+ on_sale = fields.Boolean(string='Show on sale icon')
+ wholesale_price = fields.Float(
+ string='Cost Price',
+ digits=dp.get_precision('Product Price'),
+ )
+
+ @api.multi
+ def recompute_prestashop_qty(self):
+ for product_binding in self:
+ new_qty = product_binding._prestashop_qty()
+ if product_binding.quantity != new_qty:
+ product_binding.quantity = new_qty
+ return True
+
+ def _prestashop_qty(self):
+ locations = self.env['stock.location'].search([
+ ('id', 'child_of', self.backend_id.warehouse_id.lot_stock_id.id),
+ ('prestashop_synchronized', '=', True),
+ ('usage', '=', 'internal'),
+ ])
+ return self.with_context(location=locations.ids).qty_available
+
+ @job(default_channel='root.prestashop')
+ def import_products(self, backend, since_date=None, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.product.category'].with_delay(
+ priority=15
+ ).import_batch(backend=backend, filters=filters, **kwargs)
+ self.env['prestashop.product.template'].with_delay(
+ priority=15
+ ).import_batch(backend, filters, **kwargs)
+ backend.import_products_since = now_fmt
+ return True
+
+ @job(default_channel='root.prestashop')
+ def export_inventory(self, backend, fields=None, **kwargs):
+ """ Export the inventory configuration and quantity of a product. """
+ env = backend.get_environment(self._name)
+ inventory_exporter = env.get_connector_unit(ProductInventoryExporter)
+ return inventory_exporter.run(self.id, fields, **kwargs)
+
+ @api.model
+ @job(default_channel='root.prestashop')
+ def export_product_quantities(self, backend):
+ self.search([
+ ('backend_id', 'in', self.env.backend.ids),
+ ]).recompute_prestashop_qty()
+
+
+@prestashop
+class ProductInventoryAdapter(GenericAdapter):
+ _model_name = '_import_stock_available'
+ _prestashop_model = 'stock_availables'
+ _export_node_name = 'stock_available'
+
+ def get(self, options=None):
+ return self.client.get(self._prestashop_model, options=options)
+
+ def export_quantity(self, filters, quantity):
+ self.export_quantity_url(
+ filters,
+ quantity,
+ )
+
+ shops = self.env['prestashop.shop'].search([
+ ('backend_id', '=', self.backend_record.id),
+ ('default_url', '!=', False),
+ ])
+ for shop in shops:
+ url = '%s/api' % shop.default_url
+ key = self.backend_record.webservice_key
+ client = PrestaShopWebServiceDict(url, key)
+ self.export_quantity_url(filters, quantity, client=client)
+
+ def export_quantity_url(self, filters, quantity, client=None):
+ if client is None:
+ client = self.client
+ response = client.search(self._prestashop_model, filters)
+ for stock_id in response:
+ res = client.get(self._prestashop_model, stock_id)
+ first_key = res.keys()[0]
+ stock = res[first_key]
+ stock['quantity'] = int(quantity)
+ client.edit(self._prestashop_model, {
+ self._export_node_name: stock
+ })
+
+
+@prestashop
+class PrestashopProductTags(GenericAdapter):
+ _model_name = '_prestashop_product_tag'
+ _prestashop_model = 'tags'
+ _export_node_name = 'tag'
+
+ def search(self, filters=None):
+ res = self.client.get(self._prestashop_model, options=filters)
+ tags = res[self._prestashop_model]
+ if not tags:
+ return []
+ tags = tags[self._export_node_name]
+ if isinstance(tags, dict):
+ return [tags]
+ return tags
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
new file mode 100644
index 000000000..304a0dcc1
--- /dev/null
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.synchronizer import Exporter
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+@prestashop
+class ProductInventoryExporter(Exporter):
+ _model_name = ['prestashop.product.template']
+
+ def get_filter(self, template):
+ binder = self.binder_for()
+ prestashop_id = binder.to_external(template.id)
+ return {
+ 'filter[id_product]': prestashop_id,
+ 'filter[id_product_attribute]': 0
+ }
+
+ def run(self, binding_id, fields, **kwargs):
+ """ Export the product inventory to PrestaShop """
+ template = self.model.browse(binding_id)
+ adapter = self.unit_for(GenericAdapter, '_import_stock_available')
+ filter = self.get_filter(template)
+ adapter.export_quantity(filter, int(template.quantity))
+
+
+# TODO: Remove because it has been moved to prestashop product template and
+# prestashop product combination
+@job(default_channel='root.prestashop')
+def export_inventory(session, model_name, record_id, fields=None, **kwargs):
+ """ Export the inventory configuration and quantity of a product. """
+ binding = session.env[model_name].browse(record_id)
+ backend = binding.backend_id
+ env = backend.get_environment(model_name, session=session)
+ inventory_exporter = env.get_connector_unit(ProductInventoryExporter)
+ return inventory_exporter.run(record_id, fields, **kwargs)
+
+
+@job(default_channel='root.prestashop')
+def export_product_quantities(session, ids):
+ for model in ['template', 'combination']:
+ model_obj = session.env['prestashop.product.' + model]
+ model_obj.search([
+ ('backend_id', 'in', [ids]),
+ ]).recompute_prestashop_qty()
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
new file mode 100644
index 000000000..e6740f454
--- /dev/null
+++ b/connector_prestashop/models/product_template/importer.py
@@ -0,0 +1,678 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import _, models, fields
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import (
+ mapping,
+ only_create,
+ ImportMapper
+)
+
+from ...unit.importer import (
+ DelayedBatchImporter,
+ import_record,
+ import_batch,
+ PrestashopImporter,
+ PrestashopBaseImporter,
+ TranslatableRecordImporter,
+)
+<<<<<<< HEAD
+from ...unit.mapper import backend_to_m2o
+=======
+from odoo.addons.connector.unit.mapper import external_to_m2o
+>>>>>>> [MIG] connector_prestashop: Begin of migration to v10
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+from ..product_image.importer import (
+ import_product_image,
+ set_product_image_variant,
+)
+
+import datetime
+import logging
+_logger = logging.getLogger(__name__)
+
+try:
+ import html2text
+except ImportError:
+ _logger.debug('Cannot import `html2text`')
+
+try:
+ from bs4 import BeautifulSoup
+except ImportError:
+ _logger.debug('Cannot import `bs4`')
+
+try:
+ from prestapyt import PrestaShopWebServiceError
+except ImportError:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class TemplateMapper(ImportMapper):
+ _model_name = 'prestashop.product.template'
+
+ direct = [
+ ('weight', 'weight'),
+ ('wholesale_price', 'wholesale_price'),
+ ('wholesale_price', 'standard_price'),
+ (external_to_m2o('id_shop_default'), 'default_shop_id'),
+ ('link_rewrite', 'link_rewrite'),
+ ('reference', 'reference'),
+ ('available_for_order', 'available_for_order'),
+ ('on_sale', 'on_sale'),
+ ]
+
+ def _apply_taxes(self, tax, price):
+ if self.backend_record.taxes_included == tax.price_include:
+ return price
+ factor_tax = tax.price_include and (1 + tax.amount / 100) or 1.0
+ if self.backend_record.taxes_included:
+ if not tax.price_include:
+ return price / factor_tax
+ else:
+ if tax.price_include:
+ return price * factor_tax
+
+ @mapping
+ def list_price(self, record):
+ price = 0.0
+ tax = self._get_tax_ids(record)
+ if record['price'] != '':
+ price = float(record['price'])
+ price = self._apply_taxes(tax, price)
+ return {'list_price': price}
+
+ @mapping
+ def tags_to_text(self, record):
+ associations = record.get('associations', {})
+ tags = associations.get('tags', {}).get(
+ self.backend_record.get_version_ps_key('tag'), [])
+ tag_adapter = self.unit_for(GenericAdapter, '_prestashop_product_tag')
+ if not isinstance(tags, list):
+ tags = [tags]
+ if tags:
+ ps_tags = tag_adapter.search(filters={
+ 'filter[id]': '[%s]' % '|'.join(x['id'] for x in tags),
+ 'display': '[name]'
+ })
+ if ps_tags:
+ return {'tags': ','.join(x['name'] for x in ps_tags)}
+
+ @mapping
+ def name(self, record):
+ if record['name']:
+ return {'name': record['name']}
+ return {'name': 'noname'}
+
+ @mapping
+ def date_add(self, record):
+ if record['date_add'] == '0000-00-00 00:00:00':
+ return {'date_add': datetime.datetime.now()}
+ return {'date_add': record['date_add']}
+
+ @mapping
+ def date_upd(self, record):
+ if record['date_upd'] == '0000-00-00 00:00:00':
+ return {'date_upd': datetime.datetime.now()}
+ return {'date_upd': record['date_upd']}
+
+ def has_combinations(self, record):
+ associations = record.get('associations', {})
+ combinations = associations.get('combinations', {}).get(
+ self.backend_record.get_version_ps_key('combinations'))
+ return len(combinations or '') != 0
+
+ @only_create
+ @mapping
+ def odoo_id(self, record):
+ """ Will bind the product to an existing one with the same code """
+ product = self.env['product.template'].search(
+ [('default_code', '=', record['reference'])], limit=1)
+ if product:
+ return {'odoo_id': product.id}
+
+ def _template_code_exists(self, code):
+ model = self.session.env['product.template']
+ template_ids = model.search([
+ ('default_code', '=', code),
+ ('company_id', '=', self.backend_record.company_id.id),
+ ], limit=1)
+ return len(template_ids) > 0
+
+ @mapping
+ def default_code(self, record):
+ if self.has_combinations(record):
+ return {}
+ code = record.get('reference')
+ if not code:
+ code = "backend_%d_product_%s" % (
+ self.backend_record.id, record['id']
+ )
+ if not self._template_code_exists(code):
+ return {'default_code': code}
+ i = 1
+ current_code = '%s_%d' % (code, i)
+ while self._template_code_exists(current_code):
+ i += 1
+ current_code = '%s_%d' % (code, i)
+ return {'default_code': current_code}
+
+ def clear_html_field(self, content):
+ html = html2text.HTML2Text()
+ html.ignore_images = True
+ html.ignore_links = True
+ return html.handle(content)
+
+ @staticmethod
+ def sanitize_html(content):
+ content = BeautifulSoup(content, 'html.parser')
+ # Prestashop adds both 'lang="fr-ch"' and 'xml:lang="fr-ch"'
+ # but Odoo tries to parse the xml for the translation and fails
+ # due to the unknow namespace
+ for child in content.find_all(lambda tag: tag.has_attr('xml:lang')):
+ del child['xml:lang']
+ return content.prettify()
+
+ @mapping
+ def descriptions(self, record):
+ return {
+ 'description': self.clear_html_field(
+ record.get('description_short', '')),
+ 'description_html': self.sanitize_html(
+ record.get('description', '')),
+ 'description_short_html': self.sanitize_html(
+ record.get('description_short', '')),
+ }
+
+ @mapping
+ def active(self, record):
+ return {'always_available': bool(int(record['active']))}
+
+ @mapping
+ def sale_ok(self, record):
+ # if this product has combinations, we do not want to sell this
+ # product, but its combinations (so sale_ok = False in that case).
+ return {'sale_ok': True}
+
+ @mapping
+ def purchase_ok(self, record):
+ return {'purchase_ok': True}
+
+ @mapping
+ def categ_ids(self, record):
+ categories = record['associations'].get('categories', {}).get(
+ self.backend_record.get_version_ps_key('category'), [])
+ if not isinstance(categories, list):
+ categories = [categories]
+ product_categories = self.env['product.category'].browse()
+ binder = self.binder_for('prestashop.product.category')
+ for ps_category in categories:
+ product_categories |= binder.to_internal(
+ ps_category['id'],
+ unwrap=True,
+ )
+
+ return {'categ_ids': [(6, 0, product_categories.ids)]}
+
+ @mapping
+ def default_category_id(self, record):
+ if not int(record['id_category_default']):
+ return
+ binder = self.binder_for('prestashop.product.category')
+ category = binder.to_internal(
+ record['id_category_default'],
+ unwrap=True,
+ )
+ if category:
+ return {'prestashop_default_category_id': category.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def barcode(self, record):
+ if self.has_combinations(record):
+ return {}
+ barcode = record.get('barcode') or record.get('ean13')
+ if barcode in ['', '0']:
+ return {}
+ if self.env['barcode.nomenclature'].check_ean(barcode):
+ return {'barcode': barcode}
+ return {}
+
+ def _get_tax_ids(self, record):
+ # if record['id_tax_rules_group'] == '0':
+ # return {}
+ binder = self.binder_for('prestashop.account.tax.group')
+ tax_group = binder.to_internal(
+ record['id_tax_rules_group'],
+ unwrap=True,
+ )
+ return tax_group.tax_ids
+
+ @mapping
+ def taxes_id(self, record):
+ taxes = self._get_tax_ids(record)
+ return {'taxes_id': [(6, 0, taxes.ids)]}
+
+ @mapping
+ def type(self, record):
+ # If the product has combinations, this main product is not a real
+ # product. So it is set to a 'service' kind of product. Should better
+ # be a 'virtual' product... but it does not exist...
+ # The same if the product is a virtual one in prestashop.
+ if record['type']['value'] and record['type']['value'] == 'virtual':
+ return {"type": 'service'}
+ return {"type": 'product'}
+
+ @mapping
+ def extras_features(self, record):
+ mapper = self.unit_for(FeaturesProductImportMapper)
+ return mapper.map_record(record).values(**self.options)
+
+ @mapping
+ def extras_manufacturer(self, record):
+ mapper = self.unit_for(ManufacturerProductImportMapper)
+ return mapper.map_record(record).values(**self.options)
+
+
+@prestashop
+class FeaturesProductImportMapper(ImportMapper):
+ # To extend in connector_prestashop_feature module. In this way we
+ # dependencies on other modules like product_custom_info
+ _model_name = 'prestashop.product.template'
+
+ @mapping
+ def extras_features(self, record):
+ return {}
+
+
+@prestashop
+class ManufacturerProductDependency(PrestashopBaseImporter):
+ # To extend in connector_prestashop_feature module. In this way we
+ # dependencies on other modules like product_manufacturer
+ _model_name = 'prestashop.product.template'
+
+ def import_manufacturer(self, manufacturer_id):
+ return
+
+
+@prestashop
+class ManufacturerProductImportMapper(ImportMapper):
+ # To extend in connector_prestashop_manufacturer module. In this way we
+ # dependencies on other modules like product_manufacturer
+ _model_name = 'prestashop.product.template'
+
+ @mapping
+ def extras_manufacturer(self, record):
+ return {}
+
+
+@prestashop
+class TemplateAdapter(GenericAdapter):
+ _model_name = 'prestashop.product.template'
+ _prestashop_model = 'products'
+ _export_node_name = 'product'
+
+
+class ImportInventory(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '_import_stock_available'
+
+
+@prestashop
+class ProductInventoryBatchImporter(DelayedBatchImporter):
+ _model_name = ['_import_stock_available']
+
+ def run(self, filters=None, **kwargs):
+ if filters is None:
+ filters = {}
+ filters['display'] = '[id,id_product,id_product_attribute]'
+ _super = super(ProductInventoryBatchImporter, self)
+ return _super.run(filters, **kwargs)
+
+ def _run_page(self, filters, **kwargs):
+ records = self.backend_adapter.get(filters)
+ for record in records['stock_availables']['stock_available']:
+ self._import_record(record['id'], record=record, **kwargs)
+ return records['stock_availables']['stock_available']
+
+ def _import_record(self, record_id, record=None, **kwargs):
+ """ Delay the import of the records"""
+ assert record
+ import_record.delay(
+ self.session,
+ '_import_stock_available',
+ self.backend_record.id,
+ record_id,
+ record=record,
+ **kwargs
+ )
+
+
+@prestashop
+class ProductInventoryImporter(PrestashopImporter):
+ _model_name = ['_import_stock_available']
+
+ def _get_quantity(self, record):
+ filters = {
+ 'filter[id_product]': record['id_product'],
+ 'filter[id_product_attribute]': record['id_product_attribute'],
+ 'display': '[quantity]',
+ }
+ quantities = self.backend_adapter.get(filters)
+ all_qty = 0
+ quantities = quantities['stock_availables']['stock_available']
+ if isinstance(quantities, dict):
+ quantities = [quantities]
+ for quantity in quantities:
+ all_qty += int(quantity['quantity'])
+ return all_qty
+
+ def _get_binding(self):
+ record = self.prestashop_record
+ if record['id_product_attribute'] == '0':
+ binder = self.binder_for('prestashop.product.template')
+ return binder.to_internal(record['id_product'])
+ binder = self.binder_for('prestashop.product.combination')
+ return binder.to_internal(record['id_product_attribute'])
+
+ def _import_dependencies(self):
+ """ Import the dependencies for the record"""
+ record = self.prestashop_record
+ self._import_dependency(
+ record['id_product'], 'prestashop.product.template'
+ )
+ if record['id_product_attribute'] != '0':
+ self._import_dependency(
+ record['id_product_attribute'],
+ 'prestashop.product.combination'
+ )
+
+ def _check_in_new_connector_env(self):
+ # not needed in this importer
+ return
+
+ def run(self, prestashop_id, record=None, **kwargs):
+ assert record
+ self.prestashop_record = record
+ return super(ProductInventoryImporter, self).run(
+ prestashop_id, **kwargs
+ )
+
+ def _import(self, binding, **kwargs):
+ record = self.prestashop_record
+ qty = self._get_quantity(record)
+ if qty < 0:
+ qty = 0
+ if binding._name == 'prestashop.product.template':
+ products = binding.odoo_id.product_variant_ids
+ else:
+ products = binding.odoo_id
+
+ location = (self.backend_record.stock_location_id or
+ self.backend_record.warehouse_id.lot_stock_id)
+ for product in products:
+ vals = {
+ 'location_id': location.id,
+ 'product_id': product.id,
+ 'new_quantity': qty,
+ }
+ template_qty = self.env['stock.change.product.qty'].create(vals)
+ template_qty.with_context(
+ active_id=product.id,
+ connector_no_export=True,
+ ).change_product_qty()
+
+
+@prestashop
+class ProductTemplateImporter(TranslatableRecordImporter):
+ """ Import one translatable record """
+ _model_name = [
+ 'prestashop.product.template',
+ ]
+
+ _base_mapper = TemplateMapper
+
+ _translatable_fields = {
+ 'prestashop.product.template': [
+ 'name',
+ 'description',
+ 'link_rewrite',
+ 'description_short',
+ 'meta_title',
+ 'meta_description',
+ 'meta_keywords',
+
+ ],
+ }
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(ProductTemplateImporter, self).__init__(environment)
+ self.default_category_error = False
+
+ def _after_import(self, binding):
+ super(ProductTemplateImporter, self)._after_import(binding)
+ self.import_images(binding)
+ self.import_combinations()
+ self.attribute_line(binding)
+ self.deactivate_default_product(binding)
+ self.checkpoint_default_category_missing(binding)
+
+ def checkpoint_default_category_missing(self, binding):
+ if self.default_category_error:
+ msg = _('The default category could not be imported.')
+ self.backend_record.add_checkpoint(
+ model='product.template',
+ record_id=binding.odoo_id.id,
+ message=msg,
+ )
+
+ def deactivate_default_product(self, binding):
+ if binding.product_variant_count != 1:
+ for product in binding.product_variant_ids:
+ if not product.attribute_value_ids:
+ self.env['product.product'].browse(product.id).write(
+ {'active': False})
+
+ def attribute_line(self, binding):
+ attr_line_value_ids = []
+ for attr_line in binding.attribute_line_ids:
+ attr_line_value_ids.extend(attr_line.value_ids.ids)
+ template_id = binding.openerp_id.id
+ products = self.env['product.product'].search([
+ ('product_tmpl_id', '=', template_id)]
+ )
+ if products:
+ attribute_ids = []
+ for product in products:
+ for attribute_value in product.attribute_value_ids:
+ attribute_ids.append(attribute_value.attribute_id.id)
+ # filter unique id for create relation
+ for attribute_id in set(attribute_ids):
+ values = products.mapped('attribute_value_ids').filtered(
+ lambda x: (x.attribute_id.id == attribute_id and
+ x.id not in attr_line_value_ids))
+ if values:
+ self.env['product.attribute.line'].create({
+ 'attribute_id': attribute_id,
+ 'product_tmpl_id': template_id,
+ 'value_ids': [(6, 0, values.ids)],
+ })
+
+ def _import_combination(self, combination, **kwargs):
+ """ Import a combination
+
+ Can be overriden for instance to forward arguments to the importer
+ """
+ self._import_dependency(combination['id'],
+ 'prestashop.product.combination',
+ always=True,
+ **kwargs)
+
+ def _delay_product_image_variant(self, combinations, **kwargs):
+ set_product_image_variant.delay(
+ self.session,
+ 'prestashop.product.combination',
+ self.backend_record.id,
+ combinations,
+ priority=15,
+ **kwargs
+ )
+
+ def import_combinations(self):
+ prestashop_record = self._get_prestashop_data()
+ associations = prestashop_record.get('associations', {})
+
+ ps_key = self.backend_record.get_version_ps_key('combinations')
+ combinations = associations.get('combinations', {}).get(ps_key, [])
+
+ if not isinstance(combinations, list):
+ combinations = [combinations]
+ if combinations:
+ first_exec = combinations.pop(
+ combinations.index({
+ 'id': prestashop_record[
+ 'id_default_combination']['value']}))
+ if first_exec:
+ self._import_combination(first_exec)
+
+ for combination in combinations:
+ self._import_combination(combination)
+
+ if combinations and associations['images'].get('image'):
+ self._delay_product_image_variant(combinations)
+
+ def _delay_import_product_image(self, prestashop_record, image, **kwargs):
+ import_product_image.delay(
+ self.session,
+ 'prestashop.product.image',
+ self.backend_record.id,
+ prestashop_record['id'],
+ image['id'],
+ priority=10,
+ **kwargs
+ )
+
+ def import_images(self, binding):
+ prestashop_record = self._get_prestashop_data()
+ associations = prestashop_record.get('associations', {})
+ images = associations.get('images', {}).get(
+ self.backend_record.get_version_ps_key('image'), {})
+ if not isinstance(images, list):
+ images = [images]
+ for image in images:
+ if image.get('id'):
+ self._delay_import_product_image(prestashop_record, image)
+
+ def import_supplierinfo(self, binding):
+ ps_id = self._get_prestashop_data()['id']
+ filters = {
+ 'filter[id_product]': ps_id,
+ 'filter[id_product_attribute]': 0
+ }
+ import_batch(
+ self.session,
+ 'prestashop.product.supplierinfo',
+ self.backend_record.id,
+ filters=filters
+ )
+ ps_product_template = binding
+ ps_supplierinfos = self.env['prestashop.product.supplierinfo'].\
+ search([('product_tmpl_id', '=', ps_product_template.id)])
+ for ps_supplierinfo in ps_supplierinfos:
+ try:
+ ps_supplierinfo.resync()
+ except PrestaShopWebServiceError:
+ ps_supplierinfo.openerp_id.unlink()
+
+ def _import_dependencies(self):
+ self._import_default_category()
+ self._import_categories()
+ self._import_manufacturer()
+
+ def _import_manufacturer(self):
+ self.unit_for(ManufacturerProductDependency).import_manufacturer(
+ self.prestashop_record.get('id_manufacturer')
+ )
+
+ def get_template_model_id(self):
+ ir_model = self.env['ir.model'].search([
+ ('model', '=', 'product.template')], limit=1)
+ assert len(ir_model) == 1
+ return ir_model.id
+
+ def _import_default_category(self):
+ record = self.prestashop_record
+ if int(record['id_category_default']):
+ try:
+ self._import_dependency(record['id_category_default'],
+ 'prestashop.product.category')
+ except PrestaShopWebServiceError:
+ # a checkpoint will be added in _after_import (because
+ # we'll know the binding at this point)
+ self.default_category_error = True
+
+ def _import_categories(self):
+ record = self.prestashop_record
+ associations = record.get('associations', {})
+ categories = associations.get('categories', {}).get(
+ self.backend_record.get_version_ps_key('category'), [])
+ if not isinstance(categories, list):
+ categories = [categories]
+ for category in categories:
+ self._import_dependency(category['id'],
+ 'prestashop.product.category')
+
+
+@job(default_channel='root.prestashop')
+def import_inventory(session, backend_id):
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ env = backend.get_environment('_import_stock_available', session=session)
+ inventory_importer = env.get_connector_unit(ProductInventoryBatchImporter)
+ return inventory_importer.run()
+
+
+@job(default_channel='root.prestashop')
+def import_products(
+ session, backend_id, since_date=None, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ result = import_batch(
+ session,
+ 'prestashop.product.category',
+ backend_id,
+ filters,
+ priority=15,
+ **kwargs
+ ) or ''
+ result += import_batch(
+ session,
+ 'prestashop.product.template',
+ backend_id,
+ filters,
+ priority=15,
+ **kwargs
+ ) or ''
+ session.env['prestashop.backend'].browse(backend_id).write({
+ 'import_products_since': now_fmt
+ })
+ return result
+
+
+@prestashop
+class ProductTemplateBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.product.template'
diff --git a/connector_prestashop/models/res_country/__init__.py b/connector_prestashop/models/res_country/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/res_country/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
new file mode 100644
index 000000000..a77d5d984
--- /dev/null
+++ b/connector_prestashop/models/res_country/common.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class PrestashopResCountry(models.Model):
+ _name = 'prestashop.res.country'
+ _inherit = 'prestashop.binding'
+ _inherits = {'res.country': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='res.country',
+ required=True,
+ ondelete='cascade',
+ string='Country',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+class ResCountry(models.Model):
+ _inherit = 'res.country'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.res.country',
+ inverse_name='openerp_id',
+ readonly=True,
+ string='prestashop Bindings',
+ )
+
+
+@prestashop
+class ResCountryAdapter(GenericAdapter):
+ _model_name = 'prestashop.res.country'
+ _prestashop_model = 'countries'
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
new file mode 100644
index 000000000..61200ba89
--- /dev/null
+++ b/connector_prestashop/models/res_country/importer.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...backend import prestashop
+
+
+@prestashop
+class CountryImporter(AutoMatchingImporter):
+ _model_name = 'prestashop.res.country'
+ _erp_field = 'code'
+ _ps_field = 'iso_code'
+
+ def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
+ if (
+ erp_val and
+ ps_val and
+ len(erp_val) >= 2 and
+ len(ps_val) >= 2 and
+ erp_val[0:2].lower() == ps_val[0:2].lower()
+ ):
+ return True
+ return False
diff --git a/connector_prestashop/models/res_currency/__init__.py b/connector_prestashop/models/res_currency/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/res_currency/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
new file mode 100644
index 000000000..98da1b982
--- /dev/null
+++ b/connector_prestashop/models/res_currency/common.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class PrestashopResCurrency(models.Model):
+ _name = 'prestashop.res.currency'
+ _inherit = 'prestashop.binding'
+ _inherits = {'res.currency': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='res.currency',
+ string='Currency',
+ required=True,
+ ondelete='cascade',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+class ResCurrency(models.Model):
+ _inherit = 'res.currency'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.res.currency',
+ inverse_name='openerp_id',
+ string='prestashop Bindings',
+ readonly=True
+ )
+
+
+@prestashop
+class ResCurrencyAdapter(GenericAdapter):
+ _model_name = 'prestashop.res.currency'
+ _prestashop_model = 'currencies'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
new file mode 100644
index 000000000..7c7e4245c
--- /dev/null
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...backend import prestashop
+
+
+@prestashop
+class ResCurrencyImporter(AutoMatchingImporter):
+ _model_name = 'prestashop.res.currency'
+ _erp_field = 'name'
+ _ps_field = 'iso_code'
+
+ def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
+ if len(erp_val) == 3 and len(ps_val) == 3 and \
+ erp_val[0:3].lower() == ps_val[0:3].lower():
+ return True
+ return False
diff --git a/connector_prestashop/models/res_lang/__init__.py b/connector_prestashop/models/res_lang/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/res_lang/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
new file mode 100644
index 000000000..f73e65de7
--- /dev/null
+++ b/connector_prestashop/models/res_lang/common.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo import models, fields
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class PrestashopResLang(models.Model):
+ _name = 'prestashop.res.lang'
+ _inherit = 'prestashop.binding'
+ _inherits = {'res.lang': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='res.lang',
+ required=True,
+ ondelete='cascade',
+ string='Lang',
+ )
+ active = fields.Boolean(
+ string='Active in prestashop',
+ default=False,
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+class ResLang(models.Model):
+ _inherit = 'res.lang'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.res.lang',
+ inverse_name='openerp_id',
+ readonly=True,
+ string='PrestaShop Bindings',
+ )
+
+
+@prestashop
+class ResLangAdapter(GenericAdapter):
+ _model_name = 'prestashop.res.lang'
+ _prestashop_model = 'languages'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
new file mode 100644
index 000000000..4b7e9e77d
--- /dev/null
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...backend import prestashop
+
+
+@prestashop
+class LangImporter(AutoMatchingImporter):
+ _model_name = 'prestashop.res.lang'
+ _erp_field = 'code'
+ _ps_field = 'language_code'
+ _copy_fields = [
+ ('active', 'active'),
+ ]
+
+ def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
+ if len(erp_val) >= 2 and len(ps_val) >= 2 and \
+ erp_val[0:2].lower() == ps_val[0:2].lower():
+ return True
+ return False
diff --git a/connector_prestashop/models/res_partner/__init__.py b/connector_prestashop/models/res_partner/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/res_partner/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
new file mode 100644
index 000000000..4119695c7
--- /dev/null
+++ b/connector_prestashop/models/res_partner/common.py
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models, fields
+
+from odoo.addons.queue_job.job import job
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+from ...unit.importer import import_batch
+
+
+class ResPartner(models.Model):
+ _inherit = 'res.partner'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.res.partner',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+ prestashop_address_bind_ids = fields.One2many(
+ comodel_name='prestashop.address',
+ inverse_name='odoo_id',
+ string='PrestaShop Address Bindings',
+ )
+
+ # TODO: Implemented here or in prestashop.res.partner model?
+ @job(default_channel='root.prestashop')
+ def import_customers_since(
+ self, backend_record=None, since_date=None, **kwargs):
+ """ Prepare the import of partners modified on PrestaShop """
+ filters = None
+ if since_date:
+ filters = {
+ 'date': '1',
+ 'filter[date_upd]': '>[%s]' % since_date}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.res.partner.category'].with_delay(
+ priority=10
+ ).import_batch(backend=backend_record, filters=filters, **kwargs)
+ self.env['prestashop.res.partner'].with_delay(
+ priority=15
+ ).import_batch(backend=backend_record, filters=filters, **kwargs)
+ backend_record.import_partners_since = now_fmt
+ return True
+
+
+class PrestashopPartnerMixin(models.AbstractModel):
+ _name = 'prestashop.partner.mixin'
+
+ group_ids = fields.Many2many(
+ comodel_name='prestashop.res.partner.category',
+ relation='prestashop_category_partner',
+ column1='partner_id',
+ column2='category_id',
+ string='PrestaShop Groups',
+ )
+ date_add = fields.Datetime(
+ string='Created At (on PrestaShop)',
+ readonly=True,
+ )
+ date_upd = fields.Datetime(
+ string='Updated At (on PrestaShop)',
+ readonly=True,
+ )
+ default_category_id = fields.Many2one(
+ comodel_name='prestashop.res.partner.category',
+ string='PrestaShop default category',
+ help="This field is synchronized with the field "
+ "'Default customer group' in PrestaShop."
+ )
+ company = fields.Char(string='Company')
+
+
+class PrestashopResPartner(models.Model):
+ _name = 'prestashop.res.partner'
+ _inherit = [
+ 'prestashop.binding.odoo',
+ 'prestashop.partner.mixin',
+ ]
+ _inherits = {'res.partner': 'odoo_id'}
+ _rec_name = 'shop_group_id'
+
+ odoo_id = fields.Many2one(
+ comodel_name='res.partner',
+ string='Partner',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ backend_id = fields.Many2one(
+ related='shop_group_id.backend_id',
+ comodel_name='prestashop.backend',
+ string='PrestaShop Backend',
+ store=True,
+ readonly=True,
+ )
+ shop_group_id = fields.Many2one(
+ comodel_name='prestashop.shop.group',
+ string='PrestaShop Shop Group',
+ required=True,
+ ondelete='restrict',
+ )
+ shop_id = fields.Many2one(
+ comodel_name='prestashop.shop',
+ string='PrestaShop Shop',
+ )
+ newsletter = fields.Boolean(string='Newsletter')
+ birthday = fields.Date(string='Birthday')
+
+
+class PrestashopAddressMixin(models.AbstractModel):
+ _name = 'prestashop.address.mixin'
+
+ date_add = fields.Datetime(
+ string='Created At (on PrestaShop)',
+ readonly=True,
+ )
+ date_upd = fields.Datetime(
+ string='Updated At (on PrestaShop)',
+ readonly=True,
+ )
+
+
+class PrestashopAddress(models.Model):
+ _name = 'prestashop.address'
+ _inherit = [
+ 'prestashop.binding.odoo',
+ 'prestashop.address.mixin',
+ ]
+ _inherits = {'res.partner': 'odoo_id'}
+ _rec_name = 'odoo_id'
+
+ prestashop_partner_id = fields.Many2one(
+ comodel_name='prestashop.res.partner',
+ string='PrestaShop Partner',
+ required=True,
+ ondelete='cascade',
+ )
+ backend_id = fields.Many2one(
+ comodel_name='prestashop.backend',
+ string='PrestaShop Backend',
+ related='prestashop_partner_id.backend_id',
+ store=True,
+ readonly=True,
+ )
+ odoo_id = fields.Many2one(
+ comodel_name='res.partner',
+ string='Partner',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ shop_group_id = fields.Many2one(
+ comodel_name='prestashop.shop.group',
+ string='PrestaShop Shop Group',
+ related='prestashop_partner_id.shop_group_id',
+ store=True,
+ readonly=True,
+ )
+ vat_number = fields.Char('PrestaShop VAT')
+
+
+@prestashop
+class PartnerAdapter(GenericAdapter):
+ _model_name = 'prestashop.res.partner'
+ _prestashop_model = 'customers'
+
+
+@prestashop
+class PartnerAddressAdapter(GenericAdapter):
+ _model_name = 'prestashop.address'
+ _prestashop_model = 'addresses'
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
new file mode 100644
index 000000000..fd9fea47c
--- /dev/null
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -0,0 +1,241 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import re
+
+from odoo import fields, _
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.mapper import (
+ ImportMapper,
+ mapping,
+ only_create,
+)
+from ...unit.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
+from ...backend import prestashop
+from odoo.addons.connector.unit.mapper import external_to_m2o
+
+
+@prestashop
+class PartnerImportMapper(ImportMapper):
+ _model_name = 'prestashop.res.partner'
+
+ direct = [
+ ('date_add', 'date_add'),
+ ('date_upd', 'date_upd'),
+ ('email', 'email'),
+ ('newsletter', 'newsletter'),
+ ('company', 'company'),
+ ('active', 'active'),
+ ('note', 'comment'),
+ (external_to_m2o('id_shop_group'), 'shop_group_id'),
+ (external_to_m2o('id_shop'), 'shop_id'),
+ (external_to_m2o('id_default_group'), 'default_category_id'),
+ ]
+
+ @mapping
+ def pricelist(self, record):
+ binder = self.binder_for('prestashop.groups.pricelist')
+ pricelist = binder.to_internal(record['id_default_group'], unwrap=True)
+ if not pricelist:
+ return {}
+ return {'property_product_pricelist': pricelist.id}
+
+ @mapping
+ def birthday(self, record):
+ if record['birthday'] in ['0000-00-00', '']:
+ return {}
+ return {'birthday': record['birthday']}
+
+ @mapping
+ def name(self, record):
+ parts = [record['firstname'], record['lastname']]
+ name = ' '.join(p.strip() for p in parts if p.strip())
+ return {'name': name}
+
+ @mapping
+ def groups(self, record):
+ groups = record.get(
+ 'associations', {}).get('groups', {}).get(
+ self.backend_record.get_version_ps_key('group'), [])
+ if not isinstance(groups, list):
+ groups = [groups]
+ model_name = 'prestashop.res.partner.category'
+ partner_category_bindings = self.env[model_name].browse()
+ binder = self.binder_for(model_name)
+ for group in groups:
+ partner_category_bindings |= binder.to_internal(group['id'])
+
+ result = {'group_ids': [(6, 0, partner_category_bindings.ids)],
+ 'category_id': [(4, b.openerp_id.id)
+ for b in partner_category_bindings]}
+ return result
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def lang(self, record):
+ binder = self.binder_for('prestashop.res.lang')
+ erp_lang = None
+ if record.get('id_lang'):
+ erp_lang = binder.to_internal(record['id_lang'])
+ if not erp_lang:
+ erp_lang = self.env.ref('base.lang_en')
+ return {'lang': erp_lang.code}
+
+ @mapping
+ def customer(self, record):
+ return {'customer': True}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+
+@prestashop
+class ResPartnerImporter(PrestashopImporter):
+ _model_name = 'prestashop.res.partner'
+
+ def _import_dependencies(self):
+ groups = self.prestashop_record.get('associations', {}) \
+ .get('groups', {}).get(
+ self.backend_record.get_version_ps_key('group'), [])
+ if not isinstance(groups, list):
+ groups = [groups]
+ for group in groups:
+ self._import_dependency(group['id'],
+ 'prestashop.res.partner.category')
+
+ def _after_import(self, binding):
+ super(ResPartnerImporter, self)._after_import(binding)
+ binder = self.binder_for()
+ ps_id = binder.to_external(binding)
+ self.env['prestashop.address'].with_delay(priority=10).import_batch(
+ backend=self.backend_record,
+ filters={'filter[id_customer]': '%d' % (ps_id,)})
+
+
+@prestashop
+class PartnerBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.res.partner'
+
+
+@prestashop
+class AddressImportMapper(ImportMapper):
+ _model_name = 'prestashop.address'
+
+ direct = [
+ ('address1', 'street'),
+ ('address2', 'street2'),
+ ('city', 'city'),
+ ('other', 'comment'),
+ ('phone', 'phone'),
+ ('phone_mobile', 'mobile'),
+ ('postcode', 'zip'),
+ ('date_add', 'date_add'),
+ ('date_upd', 'date_upd'),
+ (external_to_m2o('id_customer'), 'prestashop_partner_id'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def parent_id(self, record):
+ binder = self.binder_for('prestashop.res.partner')
+ parent = binder.to_internal(record['id_customer'], unwrap=True)
+ return {'parent_id': parent.id}
+
+ @mapping
+ def name(self, record):
+ parts = [record['firstname'], record['lastname']]
+ if record['alias']:
+ parts.append('(%s)' % record['alias'])
+ name = ' '.join(p.strip() for p in parts if p.strip())
+ return {'name': name}
+
+ @mapping
+ def customer(self, record):
+ return {'customer': True}
+
+ @mapping
+ def country(self, record):
+ if record.get('id_country'):
+ binder = self.binder_for('prestashop.res.country')
+ country = binder.to_internal(record['id_country'], unwrap=True)
+ return {'country_id': country.id}
+ return {}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @only_create
+ @mapping
+ def type(self, record):
+ # do not set 'contact', otherwise the address fields are shared with
+ # the parent
+ return {'type': 'other'}
+
+
+@prestashop
+class AddressImporter(PrestashopImporter):
+ _model_name = 'prestashop.address'
+
+ def _check_vat(self, vat):
+ vat_country, vat_number = vat[:2].lower(), vat[2:]
+ partner_model = self.env['res.partner']
+ return partner_model.simple_vat_check(vat_country, vat_number)
+
+ def _after_import(self, binding):
+ record = self.prestashop_record
+ vat_number = None
+ if record['vat_number']:
+ vat_number = record['vat_number'].replace('.', '').replace(' ', '')
+ # TODO move to custom localization module
+ elif not record['vat_number'] and record.get('dni'):
+ vat_number = record['dni'].replace('.', '').replace(
+ ' ', '').replace('-', '')
+ if vat_number:
+ # TODO: move to custom module
+ regexp = re.compile('^[a-zA-Z]{2}')
+ if not regexp.match(vat_number):
+ vat_number = 'ES' + vat_number
+ if self._check_vat(vat_number):
+ binding.parent_id.write({'vat': vat_number})
+ else:
+ msg = _('Please, check the VAT number: %s') % vat_number
+ self.backend_record.add_checkpoint(
+ model=binding.parent_id._name,
+ record_id=binding.parent_id.id,
+ message=msg,
+ )
+
+
+@prestashop
+class AddressBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.address'
+
+
+@job(default_channel='root.prestashop')
+def import_customers_since(env, since_date=None, **kwargs):
+ """ Prepare the import of partners modified on PrestaShop """
+ filters = None
+ if since_date:
+ filters = {
+ 'date': '1',
+ 'filter[date_upd]': '>[%s]' % since_date}
+ now_fmt = fields.Datetime.now()
+ result = import_batch(env, filters, **kwargs) or ''
+ result += import_batch(env, filters, priority=15, **kwargs) or ''
+ env.backend_record.import_partners_since = now_fmt
+ # env['prestashop.backend'].browse(backend_id).write({
+ # 'import_partners_since': now_fmt,
+ # })
+ return result
diff --git a/connector_prestashop/models/res_partner_category/__init__.py b/connector_prestashop/models/res_partner_category/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/res_partner_category/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
new file mode 100644
index 000000000..b26753065
--- /dev/null
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class ResPartnerCategory(models.Model):
+ _inherit = 'res.partner.category'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.res.partner.category',
+ inverse_name='openerp_id',
+ string='PrestaShop Bindings',
+ readonly=True,
+ )
+
+
+class PrestashopResPartnerCategory(models.Model):
+ _name = 'prestashop.res.partner.category'
+ _inherit = 'prestashop.binding'
+ _inherits = {'res.partner.category': 'openerp_id'}
+
+ openerp_id = fields.Many2one(
+ comodel_name='res.partner.category',
+ string='Partner Category',
+ required=True,
+ ondelete='cascade',
+ )
+ date_add = fields.Datetime(
+ string='Created At (on PrestaShop)',
+ readonly=True,
+ )
+ date_upd = fields.Datetime(
+ string='Updated At (on PrestaShop)',
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+ # TODO add prestashop shop when the field will be available in the api.
+ # we have reported the bug for it
+ # see http://forge.prestashop.com/browse/PSCFV-8284
+
+
+@prestashop
+class PartnerCategoryAdapter(GenericAdapter):
+ _model_name = 'prestashop.res.partner.category'
+ _prestashop_model = 'groups'
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
new file mode 100644
index 000000000..7fcdfc7b3
--- /dev/null
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...unit.importer import (
+ TranslatableRecordImporter,
+ import_record,
+ DelayedBatchImporter,
+)
+from ...backend import prestashop
+
+
+@prestashop
+class PartnerCategoryImportMapper(ImportMapper):
+ _model_name = 'prestashop.res.partner.category'
+
+ direct = [
+ ('name', 'name'),
+ ('date_add', 'date_add'),
+ ('date_upd', 'date_upd'),
+ ]
+
+ @mapping
+ def prestashop_id(self, record):
+ return {'prestashop_id': record['id']}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+@prestashop
+class PartnerCategoryImporter(TranslatableRecordImporter):
+ """ Import one translatable record """
+ _model_name = [
+ 'prestashop.res.partner.category',
+ ]
+
+ _translatable_fields = {
+ 'prestashop.res.partner.category': ['name'],
+ }
+
+ def _after_import(self, binding):
+ super(PartnerCategoryImporter, self)._after_import(binding)
+ record = self.prestashop_record
+ if float(record['reduction']):
+ import_record(
+ self.session,
+ 'prestashop.groups.pricelist',
+ self.backend_record.id,
+ record['id']
+ )
+
+
+@prestashop
+class PartnerCategoryBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.res.partner.category'
diff --git a/connector_prestashop/models/sale_order/__init__.py b/connector_prestashop/models/sale_order/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/sale_order/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
new file mode 100644
index 000000000..10b771032
--- /dev/null
+++ b/connector_prestashop/models/sale_order/common.py
@@ -0,0 +1,169 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import openerp.addons.decimal_precision as dp
+
+from odoo import models, fields, api
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+import logging
+_logger = logging.getLogger(__name__)
+
+
+class SaleOrder(models.Model):
+ _inherit = 'sale.order'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.sale.order',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopSaleOrder(models.Model):
+ _name = 'prestashop.sale.order'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'sale.order': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='sale.order',
+ string='Sale Order',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ prestashop_order_line_ids = fields.One2many(
+ comodel_name='prestashop.sale.order.line',
+ inverse_name='prestashop_order_id',
+ string='PrestaShop Order Lines',
+ )
+ prestashop_discount_line_ids = fields.One2many(
+ comodel_name='prestashop.sale.order.line.discount',
+ inverse_name='prestashop_order_id',
+ string='PrestaShop Discount Lines',
+ )
+ prestashop_invoice_number = fields.Char('PrestaShop Invoice Number')
+ prestashop_delivery_number = fields.Char('PrestaShop Delivery Number')
+ total_amount = fields.Float(
+ string='Total amount in PrestaShop',
+ digits=dp.get_precision('Account'),
+ readonly=True,
+ )
+ total_amount_tax = fields.Float(
+ string='Total tax in PrestaShop',
+ digits=dp.get_precision('Account'),
+ readonly=True,
+ )
+ total_shipping_tax_included = fields.Float(
+ string='Total shipping in PrestaShop',
+ digits=dp.get_precision('Account'),
+ readonly=True,
+ )
+ total_shipping_tax_excluded = fields.Float(
+ string='Total shipping in PrestaShop',
+ digits=dp.get_precision('Account'),
+ readonly=True,
+ )
+
+
+class SaleOrderLine(models.Model):
+ _inherit = 'sale.order.line'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.sale.order.line',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
+ )
+ prestashop_discount_bind_ids = fields.One2many(
+ comodel_name='prestashop.sale.order.line.discount',
+ inverse_name='odoo_id',
+ string='PrestaShop Discount Bindings',
+ )
+
+
+class PrestashopSaleOrderLine(models.Model):
+ _name = 'prestashop.sale.order.line'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'sale.order.line': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='sale.order.line',
+ string='Sale Order line',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ prestashop_order_id = fields.Many2one(
+ comodel_name='prestashop.sale.order',
+ string='PrestaShop Sale Order',
+ required=True,
+ ondelete='cascade',
+ index=True,
+ )
+
+ @api.model
+ def create(self, vals):
+ ps_sale_order = self.env['prestashop.sale.order'].search([
+ ('id', '=', vals['prestashop_order_id'])
+ ], limit=1)
+ vals['order_id'] = ps_sale_order.odoo_id.id
+ return super(PrestashopSaleOrderLine, self).create(vals)
+
+
+class PrestashopSaleOrderLineDiscount(models.Model):
+ _name = 'prestashop.sale.order.line.discount'
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'sale.order.line': 'odoo_id'}
+
+ odoo_id = fields.Many2one(
+ comodel_name='sale.order.line',
+ string='Sale Order line',
+ required=True,
+ ondelete='cascade',
+ oldname='openerp_id',
+ )
+ prestashop_order_id = fields.Many2one(
+ comodel_name='prestashop.sale.order',
+ string='PrestaShop Sale Order',
+ required=True,
+ ondelete='cascade',
+ index=True,
+ )
+
+ @api.model
+ def create(self, vals):
+ ps_sale_order = self.env['prestashop.sale.order'].search([
+ ('id', '=', vals['prestashop_order_id'])
+ ], limit=1)
+ vals['order_id'] = ps_sale_order.odoo_id.id
+ return super(PrestashopSaleOrderLineDiscount, self).create(vals)
+
+
+@prestashop
+class SaleOrderAdapter(GenericAdapter):
+ _model_name = 'prestashop.sale.order'
+ _prestashop_model = 'orders'
+ _export_node_name = 'order'
+
+ def update_sale_state(self, prestashop_id, datas):
+ return self.client.add('order_histories', datas)
+
+
+@prestashop
+class SaleOrderLineAdapter(GenericAdapter):
+ _model_name = 'prestashop.sale.order.line'
+ _prestashop_model = 'order_details'
+
+
+@prestashop
+class OrderPaymentAdapter(GenericAdapter):
+ _model_name = '__not_exist_prestashop.payment'
+ _prestashop_model = 'order_payments'
+
+
+@prestashop
+class OrderDiscountAdapter(GenericAdapter):
+ _model_name = 'prestashop.sale.order.line.discount'
+ _prestashop_model = 'order_discounts'
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
new file mode 100644
index 000000000..c4c951065
--- /dev/null
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -0,0 +1,504 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import _, fields
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.connector import ConnectorUnit
+from odoo.addons.queue_job.exception import FailedJobError, NothingToDoJob
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from odoo.addons.connector_ecommerce.unit.sale_order_onchange import (
+ SaleOrderOnChange,
+)
+from ...unit.backend_adapter import GenericAdapter
+from ...unit.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
+from ...unit.exception import OrderImportRuleRetry
+from ...backend import prestashop
+
+from datetime import datetime, timedelta
+from decimal import Decimal
+import logging
+_logger = logging.getLogger(__name__)
+
+try:
+ from prestapyt import PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@prestashop
+class PrestaShopSaleOrderOnChange(SaleOrderOnChange):
+ _model_name = 'prestashop.sale.order'
+
+
+@prestashop
+class SaleImportRule(ConnectorUnit):
+ _model_name = ['prestashop.sale.order']
+
+ def _rule_always(self, record, mode):
+ """ Always import the order """
+ return True
+
+ def _rule_never(self, record, mode):
+ """ Never import the order """
+ raise NothingToDoJob('Orders with payment modes %s '
+ 'are never imported.' %
+ record['payment']['method'])
+
+ def _rule_paid(self, record, mode):
+ """ Import the order only if it has received a payment """
+ if self._get_paid_amount(record) == 0.0:
+ raise OrderImportRuleRetry('The order has not been paid.\n'
+ 'The import will be retried later.')
+
+ def _get_paid_amount(self, record):
+ payment_adapter = self.unit_for(
+ GenericAdapter,
+ '__not_exist_prestashop.payment'
+ )
+ payment_ids = payment_adapter.search({
+ 'filter[order_reference]': record['reference']
+ })
+ paid_amount = 0.0
+ for payment_id in payment_ids:
+ payment = payment_adapter.read(payment_id)
+ paid_amount += float(payment['amount'])
+ return paid_amount
+
+ _rules = {
+ 'always': _rule_always,
+ 'paid': _rule_paid,
+ 'authorized': _rule_paid,
+ 'never': _rule_never,
+ }
+
+ def check(self, record):
+ """ Check whether the current sale order should be imported
+ or not. It will actually use the payment mode configuration
+ and see if the chosen rule is fullfilled.
+
+ :returns: True if the sale order should be imported
+ :rtype: boolean
+ """
+ ps_payment_method = record['payment']
+ mode_binder = self.binder_for('account.payment.mode')
+ payment_mode = mode_binder.to_internal(ps_payment_method)
+ if not payment_mode:
+ raise FailedJobError(_(
+ "The configuration is missing for the Payment Mode '%s'.\n\n"
+ "Resolution:\n"
+ " - Use the automatic import in 'Connectors > PrestaShop "
+ "Backends', button 'Import payment modes', or:\n"
+ "\n"
+ "- Go to 'Invoicing > Configuration > Management "
+ "> Payment Modes'\n"
+ "- Create a new Payment Mode with name '%s'\n"
+ "-Eventually link the Payment Method to an existing Workflow "
+ "Process or create a new one.") % (ps_payment_method,
+ ps_payment_method))
+ self._rule_global(record, payment_mode)
+ self._rules[payment_mode.import_rule](self, record, payment_mode)
+
+ def _rule_global(self, record, mode):
+ """ Rule always executed, whichever is the selected rule """
+ order_id = record['id']
+ max_days = mode.days_before_cancel
+ if not max_days:
+ return
+ if self._get_paid_amount(record) != 0.0:
+ return
+ fmt = '%Y-%m-%d %H:%M:%S'
+ order_date = datetime.strptime(record['date_add'], fmt)
+ if order_date + timedelta(days=max_days) < datetime.now():
+ raise NothingToDoJob('Import of the order %s canceled '
+ 'because it has not been paid since %d '
+ 'days' % (order_id, max_days))
+
+
+@prestashop
+class SaleOrderMapper(ImportMapper):
+ _model_name = 'prestashop.sale.order'
+
+ direct = [
+ ('date_add', 'date_order'),
+ ('invoice_number', 'prestashop_invoice_number'),
+ ('delivery_number', 'prestashop_delivery_number'),
+ ('total_paid', 'total_amount'),
+ ('total_shipping_tax_incl', 'total_shipping_tax_included'),
+ ('total_shipping_tax_excl', 'total_shipping_tax_excluded')
+ ]
+
+ def _get_sale_order_lines(self, record):
+ orders = record['associations'].get(
+ 'order_rows', {}).get(
+ self.backend_record.get_version_ps_key('order_row'), [])
+ if isinstance(orders, dict):
+ return [orders]
+ return orders
+
+ def _get_discounts_lines(self, record):
+ if record['total_discounts'] == '0.00':
+ return []
+ adapter = self.unit_for(
+ GenericAdapter, 'prestashop.sale.order.line.discount')
+ discount_ids = adapter.search({'filter[id_order]': record['id']})
+ discount_mappers = []
+ for discount_id in discount_ids:
+ discount_mappers.append({'id': discount_id})
+ return discount_mappers
+
+ children = [
+ (_get_sale_order_lines,
+ 'prestashop_order_line_ids', 'prestashop.sale.order.line'),
+ (_get_discounts_lines,
+ 'prestashop_discount_line_ids', 'prestashop.sale.order.line.discount')
+ ]
+
+ def _map_child(self, map_record, from_attr, to_attr, model_name):
+ source = map_record.source
+ # TODO patch ImportMapper in connector to support callable
+ if callable(from_attr):
+ child_records = from_attr(self, source)
+ else:
+ child_records = source[from_attr]
+
+ children = []
+ for child_record in child_records:
+ adapter = self.unit_for(GenericAdapter, model_name)
+ detail_record = adapter.read(child_record['id'])
+
+ mapper = self._get_map_child_unit(model_name)
+ items = mapper.get_items(
+ [detail_record], map_record, to_attr, options=self.options
+ )
+ children.extend(items)
+ return children
+
+ def _sale_order_exists(self, name):
+ sale_order = self.env['sale.order'].search([
+ ('name', '=', name),
+ ('company_id', '=', self.backend_record.company_id.id),
+ ], limit=1)
+ return len(sale_order) == 1
+
+ @mapping
+ def name(self, record):
+ basename = record['reference']
+ if not self._sale_order_exists(basename):
+ return {"name": basename}
+ i = 1
+ name = basename + '_%d' % (i)
+ while self._sale_order_exists(name):
+ i += 1
+ name = basename + '_%d' % (i)
+ return {"name": name}
+
+ @mapping
+ def partner_id(self, record):
+ binder = self.binder_for('prestashop.res.partner')
+ partner = binder.to_internal(record['id_customer'], unwrap=True)
+ return {'partner_id': partner.id}
+
+ @mapping
+ def partner_invoice_id(self, record):
+ binder = self.binder_for('prestashop.address')
+ address = binder.to_internal(record['id_address_invoice'], unwrap=True)
+ return {'partner_invoice_id': address.id}
+
+ @mapping
+ def partner_shipping_id(self, record):
+ binder = self.binder_for('prestashop.address')
+ shipping = binder.to_internal(record['id_address_delivery'], unwrap=True)
+ return {'partner_shipping_id': shipping.id}
+
+ @mapping
+ def pricelist_id(self, record):
+ return {'pricelist_id': self.backend_record.pricelist_id.id}
+
+ @mapping
+ def sale_team(self, record):
+ if self.backend_record.sale_team_id:
+ return {'team_id': self.backend_record.sale_team_id.id}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def payment(self, record):
+ binder = self.binder_for('account.payment.mode')
+ mode = binder.to_internal(record['payment'])
+ assert mode, ("import of error fail in SaleImportRule.check "
+ "when the payment mode is missing")
+ return {'payment_mode_id': mode.id}
+
+ @mapping
+ def carrier_id(self, record):
+ if record['id_carrier'] == '0':
+ return {}
+ binder = self.binder_for('prestashop.delivery.carrier')
+ carrier = binder.to_internal(record['id_carrier'], unwrap=True)
+ return {'carrier_id': carrier.id}
+
+ @mapping
+ def total_tax_amount(self, record):
+ tax = (float(record['total_paid_tax_incl']) -
+ float(record['total_paid_tax_excl']))
+ return {'total_amount_tax': tax}
+
+ def finalize(self, map_record, values):
+ onchange = self.unit_for(SaleOrderOnChange)
+ return onchange.play(values, values['prestashop_order_line_ids'])
+
+
+@prestashop
+class SaleOrderImporter(PrestashopImporter):
+ _model_name = ['prestashop.sale.order']
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(SaleOrderImporter, self).__init__(environment)
+ self.line_template_errors = []
+
+ def _import_dependencies(self):
+ record = self.prestashop_record
+ self._import_dependency(
+ record['id_customer'], 'prestashop.res.partner'
+ )
+ self._import_dependency(
+ record['id_address_invoice'], 'prestashop.address'
+ )
+ self._import_dependency(
+ record['id_address_delivery'], 'prestashop.address'
+ )
+
+ if record['id_carrier'] != '0':
+ self._import_dependency(record['id_carrier'],
+ 'prestashop.delivery.carrier')
+
+ rows = record['associations'] \
+ .get('order_rows', {}) \
+ .get(self.backend_record.get_version_ps_key('order_row'), [])
+ if isinstance(rows, dict):
+ rows = [rows]
+ for row in rows:
+ try:
+ self._import_dependency(row['product_id'],
+ 'prestashop.product.template')
+ except PrestaShopWebServiceError as err:
+ # we ignore it, the order line will be imported without product
+ _logger.error('PrestaShop product %s could not be imported, '
+ 'error: %s', row['product_id'], err)
+ self.line_template_errors.push(row)
+
+ def _add_shipping_line(self, binding):
+ shipping_total = (binding.total_shipping_tax_included
+ if self.backend_record.taxes_included
+ else binding.total_shipping_tax_excluded)
+ # when we have a carrier_id, even with a 0.0 price,
+ # Odoo will adda a shipping line in the SO when the picking
+ # is done, so we better add the line directly even when the
+ # price is 0.0
+ if binding.odoo_id.carrier_id:
+ binding.odoo_id._create_delivery_line(
+ binding.odoo_id.carrier_id,
+ shipping_total
+ )
+ binding.odoo_id.recompute()
+
+ def _after_import(self, binding):
+ super(SaleOrderImporter, self)._after_import(binding)
+ self._add_shipping_line(binding)
+ self.checkpoint_line_without_template(binding)
+
+ def checkpoint_line_without_template(self, binding):
+ if not self.line_template_errors:
+ return
+ msg = _('Product(s) used in the sales order could not be imported.')
+ self.backend_record.add_checkpoint(
+ model='sale.order',
+ record_id=binding.odoo_id.id,
+ message=msg,
+ )
+
+ def _has_to_skip(self):
+ """ Return True if the import can be skipped """
+ if self._get_binding():
+ return True
+ rules = self.unit_for(SaleImportRule)
+ try:
+ return rules.check(self.prestashop_record)
+ except NothingToDoJob as err:
+ # we don't let the NothingToDoJob exception let go out, because if
+ # we are in a cascaded import, it would stop the whole
+ # synchronization and set the whole job to done
+ return err.message
+
+
+@prestashop
+class SaleOrderBatchImporter(DelayedBatchImporter):
+ _model_name = 'prestashop.sale.order'
+
+
+@prestashop
+class SaleOrderLineMapper(ImportMapper):
+ _model_name = 'prestashop.sale.order.line'
+
+ direct = [
+ ('product_name', 'name'),
+ ('id', 'sequence'),
+ ('product_quantity', 'product_uom_qty'),
+ ('reduction_percent', 'discount'),
+ ]
+
+ @mapping
+ def prestashop_id(self, record):
+ return {'prestashop_id': record['id']}
+
+ @mapping
+ def price_unit(self, record):
+ if self.backend_record.taxes_included:
+ key = 'unit_price_tax_incl'
+ else:
+ key = 'unit_price_tax_excl'
+ if record['reduction_percent']:
+ reduction = Decimal(record['reduction_percent'])
+ price = Decimal(record[key])
+ price_unit = price / ((100 - reduction) / 100)
+ else:
+ price_unit = record[key]
+ return {'price_unit': price_unit}
+
+ @mapping
+ def product_id(self, record):
+ if int(record.get('product_attribute_id', 0)):
+ combination_binder = self.binder_for(
+ 'prestashop.product.combination'
+ )
+ product = combination_binder.to_internal(
+ record['product_attribute_id'],
+ unwrap=True,
+ )
+ else:
+ binder = self.binder_for('prestashop.product.template')
+ template = binder.to_internal(record['product_id'], unwrap=True)
+ product = self.env['product.product'].search([
+ ('product_tmpl_id', '=', template.id),
+ ('company_id', '=', self.backend_record.company_id.id)],
+ limit=1,
+ )
+ if not product:
+ return {}
+ return {
+ 'product_id': product.id,
+ 'product_uom': product and product.uom_id.id,
+ }
+
+ def _find_tax(self, ps_tax_id):
+ binder = self.binder_for('prestashop.account.tax')
+ return binder.to_internal(ps_tax_id, unwrap=True)
+
+ @mapping
+ def tax_id(self, record):
+ taxes = record.get('associations', {}).get('taxes', {}).get(
+ self.backend_record.get_version_ps_key('tax'), [])
+ if not isinstance(taxes, list):
+ taxes = [taxes]
+ result = self.env['account.tax'].browse()
+ for ps_tax in taxes:
+ result |= self._find_tax(ps_tax['id'])
+ if result:
+ return {'tax_id': [(6, 0, result.ids)]}
+ return {}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
+@prestashop
+class SaleOrderLineDiscountImporter(ImportMapper):
+ _model_name = 'prestashop.sale.order.line.discount'
+
+ direct = []
+
+ @mapping
+ def discount(self, record):
+ return {
+ 'name': record['name'],
+ 'product_uom_qty': 1,
+ }
+
+ @mapping
+ def price_unit(self, record):
+ if self.backend_record.taxes_included:
+ price_unit = record['value']
+ else:
+ price_unit = record['value_tax_excl']
+ if price_unit[0] != '-':
+ price_unit = '-' + price_unit
+ return {'price_unit': price_unit}
+
+ @mapping
+ def product_id(self, record):
+ if self.backend_record.discount_product_id:
+ return {'product_id': self.backend_record.discount_product_id.id}
+ product_discount = self.session.env.ref(
+ 'connector_ecommerce.product_product_discount')
+ return {'product_id': product_discount.id}
+
+ @mapping
+ def tax_id(self, record):
+ return {'tax_id': [
+ (6, 0, self.backend_record.discount_product_id.taxes_id.ids)
+ ]}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def prestashop_id(self, record):
+ return {'prestashop_id': record['id']}
+
+
+@job(default_channel='root.prestashop')
+def import_orders_since(session, backend_id, since_date=None, **kwargs):
+ """ Prepare the import of orders modified on PrestaShop """
+ backend_record = session.env['prestashop.backend'].browse(backend_id)
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ result = import_batch(
+ session,
+ 'prestashop.sale.order',
+ backend_id,
+ filters,
+ priority=10,
+ max_retries=0,
+ **kwargs
+ )
+ if since_date:
+ filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
+ try:
+ import_batch(session, 'prestashop.mail.message', backend_id, filters)
+ except Exception as error:
+ msg = _(
+ 'Mail messages import failed with filters `%s`. '
+ 'Error: `%s`'
+ ) % (str(filters), str(error))
+ backend_record.add_checkpoint(
+ message=msg
+ )
+
+ now_fmt = fields.Datetime.now()
+ backend_record.write({
+ 'import_orders_since': now_fmt
+ })
+ return result
diff --git a/connector_prestashop/models/sale_order_state/__init__.py b/connector_prestashop/models/sale_order_state/__init__.py
new file mode 100644
index 000000000..05691dc17
--- /dev/null
+++ b/connector_prestashop/models/sale_order_state/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import exporter
+from . import importer
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
new file mode 100644
index 000000000..5783d9136
--- /dev/null
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import models, fields
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class SaleOrderState(models.Model):
+ _name = 'sale.order.state'
+
+ name = fields.Char('Name', translate=True)
+ company_id = fields.Many2one(
+ comodel_name='res.company',
+ string='Company',
+ required=True,
+ )
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.sale.order.state',
+ inverse_name='openerp_id',
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopSaleOrderState(models.Model):
+ _name = 'prestashop.sale.order.state'
+ _inherit = 'prestashop.binding'
+ _inherits = {'sale.order.state': 'openerp_id'}
+
+ openerp_state_ids = fields.One2many(
+ comodel_name='sale.order.state.list',
+ inverse_name='prestashop_state_id',
+ string='Odoo States',
+ )
+ openerp_id = fields.Many2one(
+ comodel_name='sale.order.state',
+ required=True,
+ ondelete='cascade',
+ string='Sale Order State',
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
+ 'A erp record with same ID on PrestaShop already exists.'),
+ ]
+
+
+class SaleOrderStateList(models.Model):
+ _name = 'sale.order.state.list'
+
+ name = fields.Selection(
+ [
+ ('draft', 'Quotation'),
+ ('sent', 'Quotation Sent'),
+ ('cancel', 'Cancelled'),
+ ('sale', 'Sale Order'),
+ ('done', 'Done')
+ ],
+ string='Odoo Sales State',
+ required=True,
+ )
+ prestashop_state_id = fields.Many2one(
+ comodel_name='prestashop.sale.order.state',
+ string='PrestaShop State',
+ )
+ prestashop_id = fields.Integer(
+ related='prestashop_state_id.prestashop_id',
+ readonly=True,
+ store=True,
+ string='PrestaShop ID',
+ )
+
+
+@prestashop
+class SaleOrderStateAdapter(GenericAdapter):
+ _model_name = 'prestashop.sale.order.state'
+ _prestashop_model = 'order_states'
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
new file mode 100644
index 000000000..f973f42e9
--- /dev/null
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.synchronizer import Exporter
+from ...backend import prestashop
+
+
+@prestashop
+class SaleStateExporter(Exporter):
+ _model_name = ['prestashop.sale.order']
+
+ def run(self, prestashop_id, state, **kwargs):
+ datas = {
+ 'order_history': {
+ 'id_order': prestashop_id,
+ 'id_order_state': state,
+ }
+ }
+ self.backend_adapter.update_sale_state(prestashop_id, datas)
+
+
+def find_prestashop_state(session, sale_state, backend):
+ state_list_model = session.env['sale.order.state.list']
+ state_lists = state_list_model.search(
+ [('name', '=', sale_state)]
+ )
+ for state_list in state_lists:
+ if state_list.prestashop_state_id.backend_id == backend:
+ return state_list.prestashop_state_id.prestashop_id
+ return None
+
+
+@job
+def export_sale_state(session, model_name, record_id):
+ binding_model = session.env[model_name]
+ sales = binding_model.search([('openerp_id', '=', record_id)])
+ for sale in sales:
+ backend = sale.backend_id
+ new_state = find_prestashop_state(session, sale.state, backend)
+ if not new_state:
+ continue
+ env = backend.get_environment(binding_model._name, session=session)
+ sale_exporter = env.get_connector_unit(SaleStateExporter)
+ sale_exporter.run(sale.prestashop_id, new_state)
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
new file mode 100644
index 000000000..87472f0d5
--- /dev/null
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...unit.importer import TranslatableRecordImporter, DirectBatchImporter
+from ...backend import prestashop
+
+
+@prestashop
+class SaleOrderStateMapper(ImportMapper):
+ _model_name = 'prestashop.sale.order.state'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+
+@prestashop
+class SaleOrderStateImporter(TranslatableRecordImporter):
+ """ Import one translatable record """
+ _model_name = [
+ 'prestashop.sale.order.state',
+ ]
+
+ _translatable_fields = {
+ 'prestashop.sale.order.state': [
+ 'name',
+ ],
+ }
+
+
+@prestashop
+class SaleOrderStateBatchImporter(DirectBatchImporter):
+ _model_name = 'prestashop.sale.order.state'
diff --git a/connector_prestashop/models/stock_move/__init__.py b/connector_prestashop/models/stock_move/__init__.py
new file mode 100644
index 000000000..aa9c3f5d9
--- /dev/null
+++ b/connector_prestashop/models/stock_move/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import common
diff --git a/connector_prestashop/models/stock_move/common.py b/connector_prestashop/models/stock_move/common.py
new file mode 100644
index 000000000..5f3f4cc3e
--- /dev/null
+++ b/connector_prestashop/models/stock_move/common.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class StockLocation(models.Model):
+ _inherit = 'stock.location'
+
+ prestashop_synchronized = fields.Boolean(
+ string='Sync with PrestaShop',
+ help='Check this option to synchronize this location with PrestaShop')
+
+ @api.model
+ def get_prestashop_stock_locations(self):
+ prestashop_locations = self.search([
+ ('prestashop_synchronized', '=', True),
+ ('usage', '=', 'internal'),
+ ])
+ return prestashop_locations
+
+
+class StockQuant(models.Model):
+ _inherit = 'stock.quant'
+
+ @api.model
+ def create(self, vals):
+ location_obj = self.env['stock.location']
+ ps_locations = location_obj.get_prestashop_stock_locations()
+ quant = super(StockQuant, self).create(vals)
+ if quant.location_id in ps_locations:
+ quant.product_id.update_prestashop_qty()
+ return quant
+
+ @api.multi
+ def write(self, vals):
+ location_obj = self.env['stock.location']
+ ps_locations = location_obj.get_prestashop_stock_locations()
+ for quant in self:
+ location = quant.location_id
+ res = super(StockQuant, self).write(vals)
+ if location in ps_locations:
+ quant.invalidate_cache()
+ quant.product_id.update_prestashop_qty()
+ return res
+
+ @api.multi
+ def unlink(self):
+ ps_locations = self.env['stock.location'].\
+ get_prestashop_stock_locations()
+ self.filtered(lambda x: x.location_id in ps_locations).mapped(
+ 'product_id').update_prestashop_qty()
+ return super(StockQuant, self).unlink()
diff --git a/connector_prestashop/models/stock_tracking/__init__.py b/connector_prestashop/models/stock_tracking/__init__.py
new file mode 100644
index 000000000..25fd124e2
--- /dev/null
+++ b/connector_prestashop/models/stock_tracking/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import exporter
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
new file mode 100644
index 000000000..77fec3f20
--- /dev/null
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+@prestashop
+class OrderCarriers(GenericAdapter):
+ _model_name = '__not_exit_prestashop.order_carrier'
+ _prestashop_model = 'order_carriers'
+ _export_node_name = 'order_carrier'
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
new file mode 100644
index 000000000..dc16096ff
--- /dev/null
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import logging
+from odoo import _
+from odoo.addons.connector.unit.synchronizer import Exporter
+from odoo.exceptions import UserError
+from odoo.addons.queue_job.job import job
+from ...backend import prestashop
+from ...unit.backend_adapter import PrestaShopCRUDAdapter
+
+_logger = logging.getLogger(__name__)
+
+
+@prestashop
+class PrestashopTrackingExporter(Exporter):
+ _model_name = ['prestashop.sale.order']
+
+ def _get_tracking(self):
+ trackings = []
+ for picking in self.binding.picking_ids:
+ if picking.carrier_tracking_ref:
+ trackings.append(picking.carrier_tracking_ref)
+ return ';'.join(trackings) if trackings else None
+
+ def run(self, binding_id, **kwargs):
+ """ Export the tracking number of a picking to Magento """
+ # verify the picking is done + magento id exists
+ tracking_adapter = self.unit_for(
+ PrestaShopCRUDAdapter, '__not_exit_prestashop.order_carrier')
+
+ self.binding = self.model.browse(binding_id)
+ tracking = self._get_tracking()
+ if tracking:
+ prestashop_order_id = self.binder.to_external(self.binding)
+ filters = {
+ 'filter[id_order]': prestashop_order_id,
+ }
+ order_carrier_id = tracking_adapter.search(filters)
+ if order_carrier_id:
+ order_carrier_id = order_carrier_id[0]
+ vals = tracking_adapter.read(order_carrier_id)
+ vals['tracking_number'] = tracking
+ tracking_adapter.write(order_carrier_id, vals)
+ return "Tracking %s exported" % tracking
+ else:
+ raise exceptions.Warning(
+ _('PrestaShop Error'),
+ _('No carrier found on sale order'))
+ else:
+ return "No tracking to export"
+
+
+@job
+def export_tracking_number(session, model_name, record_id):
+ """ Export the tracking number of a delivery order. """
+ order = session.env[model_name].browse(record_id)
+ backend = order.backend_id
+ env = backend.get_environment(model_name, session=session)
+ tracking_exporter = env.get_connector_unit(PrestashopTrackingExporter)
+ return tracking_exporter.run(record_id)
diff --git a/connector_prestashop/models/stock_warehouse/__init__.py b/connector_prestashop/models/stock_warehouse/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/stock_warehouse/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
new file mode 100644
index 000000000..e219f7344
--- /dev/null
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import api, fields, models
+
+from ...unit.backend_adapter import GenericAdapter
+from ...backend import prestashop
+
+
+class StockWarehouse(models.Model):
+ _inherit = 'stock.warehouse'
+
+ prestashop_bind_ids = fields.One2many(
+ comodel_name='prestashop.shop',
+ inverse_name='openerp_id',
+ readonly=True,
+ string='PrestaShop Bindings',
+ )
+
+
+class PrestashopShop(models.Model):
+ _name = 'prestashop.shop'
+ _inherit = 'prestashop.binding'
+ _description = 'PrestaShop Shop'
+
+ @api.multi
+ @api.depends('shop_group_id', 'shop_group_id.backend_id')
+ def _compute_backend_id(self):
+ self.backend_id = self.shop_group_id.backend_id.id
+
+ name = fields.Char(
+ string='Name',
+ help="The name of the method on the backend",
+ required=True
+ )
+ shop_group_id = fields.Many2one(
+ comodel_name='prestashop.shop.group',
+ string='PrestaShop Shop Group',
+ required=True,
+ ondelete='cascade',
+ )
+ openerp_id = fields.Many2one(
+ comodel_name='stock.warehouse',
+ string='WareHouse',
+ required=True,
+ readonly=True,
+ ondelete='cascade',
+ )
+ backend_id = fields.Many2one(
+ compute='_compute_backend_id',
+ comodel_name='prestashop.backend',
+ string='PrestaShop Backend',
+ store=True,
+ )
+ default_url = fields.Char('Default url')
+
+
+@prestashop
+class ShopAdapter(GenericAdapter):
+ _model_name = 'prestashop.shop'
+ _prestashop_model = 'shops'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
new file mode 100644
index 000000000..510e42d3b
--- /dev/null
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...unit.importer import PrestashopImporter, DirectBatchImporter
+from odoo.addons.connector.unit.mapper import external_to_m2o
+from ...backend import prestashop
+
+
+@prestashop
+class ShopImportMapper(ImportMapper):
+ _model_name = 'prestashop.shop'
+
+ direct = [
+ ('name', 'name'),
+ (external_to_m2o('id_shop_group'), 'shop_group_id'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ def warehouse_id(self, record):
+ return {'warehouse_id': self.backend_record.warehouse_id.id}
+
+ @mapping
+ def opener_id(self, record):
+ return {'openerp_id': self.backend_record.warehouse_id.id}
+
+
+@prestashop
+class ShopImporter(PrestashopImporter):
+ _model_name = 'prestashop.shop'
+
+
+@prestashop
+class ShopBatchImporter(DirectBatchImporter):
+ _model_name = 'prestashop.shop'
diff --git a/connector_prestashop/security/ir.model.access.csv b/connector_prestashop/security/ir.model.access.csv
new file mode 100644
index 000000000..7303207a1
--- /dev/null
+++ b/connector_prestashop/security/ir.model.access.csv
@@ -0,0 +1,43 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_prestashop_backend_full,Full access on prestashop.backend,model_prestashop_backend,connector.group_connector_manager,1,1,1,1
+access_prestashop_res_lang_full,Full access on prestashop.res.lang,model_prestashop_res_lang,connector.group_connector_manager,1,1,1,1
+access_prestashop_res_country_full,Full access on prestashop.res.country,model_prestashop_res_country,connector.group_connector_manager,1,1,1,1
+access_prestashop_res_currency_full,Full access on prestashop.res.currency,model_prestashop_res_currency,connector.group_connector_manager,1,1,1,1
+access_prestashop_binding_full,Full access on prestashop.binding,model_prestashop_binding,connector.group_connector_manager,1,1,1,1
+access_prestashop_shop_group_full,Full access on prestashop.shop.group,model_prestashop_shop_group,connector.group_connector_manager,1,1,1,1
+access_prestashop_shop_full,Full access on prestashop.shop,model_prestashop_shop,connector.group_connector_manager,1,1,1,1
+access_prestashop_prestashop_res_partner_user,User access on prestashop.res.partner,model_prestashop_res_partner,base.group_user,1,0,0,0
+access_prestashop_prestashop_res_partner_full,Full access on prestashop.res.partner,model_prestashop_res_partner,connector.group_connector_manager,1,1,1,1
+access_prestashop_prestashop_address_full,Full access on prestashop.address,model_prestashop_address,connector.group_connector_manager,1,1,1,1
+access_prestashop_prestashop_res_partner_category_user,User access on prestashop.res.partner.category,model_prestashop_res_partner_category,base.group_user,1,0,0,0
+access_prestashop_prestashop_res_partner_category_full,Full access on prestashop.res.partner.category,model_prestashop_res_partner_category,connector.group_connector_manager,1,1,1,1
+access_prestashop_account_tax_full,Full access on prestashop.account.tax,model_prestashop_account_tax,connector.group_connector_manager,1,1,1,1
+access_prestashop_account_tax_group_full,Full access on prestashop.account.tax.group,model_prestashop_account_tax_group,connector.group_connector_manager,1,1,1,1
+access_sale_order_state_full,Full access on sale.order.state,model_sale_order_state,connector.group_connector_manager,1,1,1,1
+access_prestashop_sale_order_state_full,Full access on prestashop.sale.order.state,model_prestashop_sale_order_state,connector.group_connector_manager,1,1,1,1
+access_sale_order_state_list_full,Full access on sale.order.state.list,model_sale_order_state_list,connector.group_connector_manager,1,1,1,1
+access_prestashop_sale_order_user,User access on prestashop.sale.order,model_prestashop_sale_order,base.group_user,1,0,0,0
+access_prestashop_sale_order_full,Full access on prestashop.sale.order,model_prestashop_sale_order,connector.group_connector_manager,1,1,1,1
+access_prestashop_sale_order_line_user,User access on prestashop.sale.order.line,model_prestashop_sale_order_line,base.group_user,1,0,0,0
+access_prestashop_sale_order_line_full,Full access on prestashop.sale.order.line,model_prestashop_sale_order_line,connector.group_connector_manager,1,1,1,1
+access_prestashop_sale_order_line_discount_user,User access on prestashop.sale.order.line.discount,model_prestashop_sale_order_line_discount,base.group_user,1,0,0,0
+access_prestashop_sale_order_line_discount_full,Full access on prestashop.sale.order.line.discount,model_prestashop_sale_order_line_discount,connector.group_connector_manager,1,1,1,1
+access_prestashop_delivery_carrier_full,Full access on prestashop.delivery.carrier,model_prestashop_delivery_carrier,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_category_full,Full access on prestashop.product.category,model_prestashop_product_category,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_category_user,User access on prestashop.product.category,model_prestashop_product_category,base.group_user,1,0,0,0
+access_prestashop_product_image_full,Full access on prestashop.product.image,model_prestashop_product_image,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_template_user,User access on prestashop.product.template,model_prestashop_product_template,base.group_user,1,0,0,0
+access_prestashop_product_template,Full access on prestashop.product.template,model_prestashop_product_template,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_combination_user,User access on prestashop.product.combination,model_prestashop_product_combination,base.group_user,1,0,0,0
+access_prestashop_product_combination_full,Full access on prestashop.product.combination,model_prestashop_product_combination,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_combination_option_user,User access on prestashop.product.combination.option,model_prestashop_product_combination_option,base.group_user,1,0,0,0
+access_prestashop_product_combination_option_full,Full access on prestashop.product.combination.option,model_prestashop_product_combination_option,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_combination_option_value_user,User access on prestashop.product.combination.option.value,model_prestashop_product_combination_option_value,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_combination_option_value_full,Full access on prestashop.product.combination.option.value,model_prestashop_product_combination_option_value,base.group_user,1,0,0,0
+access_prestashop_refund,Full access on prestashop.refund,model_prestashop_refund,connector.group_connector_manager,1,1,1,1
+access_prestashop_supplier_user,User access on prestashop.supplier,model_prestashop_supplier,base.group_user,1,0,0,0
+access_prestashop_supplier,Full access on prestashop.supplier,model_prestashop_supplier,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_supplierinfo_user,User access on prestashop.product.supplierinfo,model_prestashop_product_supplierinfo,base.group_user,1,0,0,0
+access_prestashop_product_supplierinfo,Full access on prestashop.product.supplierinfo,model_prestashop_product_supplierinfo,connector.group_connector_manager,1,1,1,1
+access_mail_message,Full access on prestashop.mail.message,model_prestashop_mail_message,connector.group_connector_manager,1,1,1,1
+access_prestashop_groups_pricelist,Full access on prestashop.groups.pricelist,model_prestashop_groups_pricelist,connector.group_connector_manager,1,1,1,1
diff --git a/connector_prestashop/security/prestashop_security.xml b/connector_prestashop/security/prestashop_security.xml
new file mode 100644
index 000000000..c111abe80
--- /dev/null
+++ b/connector_prestashop/security/prestashop_security.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ PrestaShop backend multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ PrestaShop shop group multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ PrestaShop account tax group multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ Account tax group multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ Delivery carrier multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ PrestaShop delivery carrier multi-company
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ Sale order state
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+ Refund
+
+
+ ['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
diff --git a/connector_prestashop/static/description/icon.png b/connector_prestashop/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..37d9c4834a0f5c68ebc085ac3a12ead2335aee02
GIT binary patch
literal 7665
zcmVut2qebu
zi;%d0xa2b?MgiF+rW5u7!6h+bq9Pi93B-Jf8?wlZ5cP{nTnH#c9TpjseTHGWr@QN(
z-ygFuGYrs6^(f9tAgpSWpfO9_>#otOCLW1Jti=J2!?F>6UwLu*lZxKl*tSHC
z%DWLyWcY0>rtOVZq{RX1VQKFC3^0ENhBme>aqyY3WyqKnlRk^);uZ&}!_zs7+IW27
zHH!9WY+DlG3)^G&zv4usQMcu)NN8ME?b}cT1-VuM7HAz!&`MoiF*zqLq7Q;KHuhp&tm`?()FW
z5!;yFH?5iadEGA>DVE)Iup_zvw{E_$(x|zA%*v@7;t{`P?f6~5LPZxnH#qOR2)|Ug
zzy-@P9LstXj(x?Q(lx-dL+9kEvDT9K@304pyGFk@`7dtRRmHLq%j{rD;m=TJ0vU@Rd0wyZWy)l{@rfaRUb=+%H))l=0@Ne5UuXl{St
z()cy#Kb%n64@WK^>9}T86pUUq@kqINuLVhDj$n_p4hKh6eK;i@KyA4t0r3O2$MXZX
z=jKJr9V^ElFk-F;qV8VSMUmU8{(s6jz_NY|(?l6@@+<2{VSF@$EXicd$|;)^CdMl-
z%78x%TkthF1sx!e=?n#0$0@#k^r}hqM${Ub!pj4X1MkHtZaI<24R8uN0GNSsOQO>S
zQ8%rL7r)EfZ8caRxZP%<#i5kQ%G3BHw5h
zuK-n*f`Wn*hHay9fFmF7<=~2KF_$l}Zq%yDSH~>aKrGFjyBcIr?2_`^W>EvIU%&nm
z+qS<2AQHdNn&R-uFRBMc5)Hv78CeU&;Q)GGqdUM&H{H}~=gys-%FD}J1%ts>s@l#N
zV?;z%HEi2<*_JI^ZtUK@dqOuKAXFTPPf*#CP{Bz?(GMiP_WWrL>Hs-8IjQ^h?Hg8J
zUVfo5rkCS5=dD|}uBYQTCv4Gg+qRAD?CgZgj|AeY0mOE;C0uwCF_wO8o7f#dA*(?g
zpl{#4oems0Fs-n#aAY_f?i{PU&*vi$i1X>?=xf6%kIw;6yCm+y8-R?g@}gjIni69J
zR~o_rdiCn{!`-`gFNj1UUE|de4u|7%fV!^?2|009lww(p68Ddmk<0y|rMYttgS3iK
zG(D*f(5qLkyNip9A2P-q({HcBuf*WmzSF8e>ucY}=MdByw3G5Qym=
zP+xl?RrJ^ZLKJAFElnGV$HqX?9N_%(&mUD>T>P*xrdGJw=ksm#`F#It+xGkI+qeIu
zOP4PHTE2Yw35QiXcI-Ge5C}vS_B>HT(JM||4q(uD#||2VW&IYW1qsKKq~dT=9N>Zr
zF6gm;|NezFZ@z8Y#jRSknm%I0h{r18*wGUR1Wq~$BAOmTIySyIUILbpvw-}V1sjM^
zMyO|8@hwS`0~|hlc(&s>9jZRtwtcWon>N>N+_-VwrcIk-*0+EE{x#|8=?8#z^?e_0
z_pn@2NRK0%i;77~?jN^MoAcudaEtP#>!X2v`t&(37z}>D=DDn_tO*-8Zd@0y&P9tB
z1pHvNF_U*lM=g#x0K6}01eH}Y?e8nyOOO`AN0uNRmadBDhyzM~um<5$P
z6n(gP1y+#iMQ8
zj(hP!G7;gK1jI9J>_1lAghoQmZ-MjU7U$^S?{*DPE5xg+O>)|KYF6N7U}pj>=mq}IY6yYo8vf5GP~x;<^B+`AVD?5cBG`e@N|y9!A1(79WrmS
zz%LThq6=$g6Lr-AM5I=R%5XTG_%xm*k$TwsJK)Pibck}T?Mr+0sc+Bj=#p9WvTTIk
zw=_5JF;$K`D>_Q{hg0P@HBY$h0JYZ1MoXP;|N6QbNLM4Q
zS(=;oho^_m>5;fTST<;G>!rE#W{PcpL_$m1t9hsJis0|+o^*9xz-5bu_W_gj1WuW#!^T8Gf$-wb+vznk_%
z%hKGrGeD-huUS3;eNB{n$0M84Gka{Sn^fZe4W4(J1Lqs`Diz5U=!@HHHdQB&UOgqR
zUJG3<2oAT5~%3aq$!)uiFa8^m(GpYHW~
zSJ(U;4u^jLfFk1y2K^|4@7IcTp&hcWUo>FNz(oUAUB76+>hm3oA&PtptN@no9{0we
z$A7x!8rPCHo`{jlM>=AKZ>-pqDXDmYw!oP{N0NN=75;69?9nG0!F0U_7&2r?yUm+7
zf9^O=^+d|-?CkFhT-5O!i1m(9=cPaUYk8!;QSh;fL0iVzJ*P7=}8)!cq3CS8%hdBZ7
z+~Zd5f-W4eYNDv=+_`q*-d)ki
z=k)6A|OR=9uks!0ptnXi~s2N;__Xu^hHA2=Z%X35LTw;v%
zYupLTx`MzuNAxFSR!)h1warl-?&DuJ!dKF%xD&?AF<9Gz2g2VkFNvIE`NT?V>JL?|sh|xvJxtjy$f8KNY_VIZY7>5^
zNkxjXTVl>mkOUMxy&=k}oKUjV@Ap4<##`yb5WP{9?~$DCWrGMWq55pMaB#(d0{?N_
zO!1Jg1E^AzVCo(h(YTXP#6#sO=a+$(m*w~~1HSa(qM8GG6(Z*o|1(htnlH#&%WGb}
z>6NKTi%BHx0G3eHRF=vp(jYZJeT*#dmjZvPJa|55L5Gkp@^!)LDQHhbyMSb%v;lme
zVW1e5GO^gJ@Nd*?)kw;g%Dsacgv7fwV(mg>TJE1Tq!AsUE;klT*axhuJen*CH^&_#
z$sR$Afre=V{3nsH1B4~mVAWL=bZcw_ni~l_z+(dnN(&JfHt81SDlDRy=q$wWT2#C2r2miupAl2)#P=V@Qut
zoZs#e*9>V121SpXvs{Zf!M1Moar4)wa$$B3CKSQy;bBGL5>{`2K4C*tT6zM};#v(L
zF$RN9&pMk6vvb(CDTG{|n;$969<9I;GR7`3WPeo#mKv6|*h%OmD61PQKVgb?OVhs@6
z%%FXNip$fwv<0C2t3znSp>xL9+%Tub0iwh;2Z%Kqcp&g4MjcW+S5*1x7=m9NYH@%D
z#ytm+P)vwV%%EJ?NHo4&OQRc5=F1Pnsu_G*2d%bRJCaj#pw^
zQFUB8`14P`0JQ}dyMY;Rk{B{s$H7xLk_-?4GZ652?6RTkcFSuZ3fx_#8Dm#)U!VwIht^o$%AUZkik`s!w>}1i@;${Af3%H5
z9~2TUDWh!r9`>yL2oyF>d4><}d4jS}zvB9Hes+xRmS9kHxSJ|gH6{nx8`y!mdBRMc2%pbjv!YmTs$MSU4(NPIz$q
zi6K2&eVyyhzKf1&UD+Sl&8vk=s=I=zo!b%kVn3!l%>I9DAzX5Fqv$VJY(Tt6lX#XD
ze#M^GKSZnw-!0j^11AvT{Pvf!^Kgw!wJI&apeS(J0d#kL>mj>l_T;V$<`Mk&UiNO-
zK&xKexuf?CRunF&=nB^834HqSi?w7!2TN;xF5g!|;qO-+EzvQQe!82kU212f)s|pT
zR5VBpa6$G}NI>~y_Hs-p!tR&f;q(z#GW@#RKp?G4V&UK5mj`LxqfSmqp``|h0(ZBJ
zIZiOBuy_+zx{ot{Gz75(6uwxtp3feC6%(#q1H?nP_y`@+PTMEKNDI9ZN6%`l;VTkS
zdWzs`4d7T(WY;q>X!HJmuw>J(7KIr0)zkB|JLVAH_iT6oBroGJ#Ia^w?g<}Dc;r@*y$gJ^YvEX2tpVm<`O3lZYX{$lut$}hmdIBUV&{S(t155KYHrtG4(c@c!k5CuWvRPf
zc#9+3_VCr}_pwvGIA!te?(J)r1@M(?f5<6Bqa=4x)$4#4wmr4l`pSi*Ugu36LF?W<
zo)wYNiCcGS(J0%xiO64p$vtizMElFmO;}%A*Y*IPCamZbq|x^E6OjdoJbva+hSRE7
z{Ci8;=_ysOfKOaA?i8Z2H+H9s`!2aoZqLJDoVslh_ui
zo!ZdmTW64YZdYiD0mMy{N%9Jys;z+yrT;EEYqS4(Jgw46@795o>^7uiw1Id3HvTWHhdvjr7Cr{Wbkx0qz%E_Iz@Xw#0of3(pXJlmTzUQ8M
zY6a{cdE}9l($dmeo%oQ?r~U~OYAqM{FIdpQ7otNbRQkE!?+^L?{&b(umq9)B?Ai0c
z$dMIWtor?rv;xQS`^OzR-XAgkjofY;Hr_7|wB5dZ*+fO6jIWm%kmT`JLbIw+;<_yOZNscKbK_7S;C~
zHCL>ypKdGhII;^X@`cBjUN&=1-itG5K3JV{b>{5(uX)1ym7{iHNolZb=Ip$WX3aXf
zReH&h;B^Mio|=azWWK2Se)jAIU!OHQ?;TIb>@}E=J-+m!g$oy^d3@>P>&jIfpM3uL
zHvm*sJicI|#}__0Yu2nzb&VgFKWNan{K184bO*M4c6!I+^;O@Md*tQvNN9b{>$6JR
z=XjjRox`0)V?>o1~mgQ(m91Qgz^`fP$J
z+W}_g<()^x4%$H@p1w898@FcAnTY%i*ltvZs>m==^LVU3Kr!CAii}j1J5X{E_NtoY
z_vPnwsBu|3$lolLiv{il?Jqd5`tx&|;wDlt;Q>%g(F0Q_ZvZyTnlmp;Rpxp;X%_+S
z0ias;z|<+5fK9V!=N&NccVn#o0v@bVWU$`;`SgheHI%Si!x-zbY;MjFT
zx?s#*D33ifaMe=)W7iJ;9})g;@Z15+J$kk7esJLG4ZwzR1-a>{E-W#=OM$oIDZ8m~
zOdLQ|{th5wopbEv5DJx5>_IPb#>tec(e3~mHgPrLMD%iy4^`Qy(65$m)$X8yMRDGI
z0LwVvLGdYC-GzK;;OaMly}+>J$r+r#S18bWf1~EaF%IAeSpY_~q&|Vv)YNPML{1uf
zvCxkIERS9vr+xiIWFsOQ1upjc{nb^jh<*f;b?@3iL*mqps$7I(eBSg8HO~wD6Rfk3
zCnt_w@f&IVzfp6dz8YXS5OHj+ccw;It$ToosMMN&Cuql+Gau|WbLNBHX3w785n$T1
zNd>@KRhczoR^GA8cTRwR!GaDb=NQ!u7WzJr;q|8XuKGSm{Hn=p)AY
zFVG)@Jno-7sk$XENT->z^QHq=pj-ud+q7vDYLCAw%di{(44!;opor+4IdiUe)P7Bb
zM`p~)yR>yi>K%2vlJy!E(JKIPyz-uNb^awA8#OB0mN4BB3MWYF?xjE%6b+)xhS6O@3WPs@#n+S76K)#xm7U
z`_!pZ54Oroy$bY6QEo0i68wEsmKnWVVTXU>#65n$zZ7K)7MIn$
zD$jT<=Yh6u+wQ*e&O5`$UZz{7Pn&$v%$W7un8f&dQ=DA?!E&ly&XcfE-Ga?1MQ
zPu2+jl+>ImeqTZEAyZ?Wp{kaE96J-mNETp@bl7+F)gbb`MU!G==-8Pn$Gy`m{+Sv8?+5?69f-1`7u&
z{yDMkni%090JddS2bui&IUbbWz`N1vY0kv#0Af5JR!GW4vC7&Z{eDHE`u2&gQ#F?Z
z>iDec*F+>(`W_IGihxjkmVF;^BI=3y#-)0^uL4Jm#qCw+4vBXJkSW5lX!SH_Vh&|a
zpFV!q%-MN+)kvROU#Pij#+0P766hRqqDvC89r%gvy53oxUaTi9q#@GiWDNSJbsd)p|{!z2EP*P(BAP
z6}TH{BdWJNboJ^9HFR!MshuOp!6^kk7CGAWYg2H=EEOI=^%_x~2)q<>obOhRDppbm
f+GLVpyUG6t_?I~<)B9BO00000NkvXXu0mjfTJQCk
literal 0
HcmV?d00001
diff --git a/connector_prestashop/static/description/icon.svg b/connector_prestashop/static/description/icon.svg
new file mode 100644
index 000000000..49e396ddf
--- /dev/null
+++ b/connector_prestashop/static/description/icon.svg
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/tests/.gitignore b/connector_prestashop/tests/.gitignore
new file mode 100644
index 000000000..2d9d0f479
--- /dev/null
+++ b/connector_prestashop/tests/.gitignore
@@ -0,0 +1 @@
+secret.txt
diff --git a/connector_prestashop/tests/__init__.py b/connector_prestashop/tests/__init__.py
new file mode 100644
index 000000000..99fd87223
--- /dev/null
+++ b/connector_prestashop/tests/__init__.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+
+from . import test_auth
+from . import test_export_stock_qty
+from . import test_export_stock_qty_job
+from . import test_export_tracking
+from . import test_import_carrier
+from . import test_import_backend_data
+from . import test_import_inventory
+from . import test_import_partner
+from . import test_import_products
+from . import test_import_sale
diff --git a/connector_prestashop/tests/common.py b/connector_prestashop/tests/common.py
new file mode 100644
index 000000000..86e97acf6
--- /dev/null
+++ b/connector_prestashop/tests/common.py
@@ -0,0 +1,355 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import functools
+
+import openerp.tests.common as common
+from odoo.addons.connector.connector import ConnectorEnvironment
+
+from contextlib import contextmanager
+from os.path import dirname, exists, join
+import os
+
+from vcr import VCR
+import logging
+import urlparse
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt.xml2dict import xml2dict
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+# secret.txt is a file which can be placed by the developer in the
+# 'tests' directory. It contains the Prestashop URL on the first line
+# and the API token on the second line.
+# The secret.txt file must not be committed.
+# The API token will be used to record the requests with vcr, but will not be
+# stored in the fixtures files
+prestashop_url = 'http://localhost:8080'
+token = 'xxx'
+filename = join(dirname(__file__), 'secret.txt')
+if not exists(filename):
+ filename = os.environ.get('PS_TEST_WS_CREDENTIALS', '')
+if exists(filename):
+ _logger.debug('Using credentials file %s', filename)
+ with open(filename, 'r') as fp:
+ assert len(fp.readlines()) == 2,\
+ "secret.txt must have 2 lines: url, token"
+ fp.seek(0)
+ prestashop_url = next(fp).strip()
+ token = next(fp).strip()
+
+
+def get_recorder(**kw):
+ defaults = dict(
+ record_mode='once',
+ cassette_library_dir=join(dirname(__file__), 'fixtures/cassettes'),
+ path_transformer=VCR.ensure_suffix('.yaml'),
+ match_on=['method', 'path', 'query'],
+ filter_headers=['Authorization'],
+ decode_compressed_response=True,
+ )
+ defaults.update(kw)
+ return VCR(**defaults)
+
+
+recorder = get_recorder()
+
+
+@contextmanager
+def quiet_logger(logger_path):
+ logger = logging.getLogger(logger_path)
+ level = logger.level
+ logger.setLevel(logging.ERROR)
+ yield
+ logger.setLevel(level)
+
+
+def assert_no_job_delayed(func):
+ def _decorated(self, *args, **kwargs):
+ job_count = self.env['queue.job'].search_count([])
+ result = func(self, *args, **kwargs)
+ self.assertEqual(job_count, self.env['queue.job'].search_count([]),
+ "New jobs have been delayed during the test, this "
+ "is unexpected.")
+ return result
+ return functools.wraps(func)(_decorated)
+
+
+class PrestashopTransactionCase(common.TransactionCase):
+ """ Base class for Tests with Prestashop """
+
+ def setUp(self):
+ super(PrestashopTransactionCase, self).setUp()
+ self.backend_record = self.env.ref(
+ 'connector_prestashop.prestashop_backend_demo'
+ )
+ self.backend_record.write({
+ 'location': prestashop_url,
+ 'webservice_key': token,
+ })
+ self.configure()
+
+ def configure(self):
+ # Default Prestashop currency is GBP
+ self.env.ref('base.GBP').active = True
+
+ def base_mapping(self):
+ self.create_binding_no_export('prestashop.res.lang', 1, 1)
+ countries = [
+ (self.env.ref('base.fr'), 8),
+ (self.env.ref('base.uk'), 17),
+ (self.env.ref('base.ch'), 19),
+ (self.env.ref('base.us'), 21),
+ ]
+ for odoo_country, ps_country_id in countries:
+ self.create_binding_no_export(
+ 'prestashop.res.country', odoo_country.id, ps_country_id
+ )
+
+ def assert_records(self, expected_records, records):
+ """ Assert that a recordset matches with expected values.
+
+ The expected records are a list of nametuple, the fields of the
+ namedtuple must have the same name than the recordset's fields.
+
+ The expected values are compared to the recordset and records that
+ differ from the expected ones are show as ``-`` (missing) or ``+``
+ (extra) lines.
+
+ Example::
+
+ ExpectedShop = namedtuple('ExpectedShop',
+ 'name company_id')
+ expected = [
+ ExpectedShop(
+ name='Shop1',
+ company_id=self.company_ch
+ ),
+ ExpectedShop(
+ name='Shop2',
+ company_id=self.company_ch
+ ),
+ ]
+ self.assert_records(expected, shops)
+
+ Possible output:
+
+ - prestashop.shop(name: Shop1, company_id: res.company(2,))
+ - prestashop.shop(name: Shop2, company_id: res.company(2,))
+ + prestashop.shop(name: Shop3, company_id: res.company(1,))
+
+ The expected fields can follow record relations with the dotted
+ notation style, but using '__' instead of '.'. Example::
+
+ ExpectedShop = namedtuple('ExpectedShop',
+ 'name company_id__name')
+ expected = [
+ ExpectedShop(
+ name='Shop1',
+ company__name='Swiss Company',
+ ),
+ ]
+ self.assert_records(expected, shops)
+
+
+ :param expected_records: list of namedtuple with matching values
+ for the records
+ :param records: the recordset to check
+ :raises: AssertionError if the values do not match
+ """
+
+ def get_record_field(record, field):
+ attrs = field.split('__')
+ for attr in attrs:
+ record = record[attr]
+ return record
+
+ model_name = records._model._name
+ records = list(records)
+ assert len(expected_records) > 0, "must have > 0 expected record"
+ fields = expected_records[0]._fields
+ not_found = []
+ equals = []
+ for expected in expected_records:
+ for record in records:
+ for field, expected_value in expected._asdict().iteritems():
+ record_value = get_record_field(record, field)
+ if not record_value == expected_value:
+ break
+ else:
+ records.remove(record)
+ equals.append(record)
+ break
+ else:
+ not_found.append(expected)
+ message = []
+ for record in equals:
+ # same records
+ message.append(
+ u' ✓ {}({})'.format(
+ model_name,
+ u', '.join(u'%s: %s' % (
+ field.replace('__', '.'),
+ get_record_field(record, field))
+ for field in fields
+ )
+ )
+ )
+ for expected in not_found:
+ # missing records
+ message.append(
+ u' - {}({})'.format(
+ model_name,
+ u', '.join(u'%s: %s' % (field.replace('__', '.'), v) for
+ field, v in expected._asdict().iteritems())
+ )
+ )
+ for record in records:
+ # extra records
+ message.append(
+ u' + {}({})'.format(
+ model_name,
+ u', '.join(u'%s: %s' % (
+ field.replace('__', '.'),
+ get_record_field(record, field))
+ for field in fields)
+ )
+ )
+ if not_found or records:
+ raise AssertionError(u'Records do not match:\n\n{}'.format(
+ '\n'.join(message)
+ ))
+
+ def sync_metadata(self):
+ with recorder.use_cassette('sync_metadata'):
+ self.backend_record.synchronize_metadata()
+
+ def sync_basedata(self):
+ with recorder.use_cassette('sync_basedata'):
+ self.backend_record.synchronize_basedata()
+
+ def create_binding_no_export(self, model_name, openerp_id,
+ prestashop_id=None, **cols):
+ values = {
+ 'backend_id': self.backend_record.id,
+ 'openerp_id': openerp_id,
+ 'prestashop_id': prestashop_id,
+ }
+ if cols:
+ values.update(cols)
+ return self.env[model_name].with_context(
+ connector_no_export=True
+ ).create(values)
+
+ @staticmethod
+ def parse_path(url):
+ return urlparse.urlparse(url).path
+
+ @staticmethod
+ def parse_qs(url):
+ return urlparse.parse_qs(urlparse.urlparse(url).query)
+
+ def configure_taxes(self):
+ company = self.env.ref('base.main_company')
+ self.journal = self.env['account.journal'].create({
+ 'name': 'Test journal',
+ 'code': 'TEST',
+ 'type': 'general'})
+ income_type = self.env.ref('account.data_account_type_revenue')
+ expense_type = self.env.ref('account.data_account_type_expenses')
+ receivable_type = self.env.ref('account.data_account_type_receivable')
+ self.debit_account = self.env['account.account'].create({
+ 'company_id': company.id,
+ 'code': 'DB',
+ 'name': 'Debit Account',
+ 'user_type_id': income_type.id,
+ 'reconcile': False,
+ })
+ self.credit_account = self.env['account.account'].create({
+ 'company_id': company.id,
+ 'code': 'CR',
+ 'name': 'Credit Account',
+ 'user_type_id': expense_type.id,
+ 'reconcile': False,
+ })
+ self.receivable_account = self.env['account.account'].create({
+ 'company_id': company.id,
+ 'code': 'RA',
+ 'name': 'Receivable Account',
+ 'user_type_id': receivable_type.id,
+ 'reconcile': True,
+ })
+ self.env['ir.property'].search(
+ [('name', '=', 'property_account_receivable_id'),
+ ('res_id', '=', False)]
+ ).value_reference = "account.account,%s" % self.receivable_account.id
+ liabilities_account = self.env.ref(
+ 'account.data_account_type_current_liabilities'
+ )
+ self.tax_account = self.env['account.account'].create({
+ 'company_id': company.id,
+ 'code': 'tax',
+ 'name': 'Tax Account',
+ 'user_type_id': liabilities_account.id,
+ 'reconcile': False,
+ })
+ self.tax_20 = self.env['account.tax'].create({
+ 'name': '20.0%',
+ 'amount_type': 'percent',
+ 'amount': 20.0,
+ 'type_tax_use': 'sale',
+ 'company_id': company.id,
+ 'tax_group_id': self.env.ref('account.tax_group_taxes').id,
+ 'account_id': self.tax_account.id,
+ 'price_include': False,
+ })
+
+ def _create_product_binding(self, name=None,
+ template_ps_id=None,
+ variant_ps_id=None):
+ product = self.env['product.product'].create({
+ 'name': name
+ })
+ template = product.product_tmpl_id
+ template_binding = self.create_binding_no_export(
+ 'prestashop.product.template',
+ template.id,
+ prestashop_id=template_ps_id,
+ default_shop_id=self.shop.id,
+ )
+ return self.create_binding_no_export(
+ 'prestashop.product.combination',
+ product.id,
+ prestashop_id=variant_ps_id,
+ main_template_id=template_binding.id,
+ )
+
+ @staticmethod
+ def xmltodict(xml):
+ return xml2dict(xml)
+
+
+class ExportStockQuantityCase(PrestashopTransactionCase):
+
+ def setUp(self):
+ super(ExportStockQuantityCase, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ def _change_product_qty(self, product, qty):
+ location = (self.backend_record.stock_location_id or
+ self.backend_record.warehouse_id.lot_stock_id)
+ vals = {
+ 'location_id': location.id,
+ 'product_id': product.id,
+ 'new_quantity': qty,
+ }
+ qty_change = self.env['stock.change.product.qty'].create(vals)
+ qty_change.with_context(
+ active_id=product.id,
+ connector_no_export=True,
+ ).change_product_qty()
diff --git a/connector_prestashop/tests/fixtures/cassettes/sync_metadata.yaml b/connector_prestashop/tests/fixtures/cassettes/sync_metadata.yaml
new file mode 100644
index 000000000..4dd4e120a
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/sync_metadata.yaml
@@ -0,0 +1,144 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shop_groups?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['208']
+ content-sha1: [0f090b5d7569487fd9bef70d0b65d1a4abb856ce]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shop_groups/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['392']
+ content-sha1: [642ab8bb0e0a7a5e3ab2c97cdfd2f17b6a373774]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shops?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['184']
+ content-sha1: [cfe7ba62d5e3d94c7e193f34b99da1531a46bee8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shops/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['424']
+ content-sha1: [ee0abcbb07dbe84a8f2c50e593702622a3ffd57e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_auth_failure.yaml b/connector_prestashop/tests/fixtures/cassettes/test_auth_failure.yaml
new file mode 100644
index 000000000..3b7cd78d1
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_auth_failure.yaml
@@ -0,0 +1,28 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: HEAD
+ uri: http://172.24.0.3/api/
+ response:
+ body: {string: !!python/unicode ''}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:11 GMT; Max-Age=1728000; path=/; httponly']
+ www-authenticate: ['Basic realm="Welcome to PrestaShop Webservice, please enter
+ the authentication key as the login. No password required."']
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 401, message: Unauthorized}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_auth_success.yaml b/connector_prestashop/tests/fixtures/cassettes/test_auth_success.yaml
new file mode 100644
index 000000000..83e91b0a5
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_auth_success.yaml
@@ -0,0 +1,25 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: HEAD
+ uri: http://172.24.0.3/api/
+ response:
+ body: {string: !!python/unicode ''}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-sha1: [d2357b59b19acaa550f3073323b54743ad80f413]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.001']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_export_stock_quantity.yaml b/connector_prestashop/tests/fixtures/cassettes/test_export_stock_quantity.yaml
new file mode 100644
index 000000000..a1cab0660
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_export_stock_quantity.yaml
@@ -0,0 +1,109 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/stock_availables?filter%5Bid_product_attribute%5D=0&filter%5Bid_product%5D=1
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481297840']
+ connection: [Keep-Alive]
+ content-length: ['228']
+ content-sha1: [c4eb6e71ad4d4392eadb18b268f8c869c9585e93]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 15:37:20 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TefxaDQeKRvH4iskMptWR8Ao0kKwTQ%2BHn74qCsABs2oIgh1NPrPv59GgeUjPVxKZOHRsmUHT3M%2BW%2FfrbuB4NBJU%3D000078;
+ expires=Thu, 29-Dec-2016 15:37:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TefxaDQeKRvH4iskMptWR8Ao0kKwTQ%2BHn74qCsABs2oIgh1NPrPv59GgeUjPVxKZOHRsmUHT3M%2BW%2FfrbuB4NBJU%3D000078]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/stock_availables/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481297840']
+ connection: [Keep-Alive]
+ content-length: ['574']
+ content-sha1: [f39843fa8f134f222dc8709d64387969b6ed1f47]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 15:37:20 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: !!python/unicode '0 1 2 1 0 0 1 0 '
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Length: ['322']
+ Content-Type: [text/xml]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TefxaDQeKRvH4iskMptWR8Ao0kKwTQ%2BHn74qCsABs2oIgh1NPrPv59GgeUjPVxKZOHRsmUHT3M%2BW%2FfrbuB4NBJU%3D000078]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: PUT
+ uri: http://172.22.0.4/api/stock_availables
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481297840']
+ connection: [Keep-Alive]
+ content-length: ['571']
+ content-sha1: [7ac7bc79ecf4a5c25ab21bfe67ffe68d72d8e086]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 15:37:20 GMT']
+ execution-time: ['0.009']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_export_tracking_number.yaml b/connector_prestashop/tests/fixtures/cassettes/test_export_tracking_number.yaml
new file mode 100644
index 000000000..c7b13db94
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_export_tracking_number.yaml
@@ -0,0 +1,112 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_carriers?filter%5Bid_order%5D=2
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473775010']
+ connection: [Keep-Alive]
+ content-length: ['220']
+ content-sha1: [45a0fe9a60581f394413f9412c495b188b305c7b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 13:56:50 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdV3taYp5U8ee8JE2MZ4ahqZurApm1q0zNi86k20DjmlLBZx5FFQ5pElTk%2F2IYMXUF1X5YTLlZ%2FPxVTEBrS2s%2B0%3D000079;
+ expires=Mon, 03-Oct-2016 13:56:50 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdV3taYp5U8ee8JE2MZ4ahqZurApm1q0zNi86k20DjmlLBZx5FFQ5pElTk%2F2IYMXUF1X5YTLlZ%2FPxVTEBrS2s%2B0%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_carriers/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n \n \n"}
+ headers:
+ access-time: ['1473775010']
+ connection: [Keep-Alive]
+ content-length: ['672']
+ content-sha1: [58d1914d4b9b27ca2c7dd63a1a26a8004281335f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 13:56:50 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: !!python/unicode '2016-09-02
+ 14:37:22 2.000000 2 0.000000 xyz 2 2 2 2.000000 '
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Length: ['407']
+ Content-Type: [text/xml]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdV3taYp5U8ee8JE2MZ4ahqZurApm1q0zNi86k20DjmlLBZx5FFQ5pElTk%2F2IYMXUF1X5YTLlZ%2FPxVTEBrS2s%2B0%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: PUT
+ uri: http://172.24.0.3/api/order_carriers
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n \n \n"}
+ headers:
+ access-time: ['1473775010']
+ connection: [Keep-Alive]
+ content-length: ['671']
+ content-sha1: [ce0bdc6073a4876212c7673d686d5904b667c5b1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 13:56:50 GMT']
+ execution-time: ['0.011']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
new file mode 100644
index 000000000..f6cd223fd
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
@@ -0,0 +1,10909 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/languages
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['200']
+ content-sha1: [f84639e268b14e09245ab3038c41a5e49cb52969]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:11 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/languages/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n \n\
+ \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['469']
+ content-sha1: [4d78168ff0dc408b2ae4a522f1d900b0441d2b65]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['16754']
+ content-sha1: [ac973b2d404b69ecd3e58a42eb87e4cbbc76645f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [03e1b0e369a51eb465a063fd74fd615971b9a076]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:11 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [7f6b0e14b0907aac6b1b20376d3fd18352ac3a81]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [7a0cefe0f834d056ac9876413b9c30b3d9e213a9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=97']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/6
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['768']
+ content-sha1: [92f465da040c11abe5ec320ac0b1a2529cb53f34]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=96']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/7
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [8f1cd3b34139513b6c66cbed74c62dec012fec14]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=95']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/8
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [5cd1a1b256cd2dff5263a546679694f77b87123c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=94']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/9
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763571']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [e2230c6eae46961a0c9e64fb9e8679a75295aa96]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=93']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/10
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [5c5a1b6950d8a26ee03044d0d7041c695f2db3ae]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:11 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=92']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/12
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [1b070c466b5e407cd1ca7197788008c83729293f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=91']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['777']
+ content-sha1: [e73968c65ae8422897428cb1cc257fdbb2950811]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=90']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [9879c4f7a81745c7ee3105c67efb311008b47747]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=89']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/15
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['776']
+ content-sha1: [96a388538f831e0367149b9bbaee188daf5c1163]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=88']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/16
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['780']
+ content-sha1: [21064399f52edf615c929ebe7015f4789b6c0688]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=87']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/17
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [1375540edbd8aac83aef05e4e78ecf3e985526ed]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=86']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/18
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [9e2b99824b631ef2d5cb615541b2e51fe48b0261]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=85']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/20
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [ef257f1e3f70deba1bc382e649e6074aaa73ec7e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=84']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/26
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [c02664cc410f80d6eb63a2b36e2904631fd61997]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=83']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/36
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [817aaa40928f2a35569e436c406fd34e0112c9d3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=82']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/37
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [2f4d2aabdd85d7d22026738c6f76eb00cf275bcc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=81']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/76
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [5c781b825a9b175bd2f2a3bc42f850a64be9d3fb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=80']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/86
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [320104fc193282bb8330f94a28df1405cedb84b0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=79']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/125
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [e4da31409db0893c3adedc61b59f839002a59851]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=78']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/130
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['778']
+ content-sha1: [6fdd0f54a91fa3a8b97f83f3608537e180ef7c05]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=77']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/131
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [2f248e4b4e78ffd321f96eb9e179b79ba0928157]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=76']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/139
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [d3cce56b83928e22b18396627cc0dccf97aafdb5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=75']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/143
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [beb478356f0c961949ea04a9b6e4dab505c01991]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=74']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/193
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [461b550200920bd0dd957f6f235e0da3e40b19a2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=73']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/216
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [b4372bb40ae0baece99e938b2e2ec9435efd91bd]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=72']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/233
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [70db1e9fedfaa4a35a99acd2293c03d97d819f89]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=71']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/236
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [bdca3c2b6b07c5237499af0cb69eebad3f8724c8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=70']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [4c8eb7fd917ecae99e72df225357c20ee7aea373]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=69']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/21
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['776']
+ content-sha1: [3c6371899c7a8be8ba20485069bcfad2d5f63a79]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=68']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/39
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['760']
+ content-sha1: [b5d6185f23a2761c3bad6f244ff3c98cdf51c9a2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=67']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/43
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['765']
+ content-sha1: [a438f032d8d3dfe9e00d18fe293d3b506540e299]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=66']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/48
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [5b164aabec26a9598feadf22e74a95e8b32c265d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=65']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/51
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [bf37860368b23fdf23de008e8b02aa0605aa650f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=64']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/55
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [367056b8f39af55b67bb038f9c39f154c2e3efc9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=63']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/145
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [31dcd59c256c566ed03bd92b4bacdf09623240c5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=62']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/223
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['788']
+ content-sha1: [ca3c742003b33a23f8f932b2d8d9bae78ecad5b2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=61']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/224
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['768']
+ content-sha1: [b83b7795826cb9fa34a2d29c1f950d5753205b63]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=60']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [793d783d68aee54fe025c29127172ca19097d21e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=59']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/11
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [f012819413681c4fea60e71683769198e8866d53]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=58']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/22
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [c3dc9c058d23351b1a45f7556b09a4ab43c4f5bf]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=57']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/25
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [2b459db1bac2e19133c334feadfc628ec4bce07c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=56']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/28
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['777']
+ content-sha1: [7203b3368b31c4392234d76c8ec78c6527ac1a22]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=55']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/29
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [1f58b353c660eec73db6bca8cb9aed70d6595e9f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=54']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/45
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763572']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [99963ef6ab012b590ee9fe5008f40d82879f3660]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:12 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=53']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/47
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [a74aad53978174617e9ef91b75da663bdd955d32]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=52']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/49
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [fc63437c4cd1068c37756af545554fe3fe9055a3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=51']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/50
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [8f344e49fb7a45691c6d9e780865811085bf1825]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=50']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/56
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [41da9138bf110605cff0882d075c6a94d895da11]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=49']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/59
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [266ab55c169a4a95a7c71092bdce36d22a2d45dd]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=48']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/61
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['762']
+ content-sha1: [de55e1f7898306725a48d3c98219c34623d12742]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=47']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/63
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [0bc97be17a72305b99f395a02b395df63707f268]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=46']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/80
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [0b726c6b6ada5e7a803b91f18f7a318b20532649]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=45']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/93
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [0cb207f15087f6e7b54f8af6db7e6e108d6188ad]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=44']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/110
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [7d3e5d0d3ac4a8275a01403b299d2c7ea85d8c3f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=43']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/111
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [f6e578dbc6e9d7b57ec8b7ac5c771ced24f2725d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=42']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/112
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [e2a5a49ede6b46b0f16f6cd07f3e976379f4a52f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=41']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/113
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [425ec686ad9faedd4deabc03553956276652b35b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=40']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/117
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [e10ff4ebeddb8b92868f26012f05c40e5c8b6b4b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=39']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/118
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [c7d11e84907f2a82c65ace902cce27bebb97adc1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=38']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/121
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [2aa1e6ab8d376da6e141ae9ad26af132aeee39dd]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=37']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/122
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [f688e77e90cf217f010dc53a08415baaf9e1a733]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=36']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/123
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [8e1dd6747cc99fd1f04d54217052a520cc2c9fdc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=35']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/124
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [b3ede33590da4b65452b523de2e4c98e2c18226c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=34']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/126
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [fbf2da658616290b7b0416bdafdbb4b7d6914261]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=33']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/132
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [c0c88f29191247f0700af83b6689b0e428df746d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=32']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/136
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [f3cae4188916eb80baa9abd1f3d5ca820b63ed79]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=31']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/137
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [41ff353a3300b2a194759ca09898968886909d45]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=30']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/149
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [455086ac653417c0a862717946210c836827771d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=29']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/156
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [6bc5a030261209aeb12158d6cd6846585272f69a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=28']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/164
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [4b1184807a80d0b32b62b12c330290aa88432bd1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=27']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/165
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [99c043a43384d5defe02ac8719a0dab9583745a8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=26']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/167
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [c77e9f4174796c63f60eba940e433000f1343223]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=25']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/172
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [93db21c1d12c1bd49a27bf23336db1cfab74277d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=24']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/175
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [1ce44d72464d486bc2861108e8d2c1136434d66e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=23']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/188
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [d32f6bf57258d2b92f4b08aab02c7eafce14db9e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=22']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/197
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [e5667f8054736786b2b5d259239dea384071aeab]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=21']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/202
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [bf9f16f3dda63758cd231d4444c04d84360be9e0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=20']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/203
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [bc019f46739f9c4c82f7e0d0b93059406a282bca]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=19']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/204
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [b9571731471fc335d3cde9419e018aa02962e6d3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=18']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/206
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [5a119d2a5d22be96b30138dd380e002a31b618ea]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=17']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/212
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [b7d87c6d56de997cdffc4757e240822de66f578a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=16']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/217
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [d8348cd2130c7f3322c9b27190e7c0caa36715be]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=15']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/219
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763573']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [d356c4168b9c64d300e8b01046b146c9f744c6a4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=14']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/222
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [2f2faf15fec90a51d5a98526afdaa721faf7d6e0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=13']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/227
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [1de804019ef77cde5d48950abc690b3bcef3d88e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=12']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/231
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [ac125162958e2a195d524d3e1034d59bf08bd034]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=11']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/238
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['763']
+ content-sha1: [3c5f653c11ab9f8a7b8dd1448ad50fc54b03762a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=10']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/239
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['770']
+ content-sha1: [8edce613533f65a4a6c34bbbc0cbbbe80a39f9d9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=9']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/30
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [6c48004e8b573923606336dd4ee8ab54a1af3a3e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=8']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/31
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [e8c183019d059ee50cf53019d90b9062be73280f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=7']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/32
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [390f216388841dfc113f4f03db9436dd610e6fcf]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=6']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/33
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['752']
+ content-sha1: [b8da064031c8f2f3e4486f18e2a20e064b31a685]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=5']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/35
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [7a9d731d49d5ee5d529d273aaeb032d7e593661f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=4']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/38
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [04b9058e9f54179f74d24acc01f26f91235b2267]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=3']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/41
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [e1e6915cd8aeccfbafb7625eb48a4efd3173e9e4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=2']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/54
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [5ef18f114f75bb46cd2e0578a179dc6246c3e6d5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=1']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/57
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [close]
+ content-length: ['756']
+ content-sha1: [84d53afdd5fc5482d08d05ee8ded8c6ec7ac801d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/60
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['760']
+ content-sha1: [fe31f86b4687197dcf7e8af7f174fa8fe826ce83]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/62
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [c66a0b8017bd256ee80a454dc1620a0b9f69ada7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/64
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [96c090f949e80d679758313c2d7c5338360db8eb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/65
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [8e9c2bc8b819d627b479c9c9be9f0e793c41f17d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=97']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/66
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [c9bd9584bfca6cecbbd0042c907619f9ea333b66]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=96']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/67
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['752']
+ content-sha1: [02a2e11aad3227831be535b33173505f8ad2c0ec]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=95']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/70
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [0fe6625f9218d89b39c843cfa8a73b4b73da16b1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=94']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/71
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['768']
+ content-sha1: [72a2ff60f208024c8ea986a24c204bc78bf4cb55]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=93']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/72
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['763']
+ content-sha1: [2605937c68410979ea0154b998d6d74adb13cca0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=92']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/77
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [3e6aba67517d6bdfa651f11df1c3f72344c4d9bc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=91']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/82
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['752']
+ content-sha1: [f1943933a13deec1c3ceb74875b191f91a1d5aa4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=90']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/84
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['765']
+ content-sha1: [2a1a9af36651f6bad9e06db8791d2dc4397106bf]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=89']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/85
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [6d1a8f4500b5bca7b8663b00cefdad1dabefc7a3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=88']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/87
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [e558ee441acc62aea19a6903ab38a50b4cb19b98]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=87']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/91
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [36b1c6ba5521f5fb05c70f3527fb449bc0959168]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=86']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/92
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [1b568de26c6b62ceb925f19bad856f5fa6d83a4e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=85']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/94
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [727c873434ac4c46a324376acf4d36c8e48653ad]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=84']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/102
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [7d754c5dda3bcb59c2cd4b29a8f480ade5e7725b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=83']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/103
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['762']
+ content-sha1: [da900d47493dbd0a0c06b6590a2b5100f5cf8ba7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=82']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/119
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [3b7cfccc7c1e1fb8460170fdc090a9b9cfe90759]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=81']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/127
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [69cbd1e9d709d014a641a224982e5dc144ac4be6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=80']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/128
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [2013ee39b73333fbe7b06afb131f9a0fec307f6e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.005']
+ keep-alive: ['timeout=5, max=79']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/129
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763574']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [a50cea7f9b2ed4291251315928bd73d9609eb2a7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=78']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/134
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [851384c4e388ac1712238c8b48c6616de365e769]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:14 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=77']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/135
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [101446b8a98d9e7f28daffd2cf1bf0c259233e5a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=76']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/138
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [962ddba56a473c4263e200cc8492a4ee66c51b60]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=75']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/142
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [2dcebd7a22d451f87171b04559b87b2c20e42dcf]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=74']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/144
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [67cad3a95cd881287dd47c7d02b80d4c2e9253a6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=73']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/152
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [7bc96fec7a192e9c27880715755049c51b5fc810]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=72']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/153
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [0ed88d9c6d3aa30449885ff1d7a9f2228c50e7f6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=71']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/154
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [5c579bb82f7f9b1ea7b6da954f87d002af1aec90]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=70']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/160
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [4494f17fbfa3ce95aa3659a44da5abc6b607ccac]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=69']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/176
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['763']
+ content-sha1: [af7e682856944ace12643bdad3ff54ff6932756c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=68']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/178
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [d4eb153a430fb4a0b13380ae9b044f275c94e249]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=67']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/187
+ response:
+ body: {string: "\n\n\n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [6f345bae9d4985f3c7ccb9f1d0717932da817bc6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=66']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/189
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [484c6874dbed09512d2b64734d670a2ce525a1dd]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=65']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/191
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [ef3b81f085bb66e836b2afeb256d1e3dee5bfa2e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=64']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/192
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [9829583cd7ab5fc4e827271696246320195b8dea]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=63']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/195
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [eea2e91b37a8ce5119714fd2059ba36f1ac0a338]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=62']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/198
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [3930f317a5c7838a0fd2b15e76fbc19697851686]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=61']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/201
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [ca622684c81efc69b4cc21fd1cc45d52863578aa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=60']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/205
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [822109d93ae9e735c0d539e4e6d811ee57c7348f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=59']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/210
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [8c0c6b3aac0f3ea211742a4fec329c5f7f02abc4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=58']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/215
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [5ea397d8f467f0b5f3cc406912d271c06175e015]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=57']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/226
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [d92a8b9801d79bfe5b600ac2789387bc43fe1725]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=56']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/228
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [080825e0edf67d649e676d08ef7f4032192864eb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=55']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/229
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [32527eb77d96200c66bd0784e24f07a1fe4ab814]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=54']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/24
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [4306acb0d6eaad7610f8647d2441ee651f88bfa2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=53']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/27
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [862731a765f054f1286f58b701b9d20b45bf2047]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=52']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/90
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['752']
+ content-sha1: [2c2d98d32ff65a8656c21b5a8cd5a1f8a4031765]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=51']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/99
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['750']
+ content-sha1: [9e8ae2c091930a86d604e6342b3a3df6fa6f946f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=50']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/106
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['780']
+ content-sha1: [55321bd4eee973d74532683892a5cd9a19346909]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=49']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/120
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [869df56046e108bce456fb637262cc2c0684cbd0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=48']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/140
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['765']
+ content-sha1: [077971ad0a3cdde1a28af9860f709357403225fb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=47']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/146
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [1f4486bec89bc3a87893de03a42ac6317a1cd484]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=46']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/155
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [ade45605e37f18ed1fc0a15468eb9c8399d2de1d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=45']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/158
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['762']
+ content-sha1: [d275aa82cdaeaaa3ef0b565924246e6369e4a432]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=44']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/161
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [5d417368bfe9748397ad3317d58627521a6ebc80]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=43']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/162
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [be9a89d3582df298fbdea944a7d1a2bd46f0b241]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=42']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/163
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [eb0082c19f15ad4341da36a8eb11493e17373a26]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=41']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/166
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763575']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [f6176bca10998642b7cb50d06a333ff64b91720e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:15 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=40']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/169
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['765']
+ content-sha1: [d8f7c8b913737438de7d9da96f90ed159456992d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=39']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/173
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [df201ba70b9eced17edc0a79020f6124b1b4c3d9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=38']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/185
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [1063a16358f8a87bacc7ab37c2a5f77be090b03d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=37']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/194
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['764']
+ content-sha1: [c022377bc9ac8245d1edda12baae16dca959740a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=36']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/207
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [c31bfb24b7cdcf01546ac4d30255ce48d14fa842]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=35']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/208
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [4661fdbb3515fc728a3cff6893ae78991a0b62dc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=34']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/214
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [eb1f2cb33fbe29f01b900e3aa2d060bec6d7d3f8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=33']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/220
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [4e49b2c1e63cdbd33276d5685c81ade2761f1e73]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=32']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/225
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['766']
+ content-sha1: [8b5bfe59238eedb1989c9c441d23f8a851256eda]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=31']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/232
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [2f2ac93908cd6c96e1e4140f8eb08feed344fbc1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=30']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/234
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['760']
+ content-sha1: [903c9e4c9c8ab91df7a54320508f3a0a01aed743]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=29']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/235
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n\
+ \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['797']
+ content-sha1: [c45d04d867c17ef77abbd88b58b9f15fbc294ab5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=28']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/240
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [9a3c6b96e149c3ad710f432c9caf3761bc232d0a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=27']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/242
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['765']
+ content-sha1: [1ee0dbfa8c6c81359be9d1531f2dbd7b7de6f6c1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=26']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/243
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [024a6593d971aab300b665d0ccde819513c7817d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=25']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/34
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [4aeb62cf498c2d7992e3ad88045b0e51a57ce497]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=24']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/44
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [6913a9f01333b18587f66f65a208957016e82e19]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=23']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/58
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [44c41194308a365af44ae4eea9fe117c5943c24a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=22']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/68
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [2f014ccb9b1a7ee76df5c0f593f44a8f7926d5ed]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=21']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/69
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [df293b0d157cbcc63f76ecb1d622fd883da32976]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=20']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/81
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [8e97123257e150626cba4ac92cd02347481e1c24]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=19']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/104
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['755']
+ content-sha1: [89a3210ee90c4d0465699726ae1670f5e5530c96]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=18']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/170
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [717c116be13d3b746b67c39a23552f965b13336d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=17']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/171
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['752']
+ content-sha1: [6b5fff6e494b495d216dc170ae021b38ac15a321]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=16']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/209
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['766']
+ content-sha1: [78e3de068da2510dfbfc3685345aae7cdcd6a114]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=15']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/218
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['756']
+ content-sha1: [72a58ec33c4c5954a79ae37af121daa2d63cbbe7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=14']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/221
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [e2dc623fa4aa520857f21230eab22e99c185f9e5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=13']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/241
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['762']
+ content-sha1: [e54beae8bb3b9ae5b05bea4831a3f4ec628d8366]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=12']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/19
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [cf3c1e942379cb207e237d7103c15192190e015c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=11']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/23
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [7a0b84e582abda985c1fe177a0ecbdd07ccd94ed]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=10']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/40
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [b8a416a2b0e8d15f12b99970be748f18971fb994]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=9']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/52
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [a91d210263aaa00dca136b715f446d54f212326a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=8']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/74
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [2c4981fd353ab6cece476e7c904a6ef194018b67]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=7']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/89
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [9d9e50ef478372331cf4fac907db0f23ed3f2af9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=6']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/96
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [7f52bbf14c0c62aa06ca230ce5622c45b2cfa916]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=5']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/97
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763576']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [b5cebdcda9500332ad13278062c6a5f67c24df79]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=4']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/101
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [3b66d444425b04552b6aca7c5d9cc6d26abdbd59]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=3']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/107
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['784']
+ content-sha1: [3d835a5d543e53bb0512cbc8ebc3db8be0668af1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=2']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/109
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [27aeb9f0ebae680fade5eadf394b3313135fbaf7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=1']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/114
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [close]
+ content-length: ['775']
+ content-sha1: [2abf5ce5738c75785fd3542d7d2455754c69cbb0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/116
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [0c75c7e697db6d06a66cc823bcc025c76f08e178]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/133
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [17aed1c5f7bc805529dd570d87544498c9f041b6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/147
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [85dc3b49eb77fc5b84cd77db2be3e41c9265a930]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/148
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [30c3abd71e6376fa963bd2d44659b98f7b0384cb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=97']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/150
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['776']
+ content-sha1: [d9dfb6f5749a1d2657baf415a94c7406860d3e43]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=96']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/177
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['783']
+ content-sha1: [3c7e399ff748ac7f062795da49dd36d50e493ff8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=95']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/186
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['776']
+ content-sha1: [05fa85d7571c86591ba00bf1f7dd5857d14880de]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=94']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/190
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [677097211b202bf28458e05d3fab4f109f9bbf91]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=93']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/200
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [57baf0b43ce8ca475427a1c74b7372eb70fa9b72]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=92']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/211
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['771']
+ content-sha1: [6fcf02d99e0451e61b2b64c404cc3f85774669fc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=91']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/230
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['772']
+ content-sha1: [d3b5fdb7566ef37aa7bb9179e07fa839f5793c6e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=90']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/244
+ response:
+ body: {string: "\n\n\n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['778']
+ content-sha1: [ce2a0aec10ca085442464cd75240aa8e3243c069]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=89']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/42
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [0417947eb610b2047fe2ad2316654e8e52ad69fc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=88']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/46
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [5d5c39e0006e98efb114c3642c5cb738fdf89cc2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=87']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/53
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [b141b3153a52c4fadb07da21f2f98d2a936c0ecc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=86']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/73
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [d4856d7858a5a6b032da8c14fd95b8c91ba55d40]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=85']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/75
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['751']
+ content-sha1: [625ae5afcd24a8d8d86c6eaf517f5457c35c5601]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=84']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/78
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [5bd306298724ccd14657b8595ce104e7dd8e5674]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=83']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/79
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['764']
+ content-sha1: [a68b5ee5e55ffbb725ff37a863a22487de865433]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=82']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/83
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [81aa54f22c827873b29f5b99b0f656464a716215]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=81']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/88
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['782']
+ content-sha1: [7eec8d41811d523ca689ed84812d78dd09aa325a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=80']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/95
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['753']
+ content-sha1: [b05086b9aef643edc33d1bea4041bf74dcd9f856]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=79']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/98
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [2691d14b058741bfbda6c17349c62db2ec5d2fe1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=78']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/100
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [cca20859c52da4a8e0b3eb482f0c7b02b2a60525]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=77']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/105
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [f311507511a984c35da2dbb1b8f50a80c90da1fe]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=76']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/108
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [f8fb623769eaff495e62dd9de369ac989f6c9ea3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=75']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/115
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['754']
+ content-sha1: [65a0c53c1f0da1c07f2cc1833ca0d3275c066fbf]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=74']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/141
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [d9a76ab38e6e92f7d22eb3800f0d9d3e15cb346c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=73']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/151
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [0ebe7ec7169f23aca8444119ba5863594bc6790b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=72']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/157
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['769']
+ content-sha1: [583ffffd43995516f8573732b78a4f0387a06759]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=71']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/159
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['776']
+ content-sha1: [a49c50639dd0717475d8ad70469bc9114df71033]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=70']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/168
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763577']
+ connection: [Keep-Alive]
+ content-length: ['773']
+ content-sha1: [d02a232979931e9e18ea7c84dbbc7b8be0480ecc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=69']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/174
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['775']
+ content-sha1: [c205fde3e8fda94d488c7333fef675cf3e33f3e5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=68']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/179
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['763']
+ content-sha1: [8f423bd77dedb25a8751a0ec07966d050b92a15d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=67']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/180
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['768']
+ content-sha1: [a2ee5740544a1e1e74531e224ffa610d2cbdeb9e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=66']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/181
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['758']
+ content-sha1: [d0558819280de100b7cc5d97f9ef5027b3f84384]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=65']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/182
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['759']
+ content-sha1: [3328a1b746b30c15f88becabd8bf80e0e3fdcae9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=64']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/183
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['774']
+ content-sha1: [526b44f4cab25350afdaffa40cbb8495380b2693]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=63']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/184
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['779']
+ content-sha1: [bc754229e6bb0e289438e9d675f437e81a6a8d22]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=62']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/196
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['811']
+ content-sha1: [8b9eaf139b2e9592c99aeef55cf7765105d17d49]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=61']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/199
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['757']
+ content-sha1: [6997550da7c311a08267addedd5ad9d0ebd18af3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=60']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/213
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['791']
+ content-sha1: [62728101eea43057ebb3ead913731f9f54b40ed9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=59']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/countries/237
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['761']
+ content-sha1: [6add0339ab9c836c54422cba69c2c19e4908c4a3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=58']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/currencies
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['203']
+ content-sha1: [01b1ccc9ad3bb3ede4da7bfd06777389fb5681a0]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/currencies/1
+ response:
+ body: {string: "\n\n\n\t \n\t\
+ \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['522']
+ content-sha1: [db3638fd738c599bb9167029ff50dc9ae89a33e8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['1819']
+ content-sha1: [9d79736580aa5b29913460bffdb1aefd0bb8db59]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['357']
+ content-sha1: [634c257cf570ebe88fa938bae99e6f486891595e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['355']
+ content-sha1: [ef722ff221d330c37236333c70216cf73ef7d00f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [a07a00a2141c00188caf403e79cfd9eb90ff0b99]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=97']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['357']
+ content-sha1: [3f09d1859538832b8b4eb12193180715831ca415]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=96']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/5
+ response:
+ body: {string: "\n\n\n\t \n\t \n\
+ \t \n\t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['360']
+ content-sha1: [8a1662ba82224eaec3fad370c72b4ccc9d1c9e94]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=95']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/6
+ response:
+ body: {string: "\n\n\n\t \n\t \n\
+ \t \n\t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['360']
+ content-sha1: [9370c5112a3bbbcee0a748a7f4bf10f9bbb292d8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=94']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/7
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['357']
+ content-sha1: [e827ba1bd3b4e4f04b2f36ed98f2ac967c4dde2a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=93']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/8
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['359']
+ content-sha1: [bbbc3561d3402cf50277c9698b15494d8d85ed85]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=92']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/9
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [0f2ec498a53bca71fb9c055041aa6f5ef8aed484]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=91']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/10
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['357']
+ content-sha1: [330050a60c897a6ba2504aee91b7e7822fa694e4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=90']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/11
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [0712a71a0e0a29d57436ba0301768cfe40877f38]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=89']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/12
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [3172cc4dd7afe0a3d47e0408481b8b2debfbbda4]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=88']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [46240a3844b3c7c4d1634573f49f0a7f0855d8fe]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=87']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/14
+ response:
+ body: {string: "\n\n\n\t \n\t \n\
+ \t \n\t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['361']
+ content-sha1: [5eede8b4b8287a78fe7a84c2b93458d841b8a910]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=86']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/15
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['363']
+ content-sha1: [41b4ead184c310d8511df3f553e7eb78764ad105]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=85']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/16
+ response:
+ body: {string: "\n\n\n\t \n\t \n\
+ \t \n\t \n\t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['359']
+ content-sha1: [45543599f3954597b4737f52d7f801c9b3eeb247]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=84']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/17
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [e3dea69755014d9b29961cbe74aa155a33af4584]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=83']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/18
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [84fd0fa6463d43c51c6a1f98c88b7f9c2d22ec45]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=82']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/19
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763578']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [2c256ca54ae92d3709d8537f2ec43a2f4eefb986]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=81']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/20
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [7060b6efc6387bb30b98eaf66b817b2615e4293e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=80']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/21
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [c6a0f22551e5082400c942f34c5aea7d9ef92286]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=79']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/22
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [e011bb764cb6d56cc2f10210d3d02c952941218c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=78']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/23
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [6fc5c0b9d43b5aeddb859e189b2c1d9c5661e66d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=77']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/24
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [5376bda7b8e6bf59796e5d32d6e69f91fe2462fe]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=76']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/25
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [dc85cfb80e0cc89de8e2e302634c1f5ddcd1eeca]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=75']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/26
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [651e126a089e4458d9cc2f04274b6bfb7824fa02]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=74']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/27
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['359']
+ content-sha1: [1c7f624d9dbb87d3812e98c3693a9cc4b1570f65]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=73']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/28
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [021b747ac1f11197a3581f36079678a0a4a98ef6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=72']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQ4zBemTNaQH4TsoClmue6KuzNcbLln0%2BRfnuwd%2FQCExEoW%2F6zp2TN8AZQG3u5jPx%2BgGcTpIXlFCJf%2BDHgn6Das%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/taxes/29
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['358']
+ content-sha1: [1e72092395fe00faebd2a19dc2b6fac018c5bac7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=71']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/tax_rule_groups?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['380']
+ content-sha1: [add855ca786d548611f056f9be9caa29a254a5ec]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/tax_rule_groups/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['391']
+ content-sha1: [b2df9a691d6f90fe216343d90aa63db2f8714bba]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/tax_rule_groups/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['389']
+ content-sha1: [06b8eba9a027e4c31b814c5c91f29cce9f050c07]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/tax_rule_groups/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['396']
+ content-sha1: [78460d02afdaf040bcf2c3343d7b28dcf37fee0a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['1158']
+ content-sha1: [7fe715d33561e098ffe891980b14960af41986f5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['862']
+ content-sha1: [3039e436df620961ce1896b61175341731f180fb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['872']
+ content-sha1: [56813c10577fdde84aaafceec6e2591c7c48b435]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763579']
+ connection: [Keep-Alive]
+ content-length: ['853']
+ content-sha1: [11b3f08004eccf1f9e3b472e819146527db51ec1]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkfds1KuPmE97r4nMt97C%2BZtdfkfxyxpE6rrEt8g0Vy9xs9y6D7KkGOgNekwAi6G4Hz9TdZ5YCFCdsyRn6rAaVAo%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1473763580']
+ connection: [Keep-Alive]
+ content-length: ['848']
+ content-sha1: [bcf7ca169848950e9e631eee8224f6440468d888]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQKYsuoUmV4BSAtk6HfbL0yOm%2B87oQGS3oNgaJDUEBSpblYnvY13%2FVBc0HONABA4drJSaibT2HXbIrRg43c9nBA%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/6
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763580']
+ connection: [Keep-Alive]
+ content-length: ['861']
+ content-sha1: [05f4091410ca68d9af03dcfb79aa7c5c13bac413]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:20 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkQKYsuoUmV4BSAtk6HfbL0yOm%2B87oQGS3oNgaJDUEBSpblYnvY13%2FVBc0HONABA4drJSaibT2HXbIrRg43c9nBA%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/7
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763581']
+ connection: [Keep-Alive]
+ content-length: ['853']
+ content-sha1: [2f7266dca6ccdbf271091a1c3f40300890ca3106]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdAWPDzvlnGLNpu0pBb0jTZ5RnXDpKReAKBpuH297HZGmrBpv9HAbYhNLlx068qFf7qdOhhOY2CTawFOsfcTom8%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/8
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763581']
+ connection: [Keep-Alive]
+ content-length: ['865']
+ content-sha1: [dd7dcb29c53304a2429c15555bcd7874cd278d50]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdAWPDzvlnGLNpu0pBb0jTZ5RnXDpKReAKBpuH297HZGmrBpv9HAbYhNLlx068qFf7qdOhhOY2CTawFOsfcTom8%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/9
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763581']
+ connection: [Keep-Alive]
+ content-length: ['868']
+ content-sha1: [1cb0e6da5385d0e765ce05009f261071c20a39ca]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:21 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkdAWPDzvlnGLNpu0pBb0jTZ5RnXDpKReAKBpuH297HZGmrBpv9HAbYhNLlx068qFf7qdOhhOY2CTawFOsfcTom8%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/11
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763582']
+ connection: [Keep-Alive]
+ content-length: ['863']
+ content-sha1: [e60102659f4fbac103a63d96bbf833b48c6acbf2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkXZFv7ndzI%2B8ErXnRmmEco8AR3GzzqYbPTTjuZyhYNZjbOvH%2FWTYf2zCjD5tkkE9eI%2BuNREs7Em8TGgH0fQDGuE%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/12
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763582']
+ connection: [Keep-Alive]
+ content-length: ['870']
+ content-sha1: [98ce2a9fa72496b5ed765ecea25cbf1a1c22df28]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:22 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkXZFv7ndzI%2B8ErXnRmmEco8AR3GzzqYbPTTjuZyhYNZjbOvH%2FWTYf2zCjD5tkkE9eI%2BuNREs7Em8TGgH0fQDGuE%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763582']
+ connection: [Keep-Alive]
+ content-length: ['873']
+ content-sha1: [1faa5dcdfd9d0193cdbb366650564eab6627a32e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkXZFv7ndzI%2B8ErXnRmmEco8AR3GzzqYbPTTjuZyhYNZjbOvH%2FWTYf2zCjD5tkkE9eI%2BuNREs7Em8TGgH0fQDGuE%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/10
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763582']
+ connection: [Keep-Alive]
+ content-length: ['894']
+ content-sha1: [0303a7fab6bba1ee38c7412d00ef162f4f80823f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkXZFv7ndzI%2B8ErXnRmmEco8AR3GzzqYbPTTjuZyhYNZjbOvH%2FWTYf2zCjD5tkkE9eI%2BuNREs7Em8TGgH0fQDGuE%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763583']
+ connection: [Keep-Alive]
+ content-length: ['916']
+ content-sha1: [61b7e7659e057d179b386a814c51945de191ebe3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:23 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkTOayhQrVitHJaa3B0JHunNaMDXU47gT5GxsDBOwEwigiMGI3kSRqQkcZOz1URufde2vOjOrORe9lmHkBGEtlZw%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:23 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/order_states/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763583']
+ connection: [Keep-Alive]
+ content-length: ['885']
+ content-sha1: [a110aa067008dded517a517c38050aec60d6581d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:23 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkTOayhQrVitHJaa3B0JHunNaMDXU47gT5GxsDBOwEwigiMGI3kSRqQkcZOz1URufde2vOjOrORe9lmHkBGEtlZw%3D000078;
+ expires=Mon, 03-Oct-2016 10:46:23 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_batch.yaml
new file mode 100644
index 000000000..befef9732
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_batch.yaml
@@ -0,0 +1,43 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/carriers?filter%5Bdeleted%5D=0
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481190114']
+ connection: [Keep-Alive]
+ content-length: ['260']
+ content-sha1: [6f793d7ddaee6da33e133b445c00ef53c3a0607c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 08 Dec 2016 09:41:54 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TR%2FOLUU5VRDWtKVoZze2PAI%2FCTcBu%2FZQLB0b4MgNW9lDz6xcXxqLYypnZSfJafIP342RPhIrLhkZsGC7BbfXL%2Fs%3D000078;
+ expires=Wed, 28-Dec-2016 09:41:54 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_record_2.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_record_2.yaml
new file mode 100644
index 000000000..1a4004cb6
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_carrier_record_2.yaml
@@ -0,0 +1,43 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/carriers/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481190114']
+ connection: [Keep-Alive]
+ content-length: ['1160']
+ content-sha1: [3eb63c012374844e65081f0322dcf3881704c4df]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 08 Dec 2016 09:41:54 GMT']
+ execution-time: ['0.009']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TR%2FOLUU5VRDWtKVoZze2PAI%2FCTcBu%2FZQLB0b4MgNW9lDz6xcXxqLYypnZSfJafIP342RPhIrLhkZsGC7BbfXL%2Fs%3D000078;
+ expires=Wed, 28-Dec-2016 09:41:54 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
new file mode 100644
index 000000000..800e919a7
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
@@ -0,0 +1,185 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/stock_availables?limit=0%2C1000&display=%5Bid%2Cid_product%2Cid_product_attribute%5D
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \n\t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n\
+ \n\n\t \n\t \n\
+ \t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n\n\
+ \t \n\t \n\t \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481290492']
+ connection: [Keep-Alive]
+ content-length: ['13277']
+ content-sha1: [7e59ece6cb6ac8781aee1e5491bf305858ed8201]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 13:34:52 GMT']
+ execution-time: ['0.008']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_template_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_template_1.yaml
new file mode 100644
index 000000000..67b5c537e
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_template_1.yaml
@@ -0,0 +1,32 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/stock_availables?filter%5Bid_product_attribute%5D=0&filter%5Bid_product%5D=1&display=%5Bquantity%5D
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \n\t \n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481293390']
+ connection: [Keep-Alive]
+ content-length: ['224']
+ content-sha1: [fc056b14c97c4c0e6eec0c3b197cd87c2e40fc65]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 14:23:10 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tc5%2F25YbtlPp6Qp5D8d5rsOdA7SSrCgwsQjUULayWhLEb0NyFh1lymvNC7fb5yrMkZH9wBL6PJNw%2Bf5dIgFRXmE%3D000078;
+ expires=Thu, 29-Dec-2016 14:23:10 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_variant_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_variant_1.yaml
new file mode 100644
index 000000000..199ce3d8f
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_record_variant_1.yaml
@@ -0,0 +1,32 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/stock_availables?filter%5Bid_product_attribute%5D=1&filter%5Bid_product%5D=1&display=%5Bquantity%5D
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \n\t \n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481293390']
+ connection: [Keep-Alive]
+ content-length: ['223']
+ content-sha1: [7c35cfa05f88b825e373e85e8a3d675daeaeb9db]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 14:23:10 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tc5%2F25YbtlPp6Qp5D8d5rsOdA7SSrCgwsQjUULayWhLEb0NyFh1lymvNC7fb5yrMkZH9wBL6PJNw%2Bf5dIgFRXmE%3D000078;
+ expires=Thu, 29-Dec-2016 14:23:10 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_metadata.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_metadata.yaml
new file mode 100644
index 000000000..32e604252
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_metadata.yaml
@@ -0,0 +1,144 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shop_groups?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['208']
+ content-sha1: [0f090b5d7569487fd9bef70d0b65d1a4abb856ce]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shop_groups/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['392']
+ content-sha1: [642ab8bb0e0a7a5e3ab2c97cdfd2f17b6a373774]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shops?limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['184']
+ content-sha1: [cfe7ba62d5e3d94c7e193f34b99da1531a46bee8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/shops/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['424']
+ content-sha1: [ee0abcbb07dbe84a8f2c50e593702622a3ffd57e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_batch.yaml
new file mode 100644
index 000000000..0fe38cebe
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_batch.yaml
@@ -0,0 +1,43 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/addresses?filter%5Bid_customer%5D=1&limit=0%2C1000
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473765071']
+ connection: [Keep-Alive]
+ content-length: ['264']
+ content-sha1: [d3d14485f112356569480861ab6b22114b7ced34]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 11:11:11 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkUpqgXRa7IQkt6J6JkvEiajHzMclkHkt5VyQBsMcl%2BdYxNLlxQ%2FQbqbzsVvSmAdL8vSgcHP2GkeeRfaVlDYtw7c%3D000079;
+ expires=Mon, 03-Oct-2016 11:11:11 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_record_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_record_1.yaml
new file mode 100644
index 000000000..e965d7b48
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_address_record_1.yaml
@@ -0,0 +1,42 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/addresses/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t\
+ \n\t \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1473765540']
+ connection: [Keep-Alive]
+ content-length: ['1076']
+ content-sha1: [42ea80e7561153f663f05ccb4da183a5c1e6e106]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 11:19:00 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkW96S5y6P1Cj2eE4D0MlyGo0TCCQpU2aaufrN6zBe2bp3C0Cr3Iq5VdUosLnSieB8cSRqNfnkvwkpQy3YlPyLr0%3D000079;
+ expires=Mon, 03-Oct-2016 11:19:00 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_partner_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_batch.yaml
new file mode 100644
index 000000000..850eb790c
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_batch.yaml
@@ -0,0 +1,86 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/groups?date=1&limit=0%2C1000&filter%5Bdate_upd%5D=%3E%5B2016-09-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['308']
+ content-sha1: [a5545130ec5a47d3433c89f70cbd315176fae3fe]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/customers?date=1&limit=0%2C1000&filter%5Bdate_upd%5D=%3E%5B2016-09-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['266']
+ content-sha1: [88d5a7f196da4d4cb07b3a7724c74664683944bd]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_partner_category_record_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_category_record_1.yaml
new file mode 100644
index 000000000..21430cf66
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_category_record_1.yaml
@@ -0,0 +1,67 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/groups/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473766107']
+ connection: [Keep-Alive]
+ content-length: ['513']
+ content-sha1: [6c3a89b7b622cfa1e433280bb5293ab2870e3c11]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 11:28:27 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZ9f4N2AzajiN9rcmsoHuxuPxyPU7k0iPsxJlxTv%2B%2FLiwVo%2F4yLnJBtDgT6d3gclXyKctDUrTRt4r96Qnfy7jqQ%3D000079;
+ expires=Mon, 03-Oct-2016 11:28:27 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZ9f4N2AzajiN9rcmsoHuxuPxyPU7k0iPsxJlxTv%2B%2FLiwVo%2F4yLnJBtDgT6d3gclXyKctDUrTRt4r96Qnfy7jqQ%3D000079]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/groups/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1473766107']
+ connection: [Keep-Alive]
+ content-length: ['513']
+ content-sha1: [6c3a89b7b622cfa1e433280bb5293ab2870e3c11]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 11:28:27 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_partner_record_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_record_1.yaml
new file mode 100644
index 000000000..bdc23e6b8
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_partner_record_1.yaml
@@ -0,0 +1,49 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ method: GET
+ uri: http://172.24.0.3/api/customers/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\t \n\
+ \n\n\t\n\t \n\t \n\
+ \n \n \n \n"}
+ headers:
+ access-time: ['1473763584']
+ connection: [Keep-Alive]
+ content-length: ['1710']
+ content-sha1: [b210b90bbd5da68baab23e4fc642347377dc959b]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 13 Sep 2016 10:46:24 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.6]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkc%2B6NOanWA%2BLNql8jnO6Fa5RirOCE9bVBUKNzl31LGue13WDLnljyDfOp04pU3EFOz2zE66WXzccKAMzLH%2BL25M%3D000079;
+ expires=Mon, 03-Oct-2016 10:46:24 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_product_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_product_batch.yaml
new file mode 100644
index 000000000..fc5912504
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_product_batch.yaml
@@ -0,0 +1,112 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.11.1]
+ method: GET
+ uri: http://172.20.0.4/api/categories?date=1&limit=0%2C1000&filter%5Bdate_upd%5D=%3E%5B2016-09-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1476774086']
+ connection: [Keep-Alive]
+ content-length: ['877']
+ content-sha1: [c4d129c8aae2c59cd4cbfc6769e107f5edf79e32]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 18 Oct 2016 07:01:26 GMT']
+ execution-time: ['0.069']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.7]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-bfbe109d475f74a42c8014cc428afcb4=K5cSFnGZ1qrhoBa0L%2F2UqE0IUzQLmgI12bys4v6ciASEImo%2FlQ%2BWt3RpVwk1fnlWGBFBgK99oHtGMqGwEYKZJAH%2BfUwVeE7eIvLioStDrMo%3D000079;
+ expires=Mon, 07-Nov-2016 07:01:26 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.11.1]
+ method: GET
+ uri: http://172.20.0.4/api/products?date=1&limit=0%2C1000&filter%5Bdate_upd%5D=%3E%5B2016-09-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1476774086']
+ connection: [Keep-Alive]
+ content-length: ['580']
+ content-sha1: [6134ad7d5e7ecb72a43c9e2580584666957aa118]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Tue, 18 Oct 2016 07:01:26 GMT']
+ execution-time: ['0.017']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.7]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-bfbe109d475f74a42c8014cc428afcb4=K5cSFnGZ1qrhoBa0L%2F2UqE0IUzQLmgI12bys4v6ciASEImo%2FlQ%2BWt3RpVwk1fnlWGBFBgK99oHtGMqGwEYKZJAH%2BfUwVeE7eIvLioStDrMo%3D000079;
+ expires=Mon, 07-Nov-2016 07:01:26 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_product_category_record_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_product_category_record_1.yaml
new file mode 100644
index 000000000..7e70cd6d2
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_product_category_record_1.yaml
@@ -0,0 +1,262 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/categories/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \tThe must have of your wardrobe, take a look at our different\
+ \ colors,
\r\nshapes and style of our collection!
]]>\n\
+ \t \n\t \n\
+ \t \n\n\n\n\t\n\t \n\
+ \t \n \n \n\n\n"}
+ headers:
+ access-time: ['1481126065']
+ connection: [Keep-Alive]
+ content-length: ['1707']
+ content-sha1: [1be41e3521f71a55307ec239da5d7df98b55919e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:54:25 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVg4WbxGIqX%2B5U3DAgMJ1t0Pr7pBorWw3fnVRmrjAFlmpNKjkKOIx3%2FFRkqOjZ0uEnswvng%2F50iOW1nVRkv0EYA%3D000079;
+ expires=Tue, 27-Dec-2016 15:54:25 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/categories/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \tChoose from t-shirts, tops, blouses, short sleeves, long sleeves,\
+ \ tank tops, 3/4 sleeves and more.\r\nFind the cut that suits you the\
+ \ best!
]]> \n\t \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481126065']
+ connection: [Keep-Alive]
+ content-length: ['2032']
+ content-sha1: [072873031c121847fe4aca62bfdcbe1fc47bbb65]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:54:25 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVg4WbxGIqX%2B5U3DAgMJ1t0Pr7pBorWw3fnVRmrjAFlmpNKjkKOIx3%2FFRkqOjZ0uEnswvng%2F50iOW1nVRkv0EYA%3D000079;
+ expires=Tue, 27-Dec-2016 15:54:25 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/categories/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \tYou will find here all woman fashion collections. \r\
+ \nThis category includes all the basics of your wardrobe and much more:
\r\
+ \nshoes, accessories, printed t-shirts, feminine dresses, women's jeans!
]]> \n\
+ \t \n\t \n\
+ \t \n\n\n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481126065']
+ connection: [Keep-Alive]
+ content-length: ['2578']
+ content-sha1: [a16c00036b738aeae3697d4bc29567451b6f95dc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:54:25 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVg4WbxGIqX%2B5U3DAgMJ1t0Pr7pBorWw3fnVRmrjAFlmpNKjkKOIx3%2FFRkqOjZ0uEnswvng%2F50iOW1nVRkv0EYA%3D000079;
+ expires=Tue, 27-Dec-2016 15:54:25 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/categories/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\t\
+ \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n \n\n\t\n\t \n\
+ \t \n\t\n\
+ \t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481126065']
+ connection: [Keep-Alive]
+ content-length: ['2249']
+ content-sha1: [a89d0c5f48e203024a3a90fbd20bcf2defddf0f2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:54:25 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVg4WbxGIqX%2B5U3DAgMJ1t0Pr7pBorWw3fnVRmrjAFlmpNKjkKOIx3%2FFRkqOjZ0uEnswvng%2F50iOW1nVRkv0EYA%3D000079;
+ expires=Tue, 27-Dec-2016 15:54:25 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/categories/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t\
+ \n\t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n \n \n \n \n \n"}
+ headers:
+ access-time: ['1481126066']
+ connection: [Keep-Alive]
+ content-length: ['1539']
+ content-sha1: [252be92fe7c9855cac04c8393e6f435122ac4d66]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:54:25 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TRgwTXsdGnjewzMN4nzfxZlrCz08rDFP4pzKy9cM9ynZmD2StFv7ZEPrE40HC26xa3q%2B%2FP%2FbKzjWRbS2Dz4T%2Flw%3D000078;
+ expires=Tue, 27-Dec-2016 15:54:26 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_product_template_record_1.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_product_template_record_1.yaml
new file mode 100644
index 000000000..588a43a35
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_product_template_record_1.yaml
@@ -0,0 +1,3886 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124135']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:15 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124135']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:15 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124135']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:15 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=98']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['1449']
+ content-sha1: [9b47f2be4bfbadeb0a8cd2b0727d58ae7b4a7ed8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [fb64cb999986c7ba3f51bf301e2d417dc06ce9df]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_options/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['1191']
+ content-sha1: [341b60036143ca55a43924a5783c4438b6d7ab53]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [fb64cb999986c7ba3f51bf301e2d417dc06ce9df]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [1fd3af8a89f9801e5af10b533e50795fa9686f6f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [ad3ccf7a72979f99a423bd834b2a51bf72ec999a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['452']
+ content-sha1: [6540ae9572d545230f26f381349fea18a761dec7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [2f50c03f3f43ac7bd85afbb2ec590425b65ba14c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_options/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['2530']
+ content-sha1: [6aa0e4dabe8371387f0249b76f20efbef32c89aa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['467']
+ content-sha1: [c4f00103fb0232c6bd64f790aac32ab05fadaf6c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/6
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124136']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [09bfff781ed5c1d60cc759f9eb1fee7b3ec75e05]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:16 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:16 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/7
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124137']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [491480187b13b5afe8ddef7b3e888237a7414463]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:17 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZdGRY1kbbNPmOolODWCWPFPLTgXgkrV4r5BCRfJoUvNeC9m6GkDxrTBoCmL8bIKNc6sj5XMW%2Fy9PX16%2F0qG7rE%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:17 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/8
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124137']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [04366e14c268e90a1ec1bc574d49769a15a16dc3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:17 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZdGRY1kbbNPmOolODWCWPFPLTgXgkrV4r5BCRfJoUvNeC9m6GkDxrTBoCmL8bIKNc6sj5XMW%2Fy9PX16%2F0qG7rE%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:17 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/9
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124138']
+ connection: [Keep-Alive]
+ content-length: ['472']
+ content-sha1: [31f55e1fdf29f126d64d2435a0bb9ed01b1a65f6]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:18 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TV7HtfyWD6hEGkkbhhMsvT%2FqdUwiMJl4fwuoaFQP0Hp7JmyDdM1bO0Gs0b5oIxEDeRJp%2FPppAcOKtPQkKZAlJ3I%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/10
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124138']
+ connection: [Keep-Alive]
+ content-length: ['467']
+ content-sha1: [1b99100135728ad983cbe7cab98314dc1b16b9e7]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TV7HtfyWD6hEGkkbhhMsvT%2FqdUwiMJl4fwuoaFQP0Hp7JmyDdM1bO0Gs0b5oIxEDeRJp%2FPppAcOKtPQkKZAlJ3I%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/11
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124138']
+ connection: [Keep-Alive]
+ content-length: ['469']
+ content-sha1: [cfd2e8afc747e33a3ebd05a9aa034608e1bd59e5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TV7HtfyWD6hEGkkbhhMsvT%2FqdUwiMJl4fwuoaFQP0Hp7JmyDdM1bO0Gs0b5oIxEDeRJp%2FPppAcOKtPQkKZAlJ3I%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/12
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124138']
+ connection: [Keep-Alive]
+ content-length: ['469']
+ content-sha1: [fc1695db542fbeb3ececdded37676ad38f278726]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:18 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TV7HtfyWD6hEGkkbhhMsvT%2FqdUwiMJl4fwuoaFQP0Hp7JmyDdM1bO0Gs0b5oIxEDeRJp%2FPppAcOKtPQkKZAlJ3I%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:18 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [2f50c03f3f43ac7bd85afbb2ec590425b65ba14c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [c9cab2d96a92b86ecb73c7e46fafabc57e4461f3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/15
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [d8efb2ca49d2c2d31262679a2583ab71e29a092e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/16
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['471']
+ content-sha1: [5b724fc75952035d9e39bf7bc88ba71cdcc6e059]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/17
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [662e57fb4774ecb40e4ed8c95d95c4ea2645518a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/24
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['469']
+ content-sha1: [e2e62cec7d535d055b2ecfbf20aaf9f10cfcca01]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TVbuLHEc0uVTOBEbXID3OZ52VSbw3HLVtB3w382JVbLSpWX0%2FmQHsi75hZzebKhrOyzl2dWivlqYYj3T5WVYYTM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:19 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.005']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124139']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:19 GMT']
+ execution-time: ['0.005']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tf1jdxttAL6plvD1h30vZ1cYEC33Gzf61IOPEmPMhHyZE6xcgof6pk0ECbbmtkZGlZwwdwOOcicn6OLXVAyr9Pk%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['1449']
+ content-sha1: [9b47f2be4bfbadeb0a8cd2b0727d58ae7b4a7ed8]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=1
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [7665fdcbaa6e2da5035fb89303bead3a25262d3d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [fb64cb999986c7ba3f51bf301e2d417dc06ce9df]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [c9cab2d96a92b86ecb73c7e46fafabc57e4461f3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [7665fdcbaa6e2da5035fb89303bead3a25262d3d]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=2
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [a3f6f4b33d409db9eb3ac187fa93ce050cc2518e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124140']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [1fd3af8a89f9801e5af10b533e50795fa9686f6f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:20 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:20 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [2f50c03f3f43ac7bd85afbb2ec590425b65ba14c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TZ%2Bv2tPDUEJlMY9Z5Yfu0PL3tYYP5Qh9ca1vp2iJlBK4A1EvoPWyjZi81TLWoOpB2XuVadOc7c6hRXZxS4c4l0U%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [a3f6f4b33d409db9eb3ac187fa93ce050cc2518e]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=3
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [e999bc7c78e0e4e03cdaef93f979bfafee2f12de]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/2
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [1fd3af8a89f9801e5af10b533e50795fa9686f6f]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [c9cab2d96a92b86ecb73c7e46fafabc57e4461f3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/4
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [e999bc7c78e0e4e03cdaef93f979bfafee2f12de]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=4
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [a8f7b1bd3cd851fa1651b6d05d9925279421762c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [ad3ccf7a72979f99a423bd834b2a51bf72ec999a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079;
+ expires=Tue, 27-Dec-2016 15:22:21 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['470']
+ content-sha1: [2f50c03f3f43ac7bd85afbb2ec590425b65ba14c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TYr4m1ALxkhSsm6p5OJyRX0y7Ips3VsF%2Fkv2ZqHUjcZqBdyC8Q036H%2BammS0ndBBUo93uvKMs4t4i6FjkkixECM%3D000079]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124141']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [a8f7b1bd3cd851fa1651b6d05d9925279421762c]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=5
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:21 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078;
+ expires=Tue, 27-Dec-2016 15:22:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/6
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [45238a946d461c5640ed3e91bef1c761fcf03f47]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078;
+ expires=Tue, 27-Dec-2016 15:22:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/3
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\
+ \t \n \n \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['445']
+ content-sha1: [ad3ccf7a72979f99a423bd834b2a51bf72ec999a]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078;
+ expires=Tue, 27-Dec-2016 15:22:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_option_values/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\
+ \t \n\t \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['468']
+ content-sha1: [c9cab2d96a92b86ecb73c7e46fafabc57e4461f3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/products/1
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\tFashion\
+ \ has been creating well-designed collections since 2010. The brand offers\
+ \ feminine designs delivering stylish separates and statement dresses which\
+ \ have since evolved into a full ready-to-wear collection in which every item\
+ \ is a vital part of a woman's wardrobe. The result? Cool, easy, chic looks\
+ \ with youthful elegance and unmistakable signature style. All the beautiful\
+ \ pieces are made in Italy and manufactured with the greatest attention. Now\
+ \ Fashion extends to a range of accessories including shoes, hats, belts and\
+ \ more!]]> \n\tFaded short\
+ \ sleeves t-shirt with high neckline. Soft and stretchy material for a comfortable\
+ \ fit. Accessorize with a straw hat and you're ready for summer!]]> \n\
+ \t \n\t \n\
+ \n\n\t\
+ \n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n\t\n\t \n\t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\t \n\
+ \t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n\t\n\t \n\t \n \n\
+ \n\
+ \t\n\t \n\t \n\t \n\t\n\t \n\
+ \t \n\t \n\t\n\t \n\
+ \t \n\t \n \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n \n\n \n \n \n \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['9416']
+ content-sha1: [62b83a7adcd684959caba9de33f6a03a951df6fa]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.004']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/combinations/6
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t\
+ \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\n\
+ \n\t\n\t \n\t \n\t\n\t \n\
+ \t \n \n\n\t\n\t \n\t \n\t\n\t \n\t \n \n \n \n\
+ \n"}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['1436']
+ content-sha1: [45238a946d461c5640ed3e91bef1c761fcf03f47]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=99']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/product_suppliers?limit=0%2C1000&filter%5Bid_product_attribute%5D=6
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481124142']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [5268145c9506f6b45ffd7281d32a796dd6156bd5]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Wed, 07 Dec 2016 15:22:22 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TW1ygHw5IizBRt%2BtxZGnq9AwoS425q1qXAB9JNvvavDaeOjHg2Q8DwKe6Vyx1t6EtvQTJZs863l%2B13GVo%2FMgdeQ%3D000078;
+ expires=Tue, 27-Dec-2016 15:22:22 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_sale_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_sale_batch.yaml
new file mode 100644
index 000000000..ceb27029f
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_sale_batch.yaml
@@ -0,0 +1,86 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/orders?date=1&limit=0%2C1000&filter%5Bdate_upd%5D=%3E%5B2016-12-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481279649']
+ connection: [Keep-Alive]
+ content-length: ['428']
+ content-sha1: [3cdffda12e242f64c9988d1659653b619a5a0fec]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 10:34:09 GMT']
+ execution-time: ['0.01']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TUudwQS8kEjsMfUuhE39VPxmVm9HstDaGd1I0cr5wBOpSKwT4%2Buhk3GJTIxujKbBlpvmFJUxyjsWeaNoGE7e6LM%3D000079;
+ expires=Thu, 29-Dec-2016 10:34:09 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/customer_messages?date=1&limit=0%2C1000&filter%5Bdate_add%5D=%3E%5B2016-12-01+00%3A00%3A00%5D
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481279649']
+ connection: [Keep-Alive]
+ content-length: ['150']
+ content-sha1: [f785adb02abb8a8536247bfb654e6e7d2304a891]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 10:34:09 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5TUudwQS8kEjsMfUuhE39VPxmVm9HstDaGd1I0cr5wBOpSKwT4%2Buhk3GJTIxujKbBlpvmFJUxyjsWeaNoGE7e6LM%3D000079;
+ expires=Thu, 29-Dec-2016 10:34:09 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_sale_record_5.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_sale_record_5.yaml
new file mode 100644
index 000000000..59162c298
--- /dev/null
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_sale_record_5.yaml
@@ -0,0 +1,320 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/orders/5
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \n\n\t\n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n \n \n \n \n"}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['4766']
+ content-sha1: [b0a5f9e0abd4472586374d8ebbb44c3f5fb262f3]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/order_payments?filter%5Border_reference%5D=KHWLILZLL
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['144']
+ content-sha1: [1e5e8b6f80106cd18c5dddd6e65ef612feb28673]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.002']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tb45G5tfuoewgFOGXCa0zqjmkA9hhHGyvwxvbnN6cWseoA1XiyfSBRNxfbcRDI13Wayf7uzmWqLeeredNQhXw5U%3D000078;
+ expires=Thu, 29-Dec-2016 12:58:13 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/order_details/13
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t\
+ \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \n\n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['2844']
+ content-sha1: [9868fe35e73e166c81546b44825f8af2f6598ddb]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tb45G5tfuoewgFOGXCa0zqjmkA9hhHGyvwxvbnN6cWseoA1XiyfSBRNxfbcRDI13Wayf7uzmWqLeeredNQhXw5U%3D000078;
+ expires=Thu, 29-Dec-2016 12:58:13 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/order_details/14
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \n\n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['2822']
+ content-sha1: [7ef075c1027edc3db00d770095791ca896794057]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tb45G5tfuoewgFOGXCa0zqjmkA9hhHGyvwxvbnN6cWseoA1XiyfSBRNxfbcRDI13Wayf7uzmWqLeeredNQhXw5U%3D000078;
+ expires=Thu, 29-Dec-2016 12:58:13 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/order_details/15
+ response:
+ body: {string: !!python/unicode "\n\
+ \n\n\
+ \t \n\t \n\t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \t \n\
+ \n\n \n\
+ \n \n"}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['2832']
+ content-sha1: [3319a1c2d924abff869980befca3fd405d00ca50]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tb45G5tfuoewgFOGXCa0zqjmkA9hhHGyvwxvbnN6cWseoA1XiyfSBRNxfbcRDI13Wayf7uzmWqLeeredNQhXw5U%3D000078;
+ expires=Thu, 29-Dec-2016 12:58:13 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ method: GET
+ uri: http://172.22.0.4/api/order_discounts?filter%5Bid_order%5D=5
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+ '}
+ headers:
+ access-time: ['1481288293']
+ connection: [Keep-Alive]
+ content-length: ['148']
+ content-sha1: [ede4524a81f46f4c60454b06a47e324a43fc7c35]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Fri, 09 Dec 2016 12:58:13 GMT']
+ execution-time: ['0.003']
+ keep-alive: ['timeout=5, max=100']
+ psws-version: [1.6.1.9]
+ server: [Apache/2.4.10 (Debian)]
+ set-cookie: ['PrestaShop-095ca4fa56f569ddf56f692e2249251a=DYHr6QQHnOuI4%2BKs9hL5Tb45G5tfuoewgFOGXCa0zqjmkA9hhHGyvwxvbnN6cWseoA1XiyfSBRNxfbcRDI13Wayf7uzmWqLeeredNQhXw5U%3D000078;
+ expires=Thu, 29-Dec-2016 12:58:13 GMT; Max-Age=1728000; path=/; httponly']
+ vary: [Accept-Encoding]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/connector_prestashop/tests/test_auth.py b/connector_prestashop/tests/test_auth.py
new file mode 100644
index 000000000..5b6d7aa19
--- /dev/null
+++ b/connector_prestashop/tests/test_auth.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+
+from odoo import exceptions
+
+from .common import recorder, PrestashopTransactionCase
+
+
+class TestAuth(PrestashopTransactionCase):
+
+ @recorder.use_cassette
+ def test_auth_success(self):
+ with self.assertRaisesRegexp(exceptions.UserError,
+ u'Connection successful'):
+ self.backend_record.button_check_connection()
+
+ @recorder.use_cassette
+ def test_auth_failure(self):
+ self.backend_record.webservice_key = 'xyz'
+ with self.assertRaisesRegexp(exceptions.UserError,
+ u'Connection failed'):
+ self.backend_record.button_check_connection()
diff --git a/connector_prestashop/tests/test_export_stock_qty.py b/connector_prestashop/tests/test_export_stock_qty.py
new file mode 100644
index 000000000..a57ae8cb1
--- /dev/null
+++ b/connector_prestashop/tests/test_export_stock_qty.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import mock
+
+from ..models.product_template.exporter import export_product_quantities
+from .common import (
+ ExportStockQuantityCase,
+ assert_no_job_delayed
+)
+
+
+class TestExportStockQuantity(ExportStockQuantityCase):
+
+ @assert_no_job_delayed
+ def test_export_stock_qty_delay(self):
+ """ Backend button delay a job to delay stock quantities export """
+ export_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.export_product_quantities')
+ with mock.patch(export_job) as export_mock:
+ self.backend_record.update_product_stock_qty()
+ export_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ )
+
+ @assert_no_job_delayed
+ def test_job_recompute_prestashop_qty(self):
+ export_job_path = ('openerp.addons.connector_prestashop.consumer'
+ '.export_inventory')
+
+ variant_binding = self._create_product_binding(
+ name='Faded Short Sleeves T-shirt',
+ template_ps_id=1,
+ variant_ps_id=1,
+ )
+ base_qty = variant_binding.qty_available
+ base_prestashop_qty = variant_binding.quantity
+ self.assertEqual(0, base_qty)
+ self.assertEqual(0, base_prestashop_qty)
+
+ with mock.patch(export_job_path) as export_record_mock:
+ export_product_quantities(self.conn_session,
+ self.backend_record.ids)
+ # no job delayed because no quantity has been changed
+ self.assertEqual(0, export_record_mock.delay.call_count)
+
+ self._change_product_qty(variant_binding.odoo_id, 42)
+
+ with mock.patch(export_job_path) as export_record_mock:
+ export_product_quantities(self.conn_session,
+ self.backend_record.ids)
+ self.assertEqual(1, export_record_mock.delay.call_count)
+ export_record_mock.delay.assert_called_with(
+ mock.ANY,
+ 'prestashop.product.template',
+ variant_binding.main_template_id.id,
+ fields=['quantity'],
+ priority=20,
+ )
diff --git a/connector_prestashop/tests/test_export_stock_qty_job.py b/connector_prestashop/tests/test_export_stock_qty_job.py
new file mode 100644
index 000000000..5456baddd
--- /dev/null
+++ b/connector_prestashop/tests/test_export_stock_qty_job.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import mock
+
+from ..models.product_template.exporter import export_inventory
+from .common import (
+ ExportStockQuantityCase,
+ assert_no_job_delayed,
+ recorder
+)
+
+
+class TestExportStockQuantity(ExportStockQuantityCase):
+
+ @assert_no_job_delayed
+ def test_job_export_qty(self):
+ """ Export a qty on PrestaShop """
+ variant_binding = self._create_product_binding(
+ name='Faded Short Sleeves T-shirt',
+ template_ps_id=1,
+ variant_ps_id=1,
+ )
+ base_qty = variant_binding.qty_available
+ base_prestashop_qty = variant_binding.quantity
+ self.assertEqual(0, base_qty)
+ self.assertEqual(0, base_prestashop_qty)
+
+ export_job_path = ('openerp.addons.connector_prestashop.consumer'
+ '.export_inventory')
+ with mock.patch(export_job_path):
+ self._change_product_qty(variant_binding.odoo_id, 42)
+
+ cassette_name = 'test_export_stock_quantity'
+ with recorder.use_cassette(cassette_name) as cassette:
+ export_inventory(
+ self.conn_session, 'prestashop.product.template',
+ variant_binding.main_template_id.id,
+ fields=['quantity'],
+ )
+ self.assertEqual(len(cassette.requests), 3)
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/stock_availables',
+ self.parse_path(request.uri))
+ expected_query = {'filter[id_product]': ['1'],
+ 'filter[id_product_attribute]': ['0']}
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ request = cassette.requests[1]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/stock_availables/1',
+ self.parse_path(request.uri))
+ self.assertDictEqual({}, self.parse_qs(request.uri))
+
+ request = cassette.requests[2]
+ self.assertEqual('PUT', request.method)
+ self.assertEqual('/api/stock_availables',
+ self.parse_path(request.uri))
+ body = self.xmltodict(request.body)
+
+ self.assertTrue(
+ set({'depends_on_stock': '0',
+ 'id': '1',
+ 'id_product': '1',
+ 'id_product_attribute': '0',
+ 'id_shop': '1',
+ 'id_shop_group': '0',
+ 'out_of_stock': '2',
+ 'quantity': '0'}.items())
+ .issubset(set(body['prestashop']['stock_available'].items())))
+ self.assertDictEqual({}, self.parse_qs(request.uri))
diff --git a/connector_prestashop/tests/test_export_tracking.py b/connector_prestashop/tests/test_export_tracking.py
new file mode 100644
index 000000000..92cb1de8d
--- /dev/null
+++ b/connector_prestashop/tests/test_export_tracking.py
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+import mock
+
+from odoo.addons.connector_prestashop.models.stock_tracking.\
+ exporter import export_tracking_number
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+class TestExportPicking(PrestashopTransactionCase):
+
+ def setUp(self):
+ super(TestExportPicking, self).setUp()
+ self.sync_metadata()
+
+ self.mock_delay_export = mock.MagicMock()
+ self.patch_delay = mock.patch(
+ 'openerp.addons.connector_prestashop'
+ '.consumer.export_tracking_number.delay',
+ new=self.mock_delay_export
+ )
+ self.patch_delay.start()
+
+ stock_loc = self.ref('stock.stock_location_stock')
+ customer_loc = self.ref('stock.stock_location_customers')
+
+ self.customer_partner = self.env['res.partner'].create({
+ 'name': 'Unittest customer partner',
+ })
+
+ self.shop = self.env['prestashop.shop'].search([])
+
+ self.product_1 = self.env['product.product'].create({
+ 'name': 'Blouse'
+ })
+ product_tmpl_1 = self.product_1.product_tmpl_id
+ template_binding = self.create_binding_no_export(
+ 'prestashop.product.template',
+ product_tmpl_1.id,
+ prestashop_id=2,
+ default_shop_id=self.shop.id,
+ )
+ self.create_binding_no_export(
+ 'prestashop.product.combination',
+ self.product_1.id,
+ prestashop_id=7,
+ main_template_id=template_binding.id,
+ )
+
+ self.sale = self.env['sale.order'].create({
+ 'partner_id': self.customer_partner.id,
+ 'partner_invoice_id': self.customer_partner.id,
+ 'partner_shipping_id': self.customer_partner.id,
+ 'order_line': [(0, 0, {
+ 'name': self.product_1.name,
+ 'product_id': self.product_1.id,
+ 'product_uom_qty': 1.0,
+ 'product_uom': self.product_1.uom_id.id,
+ })],
+ 'pricelist_id': self.env.ref('product.list0').id,
+ })
+
+ procurement_group = self.env['procurement.group'].create(
+ {'name': 'Test',
+ 'move_type': 'direct',
+ }
+ )
+
+ procurement = self.env['procurement.order'].create({
+ 'name': "Unittest P1 procurement",
+ 'product_id': self.product_1.id,
+ 'product_uom': self.product_1.uom_id.id,
+ 'product_qty': 1,
+ 'sale_line_id': self.sale.order_line[0].id,
+ 'group_id': procurement_group.id,
+ })
+
+ self.picking = self.env['stock.picking'].create({
+ 'picking_type_id': self.ref('stock.picking_type_out'),
+ 'location_id': stock_loc,
+ 'location_dest_id': customer_loc,
+ 'move_lines': [
+ (0, 0, {
+ 'name': 'Test move',
+ 'procurement_id': procurement.id,
+ 'product_id': self.product_1.id,
+ 'product_uom': self.ref('product.product_uom_unit'),
+ 'product_uom_qty': 1,
+ 'location_id': stock_loc,
+ 'location_dest_id': customer_loc,
+ 'group_id': procurement_group.id,
+ })
+ ]
+ })
+ self.sale.procurement_group_id = procurement_group.id
+
+ def tearDown(self):
+ super(TestExportPicking, self).tearDown()
+ self.patch_delay.stop()
+
+ @assert_no_job_delayed
+ def test_event_tracking_number__not_prestashop_sale(self):
+ """ Test that nothing is exported """
+ self.picking.carrier_tracking_ref = 'xyz'
+ self.assertEqual(0, self.mock_delay_export.call_count)
+
+ @assert_no_job_delayed
+ def test_event_tracking_number__prestashop_sale(self):
+ """ Test that tracking number is exported """
+ sale_binding = self.create_binding_no_export(
+ 'prestashop.sale.order', self.sale.id, prestashop_id=2
+ )
+
+ self.picking.carrier_tracking_ref = 'xyz'
+ self.mock_delay_export.assert_called_once_with(
+ mock.ANY, 'prestashop.sale.order', sale_binding.id,
+ priority=mock.ANY
+ )
+
+ @assert_no_job_delayed
+ def test_export_tracking_number(self):
+ sale_binding = self.create_binding_no_export(
+ 'prestashop.sale.order', self.sale.id, prestashop_id=2
+ )
+ self.picking.carrier_tracking_ref = 'xyz'
+ cassette_name = 'test_export_tracking_number'
+ with recorder.use_cassette(cassette_name) as cassette:
+ export_tracking_number(
+ self.conn_session, 'prestashop.sale.order', sale_binding.id,
+ )
+ self.assertEqual(len(cassette.requests), 3)
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/order_carriers',
+ self.parse_path(request.uri))
+ expected_query = {'filter[id_order]': ['2']}
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ request = cassette.requests[1]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/order_carriers/2',
+ self.parse_path(request.uri))
+ self.assertDictEqual({}, self.parse_qs(request.uri))
+
+ request = cassette.requests[2]
+ self.assertEqual('PUT', request.method)
+ self.assertEqual('/api/order_carriers',
+ self.parse_path(request.uri))
+ body = self.xmltodict(request.body)
+ self.assertTrue(
+ set({'id': '2',
+ 'tracking_number': 'xyz'}.items())
+ .issubset(set(body['prestashop']['order_carrier'].items())))
+ self.assertDictEqual({}, self.parse_qs(request.uri))
diff --git a/connector_prestashop/tests/test_import_backend_data.py b/connector_prestashop/tests/test_import_backend_data.py
new file mode 100644
index 000000000..973ea6876
--- /dev/null
+++ b/connector_prestashop/tests/test_import_backend_data.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+from .common import (
+ recorder, PrestashopTransactionCase, quiet_logger, assert_no_job_delayed
+)
+
+ExpectedShopGroup = namedtuple('ExpectedShopGroup',
+ 'name prestashop_id backend_id')
+
+ExpectedShop = namedtuple('ExpectedShop',
+ 'name prestashop_id openerp_id shop_group_id '
+ 'backend_id')
+
+
+class TestImportBackendData(PrestashopTransactionCase):
+
+ def setUp(self):
+ super(TestImportBackendData, self).setUp()
+
+ @recorder.use_cassette
+ @assert_no_job_delayed
+ def test_import_metadata(self):
+ """ Import shop groups and shops """
+ self.backend_record.synchronize_metadata()
+
+ shop_groups = self.env['prestashop.shop.group'].search([])
+ self.assertEqual(len(shop_groups), 1)
+ expected = [
+ ExpectedShopGroup(
+ name='Default',
+ prestashop_id=1,
+ backend_id=self.backend_record,
+ ),
+ ]
+ self.assert_records(expected, shop_groups)
+
+ shops = self.env['prestashop.shop'].search([])
+ self.assertEqual(len(shops), 1)
+ expected = [
+ ExpectedShop(
+ name='PrestaShop',
+ prestashop_id=1,
+ openerp_id=self.backend_record.warehouse_id,
+ shop_group_id=shop_groups,
+ backend_id=self.backend_record,
+ ),
+ ]
+ self.assert_records(expected, shops)
+
+ @recorder.use_cassette
+ @assert_no_job_delayed
+ def test_import_basedata(self):
+ """ Import base data (langs, countries, currencies, taxes) """
+ # ensure it is created afresh from the sync
+ self.env['prestashop.res.lang'].search([]).unlink()
+ self.configure_taxes()
+ auto_import_logger = (
+ 'openerp.addons.connector_prestashop.unit.auto_matching_importer'
+ )
+ with quiet_logger('vcr'), quiet_logger('urllib3'):
+ with quiet_logger(auto_import_logger):
+ self.backend_record.synchronize_basedata()
+
+ langs = self.env['prestashop.res.lang'].search([])
+ self.assertEqual(len(langs), 1)
+
+ countries = self.env['prestashop.res.country'].search([])
+ self.assertEqual(len(countries), 243)
+
+ currencies = self.env['prestashop.res.currency'].search([])
+ self.assertEqual(len(currencies), 1)
+
+ taxes = self.env['prestashop.account.tax'].search([])
+ self.assertEqual(len(taxes), 7)
diff --git a/connector_prestashop/tests/test_import_carrier.py b/connector_prestashop/tests/test_import_carrier.py
new file mode 100644
index 000000000..9838e6f4c
--- /dev/null
+++ b/connector_prestashop/tests/test_import_carrier.py
@@ -0,0 +1,95 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+import mock
+
+from odoo.addons.connector_prestashop.unit.importer import (
+ import_record,
+)
+from odoo.addons.connector_prestashop.models.\
+ delivery_carrier.importer import (
+ import_carriers
+ )
+
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+ExpectedCarrier = namedtuple(
+ 'ExpectedCarrier',
+ 'name partner_id product_id company_id'
+)
+
+
+class TestImportCarrier(PrestashopTransactionCase):
+ """ Test the import of partner from PrestaShop """
+
+ def setUp(self):
+ super(TestImportCarrier, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ @assert_no_job_delayed
+ def test_import_carriers(self):
+ import_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.import_carriers')
+ with mock.patch(import_job) as import_mock:
+ self.backend_record.import_carriers()
+ import_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ priority=10,
+ )
+
+ @assert_no_job_delayed
+ def test_import_products_batch(self):
+ record_job_path = ('openerp.addons.connector_prestashop.unit'
+ '.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ with recorder.use_cassette('test_import_carrier_batch') as cassette, \
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_carriers(
+ self.conn_session,
+ self.backend_record.id,
+ )
+ expected_query = {
+ 'filter[deleted]': ['0'],
+ }
+ self.assertEqual(1, len(cassette.requests))
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/carriers', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ self.assertEqual(2, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_carrier_record(self):
+ """ Import a carrier """
+ with recorder.use_cassette('test_import_carrier_record_2'):
+ import_record(self.conn_session, 'prestashop.delivery.carrier',
+ self.backend_record.id, 2)
+
+ domain = [('prestashop_id', '=', 2),
+ ('backend_id', '=', self.backend_record.id)]
+ binding = self.env['prestashop.delivery.carrier'].search(domain)
+ binding.ensure_one()
+
+ ship_product_xmlid = 'connector_ecommerce.product_product_shipping'
+ ship_product = self.env.ref(ship_product_xmlid)
+ expected = [
+ ExpectedCarrier(
+ name='My carrier',
+ partner_id=self.backend_record.company_id.partner_id,
+ product_id=ship_product,
+ company_id=self.backend_record.company_id,
+ )]
+
+ self.assert_records(expected, binding)
diff --git a/connector_prestashop/tests/test_import_inventory.py b/connector_prestashop/tests/test_import_inventory.py
new file mode 100644
index 000000000..695cbf268
--- /dev/null
+++ b/connector_prestashop/tests/test_import_inventory.py
@@ -0,0 +1,113 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+import mock
+
+from odoo.addons.connector_prestashop.unit.importer import (
+ import_record,
+)
+from odoo.addons.connector_prestashop.models.\
+ product_template.importer import (
+ import_inventory
+ )
+
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+ExpectedCarrier = namedtuple(
+ 'ExpectedCarrier',
+ 'name partner_id product_id company_id'
+)
+
+
+class TestImportInventory(PrestashopTransactionCase):
+ """ Test the import of partner from PrestaShop """
+
+ def setUp(self):
+ super(TestImportInventory, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ @assert_no_job_delayed
+ def test_import_inventory_delay(self):
+ """ Backend button delay a job to delay inventory import """
+ import_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.import_inventory')
+ with mock.patch(import_job) as import_mock:
+ self.backend_record.import_stock_qty()
+ import_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ )
+
+ @assert_no_job_delayed
+ def test_import_inventory_batch(self):
+ record_job_path = ('openerp.addons.connector_prestashop.models'
+ '.product_template.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ with recorder.use_cassette('test_import_inventory_batch') as cassette,\
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_inventory(self.conn_session, self.backend_record.id)
+ expected_query = {
+ 'display': ['[id,id_product,id_product_attribute]'],
+ 'limit': ['0,1000'],
+ }
+ self.assertEqual(1, len(cassette.requests))
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/stock_availables',
+ self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ self.assertEqual(52, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_inventory_record_template(self):
+ """ Import the inventory for a template"""
+ variant_binding = self._create_product_binding(
+ name='Faded Short Sleeves T-shirt',
+ template_ps_id=1,
+ variant_ps_id=1,
+ )
+
+ template = variant_binding.odoo_id.product_tmpl_id
+
+ self.assertEqual(0, template.qty_available)
+ with recorder.use_cassette('test_import_inventory_record_template_1'):
+ import_record(self.conn_session, '_import_stock_available',
+ self.backend_record.id, 1,
+ # id_product_attribute='0' means we
+ # import the template quantity
+ record={'id_product_attribute': '0',
+ 'id': '1',
+ 'id_product': '1'})
+ # cumulative stock of all the variants
+ self.assertEqual(1799, template.qty_available)
+
+ @assert_no_job_delayed
+ def test_import_inventory_record_variant(self):
+ """ Import the inventory for a variant"""
+ variant_binding = self._create_product_binding(
+ name='Faded Short Sleeves T-shirt',
+ template_ps_id=1,
+ variant_ps_id=1,
+ )
+
+ template = variant_binding.odoo_id.product_tmpl_id
+
+ self.assertEqual(0, template.qty_available)
+ with recorder.use_cassette('test_import_inventory_record_variant_1'):
+ import_record(self.conn_session, '_import_stock_available',
+ self.backend_record.id, 1,
+ record={'id_product_attribute': '1',
+ 'id': '1',
+ 'id_product': '1'})
+ self.assertEqual(299, template.qty_available)
diff --git a/connector_prestashop/tests/test_import_partner.py b/connector_prestashop/tests/test_import_partner.py
new file mode 100644
index 000000000..c70f9490a
--- /dev/null
+++ b/connector_prestashop/tests/test_import_partner.py
@@ -0,0 +1,228 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+import mock
+
+from freezegun import freeze_time
+
+from odoo.addons.connector_prestashop.models.res_partner.importer import (
+ import_customers_since
+)
+from odoo.addons.connector_prestashop.unit.importer import (
+ import_record,
+ import_batch,
+)
+
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+ExpectedCategory = namedtuple(
+ 'ExpectedCategory',
+ 'name'
+)
+
+ExpectedPartner = namedtuple(
+ 'ExpectedPartner',
+ 'name email newsletter company active shop_group_id shop_id '
+ 'default_category_id birthday'
+)
+
+ExpectedAddress = namedtuple(
+ 'ExpectedAddress',
+ 'name parent_id street street2 city zip country_id phone mobile type'
+)
+
+
+class TestImportPartner(PrestashopTransactionCase):
+ """ Test the import of partner from PrestaShop """
+
+ def setUp(self):
+ super(TestImportPartner, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ @freeze_time('2016-09-13 00:00:00')
+ @assert_no_job_delayed
+ def test_import_partner_since(self):
+ from_date = '2016-09-01 00:00:00'
+ self.backend_record.import_partners_since = from_date
+ import_since_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.import_customers_since')
+ with mock.patch(import_since_job) as import_mock:
+ self.backend_record.import_customers_since()
+ import_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ since_date='2016-09-01 00:00:00',
+ priority=10,
+ )
+
+ @freeze_time('2016-09-13 00:00:00')
+ @assert_no_job_delayed
+ def test_import_partner_batch(self):
+ from_date = '2016-09-01 00:00:00'
+ self.backend_record.import_res_partner_from_date = from_date
+ record_job_path = ('openerp.addons.connector_prestashop.unit'
+ '.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ with recorder.use_cassette('test_import_partner_batch') as cassette, \
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_customers_since(
+ self.conn_session,
+ self.backend_record.id,
+ since_date=from_date,
+ )
+ expected_query = {
+ 'date': ['1'],
+ 'limit': ['0,1000'],
+ 'filter[date_upd]': ['>[2016-09-01 00:00:00]'],
+ }
+ self.assertEqual(2, len(cassette.requests))
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/groups', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ request = cassette.requests[1]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/customers', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ self.assertEqual(5, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_partner_category_record(self):
+ """ Import a partner category """
+ with recorder.use_cassette('test_import_partner_category_record_1'):
+ import_record(self.conn_session, 'prestashop.res.partner.category',
+ self.backend_record.id, 3)
+
+ domain = [('prestashop_id', '=', 3)]
+ category_model = self.env['prestashop.res.partner.category']
+ category_bindings = category_model.search(domain)
+ category_bindings.ensure_one()
+
+ expected = [
+ ExpectedCategory(
+ name='Customer A',
+ )]
+
+ self.assert_records(expected, category_bindings)
+
+ @assert_no_job_delayed
+ def test_import_partner_record(self):
+ """ Import a partner """
+
+ category = self.env['res.partner.category'].create(
+ {'name': 'Customer'}
+ )
+ category_binding = self.create_binding_no_export(
+ 'prestashop.res.partner.category', category.id, 3
+ )
+
+ batch_job_path = ('openerp.addons.connector_prestashop.models'
+ '.res_partner.importer.import_batch')
+ with recorder.use_cassette('test_import_partner_record_1'), \
+ mock.patch(batch_job_path) as address_batch_mock:
+ import_record(self.conn_session, 'prestashop.res.partner',
+ self.backend_record.id, 1)
+ address_batch_mock.delay.assert_called_with(
+ mock.ANY,
+ 'prestashop.address',
+ self.backend_record.id,
+ filters={'filter[id_customer]': '1'},
+ priority=10,
+ )
+
+ domain = [('prestashop_id', '=', 1)]
+ partner_bindings = self.env['prestashop.res.partner'].search(domain)
+ partner_bindings.ensure_one()
+
+ expected = [
+ ExpectedPartner(
+ name='John DOE',
+ email='pub@prestashop.com',
+ newsletter=True,
+ company=False,
+ active=True,
+ shop_group_id=self.shop_group,
+ shop_id=self.shop,
+ default_category_id=category_binding,
+ birthday='1970-01-15',
+ )]
+
+ self.assert_records(expected, partner_bindings)
+
+ @assert_no_job_delayed
+ def test_import_partner_address_batch(self):
+ record_job_path = ('openerp.addons.connector_prestashop.unit'
+ '.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ cassette_name = 'test_import_partner_address_batch'
+ with recorder.use_cassette(cassette_name) as cassette, \
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_batch(
+ self.conn_session,
+ 'prestashop.address',
+ self.backend_record.id,
+ filters={'filter[id_customer]': '1'}
+ )
+ expected_query = {
+ 'limit': ['0,1000'],
+ 'filter[id_customer]': ['1'],
+ }
+ self.assertEqual(1, len(cassette.requests))
+ self.assertEqual('GET', cassette.requests[0].method)
+ self.assertEqual('/api/addresses',
+ self.parse_path(cassette.requests[0].uri))
+ query = self.parse_qs(cassette.requests[0].uri)
+ self.assertDictEqual(expected_query, query)
+
+ self.assertEqual(2, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_partner_address_record(self):
+ """ Import a partner address """
+
+ partner = self.env['res.partner'].create(
+ {'name': 'Customer'}
+ )
+ self.create_binding_no_export(
+ 'prestashop.res.partner', partner.id, 1,
+ shop_group_id=self.shop_group.id,
+ shop_id=self.shop.id,
+ )
+ with recorder.use_cassette('test_import_partner_address_record_1'):
+ import_record(self.conn_session, 'prestashop.address',
+ self.backend_record.id, 1)
+
+ domain = [('prestashop_id', '=', 1)]
+ address_bindings = self.env['prestashop.address'].search(domain)
+ address_bindings.ensure_one()
+
+ expected = [
+ ExpectedAddress(
+ name='John DOE (My address)',
+ parent_id=partner,
+ street='16, Main street',
+ street2='2nd floor',
+ city='Paris',
+ zip='75002',
+ country_id=self.env.ref('base.fr'),
+ phone='0102030405',
+ mobile=False,
+ type='other',
+ )]
+
+ self.assert_records(expected, address_bindings)
diff --git a/connector_prestashop/tests/test_import_products.py b/connector_prestashop/tests/test_import_products.py
new file mode 100644
index 000000000..38ea5acc0
--- /dev/null
+++ b/connector_prestashop/tests/test_import_products.py
@@ -0,0 +1,236 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+import mock
+
+from freezegun import freeze_time
+
+from odoo.addons.connector_prestashop.unit.importer import (
+ import_record,
+)
+from odoo.addons.connector_prestashop.models.\
+ product_template.importer import (
+ import_products
+ )
+
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+ExpectedProductCategory = namedtuple(
+ 'ExpectedProductCategory',
+ 'name odoo_id__display_name'
+)
+
+ExpectedTemplate = namedtuple(
+ 'ExpectedProduct',
+ 'name categ_id categ_ids list_price'
+)
+
+ExpectedVariant = namedtuple(
+ 'ExpectedVariant',
+ 'default_code standard_price attribute_value_ids'
+)
+
+
+class TestImportProduct(PrestashopTransactionCase):
+ """ Test the import of partner from PrestaShop """
+
+ def setUp(self):
+ super(TestImportProduct, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ self.mock_delay_import_image = mock.MagicMock()
+ self.patch_delay_import_image = mock.patch(
+ 'openerp.addons.connector_prestashop.models.product_template'
+ '.importer.set_product_image_variant',
+ new=self.mock_delay_import_image
+ )
+ self.patch_delay_import_image.start()
+
+ self.mock_delay_import_image = mock.MagicMock()
+ self.patch_delay_import_image = mock.patch(
+ 'openerp.addons.connector_prestashop.models.product_template'
+ '.importer.import_product_image',
+ new=self.mock_delay_import_image
+ )
+ self.patch_delay_import_image.start()
+
+ self.mock_delay_set_image = mock.MagicMock()
+ self.patch_delay_set_image = mock.patch(
+ 'openerp.addons.connector_prestashop.models.product_template'
+ '.importer.set_product_image_variant',
+ new=self.mock_delay_set_image
+ )
+ self.patch_delay_set_image.start()
+
+ def tearDown(self):
+ super(TestImportProduct, self).tearDown()
+ self.patch_delay_import_image.stop()
+ self.patch_delay_set_image.stop()
+
+ @freeze_time('2016-09-13 00:00:00')
+ @assert_no_job_delayed
+ def test_import_products(self):
+ from_date = '2016-09-01 00:00:00'
+ self.backend_record.import_products_since = from_date
+ import_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.import_products')
+ with mock.patch(import_job) as import_mock:
+ self.backend_record.import_products()
+ import_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ from_date,
+ priority=10,
+ )
+
+ @freeze_time('2016-09-13 00:00:00')
+ @assert_no_job_delayed
+ def test_import_products_batch(self):
+ from_date = '2016-09-01 00:00:00'
+ self.backend_record.import_products_since = from_date
+ record_job_path = ('openerp.addons.connector_prestashop.unit'
+ '.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ with recorder.use_cassette('test_import_product_batch') as cassette, \
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_products(
+ self.conn_session,
+ self.backend_record.id,
+ from_date,
+ )
+ expected_query = {
+ 'date': ['1'],
+ 'limit': ['0,1000'],
+ 'filter[date_upd]': ['>[2016-09-01 00:00:00]'],
+ }
+ self.assertEqual(2, len(cassette.requests))
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/categories', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ request = cassette.requests[1]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/products', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ self.assertEqual(18, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_product_record_category(self):
+ """ Import a product category """
+ with recorder.use_cassette('test_import_product_category_record_1'):
+ import_record(self.conn_session, 'prestashop.product.category',
+ self.backend_record.id, 5)
+
+ domain = [('prestashop_id', '=', 5),
+ ('backend_id', '=', self.backend_record.id)]
+ binding = self.env['prestashop.product.category'].search(domain)
+ binding.ensure_one()
+
+ expected = [
+ ExpectedProductCategory(
+ name='T-shirts',
+ odoo_id__display_name='Root / Home / Women / Tops / T-shirts',
+ )]
+
+ self.assert_records(expected, binding)
+
+ @assert_no_job_delayed
+ def test_import_product_record(self):
+ """ Import a product """
+ # product 1 is assigned to categories 1-5 on PrestaShop
+ categs = self.env['product.category']
+ for idx in range(1, 6):
+ cat = self.env['product.category'].create(
+ {'name': 'ps_categ_%d' % idx}
+ )
+ self.create_binding_no_export(
+ 'prestashop.product.category', cat.id, idx,
+ )
+ categs |= cat
+
+ with recorder.use_cassette('test_import_product_template_record_1'):
+ import_record(self.conn_session, 'prestashop.product.template',
+ self.backend_record.id, 1)
+
+ domain = [('prestashop_id', '=', 1),
+ ('backend_id', '=', self.backend_record.id)]
+ binding = self.env['prestashop.product.template'].search(domain)
+ binding.ensure_one()
+
+ expected = [
+ ExpectedTemplate(
+ name='Faded Short Sleeves T-shirt',
+ # For the categories, this is what I observed, not
+ # necessarily what is wanted.
+ categ_id=self.env.ref('product.product_category_all'),
+ categ_ids=categs.filtered(lambda r: r.name != 'ps_categ_1'),
+ list_price=16.51,
+ )]
+
+ self.assert_records(expected, binding)
+
+ variants = binding.product_variant_ids
+
+ PSValue = self.env['prestashop.product.combination.option.value']
+ value_s = PSValue.search([('backend_id', '=', self.backend_record.id),
+ ('name', '=', 'S')]).odoo_id
+ value_m = PSValue.search([('backend_id', '=', self.backend_record.id),
+ ('name', '=', 'M')]).odoo_id
+ value_l = PSValue.search([('backend_id', '=', self.backend_record.id),
+ ('name', '=', 'L')]).odoo_id
+ value_orange = PSValue.search(
+ [('backend_id', '=', self.backend_record.id),
+ ('name', '=', 'Orange')]
+ ).odoo_id
+ value_blue = PSValue.search(
+ [('backend_id', '=', self.backend_record.id),
+ ('name', '=', 'Blue')]
+ ).odoo_id
+
+ expected_variants = [
+ ExpectedVariant(
+ default_code='1_1',
+ standard_price=4.95,
+ attribute_value_ids=value_s + value_orange,
+ ),
+ ExpectedVariant(
+ default_code='1_2',
+ standard_price=4.95,
+ attribute_value_ids=value_s + value_blue,
+ ),
+ ExpectedVariant(
+ default_code='1_3',
+ standard_price=4.95,
+ attribute_value_ids=value_m + value_orange,
+ ),
+ ExpectedVariant(
+ default_code='1_4',
+ standard_price=4.95,
+ attribute_value_ids=value_m + value_blue,
+ ),
+ ExpectedVariant(
+ default_code='1_5',
+ standard_price=4.95,
+ attribute_value_ids=value_l + value_orange,
+ ),
+ ExpectedVariant(
+ default_code='1_6',
+ standard_price=4.95,
+ attribute_value_ids=value_l + value_blue,
+ ),
+ ]
+
+ self.assert_records(expected_variants, variants)
diff --git a/connector_prestashop/tests/test_import_sale.py b/connector_prestashop/tests/test_import_sale.py
new file mode 100644
index 000000000..49bb39678
--- /dev/null
+++ b/connector_prestashop/tests/test_import_sale.py
@@ -0,0 +1,230 @@
+# -*- coding: utf-8 -*-
+# © 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from collections import namedtuple
+
+import mock
+
+from freezegun import freeze_time
+
+from odoo.addons.connector_prestashop.unit.importer import (
+ import_record,
+)
+from odoo.addons.connector_prestashop.models.\
+ sale_order.importer import (
+ import_orders_since
+ )
+
+from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
+
+
+ExpectedSale = namedtuple(
+ 'ExpectedSale',
+ 'name carrier_id total_amount partner_id partner_invoice_id '
+ 'partner_shipping_id pricelist_id payment_mode_id'
+)
+
+ExpectedSaleLine = namedtuple(
+ 'ExpectedSaleLine',
+ 'name product_id price_unit product_uom_qty'
+)
+
+
+class TestImportSale(PrestashopTransactionCase):
+ """ Test the import of partner from PrestaShop """
+
+ def setUp(self):
+ super(TestImportSale, self).setUp()
+ self.sync_metadata()
+ self.base_mapping()
+
+ self.shop_group = self.env['prestashop.shop.group'].search([])
+ self.shop = self.env['prestashop.shop'].search([])
+
+ @freeze_time('2016-12-09 00:00:00')
+ @assert_no_job_delayed
+ def test_import_sales(self):
+ from_date = '2016-12-01 00:00:00'
+ self.backend_record.import_orders_since = from_date
+ import_job = ('openerp.addons.connector_prestashop.models'
+ '.prestashop_backend.common'
+ '.import_orders_since')
+ with mock.patch(import_job) as import_mock:
+ self.backend_record.import_sale_orders()
+ import_mock.delay.assert_called_with(
+ mock.ANY, self.backend_record.id,
+ from_date,
+ priority=5,
+ )
+
+ @freeze_time('2016-12-09 00:00:00')
+ @assert_no_job_delayed
+ def test_import_sale_batch(self):
+ from_date = '2016-12-01 00:00:00'
+ self.backend_record.import_res_partner_from_date = from_date
+ record_job_path = ('openerp.addons.connector_prestashop.unit'
+ '.importer.import_record')
+ # execute the batch job directly and replace the record import
+ # by a mock (individual import is tested elsewhere)
+ with recorder.use_cassette('test_import_sale_batch') as cassette, \
+ mock.patch(record_job_path) as import_record_mock:
+
+ import_orders_since(
+ self.conn_session,
+ self.backend_record.id,
+ from_date,
+ )
+
+ expected_query = {
+ 'date': ['1'],
+ 'limit': ['0,1000'],
+ 'filter[date_upd]': ['>[2016-12-01 00:00:00]'],
+ }
+ self.assertEqual(2, len(cassette.requests))
+
+ request = cassette.requests[0]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/orders', self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ expected_query = {
+ 'date': ['1'],
+ 'limit': ['0,1000'],
+ 'filter[date_add]': ['>[2016-12-01 00:00:00]'],
+ }
+ request = cassette.requests[1]
+ self.assertEqual('GET', request.method)
+ self.assertEqual('/api/customer_messages',
+ self.parse_path(request.uri))
+ self.assertDictEqual(expected_query, self.parse_qs(request.uri))
+
+ self.assertEqual(5, import_record_mock.delay.call_count)
+
+ @assert_no_job_delayed
+ def test_import_sale_record(self):
+ """ Import a sale order """
+ # setup for sale order with id 5, create the dependencies
+ mode_journal = self.env['account.journal'].search([], limit=1)
+ payment_method_xmlid = 'account.account_payment_method_manual_in'
+ payment_method = self.env.ref(payment_method_xmlid)
+ payment_mode = self.env['account.payment.mode'].create({
+ 'name': 'Bank wire',
+ 'company_id': self.backend_record.company_id.id,
+ 'bank_account_link': 'fixed',
+ 'fixed_journal_id': mode_journal.id,
+ 'payment_type': 'inbound',
+ 'payment_method_id': payment_method.id,
+ })
+
+ ship_product = self.env.ref(
+ 'connector_ecommerce.product_product_shipping'
+ )
+
+ carrier = self.env['delivery.carrier'].create({
+ 'name': 'My carrier',
+ 'product_id': ship_product.id,
+ 'partner_id': self.env.ref('base.main_company').partner_id.id,
+ })
+ self.create_binding_no_export(
+ 'prestashop.delivery.carrier', carrier.id, prestashop_id=2,
+ )
+
+ variant_tshirt_orange_s_binding = self._create_product_binding(
+ name='Faded Short Sleeve T-shirts',
+ template_ps_id=1,
+ variant_ps_id=1,
+ )
+ variant_tshirt_orange_s = variant_tshirt_orange_s_binding.odoo_id
+ variant_blouse_black_s_binding = self._create_product_binding(
+ name='Blouse',
+ template_ps_id=2,
+ variant_ps_id=7,
+ )
+ variant_blouse_black_s = variant_blouse_black_s_binding.odoo_id
+ variant_dress_orange_s_binding = self._create_product_binding(
+ name='Printed Dress',
+ template_ps_id=3,
+ variant_ps_id=13,
+ )
+ variant_dress_orange_s = variant_dress_orange_s_binding.odoo_id
+
+ partner = self.env['res.partner'].create({
+ 'name': 'John DOE',
+ })
+ partner_binding = self.create_binding_no_export(
+ 'prestashop.res.partner', partner.id, prestashop_id=1,
+ shop_group_id=self.shop.id,
+ )
+ address = self.env['res.partner'].create({
+ 'name': 'John DOE',
+ 'parent_id': partner.id,
+ })
+ self.create_binding_no_export(
+ 'prestashop.address', address.id, prestashop_id=4,
+ prestashop_partner_id=partner_binding.id
+ )
+
+ # import of the sale order
+ with recorder.use_cassette('test_import_sale_record_5'):
+ result = import_record(
+ self.conn_session, 'prestashop.sale.order',
+ self.backend_record.id, 5)
+
+ error_msg = ('Import of the order 5 canceled '
+ 'because it has not been paid since 30 days')
+ self.assertEqual(result, error_msg)
+
+ with recorder.use_cassette('test_import_sale_record_5'):
+ with freeze_time("2016-12-08"):
+ import_record(
+ self.conn_session, 'prestashop.sale.order',
+ self.backend_record.id, 5)
+
+ domain = [('prestashop_id', '=', 5),
+ ('backend_id', '=', self.backend_record.id)]
+ binding = self.env['prestashop.sale.order'].search(domain)
+ binding.ensure_one()
+
+ expected = [
+ ExpectedSale(
+ name='KHWLILZLL',
+ partner_id=partner,
+ partner_invoice_id=address,
+ partner_shipping_id=address,
+ total_amount=71.51,
+ carrier_id=carrier,
+ payment_mode_id=payment_mode,
+ pricelist_id=self.backend_record.pricelist_id,
+ )]
+
+ self.assert_records(expected, binding)
+
+ expected = [
+ ExpectedSaleLine(
+ name='Faded Short Sleeve T-shirts - Color : Orange, Size : S',
+ product_id=variant_tshirt_orange_s,
+ price_unit=16.51,
+ product_uom_qty=1.0,
+ ),
+ ExpectedSaleLine(
+ name='Blouse - Color : Black, Size : S',
+ product_id=variant_blouse_black_s,
+ price_unit=27.0,
+ product_uom_qty=1.0,
+ ),
+ ExpectedSaleLine(
+ name='Printed Dress - Color : Orange, Size : S',
+ product_id=variant_dress_orange_s,
+ price_unit=26.0,
+ product_uom_qty=1.0,
+ ),
+ ExpectedSaleLine(
+ name='My carrier',
+ product_id=ship_product,
+ price_unit=2.0,
+ product_uom_qty=1.0,
+ ),
+ ]
+
+ self.assert_records(expected, binding.order_line)
diff --git a/connector_prestashop/unit/__init__.py b/connector_prestashop/unit/__init__.py
new file mode 100644
index 000000000..45aa2f239
--- /dev/null
+++ b/connector_prestashop/unit/__init__.py
@@ -0,0 +1,13 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+# ConnectorUnit needs to be registered
+from . import auto_matching_importer
+from . import mapper
+from . import binder
+from . import importer
+from . import exporter
+from . import deleter
+from . import backend_adapter
+from . import exception
+from . import version_key
diff --git a/connector_prestashop/unit/auto_matching_importer.py b/connector_prestashop/unit/auto_matching_importer.py
new file mode 100644
index 000000000..bb980e86b
--- /dev/null
+++ b/connector_prestashop/unit/auto_matching_importer.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+
+from odoo.addons.connector.connector import ConnectorUnit
+from odoo.addons.connector.unit.backend_adapter import BackendAdapter
+
+from odoo import _, exceptions
+
+_logger = logging.getLogger(__name__)
+
+
+class AutoMatchingImporter(ConnectorUnit):
+ _model_name = None
+ _erp_field = None
+ _ps_field = None
+ _copy_fields = []
+
+ def _compare_function(ps_val, erp_val, ps_dict, erp_dict):
+ raise NotImplementedError
+
+ def run(self):
+ _logger.debug(
+ "[%s] Starting synchro between Odoo and PrestaShop"
+ % self.model._name
+ )
+ nr_ps_already_mapped = 0
+ nr_ps_mapped = 0
+ nr_ps_not_mapped = 0
+ erp_model_name = self.model._inherits.iterkeys().next()
+ erp_rec_name = self.env[erp_model_name]._rec_name
+ model = self.env[erp_model_name].with_context(active_test=False)
+ erp_ids = model.search([])
+ erp_list_dict = erp_ids.read()
+ adapter = self.unit_for(BackendAdapter)
+ # Get the IDS from PS
+ ps_ids = adapter.search()
+ if not ps_ids:
+ raise exceptions.Warning(
+ _('Error :'),
+ _('Failed to query %s via PS webservice')
+ % adapter.prestashop_model
+ )
+
+ binder = self.binder_for()
+ # Loop on all PS IDs
+ for ps_id in ps_ids:
+ # Check if the PS ID is already mapped to an OE ID
+ record = binder.to_internal(ps_id)
+ if record:
+ # Do nothing for the PS IDs that are already mapped
+ _logger.debug(
+ "[%s] PrestaShop ID %s is already mapped to Odoo ID %s"
+ % (self.model._name, ps_id, record.id)
+ )
+ nr_ps_already_mapped += 1
+ else:
+ # PS IDs not mapped => I try to match between the PS ID and
+ # the OE ID. First, I read field in PS
+ ps_dict = adapter.read(ps_id)
+ mapping_found = False
+ # Loop on OE IDs
+ for erp_dict in erp_list_dict:
+ # Search for a match
+ erp_val = erp_dict[self._erp_field]
+ ps_val = ps_dict[self._ps_field]
+ if self._compare_function(
+ ps_val, erp_val, ps_dict, erp_dict):
+ # it matches, so I write the external ID
+ data = {
+ 'odoo_id': erp_dict['id'],
+ 'backend_id': self.backend_record.id,
+ }
+ for oe_field, ps_field in self._copy_fields:
+ data[oe_field] = erp_dict[ps_field]
+ record = self.model.create(data)
+ binder.bind(ps_id, record)
+ _logger.debug(
+ "[%s] Mapping PrestaShop '%s' (%s) "
+ "to Odoo '%s' (%s) " %
+ (self.model._name,
+ ps_dict['name'], # not hardcode if needed
+ ps_dict[self._ps_field],
+ erp_dict[erp_rec_name],
+ erp_dict[self._erp_field]))
+ nr_ps_mapped += 1
+ mapping_found = True
+ break
+ if not mapping_found:
+ # if it doesn't match, I just print a warning
+ _logger.warning(
+ "[%s] PrestaShop '%s' (%s) was not mapped "
+ "to any Odoo entry" %
+ (self.model._name,
+ ps_dict['name'],
+ ps_dict[self._ps_field]))
+
+ nr_ps_not_mapped += 1
+
+ _logger.info(
+ "[%s] Synchro between Odoo and PrestaShop successfull"
+ % self.model._name
+ )
+ _logger.info(
+ "[%s] Number of PrestaShop entries already mapped = %s"
+ % (self.model._name, nr_ps_already_mapped)
+ )
+ _logger.info(
+ "[%s] Number of PrestaShop entries mapped = %s"
+ % (self.model._name, nr_ps_mapped)
+ )
+ _logger.info(
+ "[%s] Number of PrestaShop entries not mapped = %s"
+ % (self.model._name, nr_ps_not_mapped)
+ )
+
+ return True
diff --git a/connector_prestashop/unit/backend_adapter.py b/connector_prestashop/unit/backend_adapter.py
new file mode 100644
index 000000000..de39d4484
--- /dev/null
+++ b/connector_prestashop/unit/backend_adapter.py
@@ -0,0 +1,222 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import exceptions, _
+from odoo.addons.connector.exception import NetworkRetryableError
+from odoo.addons.connector.unit.backend_adapter import CRUDAdapter
+
+from contextlib import contextmanager
+from requests.exceptions import HTTPError, RequestException, ConnectionError
+import base64
+import logging
+_logger = logging.getLogger(__name__)
+try:
+ from prestapyt import PrestaShopWebServiceDict, PrestaShopWebServiceError
+except:
+ _logger.debug('Cannot import from `prestapyt`')
+
+
+@contextmanager
+def api_handle_errors(message=''):
+ """ Handle error when calling the API
+
+ It is meant to be used when a model does a direct
+ call to a job using the API (not using job.delay()).
+ Avoid to have unhandled errors raising on front of the user,
+ instead, they are presented as :class:`openerp.exceptions.UserError`.
+ """
+ if message:
+ message = message + u'\n\n'
+ try:
+ yield
+ except NetworkRetryableError as err:
+ raise exceptions.UserError(
+ _(u'{}Network Error:\n\n{}').format(message, err)
+ )
+ except (HTTPError, RequestException, ConnectionError) as err:
+ raise exceptions.UserError(
+ _(u'{}API / Network Error:\n\n{}').format(message, err)
+ )
+ except PrestaShopWebServiceError as err:
+ raise exceptions.UserError(
+ _(u'{}Authentication Error:\n\n{}').format(message, err)
+ )
+ except PrestaShopWebServiceError as err:
+ raise exceptions.UserError(
+ _(u'{}Error during synchronization with '
+ 'PrestaShop:\n\n{}').format(message, unicode(err))
+ )
+
+
+class PrestaShopWebServiceImage(PrestaShopWebServiceDict):
+
+ def get_image(self, resource, resource_id=None, image_id=None,
+ options=None):
+ full_url = self._api_url + 'images/' + resource
+ if resource_id is not None:
+ full_url += "/%s" % (resource_id,)
+ if image_id is not None:
+ full_url += "/%s" % (image_id)
+ if options is not None:
+ self._validate_query_options(options)
+ full_url += "?%s" % (self._options_to_querystring(options),)
+ response = self._execute(full_url, 'GET')
+ if response.content:
+ image_content = base64.b64encode(response.content)
+ else:
+ image_content = ''
+
+ record = {
+ 'type': response.headers['content-type'],
+ 'content': image_content,
+ 'id_' + resource[:-1]: resource_id,
+ 'id_image': image_id,
+ }
+ record['full_public_url'] = self.get_image_public_url(record)
+ return record
+
+ def get_image_public_url(self, record):
+ url = self._api_url.replace('/api', '')
+ url += '/img/p/' + '/'.join(list(record['id_image']))
+ extension = ''
+ if record['type'] == 'image/jpeg':
+ extension = '.jpg'
+ url += '/' + record['id_image'] + extension
+ return url
+
+
+class PrestaShopLocation(object):
+
+ def __init__(self, location, webservice_key):
+ self.location = location
+ self.webservice_key = webservice_key
+ if not location.endswith('/api'):
+ location = location + '/api'
+ if not location.startswith('http'):
+ location = 'http://' + location
+ self.api_url = location
+
+
+class PrestaShopCRUDAdapter(CRUDAdapter):
+ """ External Records Adapter for PrestaShop """
+
+ def __init__(self, environment):
+ """
+
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestaShopCRUDAdapter, self).__init__(environment)
+ self.prestashop = PrestaShopLocation(
+ self.backend_record.location.encode(),
+ self.backend_record.webservice_key
+ )
+ self.client = PrestaShopWebServiceDict(
+ self.prestashop.api_url,
+ self.prestashop.webservice_key,
+ )
+
+ def search(self, filters=None):
+ """ Search records according to some criterias
+ and returns a list of ids """
+ raise NotImplementedError
+
+ def read(self, id, attributes=None):
+ """ Returns the information of a record """
+ raise NotImplementedError
+
+ def search_read(self, filters=None):
+ """ Search records according to some criterias
+ and returns their information"""
+ raise NotImplementedError
+
+ def create(self, data):
+ """ Create a record on the external system """
+ raise NotImplementedError
+
+ def write(self, id, data):
+ """ Update records on the external system """
+ raise NotImplementedError
+
+ def delete(self, id):
+ """ Delete a record on the external system """
+ raise NotImplementedError
+
+ def head(self):
+ """ HEAD """
+ raise NotImplementedError
+
+
+class GenericAdapter(PrestaShopCRUDAdapter):
+
+ _model_name = None
+ _prestashop_model = None
+ # PS WS key for exporting
+ _export_node_name = ''
+ # PS WS key response
+ # When you create a record in PS
+ # you get back a result that is wrapped like this:
+ # {'prestashop': _export_node_name_res: {...}}
+ # For instance: for `manufacturers`
+ # _export_node_name="manufacturers"
+ # _export_node_name_res = "manufacturer"
+ _export_node_name_res = ''
+
+ def search(self, filters=None):
+ """ Search records according to some criterias
+ and returns a list of ids
+
+ :rtype: list
+ """
+ _logger.debug(
+ 'method search, model %s, filters %s',
+ self._prestashop_model, unicode(filters))
+ return self.client.search(self._prestashop_model, filters)
+
+ def read(self, id, attributes=None):
+ """ Returns the information of a record
+
+ :rtype: dict
+ """
+ _logger.debug(
+ 'method read, model %s id %s, attributes %s',
+ self._prestashop_model, str(id), unicode(attributes))
+ res = self.client.get(self._prestashop_model, id, options=attributes)
+ first_key = res.keys()[0]
+ return res[first_key]
+
+ def create(self, attributes=None):
+ """ Create a record on the external system """
+ _logger.debug(
+ 'method create, model %s, attributes %s',
+ self._prestashop_model, unicode(attributes))
+ res = self.client.add(self._prestashop_model, {
+ self._export_node_name: attributes
+ })
+ if self._export_node_name_res:
+ return res['prestashop'][self._export_node_name_res]['id']
+ return res
+
+ def write(self, id, attributes=None):
+ """ Update records on the external system """
+ attributes['id'] = id
+ _logger.debug(
+ 'method write, model %s, attributes %s',
+ self._prestashop_model,
+ unicode(attributes)
+ )
+ res = self.client.edit(
+ self._prestashop_model, {self._export_node_name: attributes})
+ if self._export_node_name_res:
+ return res['prestashop'][self._export_node_name_res]['id']
+ return res
+
+ def delete(self, resource, ids):
+ _logger.debug('method delete, model %s, ids %s',
+ resource, unicode(ids))
+ # Delete a record(s) on the external system
+ return self.client.delete(resource, ids)
+
+ def head(self, id=None):
+ """ HEAD """
+ return self.client.head(self._prestashop_model, resource_id=id)
diff --git a/connector_prestashop/unit/binder.py b/connector_prestashop/unit/binder.py
new file mode 100644
index 000000000..22638c7b2
--- /dev/null
+++ b/connector_prestashop/unit/binder.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.connector.connector import Binder
+from ..backend import prestashop
+
+
+@prestashop
+class PrestashopBinder(Binder):
+ """ Generic Binder for Prestshop """
+
+ _external_field = 'prestashop_id'
+
+ _model_name = [
+ 'prestashop.shop.group',
+ 'prestashop.shop',
+ 'prestashop.res.partner',
+ 'prestashop.address',
+ 'prestashop.res.partner.category',
+ 'prestashop.res.lang',
+ 'prestashop.res.country',
+ 'prestashop.res.currency',
+ 'prestashop.account.tax',
+ 'prestashop.account.tax.group',
+ 'prestashop.product.category',
+ 'prestashop.product.image',
+ 'prestashop.product.template',
+ 'prestashop.product.combination',
+ 'prestashop.product.combination.option',
+ 'prestashop.product.combination.option.value',
+ 'prestashop.sale.order',
+ 'prestashop.sale.order.state',
+ 'prestashop.delivery.carrier',
+ 'prestashop.refund',
+ 'prestashop.supplier',
+ 'prestashop.product.supplierinfo',
+ 'prestashop.mail.message',
+ 'prestashop.groups.pricelist',
+ ]
+
+ def to_odoo(self, external_id, unwrap=False):
+ # Make alias to to_openerp, remove in v10
+ return self.to_openerp(external_id, unwrap)
diff --git a/connector_prestashop/unit/deleter.py b/connector_prestashop/unit/deleter.py
new file mode 100644
index 000000000..9fde3f0e9
--- /dev/null
+++ b/connector_prestashop/unit/deleter.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.tools.translate import _
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.synchronizer import Deleter
+
+
+class PrestashopDeleter(Deleter):
+ """ Base deleter for PrestaShop """
+
+ def run(self, resource, external_id):
+ """ Run the synchronization, delete the record on PrestaShop
+
+ :param external_id: identifier of the record to delete
+ """
+ self.backend_adapter.delete(resource, external_id)
+ return _('Record %s deleted on PrestaShop on resource %s') % (
+ external_id, resource)
+
+
+@job(default_channel='root.prestashop')
+def export_delete_record(
+ session, model_name, backend_id, external_id, resource):
+ """ Delete a record on PrestaShop """
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ env = backend.get_environment(model_name, session=session)
+ deleter = env.get_connector_unit(PrestashopDeleter)
+ return deleter.run(resource, external_id)
diff --git a/connector_prestashop/unit/exception.py b/connector_prestashop/unit/exception.py
new file mode 100644
index 000000000..b099dc3b9
--- /dev/null
+++ b/connector_prestashop/unit/exception.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.connector.exception import RetryableJobError
+
+
+class OrderImportRuleRetry(RetryableJobError):
+ """ The sale order import will be retried later. """
diff --git a/connector_prestashop/unit/export_synchronizer.py b/connector_prestashop/unit/export_synchronizer.py
new file mode 100644
index 000000000..03bd66e48
--- /dev/null
+++ b/connector_prestashop/unit/export_synchronizer.py
@@ -0,0 +1,198 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+from openerp import _, exceptions
+from openerp.addons.connector.queue.job import job
+from openerp.addons.connector.queue.job import related_action
+from openerp.addons.connector.unit.synchronizer import Exporter
+from .mapper import TranslationPrestashopExportMapper
+from ..connector import get_environment
+
+
+_logger = logging.getLogger(__name__)
+
+
+# Exporters for PrestaShop.
+# In addition to its export job, an exporter has to:
+# * check in PrestaShop if the record has been updated more recently than the
+# last sync date and if yes, delay an import
+# * call the ``bind`` method of the binder to update the last sync date
+
+
+class PrestashopBaseExporter(Exporter):
+ """ Base exporter for PrestaShop """
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestashopBaseExporter, self).__init__(environment)
+ self.binding_id = None
+ self.prestashop_id = None
+
+ def _get_openerp_data(self):
+ """ Return the raw OpenERP data for ``self.binding_id`` """
+ return self.env[self.model._name].browse(self.binding_id)
+
+ def run(self, binding_id, *args, **kwargs):
+ """ Run the synchronization
+
+ :param binding_id: identifier of the binding record to export
+ """
+ self.binding_id = binding_id
+ self.erp_record = self._get_openerp_data()
+
+ self.prestashop_id = self.binder.to_backend(self.binding_id)
+ result = self._run(*args, **kwargs)
+
+ self.binder.bind(self.prestashop_id, self.binding_id)
+ return result
+
+ def _run(self):
+ """ Flow of the synchronization, implemented in inherited classes"""
+ raise NotImplementedError
+
+
+class PrestashopExporter(PrestashopBaseExporter):
+ """ A common flow for the exports to PrestaShop """
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestashopExporter, self).__init__(environment)
+ self.erp_record = None
+
+ def _has_to_skip(self):
+ """ Return True if the export can be skipped """
+ return False
+
+ def _export_dependencies(self):
+ """ Export the dependencies for the record"""
+ return
+
+ def _map_data(self, fields=None):
+ """ Convert the external record to Odoo """
+ self.mapper.map_record(self.erp_record)
+
+ def _validate_data(self, data):
+ """ Check if the values to import are correct
+
+ Pro-actively check before the ``Model.create`` or
+ ``Model.update`` if some fields are missing
+
+ Raise `InvalidDataError`
+ """
+ return
+
+ def _after_export(self):
+ """Create records of dependants prestashop objects"""
+ return
+
+ def _create(self, data):
+ """ Create the PrestaShop record """
+ return self.backend_adapter.create(data)
+
+ def _update(self, data):
+ """ Update an PrestaShop record """
+ assert self.prestashop_id
+ return self.backend_adapter.write(self.prestashop_id, data)
+
+ def _run(self, fields=None):
+ """ Flow of the synchronization, implemented in inherited classes"""
+ assert self.binding_id
+ assert self.erp_record
+
+ # should be created with all the fields
+ if not self.prestashop_id:
+ fields = None
+
+ if self._has_to_skip():
+ return
+
+ # export the missing linked resources
+ self._export_dependencies()
+ map_record = self.mapper.map_record(self.erp_record)
+
+ if self.prestashop_id:
+ record = map_record.values()
+ if not record:
+ return _('Nothing to export.')
+ # special check on data before export
+ self._validate_data(record)
+ self._update(record)
+ else:
+ record = map_record.values(for_create=True)
+ if fields is None:
+ fields = {}
+ record.update(fields)
+ if not record:
+ return _('Nothing to export.')
+ # special check on data before export
+ self._validate_data(record)
+ self.prestashop_id = self._create(record)
+ if self.prestashop_id == 0:
+ raise exceptions.Warning(
+ _("Record on PrestaShop have not been created"))
+ self._after_export()
+ message = _('Record exported with ID %s on PrestaShop.')
+ return message % self.prestashop_id
+
+
+class TranslationPrestashopExporter(PrestashopExporter):
+
+ @property
+ def mapper(self):
+ if self._mapper is None:
+ self._mapper = self.connector_env.get_connector_unit(
+ TranslationPrestashopExportMapper)
+ return self._mapper
+
+ def _map_data(self, fields=None):
+ """ Convert the external record to OpenERP """
+ self.mapper.convert(self.get_record_by_lang(), fields=fields)
+
+ def get_record_by_lang(self, record_id):
+ # get the backend's languages
+ languages = self.backend_record.language_ids
+ records = {}
+ # for each languages:
+ for language in languages:
+ # get the translated record
+ record = self.model.with_context(
+ lang=language['code']).browse(record_id)
+ # put it in the dict
+ records[language['prestashop_id']] = record
+ return records
+
+
+def related_action_record(session, job):
+ binding_model = job.args[0]
+ binding_id = job.args[1]
+ record = session.env[binding_model].browse(binding_id)
+ odoo_name = record.odoo_id._name
+
+ action = {
+ 'name': _(odoo_name),
+ 'type': 'ir.actions.act_window',
+ 'res_model': odoo_name,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_id': record.odoo_id.id,
+ }
+ return action
+
+
+@job(default_channel='root.prestashop')
+@related_action(action=related_action_record)
+def export_record(session, model_name, binding_id, fields=None):
+ """ Export a record on PrestaShop """
+ # TODO: FIX PRESTASHOP do not support partial edit
+ fields = None
+ record = session.env[model_name].browse(binding_id)
+ env = get_environment(session, model_name, record.backend_id.id)
+ exporter = env.get_connector_unit(PrestashopExporter)
+ return exporter.run(binding_id, fields=fields)
diff --git a/connector_prestashop/unit/exporter.py b/connector_prestashop/unit/exporter.py
new file mode 100644
index 000000000..52f4942cf
--- /dev/null
+++ b/connector_prestashop/unit/exporter.py
@@ -0,0 +1,350 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+from contextlib import contextmanager
+
+import psycopg2
+
+
+from odoo import _, exceptions
+from odoo.addons.queue_job.job import job
+from odoo.addons.queue_job.job import related_action
+from odoo.addons.connector.unit.synchronizer import Exporter
+from odoo.addons.connector.exception import RetryableJobError
+from .mapper import TranslationPrestashopExportMapper
+
+
+_logger = logging.getLogger(__name__)
+
+
+# Exporters for PrestaShop.
+# In addition to its export job, an exporter has to:
+# * check in PrestaShop if the record has been updated more recently than the
+# last sync date and if yes, delay an import
+# * call the ``bind`` method of the binder to update the last sync date
+
+
+class PrestashopBaseExporter(Exporter):
+ """ Base exporter for PrestaShop """
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestashopBaseExporter, self).__init__(environment)
+ self.prestashop_id = None
+ self.binding_id = None
+
+ def _get_binding(self):
+ """ Return the raw Odoo data for ``self.binding_id`` """
+ return self.model.browse(self.binding_id)
+
+ def run(self, binding_id, *args, **kwargs):
+ """ Run the synchronization
+
+ :param binding_id: identifier of the binding record to export
+ """
+ self.binding_id = binding_id
+ self.binding = self._get_binding()
+ self.prestashop_id = self.binder.to_external(self.binding)
+ result = self._run(*args, **kwargs)
+
+ self.binder.bind(self.prestashop_id, self.binding)
+ # commit so we keep the external ID if several cascading exports
+ # are called and one of them fails
+ self.session.commit()
+ self._after_export()
+ return result
+
+ def _run(self, *args, **kwargs):
+ """ Flow of the synchronization, implemented in inherited classes"""
+ raise NotImplementedError
+
+ def _after_export(self):
+ """Create records of dependants prestashop objects"""
+ return
+
+
+class PrestashopExporter(PrestashopBaseExporter):
+ """ A common flow for the exports to PrestaShop """
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestashopExporter, self).__init__(environment)
+ self.binding = None
+
+ def _has_to_skip(self):
+ """ Return True if the export can be skipped """
+ return False
+
+ @contextmanager
+ def _retry_unique_violation(self):
+ """ Context manager: catch Unique constraint error and retry the
+ job later.
+
+ When we execute several jobs workers concurrently, it happens
+ that 2 jobs are creating the same record at the same time (binding
+ record created by :meth:`_export_dependency`), resulting in:
+
+ IntegrityError: duplicate key value violates unique
+ constraint "prestashop_product_template_openerp_uniq"
+ DETAIL: Key (backend_id, openerp_id)=(1, 4851) already exists.
+
+ In that case, we'll retry the import just later.
+
+ """
+ try:
+ yield
+ except psycopg2.IntegrityError as err:
+ if err.pgcode == psycopg2.errorcodes.UNIQUE_VIOLATION:
+ raise RetryableJobError(
+ 'A database error caused the failure of the job:\n'
+ '%s\n\n'
+ 'Likely due to 2 concurrent jobs wanting to create '
+ 'the same record. The job will be retried later.' % err)
+ else:
+ raise
+
+ def _get_or_create_binding(
+ self, relation, binding_model,
+ binding_field_name='prestashop_bind_ids',
+ bind_values=None):
+ binding = None
+ # wrap is typically True if the relation is a 'product.product'
+ # record but the binding model is 'prestashop.product.product'
+ wrap = relation._model._name != binding_model
+ if wrap and hasattr(relation, binding_field_name):
+ domain = [(self._openerp_field, '=', relation.id),
+ ('backend_id', '=', self.backend_record.id)]
+ model = self.env[binding_model].with_context(active_test=False)
+ binding = model.search(domain)
+ if binding:
+ binding.ensure_one()
+ else:
+ # we are working with a unwrapped record (e.g.
+ # product.template) and the binding does not exist yet.
+ # Example: I created a product.product and its binding
+ # prestashop.product.product, it is exported, but we need to
+ # create the binding for the template.
+
+ _bind_values = {'backend_id': self.backend_record.id,
+ self._openerp_field: relation.id}
+ _bind_values.update(bind_values or {})
+ # If 2 jobs create it at the same time, retry
+ # one later. A unique constraint (backend_id,
+ # odoo_id) should exist on the binding model
+ with self._retry_unique_violation():
+ model_c = self.env[binding_model].sudo().with_context(
+ connector_no_export=True
+ )
+ binding = model_c.create(_bind_values)
+ # Eager commit to avoid having 2 jobs
+ # exporting at the same time.
+ self.session.commit()
+ else:
+ # If prestashop_bind_ids does not exist we are typically in a
+ # "direct" binding (the binding record is the same record).
+ # If wrap is True, relation is already a binding record.
+ binding = relation
+ return binding
+
+ def _export_dependency(self, relation, binding_model,
+ exporter_class=None,
+ binding_field_name='prestashop_bind_ids',
+ bind_values=None, force_sync=False):
+ """
+ Export a dependency. The exporter class is a subclass of
+ ``PrestashopExporter``. A more precise class can be defined.
+
+ When a binding does not exist yet, it is automatically created.
+
+ .. warning:: a commit is done at the end of the export of each
+ dependency. The reason for that is that we pushed a record
+ on the backend and we absolutely have to keep its ID.
+
+ So you *must* take care to not modify the Odoo database
+ except when writing back the external ID or eventual
+ external data to keep on this side.
+
+ You should call this method only in the beginning of the
+ exporter synchronization (in `~._export_dependencies`)
+ and do not write data which should be rollbacked in case
+ of error.
+
+ :param relation: record to export if not already exported
+ :type relation: :py:class:`openerp.models.BaseModel`
+ :param binding_model: name of the binding model for the relation
+ :type binding_model: str | unicode
+ :param exporter_cls: :py:class:`openerp.addons.connector.\
+ connector.ConnectorUnit`
+ class or parent class to use for the export.
+ By default: PrestashopExporter
+ :type exporter_cls: :py:class:`openerp.addons.connector.\
+ connector.MetaConnectorUnit`
+ :param binding_field_name: name of the one2many towards the bindings
+ default is 'prestashop_bind_ids'
+ :type binding_field_name: str | unicode
+ :param bind_values: override values used to create a new binding
+ :type bind_values: dict
+ :param force_sync: force update of already sync'ed item
+ :type force_sync: bool
+ """
+ if not relation:
+ return
+
+ binding = self._get_or_create_binding(
+ relation, binding_model,
+ binding_field_name=binding_field_name,
+ bind_values=bind_values)
+
+ rel_binder = self.binder_for(binding_model)
+
+ if not rel_binder.to_external(binding) or force_sync:
+ exporter = self.unit_for(
+ exporter_class or PrestashopExporter, binding_model)
+ exporter.run(binding.id)
+ return binding
+
+ def _export_dependencies(self):
+ """ Export the dependencies for the record"""
+ return
+
+ def _map_data(self):
+ """ Convert the external record to Odoo """
+ return self.mapper.map_record(self.binding)
+
+ def _validate_data(self, data):
+ """ Check if the values to import are correct
+
+ Pro-actively check before the ``Model.create`` or
+ ``Model.update`` if some fields are missing
+
+ Raise `InvalidDataError`
+ """
+ return
+
+ def _create(self, data):
+ """ Create the PrestaShop record """
+ return self.backend_adapter.create(data)
+
+ def _update(self, data):
+ """ Update an PrestaShop record """
+ assert self.prestashop_id
+ return self.backend_adapter.write(self.prestashop_id, data)
+
+ def _lock(self):
+ """ Lock the binding record.
+
+ Lock the binding record so we are sure that only one export
+ job is running for this record if concurrent jobs have to export the
+ same record.
+
+ When concurrent jobs try to export the same record, the first one
+ will lock and proceed, the others will fail to lock and will be
+ retried later.
+
+ This behavior works also when the export becomes multilevel
+ with :meth:`_export_dependencies`. Each level will set its own lock
+ on the binding record it has to export.
+
+ Uses "NO KEY UPDATE", to avoid FK accesses
+ being blocked in PSQL > 9.3.
+ """
+ sql = ("SELECT id FROM %s WHERE ID = %%s FOR NO KEY UPDATE NOWAIT" %
+ self.model._table)
+ try:
+ self.env.cr.execute(sql, (self.binding_id,),
+ log_exceptions=False)
+ except psycopg2.OperationalError:
+ _logger.info('A concurrent job is already exporting the same '
+ 'record (%s with id %s). Job delayed later.',
+ self.model._name, self.binding_id)
+ raise RetryableJobError(
+ 'A concurrent job is already exporting the same record '
+ '(%s with id %s). The job will be retried later.' %
+ (self.model._name, self.binding_id))
+
+ def _run(self, fields=None, **kwargs):
+ """ Flow of the synchronization, implemented in inherited classes"""
+ assert self.binding_id
+ assert self.binding
+
+ if not self.binding.exists():
+ return _('Record to export does no longer exist.')
+
+ if self._has_to_skip():
+ return
+
+ # export the missing linked resources
+ self._export_dependencies()
+
+ # prevent other jobs to export the same record
+ # will be released on commit (or rollback)
+ self._lock()
+
+ map_record = self._map_data()
+
+ if self.prestashop_id:
+ record = map_record.values()
+ if not record:
+ return _('Nothing to export.')
+ # special check on data before export
+ self._validate_data(record)
+ self._update(record)
+ else:
+ record = map_record.values(for_create=True)
+ if not record:
+ return _('Nothing to export.')
+ # special check on data before export
+ self._validate_data(record)
+ self.prestashop_id = self._create(record)
+ if self.prestashop_id == 0:
+ raise exceptions.Warning(
+ _("Record on PrestaShop have not been created"))
+
+ message = _('Record exported with ID %s on PrestaShop.')
+ return message % self.prestashop_id
+
+
+class TranslationPrestashopExporter(PrestashopExporter):
+
+ @property
+ def mapper(self):
+ if self._mapper is None:
+ self._mapper = self.connector_env.get_connector_unit(
+ TranslationPrestashopExportMapper)
+ return self._mapper
+
+
+def related_action_record(session, job):
+ binding_model = job.args[0]
+ binding_id = job.args[1]
+ record = session.env[binding_model].browse(binding_id)
+ odoo_name = record.odoo_id._name
+
+ action = {
+ 'name': _(odoo_name),
+ 'type': 'ir.actions.act_window',
+ 'res_model': odoo_name,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_id': record.odoo_id.id,
+ }
+ return action
+
+
+@job(default_channel='root.prestashop')
+@related_action(action=related_action_record)
+def export_record(session, model_name, binding_id, fields=None, **kwargs):
+ """ Export a record on PrestaShop """
+ # TODO: FIX PRESTASHOP do not support partial edit
+ fields = None
+ record = session.env[model_name].browse(binding_id)
+ env = record.backend_id.get_environment(model_name, session=session)
+ exporter = env.get_connector_unit(PrestashopExporter)
+ return exporter.run(binding_id, fields=fields, **kwargs)
diff --git a/connector_prestashop/unit/importer.py b/connector_prestashop/unit/importer.py
new file mode 100644
index 000000000..71eb7f489
--- /dev/null
+++ b/connector_prestashop/unit/importer.py
@@ -0,0 +1,504 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+from contextlib import closing, contextmanager
+
+import odoo
+from odoo import _
+
+from odoo.addons.queue_job.job import job
+from odoo.addons.connector.unit.synchronizer import Importer
+from odoo.addons.connector.connector import ConnectorUnit, Binder
+from odoo.addons.connector.connector import ConnectorEnvironment
+from odoo.addons.queue_job.exception import (
+ RetryableJobError,
+ FailedJobError,
+)
+
+
+_logger = logging.getLogger(__name__)
+
+RETRY_ON_ADVISORY_LOCK = 1 # seconds
+RETRY_WHEN_CONCURRENT_DETECTED = 1 # seconds
+
+
+class PrestashopBaseImporter(Importer):
+
+ def _import_dependency(self, prestashop_id, binding_model,
+ importer_class=None, always=False,
+ **kwargs):
+ """
+ Import a dependency. The importer class is a subclass of
+ ``PrestashopImporter``. A specific class can be defined.
+
+ :param prestashop_id: id of the prestashop id to import
+ :param binding_model: name of the binding model for the relation
+ :type binding_model: str | unicode
+ :param importer_cls: :py:class:`openerp.addons.connector.\
+ connector.ConnectorUnit`
+ class or parent class to use for the export.
+ By default: PrestashopImporter
+ :type importer_cls: :py:class:`openerp.addons.connector.\
+ connector.MetaConnectorUnit`
+ :param always: if True, the record is updated even if it already
+ exists,
+ it is still skipped if it has not been modified on
+ PrestaShop
+ :type always: boolean
+ :param kwargs: additional keyword arguments are passed to the importer
+ """
+ if not prestashop_id:
+ return
+ if importer_class is None:
+ importer_class = PrestashopImporter
+ binder = self.binder_for(binding_model)
+ if always or not binder.to_internal(prestashop_id):
+ importer = self.unit_for(importer_class, model=binding_model)
+ importer.run(prestashop_id, **kwargs)
+
+
+class PrestashopImporter(PrestashopBaseImporter):
+ """ Base importer for PrestaShop """
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(PrestashopImporter, self).__init__(environment)
+ self.prestashop_id = None
+ self.prestashop_record = None
+
+ def _get_prestashop_data(self):
+ """ Return the raw prestashop data for ``self.prestashop_id`` """
+ return self.backend_adapter.read(self.prestashop_id)
+
+ def _has_to_skip(self):
+ """ Return True if the import can be skipped """
+ return False
+
+ def _import_dependencies(self):
+ """ Import the dependencies for the record"""
+ return
+
+ def _map_data(self):
+ """ Returns an instance of
+ :py:class:`~openerp.addons.connector.unit.mapper.MapRecord`
+
+ """
+ return self.mapper.map_record(self.prestashop_record)
+
+ def _validate_data(self, data):
+ """ Check if the values to import are correct
+
+ Pro-actively check before the ``Model.create`` or
+ ``Model.update`` if some fields are missing
+
+ Raise `InvalidDataError`
+ """
+ return
+
+ def _get_binding(self):
+ """Return the openerp id from the prestashop id"""
+ return self.binder.to_internal(self.prestashop_id)
+
+ def _context(self, **kwargs):
+ return dict(self.session.context, connector_no_export=True, **kwargs)
+
+ def _create_context(self):
+ return {'connector_no_export': True}
+
+ def _create_data(self, map_record):
+ return map_record.values(for_create=True)
+
+ def _update_data(self, map_record):
+ return map_record.values()
+
+ def _create(self, data):
+ """ Create the OpenERP record """
+ # special check on data before import
+ self._validate_data(data)
+ binding = self.model.with_context(
+ **self._create_context()
+ ).create(data)
+ _logger.debug(
+ '%d created from prestashop %s', binding, self.prestashop_id)
+ return binding
+
+ def _update(self, binding, data):
+ """ Update an OpenERP record """
+ # special check on data before import
+ self._validate_data(data)
+ binding.with_context(connector_no_export=True).write(data)
+ _logger.debug(
+ '%d updated from prestashop %s', binding, self.prestashop_id)
+ return
+
+ def _before_import(self):
+ """ Hook called before the import, when we have the PrestaShop
+ data"""
+ return
+
+ def _after_import(self, binding):
+ """ Hook called at the end of the import """
+ return
+
+ @contextmanager
+ def do_in_new_connector_env(self, model_name=None):
+ """ Context manager that yields a new connector environment
+
+ Using a new Odoo Environment thus a new PG transaction.
+
+ This can be used to make a preemptive check in a new transaction,
+ for instance to see if another transaction already made the work.
+ """
+ with odoo.api.Environment.manage():
+ registry = odoo.modules.registry.RegistryManager.get(
+ self.env.cr.dbname
+ )
+ with closing(registry.cursor()) as cr:
+ try:
+ new_env = odoo.api.Environment(cr, self.env.uid,
+ self.env.context)
+ connector_env = self.connector_env.create_environment(
+ self.backend_record.with_env(new_env),
+ model_name or self.model._name,
+ connector_env=self.connector_env
+ )
+ yield connector_env
+ except:
+ cr.rollback()
+ raise
+ else:
+ # Despite what pylint says, this a perfectly valid
+ # commit (in a new cursor). Disable the warning.
+ cr.commit() # pylint: disable=invalid-commit
+
+ def _check_in_new_connector_env(self):
+ with self.do_in_new_connector_env() as new_connector_env:
+ # Even when we use an advisory lock, we may have
+ # concurrent issues.
+ # Explanation:
+ # We import Partner A and B, both of them import a
+ # partner category X.
+ #
+ # The squares represent the duration of the advisory
+ # lock, the transactions starts and ends on the
+ # beginnings and endings of the 'Import Partner'
+ # blocks.
+ # T1 and T2 are the transactions.
+ #
+ # ---Time--->
+ # > T1 /------------------------\
+ # > T1 | Import Partner A |
+ # > T1 \------------------------/
+ # > T1 /-----------------\
+ # > T1 | Imp. Category X |
+ # > T1 \-----------------/
+ # > T2 /------------------------\
+ # > T2 | Import Partner B |
+ # > T2 \------------------------/
+ # > T2 /-----------------\
+ # > T2 | Imp. Category X |
+ # > T2 \-----------------/
+ #
+ # As you can see, the locks for Category X do not
+ # overlap, and the transaction T2 starts before the
+ # commit of T1. So no lock prevents T2 to import the
+ # category X and T2 does not see that T1 already
+ # imported it.
+ #
+ # The workaround is to open a new DB transaction at the
+ # beginning of each import (e.g. at the beginning of
+ # "Imp. Category X") and to check if the record has been
+ # imported meanwhile. If it has been imported, we raise
+ # a Retryable error so T2 is rollbacked and retried
+ # later (and the new T3 will be aware of the category X
+ # from the its inception).
+ binder = new_connector_env.get_connector_unit(Binder)
+ if binder.to_internal(self.prestashop_id):
+ raise RetryableJobError(
+ 'Concurrent error. The job will be retried later',
+ seconds=RETRY_WHEN_CONCURRENT_DETECTED,
+ ignore_retry=True
+ )
+
+ def run(self, prestashop_id, **kwargs):
+ """ Run the synchronization
+
+ :param prestashop_id: identifier of the record on PrestaShop
+ """
+ self.prestashop_id = prestashop_id
+ lock_name = 'import({}, {}, {}, {})'.format(
+ self.backend_record._name,
+ self.backend_record.id,
+ self.model._name,
+ self.prestashop_id,
+ )
+ # Keep a lock on this import until the transaction is committed
+ self.advisory_lock_or_retry(lock_name,
+ retry_seconds=RETRY_ON_ADVISORY_LOCK)
+ if not self.prestashop_record:
+ self.prestashop_record = self._get_prestashop_data()
+
+ binding = self._get_binding()
+ if not binding:
+ self._check_in_new_connector_env()
+
+ skip = self._has_to_skip()
+ if skip:
+ return skip
+
+ # import the missing linked resources
+ self._import_dependencies()
+
+ self._import(binding, **kwargs)
+
+ def _import(self, binding, **kwargs):
+ """ Import the external record.
+
+ Can be inherited to modify for instance the session
+ (change current user, values in context, ...)
+
+ """
+
+ map_record = self._map_data()
+
+ if binding:
+ record = self._update_data(map_record)
+ else:
+ record = self._create_data(map_record)
+
+ # special check on data before import
+ self._validate_data(record)
+
+ if binding:
+ self._update(binding, record)
+ else:
+ binding = self._create(record)
+
+ self.binder.bind(self.prestashop_id, binding)
+
+ self._after_import(binding)
+
+
+class BatchImporter(Importer):
+ """ The role of a BatchImporter is to search for a list of
+ items to import, then it can either import them directly or delay
+ the import of each item separately.
+ """
+ page_size = 1000
+
+ def run(self, filters=None, **kwargs):
+ """ Run the synchronization """
+ if filters is None:
+ filters = {}
+ if 'limit' in filters:
+ self._run_page(filters, **kwargs)
+ return
+ page_number = 0
+ filters['limit'] = '%d,%d' % (
+ page_number * self.page_size, self.page_size)
+ record_ids = self._run_page(filters, **kwargs)
+ while len(record_ids) == self.page_size:
+ page_number += 1
+ filters['limit'] = '%d,%d' % (
+ page_number * self.page_size, self.page_size)
+ record_ids = self._run_page(filters, **kwargs)
+
+ def _run_page(self, filters, **kwargs):
+ record_ids = self.backend_adapter.search(filters)
+
+ for record_id in record_ids:
+ self._import_record(record_id, **kwargs)
+ return record_ids
+
+ def _import_record(self, record):
+ """ Import a record directly or delay the import of the record """
+ raise NotImplementedError
+
+
+# TODO 2016-10-25: is this used at all somewhere???
+class AddCheckpoint(ConnectorUnit):
+ """ Add a connector.checkpoint on the underlying model
+ (not the prestashop.* but the _inherits'ed model) """
+
+ _model_name = []
+
+ def run(self, binding_id):
+ record = self.model.browse(binding_id)
+ self.backend_record.add_checkpoint(
+ session=self.session,
+ model=record._model._name,
+ record_id=record.id,
+ )
+
+
+class DirectBatchImporter(BatchImporter):
+ """ Import the PrestaShop Shop Groups + Shops
+
+ They are imported directly because this is a rare and fast operation,
+ performed from the UI.
+ """
+ _model_name = None
+
+ def _import_record(self, record):
+ """ Import the record directly """
+ self.env[self.model._name].with_delay().import_record(
+ backend=self.backend_record,
+ prestashop_id=record)
+
+
+class DelayedBatchImporter(BatchImporter):
+ """ Delay import of the records """
+ _model_name = None
+
+ def _import_record(self, record, **kwargs):
+ """ Delay the import of the records"""
+ self.env[self.model._name].with_delay().import_record(
+ backend=self.backend_record,
+ prestashop_id=record,
+ **kwargs)
+
+
+class TranslatableRecordImporter(PrestashopImporter):
+ """ Import one translatable record """
+ _model_name = []
+
+ _translatable_fields = {}
+ # TODO set default language on the backend
+ _default_language = 'en_US'
+
+ def __init__(self, environment):
+ """
+ :param environment: current environment (backend, session, ...)
+ :type environment: :py:class:`connector.connector.ConnectorEnvironment`
+ """
+ super(TranslatableRecordImporter, self).__init__(environment)
+ self.main_lang_data = None
+ self.main_lang = None
+ self.other_langs_data = None
+
+ def _get_odoo_language(self, prestashop_id):
+ language_binder = self.binder_for('prestashop.res.lang')
+ erp_language = language_binder.to_internal(prestashop_id)
+ return erp_language
+
+ def find_each_language(self, record):
+ languages = {}
+ for field in self._translatable_fields[self.connector_env.model_name]:
+ # TODO FIXME in prestapyt
+ if not isinstance(record[field]['language'], list):
+ record[field]['language'] = [record[field]['language']]
+ for language in record[field]['language']:
+ if not language or language['attrs']['id'] in languages:
+ continue
+ erp_lang = self._get_odoo_language(language['attrs']['id'])
+ if erp_lang:
+ languages[language['attrs']['id']] = erp_lang.code
+ return languages
+
+ def _split_per_language(self, record, fields=None):
+ """Split record values by language.
+
+ @param record: a record from PS
+ @param fields: fields whitelist
+ @return a dictionary with the following structure:
+
+ 'en_US': {
+ 'field1': value_en,
+ 'field2': value_en,
+ },
+ 'it_IT': {
+ 'field1': value_it,
+ 'field2': value_it,
+ }
+ """
+ split_record = {}
+ languages = self.find_each_language(record)
+ if not languages:
+ raise FailedJobError(
+ _('No language mapping defined. '
+ 'Run "Synchronize base data".')
+ )
+ model_name = self.connector_env.model_name
+ for language_id, language_code in languages.iteritems():
+ split_record[language_code] = record.copy()
+ _fields = self._translatable_fields[model_name]
+ if fields:
+ _fields = [x for x in _fields if x in fields]
+ for field in _fields:
+ for language in record[field]['language']:
+ current_id = language['attrs']['id']
+ code = languages.get(current_id)
+ if not code:
+ # TODO: be nicer here.
+ # Currently if you have a language in PS
+ # that is not present in odoo
+ # the basic metadata sync is broken.
+ # We should present skip the language
+ # and maybe show a message to users.
+ raise FailedJobError(
+ _('No language could be found for the Prestashop lang '
+ 'with id "%s". Run "Synchronize base data" again.') %
+ (current_id,)
+ )
+ split_record[code][field] = language['value']
+ return split_record
+
+ def _create_context(self):
+ context = super(TranslatableRecordImporter, self)._create_context()
+ if self.main_lang:
+ context['lang'] = self.main_lang
+ return context
+
+ def _map_data(self):
+ """ Returns an instance of
+ :py:class:`~openerp.addons.connector.unit.mapper.MapRecord`
+
+ """
+ return self.mapper.map_record(self.main_lang_data)
+
+ def _import(self, binding, **kwargs):
+ """ Import the external record.
+
+ Can be inherited to modify for instance the session
+ (change current user, values in context, ...)
+
+ """
+ # split prestashop data for every lang
+ split_record = self._split_per_language(self.prestashop_record)
+ if self._default_language in split_record:
+ self.main_lang_data = split_record[self._default_language]
+ self.main_lang = self._default_language
+ del split_record[self._default_language]
+ else:
+ self.main_lang, self.main_lang_data = split_record.popitem()
+
+ self.other_langs_data = split_record
+
+ super(TranslatableRecordImporter, self)._import(binding)
+
+ def _after_import(self, binding):
+ """ Hook called at the end of the import """
+ for lang_code, lang_record in self.other_langs_data.iteritems():
+ map_record = self.mapper.map_record(lang_record)
+ binding.with_context(
+ lang=lang_code,
+ connector_no_export=True,
+ ).write(map_record.values())
+
+# TODO: Remove when all imports has been changed
+@job(default_channel='root.prestashop')
+def import_batch(env, filters=None, **kwargs):
+ """ Prepare a batch import of records from PrestaShop """
+ importer = env.get_connector_unit(BatchImporter)
+ return importer.run(filters=filters, **kwargs)
+
+
+@job(default_channel='root.prestashop')
+def import_record(env, model_name, backend_id, prestashop_id, **kwargs):
+ """ Import a record from PrestaShop """
+ importer = env.get_connector_unit(PrestashopImporter)
+ return importer.run(prestashop_id, **kwargs)
diff --git a/connector_prestashop/unit/mapper.py b/connector_prestashop/unit/mapper.py
new file mode 100644
index 000000000..ce256f532
--- /dev/null
+++ b/connector_prestashop/unit/mapper.py
@@ -0,0 +1,128 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.connector.unit.mapper import ExportMapper
+from odoo.addons.connector.unit.mapper import mapping
+
+
+class PrestashopExportMapper(ExportMapper):
+
+ def _map_direct(self, record, from_attr, to_attr):
+ res = super(PrestashopExportMapper, self)._map_direct(record,
+ from_attr,
+ to_attr) or ''
+ if isinstance(from_attr, basestring):
+ column = self.model._all_columns[from_attr].column
+ if column._type == 'boolean':
+ return res and 1 or 0
+ elif column._type == 'float':
+ res = str(res)
+ return res
+
+
+class TranslationPrestashopExportMapper(PrestashopExportMapper):
+
+ @mapping
+ def translatable_fields(self, record):
+ fields = getattr(self, '_translatable_fields', [])
+ if fields:
+ translated_fields = self._convert_languages(
+ self._get_record_by_lang(record), fields)
+ return translated_fields
+ return {}
+
+ def _get_record_by_lang(self, record):
+ # get the backend's languages
+ languages = self.backend_record.language_ids
+ records = {}
+ # for each languages:
+ for language in languages:
+ # get the translated record
+ record = record.with_context(
+ lang=language['code'])
+ # put it in the dict
+ records[language['prestashop_id']] = record
+ return records
+
+ def _convert_languages(self, records_by_language, translatable_fields):
+ res = {}
+ for from_attr, to_attr in translatable_fields:
+ value = {'language': []}
+ for language_id, record in records_by_language.iteritems():
+ value['language'].append({
+ 'attrs': {'id': str(language_id)},
+ 'value': record[from_attr] or ''
+ })
+ res[to_attr] = value
+ return res
+
+
+@prestashop
+class MailMessageMapper(ImportMapper):
+ _model_name = 'prestashop.mail.message'
+
+ direct = [
+ ('message', 'body'),
+ ]
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def type(self, record):
+ return {'type': 'comment'}
+
+ @mapping
+ def object_ref(self, record):
+ binder = self.binder_for('prestashop.sale.order')
+ order_id = binder.to_odoo(record['id_order'], unwrap=True)
+ return {
+ 'model': 'sale.order',
+ 'res_id': order_id,
+ }
+
+ @mapping
+ def author_id(self, record):
+ if record['id_customer'] != '0':
+ binder = self.binder_for('prestashop.res.partner')
+ partner_id = binder.to_odoo(record['id_customer'], unwrap=True)
+ return {'author_id': partner_id}
+ return {}
+
+
+@prestashop
+class ProductPricelistMapper(ImportMapper):
+ _model_name = 'prestashop.groups.pricelist'
+
+ direct = [
+ ('name', 'name'),
+ ]
+
+ @mapping
+ def static(self, record):
+ return {'active': True, 'type': 'sale'}
+
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+ @mapping
+ def company_id(self, record):
+ return {'company_id': self.backend_record.company_id.id}
+
+ @mapping
+ @only_create
+ def versions(self, record):
+ item = {
+ 'min_quantity': 0,
+ 'sequence': 5,
+ 'base': 1,
+ 'price_discount': - float(record['reduction']) / 100.0,
+ }
+ version = {
+ 'name': 'Version',
+ 'active': True,
+ 'items_id': [(0, 0, item)],
+ }
+ return {'version_id': [(0, 0, version)]}
diff --git a/connector_prestashop/unit/version_key.py b/connector_prestashop/unit/version_key.py
new file mode 100644
index 000000000..dcde1670d
--- /dev/null
+++ b/connector_prestashop/unit/version_key.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+# Copyright 2016 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.connector.connector import ConnectorUnit
+from ..backend import prestashop, prestashop_1_6_0_9, prestashop_1_6_1_2
+
+
+@prestashop
+class VersionKey(ConnectorUnit):
+ _model_name = '_prestashop.version.key'
+
+ keys = {}
+
+ def get_key(self, key):
+ return self.keys.get(key) or key
+
+
+@prestashop_1_6_0_9
+class VersionKey_1_6_0_9(VersionKey):
+
+ keys = {
+ 'product_option_value': 'product_option_values',
+ 'category': 'categories',
+ 'order_slip': 'order_slips',
+ 'order_slip_detail': 'order_slip_details',
+ 'group': 'groups',
+ 'order_row': 'order_rows',
+ 'tax': 'taxes',
+ 'image': 'images',
+ 'combinations': 'combinations',
+ 'tag': 'tags',
+ 'manufacturers': 'manufacturers',
+ }
+
+
+@prestashop_1_6_1_2
+class VersionKey_1_6_1_2(VersionKey):
+
+ # keys checked in 1.6.1.9:
+ # * customer_messages
+ # * order_slip
+ # * order_slip_detail
+
+ keys = {
+ 'product_option_value': 'product_option_value',
+ 'category': 'category',
+ 'image': 'image',
+ 'order_slip': 'order_slip',
+ 'order_slip_detail': 'order_slip_detail',
+ 'group': 'group',
+ 'order_row': 'order_rows',
+ 'tax': 'taxes',
+ 'combinations': 'combination',
+ 'product_features': 'product_feature',
+ 'tag': 'tag',
+ 'messages': 'customer_messages',
+ 'manufacturers': 'manufacturers',
+ }
diff --git a/connector_prestashop/views/account_view.xml b/connector_prestashop/views/account_view.xml
new file mode 100644
index 000000000..0c769d203
--- /dev/null
+++ b/connector_prestashop/views/account_view.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+ prestashop.account.tax.group
+
+
+
+
+
+
+
+
+
+ account.tax.group
+ account.tax.group
+
+
+
+
+
+
+
+
+
+ account.tax.group
+
+
+
+
+
+
+ Tax Groups
+ account.tax.group
+ form
+ tree,form
+
+
+
+
+
diff --git a/connector_prestashop/views/connector_prestashop_menu.xml b/connector_prestashop/views/connector_prestashop_menu.xml
new file mode 100644
index 000000000..5c1b02e4e
--- /dev/null
+++ b/connector_prestashop/views/connector_prestashop_menu.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/delivery_view.xml b/connector_prestashop/views/delivery_view.xml
new file mode 100644
index 000000000..d68311d14
--- /dev/null
+++ b/connector_prestashop/views/delivery_view.xml
@@ -0,0 +1,50 @@
+
+
+
+
+ prestashop.delivery.carrier
+
+
+
+
+
+
+ prestashop.delivery.carrier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PrestaShop Carriers
+ prestashop.delivery.carrier
+ form
+ tree,form
+
+
+
diff --git a/connector_prestashop/views/image_view.xml b/connector_prestashop/views/image_view.xml
new file mode 100644
index 000000000..fd81515ce
--- /dev/null
+++ b/connector_prestashop/views/image_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Multi image prestashop binding form
+ prestashop.product.image
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/partner_view.xml b/connector_prestashop/views/partner_view.xml
new file mode 100644
index 000000000..46726e1d1
--- /dev/null
+++ b/connector_prestashop/views/partner_view.xml
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+ res.partner.form
+ res.partner
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ prestashop.res.partner.form
+ prestashop.res.partner
+
+
+
+
+
+
+ prestashop.res.partner.tree
+ prestashop.res.partner
+
+
+
+
+
+
+
+
+
+
+ prestashop.address.form
+ prestashop.address
+
+
+
+
+
+
+ prestashop.address.tree
+ prestashop.address
+
+
+
+
+
+
+
+
+
+ res.partner.category.form
+ res.partner.category
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prestashop.res.partner.category.form
+ prestashop.res.partner.category
+
+
+
+
+
+
+ prestashop.res.partner.category.tree
+ prestashop.res.partner.category
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/prestashop_model_view.xml b/connector_prestashop/views/prestashop_model_view.xml
new file mode 100644
index 000000000..1b503ef36
--- /dev/null
+++ b/connector_prestashop/views/prestashop_model_view.xml
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+ prestashop.backend.form
+ prestashop.backend
+
+
+
+
+
+
+ prestashop.backend.tree
+ prestashop.backend
+
+
+
+
+
+
+
+
+
+ PrestaShop Backends
+ prestashop.backend
+ form
+ tree,form
+
+
+
+
+ prestashop.shop.group.form
+ prestashop.shop.group
+
+
+
+
+
+
+ prestashop.shop.group.tree
+ prestashop.shop.group
+
+
+
+
+
+
+
+
+
+ PrestaShop Shop Groups
+ prestashop.shop.group
+ form
+ tree,form
+
+
+
+
+ prestashop.shop.form
+ prestashop.shop
+
+
+
+
+
+
+ prestashop.shop.tree
+ prestashop.shop
+
+
+
+
+
+
+
+
+
+
+ PrestaShop Shops
+ prestashop.shop
+ form
+ tree,form
+
+
+
+
diff --git a/connector_prestashop/views/product_category_view.xml b/connector_prestashop/views/product_category_view.xml
new file mode 100644
index 000000000..a1720a143
--- /dev/null
+++ b/connector_prestashop/views/product_category_view.xml
@@ -0,0 +1,56 @@
+
+
+
+
+ prestashop.product.category
+
+
+
+
+
+
+
+
+
+
+
+ prestashop.product.category.form.view
+ prestashop.product.category
+ form
+
+
+
+
+
+
+ product.category
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/product_view.xml b/connector_prestashop/views/product_view.xml
new file mode 100644
index 000000000..583878099
--- /dev/null
+++ b/connector_prestashop/views/product_view.xml
@@ -0,0 +1,173 @@
+
+
+
+
+ product.product
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+ product.product.prestashop.tree
+ product.product
+
+
+
+
+
+
+
+
+
+
+
+
+
+ product.product
+
+
+
+ 0
+
+
+
+
To show PrestaShop binding go to:
+
+
+
+
+
+
+
+
+
+
+ product.template
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+ product.template
+
+
+
+
+
+
+
+
+
+ prestashop.product.template
+
+
+
+
+
+
+ prestashop.product.template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prestashop.product.combination
+
+
+
+
+
+
+ prestashop.product.combination
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/sale_view.xml b/connector_prestashop/views/sale_view.xml
new file mode 100644
index 000000000..cea09c831
--- /dev/null
+++ b/connector_prestashop/views/sale_view.xml
@@ -0,0 +1,155 @@
+
+
+
+
+ sale.order.state.form
+ sale.order.state
+
+
+
+
+
+
+ sale.order.state.tree
+ sale.order.state
+
+
+
+
+
+
+
+
+ prestashop.sale.order.state.tree
+ prestashop.sale.order.state
+
+
+
+
+
+
+
+
+
+ stock.warehouse
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ prestashop.sale.order.state.form
+ prestashop.sale.order.state
+
+
+
+
+
+
+ Sale Order States
+ ir.actions.act_window
+ sale.order.state
+ form
+ tree,form
+
+
+
+ Here are the sale order states mapped with e-commerce.
+
+ Each state can be linked between PrestaShop and Odoo.
+ When a sale order state change, the connector will update the sale order in PrestaShop.
+
+
+
+
+
+
+
+ prestashop.sale.order.form
+ prestashop.sale.order
+
+
+
+
+
+
+ sale.order.connector.prestashop.form
+ sale.order
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/stock_view.xml b/connector_prestashop/views/stock_view.xml
new file mode 100644
index 000000000..78ad55c11
--- /dev/null
+++ b/connector_prestashop/views/stock_view.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ stock.location
+
+
+
+
+
+
+
+
+
+
+
+
From 23a862c51befc691d992f73d9741c1d6822055cc Mon Sep 17 00:00:00 2001
From: Simone Orsi
Date: Mon, 8 May 2017 16:51:59 +0200
Subject: [PATCH 02/99] [FIX+IMP] connector_prestashop: Several things:
* [FIX] manufacturer export on template
Export of manufacturer on template was broken due to a probable typo.
`id_manufacturer` value was taken using `to_odoo` instead of `to_backend`.
* [IMP] filter of importable orders by state
If `backend_record.importable_order_state_ids` is valued we check if current order is in the list.
If not, the job fails gracefully.
* [FIX] combination image: do not default to `False` when missing
---
.../models/prestashop_backend/common.py | 5 ++++
.../models/sale_order/importer.py | 26 +++++++++++++++++++
.../views/prestashop_model_view.xml | 1 +
3 files changed, 32 insertions(+)
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 7cee33f8a..8c74ed07d 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -115,6 +115,11 @@ def _select_versions(self):
required=True,
string='Shipping Product',
)
+ importable_order_state_ids = fields.Many2many(
+ comodel_name='sale.order.state',
+ string='Importable sale order states',
+ help="If valued only orders matching these states will be imported.",
+ )
@api.model
def _default_pricelist_id(self):
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index c4c951065..f9086ae8c 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -100,6 +100,7 @@ def check(self, record):
"Process or create a new one.") % (ps_payment_method,
ps_payment_method))
self._rule_global(record, payment_mode)
+ self._rule_state(record, payment_mode)
self._rules[payment_mode.import_rule](self, record, payment_mode)
def _rule_global(self, record, mode):
@@ -117,6 +118,31 @@ def _rule_global(self, record, mode):
'because it has not been paid since %d '
'days' % (order_id, max_days))
+ def _rule_state(self, record, mode):
+ """Check if order is importable by its state.
+
+ If `backend_record.importable_order_state_ids` is valued
+ we check if current order is in the list.
+ If not, the job fails gracefully.
+ """
+ if self.backend_record.importable_order_state_ids:
+ ps_state_id = record['current_state']
+ state = self.binder_for(
+ 'prestashop.sale.order.state').to_odoo(ps_state_id, unwrap=1)
+ if not state:
+ raise FailedJobError(_(
+ "The configuration is missing "
+ "for sale order state with PS ID=%s.\n\n"
+ "Resolution:\n"
+ " - Use the automatic import in 'Connectors > PrestaShop "
+ "Backends', button 'Synchronize base data'."
+ ) % (ps_state_id,))
+ if state not in self.backend_record.importable_order_state_ids:
+ raise NothingToDoJob(_(
+ 'Import of the order with PS ID=%s canceled '
+ 'because its state is not importable'
+ ) % record['id'])
+
@prestashop
class SaleOrderMapper(ImportMapper):
diff --git a/connector_prestashop/views/prestashop_model_view.xml b/connector_prestashop/views/prestashop_model_view.xml
index 1b503ef36..81d15967f 100644
--- a/connector_prestashop/views/prestashop_model_view.xml
+++ b/connector_prestashop/views/prestashop_model_view.xml
@@ -51,6 +51,7 @@
+
From 2605137cf93d1f3df4fa3c43277a9d7de1e7f3c1 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 18 May 2017 14:59:00 +0200
Subject: [PATCH 03/99] [FIX+IMP] connector_prestashop: Several things
* [FIX] Fix export when no location has flag prestashop_synchronized
When there is no location with the flag prestashop_synchronized in the
location tree,
Current behavior:
The `location` key in the context is empty then the qty_available is
computed for *every* locations/warehouses.
Expected behavior:
If there is at least one location flagged, use it, otherwise, use all
the locations of the tree, starting from the selected location or
selected warehouse location.
When no location can be found (for instance because user selected a
location with a usage different than 'internal'), then it should just
fail and not return the stock of all warehouses.
Being able to synchronize without activating 'prestashop_synchronized'
is important: when used, this feature will trigger an export every time
a quant is changed or created, on a large catalog, we might prefer only
using the cron to have less frequent updates and less jobs.
A second fix is that when a stock_location_id is set on the backend, it
should be used, it was only used for the import of stock.
* [FIX] Exclude children from qty computation
We already pass the children in 'location', if we don't disable
'compute_child', the qty computation will try to get the children of
each child and generates query of 1mio chars.
* [IMP] Group computation of qty_available
Stats with 6700 products:
Before: 570s
After: 28s
* [FIX] Apply filter on locations for variants quantities
It was only applied on export of template quantities.
* [IMP] Improve performance on prestashop qty recompute
The add/union operation between recordsets is slow, aggregate the ids in
a set and call the browse only once on the complete set is dramatically
faster. See https://github.com/guewen/connector-magento/pull/9
---
.../models/prestashop_backend/common.py | 26 ++++++++
.../models/product_product/common.py | 29 +++++++--
.../models/product_template/common.py | 61 +++++++------------
3 files changed, 71 insertions(+), 45 deletions(-)
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 8c74ed07d..3c5a2bd7b 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -295,6 +295,32 @@ def import_record(self, model_name, ext_id):
import_record(session, model_name, self.id, ext_id)
return True
+ @api.multi
+ def _get_locations_for_stock_quantities(self):
+ root_location = (self.stock_location_id or
+ self.warehouse_id.lot_stock_id)
+ locations = self.env['stock.location'].search([
+ ('id', 'child_of', root_location.id),
+ ('prestashop_synchronized', '=', True),
+ ('usage', '=', 'internal'),
+ ])
+ # if we choosed a location but none where flagged
+ # 'prestashop_synchronized', consider we want all of them in the tree
+ if not locations:
+ locations = self.env['stock.location'].search([
+ ('id', 'child_of', root_location.id),
+ ('usage', '=', 'internal'),
+ ])
+ if not locations:
+ # we must not pass an empty location or we would have the
+ # stock for every warehouse, which is the last thing we
+ # expect
+ raise exceptions.UserError(
+ _('No internal location found to compute the product '
+ 'quantity.')
+ )
+ return locations
+
class PrestashopShopGroup(models.Model):
_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index c8ff8a33a..86b429a1f 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from collections import defaultdict
+
from odoo import api, fields, models
from odoo.addons import decimal_precision as dp
@@ -152,14 +154,29 @@ class PrestashopProductCombination(models.Model):
@api.multi
def recompute_prestashop_qty(self):
- for product_binding in self:
- if product_binding.quantity != product_binding.qty_available:
- product_binding.quantity = product_binding.qty_available
+ # group products by backend
+ backends = defaultdict(set)
+ for product in self:
+ backends[product.backend_id].add(product.id)
+
+ for backend, product_ids in backends.iteritems():
+ products = self.browse(product_ids)
+ products._recompute_prestashop_qty_backend(backend)
return True
- @api.model
- def _prestashop_qty(self, product):
- return product.qty_available
+ @api.multi
+ def _recompute_prestashop_qty_backend(self, backend):
+ locations = backend._get_locations_for_stock_quantities()
+ self_loc = self.with_context(location=locations.ids,
+ compute_child=False)
+ for product_binding in self_loc:
+ new_qty = product_binding._prestashop_qty()
+ if product_binding.quantity != new_qty:
+ product_binding.quantity = new_qty
+ return True
+
+ def _prestashop_qty(self):
+ return self.qty_available
@job(default_channel='root.prestashop')
def export_inventory(self, backend, fields=None, **kwargs):
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 07da481de..c704f826c 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import api, fields, models
+from collections import defaultdict
+
+from odoo import _, api, exceptions, fields, models
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
@@ -113,48 +115,29 @@ class PrestashopProductTemplate(models.Model):
@api.multi
def recompute_prestashop_qty(self):
- for product_binding in self:
- new_qty = product_binding._prestashop_qty()
- if product_binding.quantity != new_qty:
- product_binding.quantity = new_qty
+ # group products by backend
+ backends = defaultdict(set)
+ for product in self:
+ backends[product.backend_id].add(product.id)
+
+ for backend, product_ids in backends.iteritems():
+ products = self.browse(product_ids)
+ products._recompute_prestashop_qty_backend(backend)
return True
- def _prestashop_qty(self):
- locations = self.env['stock.location'].search([
- ('id', 'child_of', self.backend_id.warehouse_id.lot_stock_id.id),
- ('prestashop_synchronized', '=', True),
- ('usage', '=', 'internal'),
- ])
- return self.with_context(location=locations.ids).qty_available
-
- @job(default_channel='root.prestashop')
- def import_products(self, backend, since_date=None, **kwargs):
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- self.env['prestashop.product.category'].with_delay(
- priority=15
- ).import_batch(backend=backend, filters=filters, **kwargs)
- self.env['prestashop.product.template'].with_delay(
- priority=15
- ).import_batch(backend, filters, **kwargs)
- backend.import_products_since = now_fmt
+ @api.multi
+ def _recompute_prestashop_qty_backend(self, backend):
+ locations = backend._get_locations_for_stock_quantities()
+ self_loc = self.with_context(location=locations.ids,
+ compute_child=False)
+ for product in self_loc:
+ new_qty = product._prestashop_qty()
+ if product.quantity != new_qty:
+ product.quantity = new_qty
return True
- @job(default_channel='root.prestashop')
- def export_inventory(self, backend, fields=None, **kwargs):
- """ Export the inventory configuration and quantity of a product. """
- env = backend.get_environment(self._name)
- inventory_exporter = env.get_connector_unit(ProductInventoryExporter)
- return inventory_exporter.run(self.id, fields, **kwargs)
-
- @api.model
- @job(default_channel='root.prestashop')
- def export_product_quantities(self, backend):
- self.search([
- ('backend_id', 'in', self.env.backend.ids),
- ]).recompute_prestashop_qty()
+ def _prestashop_qty(self):
+ return self.qty_available
@prestashop
From 2e694ff64f51a016746d68dca9deba2d2856c2d9 Mon Sep 17 00:00:00 2001
From: "Nicolas Bessi (nbessi)"
Date: Wed, 13 Sep 2017 11:27:44 +0200
Subject: [PATCH 04/99] [FIX] connector_prestashop: Fix atomicity design (#81)
That may pass the prestashop id insted of the binding id to the exporter
That can cause the following problems:
* A job Error: Key (id_attribute_group)=(4) is not present in table "prestashop_product_combination_option"
* Wrong combination or combination values export or updated
* Combination or combination value never exported
* Faulty value in fields 'id_attribute_group' leading to data
incoherence
(cherry picked from commit 767ba36)
---
.../tests/test_export_stock_qty.py | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/connector_prestashop/tests/test_export_stock_qty.py b/connector_prestashop/tests/test_export_stock_qty.py
index a57ae8cb1..87512bcf7 100644
--- a/connector_prestashop/tests/test_export_stock_qty.py
+++ b/connector_prestashop/tests/test_export_stock_qty.py
@@ -47,15 +47,22 @@ def test_job_recompute_prestashop_qty(self):
self.assertEqual(0, export_record_mock.delay.call_count)
self._change_product_qty(variant_binding.odoo_id, 42)
-
with mock.patch(export_job_path) as export_record_mock:
- export_product_quantities(self.conn_session,
- self.backend_record.ids)
+ variant_binding.with_context(
+ connector_no_export=False).recompute_prestashop_qty()
self.assertEqual(1, export_record_mock.delay.call_count)
export_record_mock.delay.assert_called_with(
mock.ANY,
- 'prestashop.product.template',
- variant_binding.main_template_id.id,
+ 'prestashop.product.combination',
+ variant_binding.id,
fields=['quantity'],
priority=20,
)
+
+ self._change_product_qty(variant_binding.odoo_id, 42)
+ with mock.patch(export_job_path) as export_record_mock:
+ # the function call the update qty for template and combination
+ # depending on the state of the tests we may have one or two call
+ export_product_quantities(self.conn_session,
+ self.backend_record.ids)
+ self.assertGreater(export_record_mock.delay.call_count, 0)
From 951877b4998b027bfc1977860a247677c2aa2f27 Mon Sep 17 00:00:00 2001
From: "sergio.teruel"
Date: Sat, 23 Sep 2017 17:21:59 +0200
Subject: [PATCH 05/99] [FIX] connector_prestashop: Adapt to new components +
continue migration
---
connector_prestashop/__init__.py | 2 +
connector_prestashop/__manifest__.py | 3 +-
connector_prestashop/backend.py | 2 +-
.../{unit => components}/__init__.py | 7 +-
.../auto_matching_importer.py | 9 ++-
.../{unit => components}/backend_adapter.py | 15 +++-
.../{unit => components}/binder.py | 23 +++---
connector_prestashop/components/core.py | 17 ++++
.../{unit => components}/deleter.py | 9 ++-
.../{unit => components}/exception.py | 0
.../{unit => components}/exporter.py | 30 +++++--
.../{unit => components}/importer.py | 79 +++++++++++--------
.../{unit => components}/mapper.py | 17 +++-
.../{unit => components}/version_key.py | 0
.../models/account_invoice/common.py | 9 ++-
.../models/account_invoice/importer.py | 28 ++++---
.../models/account_payment_mode/common.py | 19 +++--
.../models/account_payment_mode/importer.py | 8 +-
.../models/account_tax/common.py | 11 +--
.../models/account_tax/importer.py | 9 ++-
.../models/account_tax_group/common.py | 11 +--
.../models/account_tax_group/importer.py | 24 ++++--
connector_prestashop/models/binding/common.py | 40 +++++++---
.../models/delivery_carrier/common.py | 21 +++--
.../models/delivery_carrier/importer.py | 44 ++++-------
.../models/mail_message/common.py | 11 +--
.../models/mail_message/importer.py | 24 ++++--
.../models/prestashop_backend/common.py | 67 ++++++++--------
.../models/prestashop_backend/importer.py | 42 ++++++++--
.../models/product_category/common.py | 12 +--
.../models/product_category/importer.py | 26 +++---
.../models/product_image/common.py | 15 ++--
.../models/product_image/deleter.py | 9 ++-
.../models/product_image/importer.py | 23 +++---
.../models/product_pricelist/common.py | 2 +-
.../models/product_pricelist/importer.py | 2 +-
.../models/product_product/common.py | 2 +-
.../models/product_product/deleter.py | 2 +-
.../models/product_product/importer.py | 4 +-
.../models/product_supplierinfo/common.py | 2 +-
.../models/product_supplierinfo/importer.py | 4 +-
.../models/product_template/common.py | 17 +++-
.../models/product_template/exporter.py | 2 +-
.../models/product_template/importer.py | 37 +--------
.../models/res_country/common.py | 2 +-
.../models/res_country/importer.py | 2 +-
.../models/res_currency/common.py | 2 +-
.../models/res_currency/importer.py | 2 +-
.../models/res_lang/common.py | 2 +-
.../models/res_lang/importer.py | 2 +-
.../models/res_partner/common.py | 42 +++++-----
.../models/res_partner/importer.py | 2 +-
.../models/res_partner_category/common.py | 2 +-
.../models/res_partner_category/importer.py | 2 +-
.../models/sale_order/common.py | 2 +-
.../models/sale_order/importer.py | 6 +-
.../models/sale_order_state/common.py | 2 +-
.../models/sale_order_state/importer.py | 2 +-
.../models/stock_tracking/common.py | 2 +-
.../models/stock_tracking/exporter.py | 2 +-
.../models/stock_warehouse/common.py | 7 +-
.../models/stock_warehouse/importer.py | 2 +-
62 files changed, 489 insertions(+), 336 deletions(-)
rename connector_prestashop/{unit => components}/__init__.py (94%)
rename connector_prestashop/{unit => components}/auto_matching_importer.py (95%)
rename connector_prestashop/{unit => components}/backend_adapter.py (95%)
rename connector_prestashop/{unit => components}/binder.py (61%)
create mode 100644 connector_prestashop/components/core.py
rename connector_prestashop/{unit => components}/deleter.py (80%)
rename connector_prestashop/{unit => components}/exception.py (100%)
rename connector_prestashop/{unit => components}/exporter.py (93%)
rename connector_prestashop/{unit => components}/importer.py (90%)
rename connector_prestashop/{unit => components}/mapper.py (86%)
rename connector_prestashop/{unit => components}/version_key.py (100%)
diff --git a/connector_prestashop/__init__.py b/connector_prestashop/__init__.py
index 881f759b5..d1917fe6a 100644
--- a/connector_prestashop/__init__.py
+++ b/connector_prestashop/__init__.py
@@ -4,4 +4,6 @@
from . import backend
from . import connector
from . import consumer
+
+from . import components
from . import models
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index eb727dad4..5542ac99b 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -11,10 +11,11 @@
"license": "AGPL-3",
"depends": [
"account",
+ "base_vat", # for vat validation on partner address
"product",
"product_multi_category", # oca/product-attribute
"connector_ecommerce", # oca/connector-ecommerce
- "product_multi_image", # oca/product-attribute
+ "base_multi_image", # oca/product-attribute
"purchase",
"product_variant_supplierinfo", # oca/product-variant
# TODO: perhaps not needed:
diff --git a/connector_prestashop/backend.py b/connector_prestashop/backend.py
index 714a088cd..6317a2f1e 100644
--- a/connector_prestashop/backend.py
+++ b/connector_prestashop/backend.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-import openerp.addons.connector.backend as backend
+import odoo.addons.connector.backend as backend
prestashop = backend.Backend('prestashop')
diff --git a/connector_prestashop/unit/__init__.py b/connector_prestashop/components/__init__.py
similarity index 94%
rename from connector_prestashop/unit/__init__.py
rename to connector_prestashop/components/__init__.py
index 45aa2f239..aa3d50c54 100644
--- a/connector_prestashop/unit/__init__.py
+++ b/connector_prestashop/components/__init__.py
@@ -2,12 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# ConnectorUnit needs to be registered
-from . import auto_matching_importer
-from . import mapper
+from . import core
+from . import backend_adapter
from . import binder
from . import importer
from . import exporter
+from . import mapper
from . import deleter
-from . import backend_adapter
+from . import auto_matching_importer
from . import exception
from . import version_key
diff --git a/connector_prestashop/unit/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
similarity index 95%
rename from connector_prestashop/unit/auto_matching_importer.py
rename to connector_prestashop/components/auto_matching_importer.py
index bb980e86b..6b5759888 100644
--- a/connector_prestashop/unit/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -3,15 +3,18 @@
import logging
-from odoo.addons.connector.connector import ConnectorUnit
from odoo.addons.connector.unit.backend_adapter import BackendAdapter
+from odoo.addons.component.core import Component
from odoo import _, exceptions
_logger = logging.getLogger(__name__)
-class AutoMatchingImporter(ConnectorUnit):
+class AutoMatchingImporter(Component):
+ _name = 'prestashop.auto.matching.importer'
+ _inherit = 'prestashop.importer'
+
_model_name = None
_erp_field = None
_ps_field = None
@@ -33,12 +36,12 @@ def run(self):
model = self.env[erp_model_name].with_context(active_test=False)
erp_ids = model.search([])
erp_list_dict = erp_ids.read()
+ # TODO: Fix
adapter = self.unit_for(BackendAdapter)
# Get the IDS from PS
ps_ids = adapter.search()
if not ps_ids:
raise exceptions.Warning(
- _('Error :'),
_('Failed to query %s via PS webservice')
% adapter.prestashop_model
)
diff --git a/connector_prestashop/unit/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
similarity index 95%
rename from connector_prestashop/unit/backend_adapter.py
rename to connector_prestashop/components/backend_adapter.py
index de39d4484..ebe33c33a 100644
--- a/connector_prestashop/unit/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -1,15 +1,18 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.addons.component.core import AbstractComponent
+
from odoo import exceptions, _
from odoo.addons.connector.exception import NetworkRetryableError
-from odoo.addons.connector.unit.backend_adapter import CRUDAdapter
from contextlib import contextmanager
from requests.exceptions import HTTPError, RequestException, ConnectionError
import base64
import logging
+
_logger = logging.getLogger(__name__)
+
try:
from prestapyt import PrestaShopWebServiceDict, PrestaShopWebServiceError
except:
@@ -97,9 +100,13 @@ def __init__(self, location, webservice_key):
self.api_url = location
-class PrestaShopCRUDAdapter(CRUDAdapter):
+class PrestaShopCRUDAdapter(AbstractComponent):
""" External Records Adapter for PrestaShop """
+ _name = 'prestashop.crud.adapter'
+ _inherit = ['base.backend.adapter', 'base.prestashop.connector']
+ _usage = 'backend.adapter'
+
def __init__(self, environment):
"""
@@ -147,7 +154,9 @@ def head(self):
raise NotImplementedError
-class GenericAdapter(PrestaShopCRUDAdapter):
+class GenericAdapter(AbstractComponent):
+ _name = 'prestashop.adapter'
+ _inherit = 'prestashop.crud.adapter'
_model_name = None
_prestashop_model = None
diff --git a/connector_prestashop/unit/binder.py b/connector_prestashop/components/binder.py
similarity index 61%
rename from connector_prestashop/unit/binder.py
rename to connector_prestashop/components/binder.py
index 22638c7b2..4913f11b9 100644
--- a/connector_prestashop/unit/binder.py
+++ b/connector_prestashop/components/binder.py
@@ -1,17 +1,24 @@
# -*- coding: utf-8 -*-
+# © 2017 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.addons.connector.connector import Binder
-from ..backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class PrestashopBinder(Binder):
- """ Generic Binder for Prestshop """
+class PrestashopModelBinder(Component):
+ """ Bind records and give odoo/prestashop ids correspondence
+ Binding models are models called ``prestashop.{normal_model}``,
+ like ``prestashop.res.partner`` or ``prestashop.product.product``.
+ They are ``_inherits`` of the normal models and contains
+ the Prestashop ID, the ID of the Prestashop Backend and the additional
+ fields belonging to the Prestashop instance.
+ """
+ _name = 'prestashop.binder'
+ _inherit = ['base.binder', 'base.prestashop.connector']
_external_field = 'prestashop_id'
- _model_name = [
+ _apply_on = [
'prestashop.shop.group',
'prestashop.shop',
'prestashop.res.partner',
@@ -37,7 +44,3 @@ class PrestashopBinder(Binder):
'prestashop.mail.message',
'prestashop.groups.pricelist',
]
-
- def to_odoo(self, external_id, unwrap=False):
- # Make alias to to_openerp, remove in v10
- return self.to_openerp(external_id, unwrap)
diff --git a/connector_prestashop/components/core.py b/connector_prestashop/components/core.py
new file mode 100644
index 000000000..d3a0c40cd
--- /dev/null
+++ b/connector_prestashop/components/core.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+# © 2017 Sergio Teruel
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class BasePrestaShopConnectorComponent(AbstractComponent):
+ """ Base PrestaShop Connector Component
+
+ All components of this connector should inherit from it.
+ """
+
+ _name = 'base.prestashop.connector'
+ _inherit = 'base.connector'
+ _collection = 'prestashop.backend'
+
diff --git a/connector_prestashop/unit/deleter.py b/connector_prestashop/components/deleter.py
similarity index 80%
rename from connector_prestashop/unit/deleter.py
rename to connector_prestashop/components/deleter.py
index 9fde3f0e9..41643b38c 100644
--- a/connector_prestashop/unit/deleter.py
+++ b/connector_prestashop/components/deleter.py
@@ -1,14 +1,21 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tools.translate import _
+from odoo.addons.component.core import AbstractComponent
+
from odoo.tools.translate import _
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.synchronizer import Deleter
-class PrestashopDeleter(Deleter):
+class PrestashopDeleter(AbstractComponent):
""" Base deleter for PrestaShop """
+ _name = 'prestashop.exporter.deleter'
+ _inherit = 'base.deleter'
+ _usage = 'record.exporter.deleter'
+
def run(self, resource, external_id):
""" Run the synchronization, delete the record on PrestaShop
diff --git a/connector_prestashop/unit/exception.py b/connector_prestashop/components/exception.py
similarity index 100%
rename from connector_prestashop/unit/exception.py
rename to connector_prestashop/components/exception.py
diff --git a/connector_prestashop/unit/exporter.py b/connector_prestashop/components/exporter.py
similarity index 93%
rename from connector_prestashop/unit/exporter.py
rename to connector_prestashop/components/exporter.py
index 52f4942cf..85b13c9d6 100644
--- a/connector_prestashop/unit/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -8,9 +8,10 @@
from odoo import _, exceptions
+from odoo.addons.component.core import AbstractComponent
+
from odoo.addons.queue_job.job import job
from odoo.addons.queue_job.job import related_action
-from odoo.addons.connector.unit.synchronizer import Exporter
from odoo.addons.connector.exception import RetryableJobError
from .mapper import TranslationPrestashopExportMapper
@@ -25,9 +26,13 @@
# * call the ``bind`` method of the binder to update the last sync date
-class PrestashopBaseExporter(Exporter):
+class PrestashopBaseExporter(AbstractComponent):
""" Base exporter for PrestaShop """
+ _name = 'prestashop.base.exporter'
+ _inherit = ['base.exporter', 'base.prestashop.connector']
+ _usage = 'record.exporter'
+
def __init__(self, environment):
"""
:param environment: current environment (backend, session, ...)
@@ -67,9 +72,14 @@ def _after_export(self):
return
-class PrestashopExporter(PrestashopBaseExporter):
+class PrestashopExporter(AbstractComponent):
""" A common flow for the exports to PrestaShop """
+ _name = 'prestashop.exporter'
+ _inherit = 'prestashop.base.exporter'
+
+ _openerp_field = 'odoo_id'
+
def __init__(self, environment):
"""
:param environment: current environment (backend, session, ...)
@@ -155,6 +165,7 @@ def _get_or_create_binding(
def _export_dependency(self, relation, binding_model,
exporter_class=None,
+ component_usage='record.exporter',
binding_field_name='prestashop_bind_ids',
bind_values=None, force_sync=False):
"""
@@ -186,6 +197,8 @@ class or parent class to use for the export.
By default: PrestashopExporter
:type exporter_cls: :py:class:`openerp.addons.connector.\
connector.MetaConnectorUnit`
+ :param component_usage: 'usage' to look for to find the Component to
+ for the export, by default 'record.exporter'
:param binding_field_name: name of the one2many towards the bindings
default is 'prestashop_bind_ids'
:type binding_field_name: str | unicode
@@ -205,9 +218,9 @@ class or parent class to use for the export.
rel_binder = self.binder_for(binding_model)
if not rel_binder.to_external(binding) or force_sync:
- exporter = self.unit_for(
- exporter_class or PrestashopExporter, binding_model)
- exporter.run(binding.id)
+ exporter = self.component(usage=component_usage,
+ model_name=binding_model)
+ exporter.run(binding)
return binding
def _export_dependencies(self):
@@ -311,7 +324,10 @@ def _run(self, fields=None, **kwargs):
return message % self.prestashop_id
-class TranslationPrestashopExporter(PrestashopExporter):
+class TranslationPrestashopExporter(AbstractComponent):
+
+ _name = 'translation.prestashop.exporter'
+ _inherit = 'prestashop.exporter'
@property
def mapper(self):
diff --git a/connector_prestashop/unit/importer.py b/connector_prestashop/components/importer.py
similarity index 90%
rename from connector_prestashop/unit/importer.py
rename to connector_prestashop/components/importer.py
index 71eb7f489..efc3f72da 100644
--- a/connector_prestashop/unit/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -5,25 +5,33 @@
from contextlib import closing, contextmanager
import odoo
-from odoo import _
+from odoo import _, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.synchronizer import Importer
-from odoo.addons.connector.connector import ConnectorUnit, Binder
-from odoo.addons.connector.connector import ConnectorEnvironment
from odoo.addons.queue_job.exception import (
RetryableJobError,
FailedJobError,
)
+from odoo.addons.component.core import AbstractComponent, Component
+from odoo.addons.connector.exception import IDMissingInBackend
+from odoo.addons.queue_job.exception import NothingToDoJob
_logger = logging.getLogger(__name__)
RETRY_ON_ADVISORY_LOCK = 1 # seconds
RETRY_WHEN_CONCURRENT_DETECTED = 1 # seconds
+def import_record():
+ pass
+def import_batch():
+ pass
-class PrestashopBaseImporter(Importer):
+class PrestashopBaseImporter(AbstractComponent):
+
+ _name = 'prestashop.base.importer'
+ _inherit = ['base.importer', 'base.prestashop.connector']
+ _usage = 'record.importer'
def _import_dependency(self, prestashop_id, binding_model,
importer_class=None, always=False,
@@ -58,9 +66,12 @@ class or parent class to use for the export.
importer.run(prestashop_id, **kwargs)
-class PrestashopImporter(PrestashopBaseImporter):
+class PrestashopImporter(AbstractComponent):
""" Base importer for PrestaShop """
+ _name = 'prestashop.importer'
+ _inherit = 'prestashop.base.importer'
+
def __init__(self, environment):
"""
:param environment: current environment (backend, session, ...)
@@ -161,12 +172,14 @@ def do_in_new_connector_env(self, model_name=None):
try:
new_env = odoo.api.Environment(cr, self.env.uid,
self.env.context)
- connector_env = self.connector_env.create_environment(
- self.backend_record.with_env(new_env),
- model_name or self.model._name,
- connector_env=self.connector_env
- )
- yield connector_env
+ # connector_env = self.connector_env.create_environment(
+ # self.backend_record.with_env(new_env),
+ # model_name or self.model._name,
+ # connector_env=self.connector_env
+ # )
+ with self.backend_record.with_env(
+ new_env).work_on(self.model._name) as work2:
+ yield work2
except:
cr.rollback()
raise
@@ -216,7 +229,8 @@ def _check_in_new_connector_env(self):
# a Retryable error so T2 is rollbacked and retried
# later (and the new T3 will be aware of the category X
# from the its inception).
- binder = new_connector_env.get_connector_unit(Binder)
+ binder = self.binder_for(model=self.model._name)
+ # binder = new_connector_env.get_connector_unit(Binder)
if binder.to_internal(self.prestashop_id):
raise RetryableJobError(
'Concurrent error. The job will be retried later',
@@ -283,11 +297,15 @@ def _import(self, binding, **kwargs):
self._after_import(binding)
-class BatchImporter(Importer):
+class BatchImporter(AbstractComponent):
""" The role of a BatchImporter is to search for a list of
items to import, then it can either import them directly or delay
the import of each item separately.
"""
+ _name = 'prestashop.batch.importer'
+ _inherit = ['base.importer', 'base.prestashop.connector']
+ _usage = 'batch.importer'
+
page_size = 1000
def run(self, filters=None, **kwargs):
@@ -320,10 +338,11 @@ def _import_record(self, record):
# TODO 2016-10-25: is this used at all somewhere???
-class AddCheckpoint(ConnectorUnit):
+class AddCheckpoint(AbstractComponent):
""" Add a connector.checkpoint on the underlying model
(not the prestashop.* but the _inherits'ed model) """
+ _name = 'connector_prestashop_component'
_model_name = []
def run(self, binding_id):
@@ -335,23 +354,28 @@ def run(self, binding_id):
)
-class DirectBatchImporter(BatchImporter):
+class DirectBatchImporter(AbstractComponent):
""" Import the PrestaShop Shop Groups + Shops
They are imported directly because this is a rare and fast operation,
performed from the UI.
"""
+ _name = 'prestashop.direct.batch.importer'
+ _inherit = 'prestashop.batch.importer'
_model_name = None
def _import_record(self, record):
""" Import the record directly """
- self.env[self.model._name].with_delay().import_record(
+ self.env[self.model._name].import_record(
backend=self.backend_record,
prestashop_id=record)
-class DelayedBatchImporter(BatchImporter):
+class DelayedBatchImporter(AbstractComponent):
""" Delay import of the records """
+
+ _name = 'prestashop.delayed.batch.importer'
+ _inherit = 'prestashop.batch.importer'
_model_name = None
def _import_record(self, record, **kwargs):
@@ -362,8 +386,11 @@ def _import_record(self, record, **kwargs):
**kwargs)
-class TranslatableRecordImporter(PrestashopImporter):
+class TranslatableRecordImporter(AbstractComponent):
""" Import one translatable record """
+ _name = 'translatable.record.importer'
+ _inherit = 'prestashop.importer'
+
_model_name = []
_translatable_fields = {}
@@ -488,17 +515,3 @@ def _after_import(self, binding):
lang=lang_code,
connector_no_export=True,
).write(map_record.values())
-
-# TODO: Remove when all imports has been changed
-@job(default_channel='root.prestashop')
-def import_batch(env, filters=None, **kwargs):
- """ Prepare a batch import of records from PrestaShop """
- importer = env.get_connector_unit(BatchImporter)
- return importer.run(filters=filters, **kwargs)
-
-
-@job(default_channel='root.prestashop')
-def import_record(env, model_name, backend_id, prestashop_id, **kwargs):
- """ Import a record from PrestaShop """
- importer = env.get_connector_unit(PrestashopImporter)
- return importer.run(prestashop_id, **kwargs)
diff --git a/connector_prestashop/unit/mapper.py b/connector_prestashop/components/mapper.py
similarity index 86%
rename from connector_prestashop/unit/mapper.py
rename to connector_prestashop/components/mapper.py
index ce256f532..d5749e57c 100644
--- a/connector_prestashop/unit/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -1,11 +1,20 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo.addons.connector.unit.mapper import ExportMapper
+from odoo.addons.component.core import AbstractComponent
from odoo.addons.connector.unit.mapper import mapping
-class PrestashopExportMapper(ExportMapper):
+class PrestashopImportMapper(AbstractComponent):
+ _name = 'prestashop.import.mapper'
+ _inherit = ['base.prestashop.connector', 'base.import.mapper']
+ _usage = 'import.mapper'
+
+
+class PrestashopExportMapper(AbstractComponent):
+ _name = 'prestashop.export.mapper'
+ _inherit = ['base.prestashop.connector', 'base.export.mapper']
+ _usage = 'export.mapper'
def _map_direct(self, record, from_attr, to_attr):
res = super(PrestashopExportMapper, self)._map_direct(record,
@@ -20,7 +29,9 @@ def _map_direct(self, record, from_attr, to_attr):
return res
-class TranslationPrestashopExportMapper(PrestashopExportMapper):
+class TranslationPrestashopExportMapper(AbstractComponent):
+ _name = 'translation.prestashop.export.mapper'
+ _inherit = 'prestashop.export.mapper'
@mapping
def translatable_fields(self, record):
diff --git a/connector_prestashop/unit/version_key.py b/connector_prestashop/components/version_key.py
similarity index 100%
rename from connector_prestashop/unit/version_key.py
rename to connector_prestashop/components/version_key.py
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
index e8961cdf9..007022453 100644
--- a/connector_prestashop/models/account_invoice/common.py
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -3,8 +3,7 @@
from odoo import api, fields, models
-from ...backend import prestashop
-from ...unit.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
class AccountInvoice(models.Model):
@@ -84,8 +83,10 @@ class PrestashopRefund(models.Model):
]
-@prestashop
-class RefundAdapter(GenericAdapter):
+class RefundAdapter(Component):
+ _name = 'prestashop.refund.adapter'
+ _apply_on = 'prestashop.refund'
+
_model_name = 'prestashop.refund'
@property
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 8203c27cc..dbbee8980 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -10,17 +10,17 @@
ImportMapper,
only_create,
)
-
-from ...backend import prestashop
-from ...unit.importer import (
- PrestashopImporter,
+from ...components.importer import (
import_batch,
- DelayedBatchImporter,
)
+from odoo.addons.component.core import Component
+
+class RefundImporter(Component):
+ _name = 'prestashop.refund.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.refund'
-@prestashop
-class RefundImporter(PrestashopImporter):
_model_name = 'prestashop.refund'
def _import_dependencies(self):
@@ -47,8 +47,10 @@ def _after_import(self, binding):
self._open_refund(binding)
-@prestashop
-class RefundMapper(ImportMapper):
+class RefundMapper(Component):
+ _name = 'prestashop.refund.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.refund'
_model_name = 'prestashop.refund'
direct = [
@@ -245,11 +247,15 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-@prestashop
-class RefundBatchImporter(DelayedBatchImporter):
+class RefundBatchImporter(Component):
+ _name = 'prestashop.refund.batch.importer'
+ _inherit = 'prestashop.batch.importer'
+ _apply_on = 'prestashop.refund'
+
_model_name = 'prestashop.refund'
+# TODO: Move it
@job(default_channel='root.prestashop')
def import_refunds(session, backend_id, since_date, **kwargs):
filters = None
diff --git a/connector_prestashop/models/account_payment_mode/common.py b/connector_prestashop/models/account_payment_mode/common.py
index ecb525fa4..b74626980 100644
--- a/connector_prestashop/models/account_payment_mode/common.py
+++ b/connector_prestashop/models/account_payment_mode/common.py
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.connector import Binder
-from ...unit.backend_adapter import GenericAdapter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class PaymentModeAdapter(GenericAdapter):
+class PaymentModeAdapter(Component):
+ _name = 'account.payment.mode.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'account.payment.mode'
+
_model_name = 'account.payment.mode'
_prestashop_model = 'orders'
_export_node_name = 'order'
@@ -22,10 +23,12 @@ def search(self, filters=None):
return methods
-@prestashop
-class PaymentModeBinder(Binder):
- _model_name = 'account.payment.mode'
+class PaymentModeBinder(Component):
+ _name = 'account.payment.mode.binder'
+ _inherit_id = 'prestashop.binder'
+ _apply_on = 'account.payment.mode'
+ _model_name = 'account.payment.mode'
_external_field = 'name'
def to_openerp(self, external_id, unwrap=False, company=None):
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index ee4c34c23..7fc67e72d 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -1,12 +1,16 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.importer import BatchImporter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@prestashop
-class PaymentModeBatchImporter(BatchImporter):
+class PaymentModeBatchImporter(Component):
+ _name = 'account.payment.mode.importer'
+ _inherit = 'prestashop.batch.importer'
+ _apply_on = 'account.payment.mode'
+
_model_name = 'account.payment.mode'
def run(self, filters=None, **kwargs):
diff --git a/connector_prestashop/models/account_tax/common.py b/connector_prestashop/models/account_tax/common.py
index a83c94968..fe9856698 100644
--- a/connector_prestashop/models/account_tax/common.py
+++ b/connector_prestashop/models/account_tax/common.py
@@ -2,9 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
-
-from ...unit.backend_adapter import GenericAdapter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
class PrestashopAccountTax(models.Model):
@@ -34,7 +32,10 @@ class AccountTax(models.Model):
)
-@prestashop
-class AccountTaxAdapter(GenericAdapter):
+class AccountTaxAdapter(Component):
+ _name = 'prestashop.account.tax.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.account.tax'
+
_model_name = 'prestashop.account.tax'
_prestashop_model = 'taxes'
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index ecfceae89..9fa6a5b07 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+from odoo.addons.component.core import Component
-from ...unit.auto_matching_importer import AutoMatchingImporter
-from ...backend import prestashop
+class AccountTaxImporter(Component):
+ _name = 'prestashop.account.tax.importer'
+ _inherit = 'prestashop.auto.matching.importer'
+ _apply_on = 'prestashop.account.tax'
-@prestashop
-class AccountTaxImporter(AutoMatchingImporter):
_model_name = 'prestashop.account.tax'
_erp_field = 'amount'
_ps_field = 'rate'
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
index 397f04c4a..0fdd782e2 100644
--- a/connector_prestashop/models/account_tax_group/common.py
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -2,9 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
-
-from ...unit.backend_adapter import GenericAdapter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
class AccountTaxGroup(models.Model):
@@ -47,7 +45,10 @@ class PrestashopAccountTaxGroup(models.Model):
]
-@prestashop
-class TaxGroupAdapter(GenericAdapter):
+class TaxGroupAdapter(Component):
+ _name = 'prestashop.account.tax.group.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.account.tax.group'
+
_model_name = 'prestashop.account.tax.group'
_prestashop_model = 'tax_rule_groups'
diff --git a/connector_prestashop/models/account_tax_group/importer.py b/connector_prestashop/models/account_tax_group/importer.py
index acbbd895b..f765b43e0 100644
--- a/connector_prestashop/models/account_tax_group/importer.py
+++ b/connector_prestashop/models/account_tax_group/importer.py
@@ -6,12 +6,14 @@
mapping,
only_create,
)
-from ...unit.importer import PrestashopImporter, DirectBatchImporter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class TaxGroupMapper(ImportMapper):
+class TaxGroupMapper(Component):
+ _name = 'prestashop.account.tax.group.import.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.account.tax.group'
+
_model_name = 'prestashop.account.tax.group'
direct = [
@@ -36,11 +38,17 @@ def odoo_id(self, record):
return {'odoo_id': tax_group.id}
-@prestashop
-class TaxGroupImporter(PrestashopImporter):
+class TaxGroupImporter(Component):
+ _name = 'prestashop.account.tax.group.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.account.tax.group'
+
_model_name = 'prestashop.account.tax.group'
-@prestashop
-class TaxGroupBatchImporter(DirectBatchImporter):
+class TaxGroupBatchImporter(Component):
+ _name = 'prestashop.account.tax.group.direct.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.account.tax.group'
+
_model_name = 'prestashop.account.tax.group'
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index 335a41445..e69ca4af1 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -3,8 +3,7 @@
from odoo import models, fields, api
from odoo.addons.queue_job.job import job
-from ...unit.importer import PrestashopImporter, BatchImporter
-from ...unit.importer import import_record
+from ...components.importer import import_record
class PrestashopBinding(models.AbstractModel):
@@ -27,19 +26,40 @@ class PrestashopBinding(models.AbstractModel):
]
@job(default_channel='root.prestashop')
- def import_record(self, backend, prestashop_id, **kwargs):
+ @api.model
+ def import_record(self, backend, prestashop_id, force=False):
""" Import a record from PrestaShop """
- env = backend.get_environment(self._name)
- importer = env.get_connector_unit(PrestashopImporter)
- return importer.run(prestashop_id, **kwargs)
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='record.importer')
+ return importer.run(prestashop_id, force=force)
@job(default_channel='root.prestashop')
- def import_batch(self, backend=None, filters=None, **kwargs):
+ @api.model
+ def import_batch(self, backend, filters=None):
""" Prepare a batch import of records from PrestaShop """
- env = backend.get_environment(self._name)
- importer = env.get_connector_unit(BatchImporter)
- return importer.run(filters=filters, **kwargs)
+ if filters is None:
+ filters = {}
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='batch.importer')
+ return importer.run(filters=filters)
+ @job(default_channel='root.prestashop')
+ @api.multi
+ def export_record(self, fields=None):
+ """ Export a record on Magento """
+ self.ensure_one()
+ with self.backend_id.work_on(self._name) as work:
+ exporter = work.component(usage='record.exporter')
+ return exporter.run(self, fields)
+
+ @job(default_channel='root.prestashop')
+ def export_delete_record(self, backend, external_id):
+ """ Delete a record on Magento """
+ with backend.work_on(self._name) as work:
+ deleter = work.component(usage='record.exporter.deleter')
+ return deleter.run(external_id)
+
+ #TODO: Research
@api.multi
def resync(self):
func = import_record
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index d537d92cc..4890fcb1d 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -4,9 +4,7 @@
import logging
from odoo import models, fields
-
-from ...backend import prestashop
-from ...unit.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
@@ -40,6 +38,15 @@ class PrestashopDeliveryCarrier(models.Model):
string='Export tracking numbers to PrestaShop',
)
+ def import_carriers(self, backend, **kwargs):
+ return import_batch(
+ session,
+ 'prestashop.delivery.carrier',
+ backend_id,
+ priority=5,
+ **kwargs
+ )
+
class DeliveryCarrier(models.Model):
_inherit = "delivery.carrier"
@@ -56,8 +63,11 @@ class DeliveryCarrier(models.Model):
)
-@prestashop
-class DeliveryCarrierAdapter(GenericAdapter):
+class DeliveryCarrierAdapter(Component):
+ _name = 'prestashop.delivery.carrier.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.delivery.carrier'
+
_model_name = 'prestashop.delivery.carrier'
_prestashop_model = 'carriers'
@@ -65,5 +75,4 @@ def search(self, filters=None):
if filters is None:
filters = {}
filters['filter[deleted]'] = 0
-
return super(DeliveryCarrierAdapter, self).search(filters)
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index 842a0c7ed..aa0fbe897 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -2,27 +2,25 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
-from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (mapping,
- ImportMapper,
- )
-from ...unit.importer import (
- DelayedBatchImporter,
- PrestashopImporter,
- import_batch,
-)
-from ...backend import prestashop
+from odoo.addons.connector.unit.mapper import mapping, ImportMapper
+from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
-@prestashop
-class DeliveryCarrierImporter(PrestashopImporter):
+class DeliveryCarrierImporter(Component):
+ _name = 'prestashop.delivery.carrier.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.delivery.carrier'
+
_model_name = ['prestashop.delivery.carrier']
-@prestashop
-class CarrierImportMapper(ImportMapper):
+class CarrierImportMapper(Component):
+ _name = 'prestashop.delivery.carrier.import.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.delivery.carrier'
+
_model_name = 'prestashop.delivery.carrier'
direct = [
('name', 'name_ext'),
@@ -50,10 +48,13 @@ def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
-@prestashop
-class DeliveryCarrierBatchImporter(DelayedBatchImporter):
+class DeliveryCarrierBatchImporter(Component):
""" Import the PrestaShop Carriers.
"""
+ _name = 'prestashop.delivery.carrier.delayed.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.delivery.carrier'
+
_model_name = ['prestashop.delivery.carrier']
def run(self, filters=None, **kwargs):
@@ -63,14 +64,3 @@ def run(self, filters=None, **kwargs):
filters, record_ids)
for record_id in record_ids:
self._import_record(record_id, **kwargs)
-
-
-@job(default_channel='root.prestashop')
-def import_carriers(session, backend_id, **kwargs):
- return import_batch(
- session,
- 'prestashop.delivery.carrier',
- backend_id,
- priority=5,
- **kwargs
- )
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
index 884f60031..479166085 100644
--- a/connector_prestashop/models/mail_message/common.py
+++ b/connector_prestashop/models/mail_message/common.py
@@ -2,9 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
-
-from ...unit.backend_adapter import GenericAdapter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
class MailMessage(models.Model):
@@ -31,8 +29,11 @@ class PrestashopMailMessage(models.Model):
)
-@prestashop
-class MailMessageAdapter(GenericAdapter):
+class MailMessageAdapter(Component):
+ _name = 'prestashop.mail.message.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.mail.message'
+
_model_name = 'prestashop.mail.message'
@property
diff --git a/connector_prestashop/models/mail_message/importer.py b/connector_prestashop/models/mail_message/importer.py
index ef8f244c6..bb3fbc533 100644
--- a/connector_prestashop/models/mail_message/importer.py
+++ b/connector_prestashop/models/mail_message/importer.py
@@ -2,12 +2,14 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.importer import PrestashopImporter, DelayedBatchImporter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class MailMessageMapper(ImportMapper):
+class MailMessageMapper(Component):
+ _name = 'prestashop.mail.message.import.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.mail.message'
+
_model_name = 'prestashop.mail.message'
direct = [
@@ -40,9 +42,12 @@ def author_id(self, record):
return {}
-@prestashop
-class MailMessageImporter(PrestashopImporter):
+class MailMessageImporter(Component):
""" Import one simple record """
+ _name = 'prestashop.mail.message.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.mail.message'
+
_model_name = 'prestashop.mail.message'
def _import_dependencies(self):
@@ -62,6 +67,9 @@ def _has_to_skip(self):
return record['id_order'] == '0' or not order_binding
-@prestashop
-class MailMessageBatchImporter(DelayedBatchImporter):
+class MailMessageBatchImporter(Component):
+ _name = 'prestashop.mail.message.delayed.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.mail.message'
+
_model_name = 'prestashop.mail.message'
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 3c5a2bd7b..08ee9f765 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -2,24 +2,21 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
+from odoo.addons.component.core import Component
from contextlib import contextmanager
from odoo import models, fields, api, exceptions, _
from odoo.addons.connector.connector import ConnectorEnvironment
-from ...unit.importer import import_batch, import_record
-from ...unit.auto_matching_importer import AutoMatchingImporter
-from ...unit.backend_adapter import GenericAdapter, api_handle_errors
-from ...unit.version_key import VersionKey
+from ...components.importer import import_batch, import_record
+from ...components.auto_matching_importer import AutoMatchingImporter
+from ...components.backend_adapter import GenericAdapter, api_handle_errors
+from ...components.version_key import VersionKey
from ...backend import prestashop
-from ..product_template.exporter import export_product_quantities
from ..product_template.importer import import_inventory
-from ..res_partner.importer import import_customers_since
-from ..delivery_carrier.importer import import_carriers
from ..product_supplierinfo.importer import import_suppliers
from ..account_invoice.importer import import_refunds
-from ..product_template.importer import import_products
from ..sale_order.importer import import_orders_since
@@ -31,9 +28,8 @@ class PrestashopBackend(models.Model):
_description = 'PrestaShop Backend Configuration'
_inherit = 'connector.backend'
- _backend_type = 'prestashop'
-
- def _select_versions(self):
+ @api.model
+ def select_versions(self):
""" Available versions
Can be inherited to add custom versions.
@@ -44,8 +40,9 @@ def _select_versions(self):
('1.6.0.11', '>= 1.6.0.11 - <1.6.1.2'),
('1.6.1.2', '=1.6.1.2')
]
+
version = fields.Selection(
- selection='_select_versions',
+ selection='select_versions',
string='Version',
required=True,
)
@@ -140,7 +137,7 @@ def synchronize_metadata(self):
# import directly, do not delay because this
# is a fast operation, a direct return is fine
# and it is simpler to import them sequentially
- self.env[model_name].import_batch(backend=backend)
+ self.env[model_name].import_batch(backend)
return True
@api.multi
@@ -152,22 +149,20 @@ def synchronize_basedata(self):
'prestashop.res.currency',
'prestashop.account.tax',
]:
- env = backend.get_environment(model_name)
- importer = env.get_connector_unit(AutoMatchingImporter)
- importer.run()
- self.env['prestashop.account.tax.group'].import_batch(
- backend=backend)
- self.env['prestashop.sale.order.state'].import_batch(
- backend=backend)
+ with backend.work_on(model_name) as work:
+ importer = work.component(usage='record.importer')
+ importer.run()
+ self.env['prestashop.account.tax.group'].import_batch(backend)
+ self.env['prestashop.sale.order.state'].import_batch(backend)
return True
@api.multi
def _check_connection(self):
self.ensure_one()
- env = self.get_environment(self._name)
- adapter = env.get_connector_unit(GenericAdapter)
- with api_handle_errors('Connection failed'):
- adapter.head()
+ with self.work_on('prestashop.backend') as work:
+ component = work.component_by_name(name='prestashop.adapter')
+ with api_handle_errors('Connection failed'):
+ component.head()
@api.multi
def button_check_connection(self):
@@ -177,12 +172,10 @@ def button_check_connection(self):
@api.multi
def import_customers_since(self):
for backend_record in self:
- connector_env = backend_record.get_environment('res.partner')
since_date = backend_record.import_partners_since
- connector_env.env['res.partner'].with_delay(
- priority=10
- ).import_customers_since(
- backend_record=backend_record, since_date=since_date)
+ backend_record.with_delay(priority=10).import_customers_since(
+ backend_record=backend_record,
+ since_date=since_date)
return True
@api.multi
@@ -195,9 +188,10 @@ def import_products(self):
@api.multi
def import_carriers(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
- import_carriers.delay(session, backend_record.id, priority=10)
+ self.env['prestashop.delivery.carrier'].import_batch(
+ backend_record,
+ )
return True
@api.multi
@@ -341,14 +335,17 @@ class PrestashopShopGroup(models.Model):
)
-@prestashop
-class NoModelAdapter(GenericAdapter):
+class NoModelAdapter(Component):
""" Used to test the connection """
+ _name = 'prestashop.adapter.test'
+ _inherit = 'prestashop.adapter'
_model_name = 'prestashop.backend'
_prestashop_model = ''
-@prestashop
-class ShopGroupAdapter(GenericAdapter):
+class ShopGroupAdapter(Component):
+ _name = 'prestashop.shop.group'
+ _inherit = 'prestashop.adapter'
_model_name = 'prestashop.shop.group'
+ _apply_on = 'prestashop.shop.group'
_prestashop_model = 'shop_groups'
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index 08204cf53..b7a2080b9 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -3,12 +3,16 @@
from odoo import _
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.importer import PrestashopImporter, DirectBatchImporter
+from ...components.importer import PrestashopImporter, DirectBatchImporter
from ...backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class ShopGroupImportMapper(ImportMapper):
+class ShopGroupImportMapper(Component):
+ _name = 'prestashop.shop.group.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.shop.group'
+
_model_name = 'prestashop.shop.group'
direct = [('name', 'name')]
@@ -25,11 +29,35 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-@prestashop
-class ShopGroupImporter(PrestashopImporter):
+# class MetadataBatchImporter(Component):
+# """ Import the records directly, without delaying the jobs.
+#
+# Import the PrestShop Websites, Stores, Storeviews
+#
+# They are imported directly because this is a rare and fast operation,
+# and we don't really bother if it blocks the UI during this time.
+# (that's also a mean to rapidly check the connectivity with Magento).
+#
+# """
+#
+# _name = 'prestashop.metadata.batch.importer'
+# _inherit = 'prestashop.direct.batch.importer'
+# _apply_on = [
+# 'prestashop.shop.group',
+# ]
+
+
+class ShopGroupImporter(Component):
+ _name = 'prestashop.shop.group.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.shop.group'
+
_model_name = 'prestashop.shop.group'
-@prestashop
-class ShopGroupBatchImporter(DirectBatchImporter):
+class ShopGroupBatchImporter(Component):
+ _name = 'prestashop.shop.group.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.shop.group'
+
_model_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/product_category/common.py b/connector_prestashop/models/product_category/common.py
index 645ad7876..deb434db0 100644
--- a/connector_prestashop/models/product_category/common.py
+++ b/connector_prestashop/models/product_category/common.py
@@ -2,10 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
-
-from ...unit.backend_adapter import GenericAdapter
-
-from ...backend import prestashop
+from odoo.addons.component.core import Component
class ProductCategory(models.Model):
@@ -55,8 +52,11 @@ class PrestashopProductCategory(models.Model):
]
-@prestashop
-class ProductCategoryAdapter(GenericAdapter):
+class ProductCategoryAdapter(Component):
+ _name = 'prestashop.product.category.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.category'
+
_model_name = 'prestashop.product.category'
_prestashop_model = 'categories'
_export_node_name = 'category'
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index 6370e852e..b85711181 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -5,8 +5,8 @@
from odoo.addons.connector.unit.mapper import (mapping,
ImportMapper)
from odoo.addons.connector.unit.mapper import external_to_m2o
-from ...unit.importer import TranslatableRecordImporter, DelayedBatchImporter
-from ...backend import prestashop
+from ...components.importer import TranslatableRecordImporter, DelayedBatchImporter
+from odoo.addons.component.core import Component
import datetime
import logging
@@ -17,8 +17,11 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
-class ProductCategoryMapper(ImportMapper):
+class ProductCategoryMapper(Component):
+ _name = 'prestashop.product.category.import.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.category'
+
_model_name = 'prestashop.product.category'
direct = [
@@ -65,11 +68,11 @@ def data_upd(self, record):
return {'date_upd': record['date_upd']}
-@prestashop
class ProductCategoryImporter(TranslatableRecordImporter):
- _model_name = [
- 'prestashop.product.category',
- ]
+ _name = 'prestashop.product.category.importer'
+ _inherit = 'translatable.record.importer'
+ _apply_on = 'prestashop.product.category'
+ _model_name = 'prestashop.product.category'
_translatable_fields = {
'prestashop.product.category': [
@@ -111,6 +114,9 @@ def _import_dependencies(self):
)
-@prestashop
-class ProductCategoryBatchImporter(DelayedBatchImporter):
+class ProductCategoryBatchImporter(Component):
+ _name = 'prestashop.product.category.delayed.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.product.category'
+
_model_name = 'prestashop.product.category'
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index c6dc40f55..dd50ef5f2 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -2,14 +2,9 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import base64
-
from odoo import models, fields
-
-from ...unit.backend_adapter import (
- PrestaShopCRUDAdapter,
- PrestaShopWebServiceImage,
-)
-from ...backend import prestashop
+from odoo.addons.component.core import AbstractComponent
+from ...components.backend_adapter import PrestaShopWebServiceImage
class ProductImage(models.Model):
@@ -40,8 +35,10 @@ class PrestashopProductImage(models.Model):
]
-@prestashop
-class ProductImageAdapter(PrestaShopCRUDAdapter):
+class ProductImageAdapter(AbstractComponent):
+ _name = 'prestashop.product.image.adapter'
+ _inherit = 'prestashop.crud.adapter'
+
_model_name = 'prestashop.product.image'
_prestashop_image_model = 'products'
_prestashop_model = '/images/products'
diff --git a/connector_prestashop/models/product_image/deleter.py b/connector_prestashop/models/product_image/deleter.py
index c64863822..ee195342f 100644
--- a/connector_prestashop/models/product_image/deleter.py
+++ b/connector_prestashop/models/product_image/deleter.py
@@ -1,13 +1,14 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+from odoo.addons.component.core import Component
-from ...unit.deleter import PrestashopDeleter
-from ...backend import prestashop
+class ProductImageDelete(Component):
+ _name = 'prestashop.product.image.deleter'
+ _inherit = 'prestashop.deleter'
+ _apply_on = 'prestashop.product.image'
-@prestashop
-class ProductImageDelete(PrestashopDeleter):
_model_name = 'prestashop.product.image'
def delete(self, id):
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 12a5e385d..54ffcc04d 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -5,9 +5,10 @@
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.mapper import (mapping,
ImportMapper)
+from odoo.addons.component.core import Component
from ...backend import prestashop
-from ...unit.importer import PrestashopImporter
+from ...components.importer import PrestashopImporter
import mimetypes
import logging
@@ -21,8 +22,11 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
-class ProductImageMapper(ImportMapper):
+class ProductImageMapper(Component):
+ _name = 'prestashop.product.image.import.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.image'
+
_model_name = 'prestashop.product.image'
direct = [
@@ -62,11 +66,12 @@ def owner_model(self, record):
return {'owner_model': 'product.template'}
-@prestashop
-class ProductImageImporter(PrestashopImporter):
- _model_name = [
- 'prestashop.product.image',
- ]
+class ProductImageImporter(Component):
+ _name = 'prestashop.product.image.importer'
+ _importer = 'prestashop.importer'
+ _apply_on = 'prestashop.product.image'
+
+ _model_name = 'prestashop.product.image'
def _get_prestashop_data(self):
""" Return the raw PrestaShop data for ``self.prestashop_id`` """
@@ -98,7 +103,7 @@ def run(self, template_id, image_id, **kwargs):
) % (image_id, template_id, error.msg)
self.backend_record.add_checkpoint(message=msg)
-
+# TODO: Continue here
@job(default_channel='root.prestashop')
def import_product_image(session, model_name, backend_id, product_tmpl_id,
image_id, **kwargs):
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index 664bed47f..148d37fc4 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -3,7 +3,7 @@
from odoo import fields, models
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index 00b8f7999..bc3043287 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -5,7 +5,7 @@
ImportMapper,
mapping,
)
-from ...unit.importer import TranslatableRecordImporter
+from ...components.importer import TranslatableRecordImporter
from ...backend import prestashop
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index 86b429a1f..aa2efd0cc 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -7,7 +7,7 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
from exporter import CombinationInventoryExporter
diff --git a/connector_prestashop/models/product_product/deleter.py b/connector_prestashop/models/product_product/deleter.py
index 790efe7e7..16e724dcf 100644
--- a/connector_prestashop/models/product_product/deleter.py
+++ b/connector_prestashop/models/product_product/deleter.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.deleter import PrestashopDeleter
+from ...components.deleter import PrestashopDeleter
from ...backend import prestashop
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 1c2b33c3e..ed88dc1e6 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -9,13 +9,13 @@
only_create,
ImportMapper,
)
-from ...unit.importer import (
+from ...components.importer import (
PrestashopImporter,
import_batch,
TranslatableRecordImporter,
DelayedBatchImporter,
)
-from ...unit.backend_adapter import GenericAdapter, PrestaShopCRUDAdapter
+from ...components.backend_adapter import GenericAdapter, PrestaShopCRUDAdapter
from ...backend import prestashop
import logging
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index e99a919da..15736c450 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -3,7 +3,7 @@
from odoo import models, fields
-from ...unit.backend_adapter import (
+from ...components.backend_adapter import (
PrestaShopCRUDAdapter,
PrestaShopWebServiceImage,
GenericAdapter,
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 5f022376b..1b9375922 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -6,8 +6,8 @@
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.backend_adapter import PrestaShopCRUDAdapter
-from ...unit.importer import (
+from ...components.backend_adapter import PrestaShopCRUDAdapter
+from ...components.importer import (
PrestashopImporter,
import_batch,
DelayedBatchImporter,
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index c704f826c..1c17d5521 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -7,7 +7,7 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
from exporter import ProductInventoryExporter
@@ -139,6 +139,21 @@ def _recompute_prestashop_qty_backend(self, backend):
def _prestashop_qty(self):
return self.qty_available
+ def import_products(self, backend, since_date=None, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+
+ result = self.env['prestashop.product.category'].with_delay(
+ priority=10).import_batch(backend, filters=filters) or ''
+
+ result += self.env['prestashop.product.template'].with_delay(
+ priority=15).import_batch(backend, filters=filters) or ''
+
+ backend.import_products_since = now_fmt
+ return result
+
@prestashop
class ProductInventoryAdapter(GenericAdapter):
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index 304a0dcc1..d8fa189d5 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -5,7 +5,7 @@
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.synchronizer import Exporter
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index e6740f454..de2440b38 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -9,7 +9,7 @@
ImportMapper
)
-from ...unit.importer import (
+from ...components.importer import (
DelayedBatchImporter,
import_record,
import_batch,
@@ -17,12 +17,8 @@
PrestashopBaseImporter,
TranslatableRecordImporter,
)
-<<<<<<< HEAD
-from ...unit.mapper import backend_to_m2o
-=======
from odoo.addons.connector.unit.mapper import external_to_m2o
->>>>>>> [MIG] connector_prestashop: Begin of migration to v10
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
from ..product_image.importer import (
import_product_image,
@@ -644,35 +640,6 @@ def import_inventory(session, backend_id):
return inventory_importer.run()
-@job(default_channel='root.prestashop')
-def import_products(
- session, backend_id, since_date=None, **kwargs):
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- result = import_batch(
- session,
- 'prestashop.product.category',
- backend_id,
- filters,
- priority=15,
- **kwargs
- ) or ''
- result += import_batch(
- session,
- 'prestashop.product.template',
- backend_id,
- filters,
- priority=15,
- **kwargs
- ) or ''
- session.env['prestashop.backend'].browse(backend_id).write({
- 'import_products_since': now_fmt
- })
- return result
-
-
@prestashop
class ProductTemplateBatchImporter(DelayedBatchImporter):
_model_name = 'prestashop.product.template'
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index a77d5d984..1ce5c2f66 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -4,7 +4,7 @@
from odoo import fields, models
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index 61200ba89..2f35a2923 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 98da1b982..67825f230 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -4,7 +4,7 @@
from odoo import fields, models
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index 7c7e4245c..0ff4a82aa 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index f73e65de7..b574d811c 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -4,7 +4,7 @@
from odoo import models, fields
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index 4b7e9e77d..49c3dcb02 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.auto_matching_importer import AutoMatchingImporter
+from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index 4119695c7..45e3b0736 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -4,9 +4,9 @@
from odoo import models, fields
from odoo.addons.queue_job.job import job
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
-from ...unit.importer import import_batch
+from ...components.importer import import_batch
class ResPartner(models.Model):
@@ -23,26 +23,6 @@ class ResPartner(models.Model):
string='PrestaShop Address Bindings',
)
- # TODO: Implemented here or in prestashop.res.partner model?
- @job(default_channel='root.prestashop')
- def import_customers_since(
- self, backend_record=None, since_date=None, **kwargs):
- """ Prepare the import of partners modified on PrestaShop """
- filters = None
- if since_date:
- filters = {
- 'date': '1',
- 'filter[date_upd]': '>[%s]' % since_date}
- now_fmt = fields.Datetime.now()
- self.env['prestashop.res.partner.category'].with_delay(
- priority=10
- ).import_batch(backend=backend_record, filters=filters, **kwargs)
- self.env['prestashop.res.partner'].with_delay(
- priority=15
- ).import_batch(backend=backend_record, filters=filters, **kwargs)
- backend_record.import_partners_since = now_fmt
- return True
-
class PrestashopPartnerMixin(models.AbstractModel):
_name = 'prestashop.partner.mixin'
@@ -107,6 +87,24 @@ class PrestashopResPartner(models.Model):
newsletter = fields.Boolean(string='Newsletter')
birthday = fields.Date(string='Birthday')
+ def import_customers_since(
+ self, backend_record=None, since_date=None, **kwargs):
+ """ Prepare the import of partners modified on PrestaShop """
+ filters = None
+ if since_date:
+ filters = {
+ 'date': '1',
+ 'filter[date_upd]': '>[%s]' % since_date}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.res.partner.category'].with_delay(
+ priority=10
+ ).import_batch(backend=backend_record, filters=filters, **kwargs)
+ self.env['prestashop.res.partner'].with_delay(
+ priority=15
+ ).import_batch(backend=backend_record, filters=filters, **kwargs)
+ backend_record.import_partners_since = now_fmt
+ return True
+
class PrestashopAddressMixin(models.AbstractModel):
_name = 'prestashop.address.mixin'
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index fd9fea47c..034276c22 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -10,7 +10,7 @@
mapping,
only_create,
)
-from ...unit.importer import (
+from ...components.importer import (
PrestashopImporter,
import_batch,
DelayedBatchImporter,
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index b26753065..62125f796 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -3,7 +3,7 @@
from odoo import fields, models
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index 7fcdfc7b3..93ecb8350 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.importer import (
+from ...components.importer import (
TranslatableRecordImporter,
import_record,
DelayedBatchImporter,
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 10b771032..66fd98127 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -5,7 +5,7 @@
from odoo import models, fields, api
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
import logging
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index f9086ae8c..140cdfaf6 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -9,13 +9,13 @@
from odoo.addons.connector_ecommerce.unit.sale_order_onchange import (
SaleOrderOnChange,
)
-from ...unit.backend_adapter import GenericAdapter
-from ...unit.importer import (
+from ...components.backend_adapter import GenericAdapter
+from ...components.importer import (
PrestashopImporter,
import_batch,
DelayedBatchImporter,
)
-from ...unit.exception import OrderImportRuleRetry
+from ...components.exception import OrderImportRuleRetry
from ...backend import prestashop
from datetime import datetime, timedelta
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 5783d9136..52a6a9fc6 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index 87472f0d5..ced620a4c 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.importer import TranslatableRecordImporter, DirectBatchImporter
+from ...components.importer import TranslatableRecordImporter, DirectBatchImporter
from ...backend import prestashop
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
index 77fec3f20..6a80c5534 100644
--- a/connector_prestashop/models/stock_tracking/common.py
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...unit.backend_adapter import GenericAdapter
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index dc16096ff..246bb7f20 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -7,7 +7,7 @@
from odoo.exceptions import UserError
from odoo.addons.queue_job.job import job
from ...backend import prestashop
-from ...unit.backend_adapter import PrestaShopCRUDAdapter
+from ...components.backend_adapter import PrestaShopCRUDAdapter
_logger = logging.getLogger(__name__)
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
index e219f7344..6fe590492 100644
--- a/connector_prestashop/models/stock_warehouse/common.py
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -3,7 +3,7 @@
from odoo import api, fields, models
-from ...unit.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -56,6 +56,9 @@ def _compute_backend_id(self):
@prestashop
-class ShopAdapter(GenericAdapter):
+class ShopAdapter(Component):
+ _name = 'prestashop.shop'
_model_name = 'prestashop.shop'
+ _inherit = 'prestashop.adapter'
_prestashop_model = 'shops'
+ _apply_on = 'prestashop.shop'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index 510e42d3b..08390856d 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...unit.importer import PrestashopImporter, DirectBatchImporter
+from ...components.importer import PrestashopImporter, DirectBatchImporter
from odoo.addons.connector.unit.mapper import external_to_m2o
from ...backend import prestashop
From 8665bfe089aa06f64bbeb37a092daa3dcdd26536 Mon Sep 17 00:00:00 2001
From: Benoit
Date: Mon, 9 Apr 2018 09:14:42 +0200
Subject: [PATCH 06/99] [FIX+MIG] connector_prestashop: Continue migration
* migrate components
* port backend buttons remove GenericAdapter
* remove unit_for fix key version
* start fixing order import
* Component usage
* [FIX] product views
* [FIX] remove prestashop decorator and various fixes
---
.../components/auto_matching_importer.py | 5 +-
connector_prestashop/components/deleter.py | 2 +-
connector_prestashop/components/importer.py | 18 +--
.../components/version_key.py | 24 +++-
.../models/account_invoice/common.py | 16 ++-
.../models/account_invoice/importer.py | 23 +---
.../models/account_payment_mode/common.py | 4 +-
.../models/account_payment_mode/importer.py | 5 +-
.../models/account_tax/importer.py | 8 +-
.../models/account_tax_group/importer.py | 3 +-
.../models/delivery_carrier/common.py | 9 --
.../models/delivery_carrier/importer.py | 2 +-
.../models/mail_message/importer.py | 2 +-
.../models/prestashop_backend/common.py | 59 ++++-----
.../models/prestashop_backend/importer.py | 3 +-
.../models/product_category/importer.py | 11 +-
.../models/product_image/common.py | 13 +-
.../models/product_image/importer.py | 25 +---
.../models/product_pricelist/common.py | 8 +-
.../models/product_pricelist/importer.py | 21 ++-
.../models/product_product/common.py | 33 ++++-
.../models/product_product/importer.py | 73 ++++++-----
.../models/product_supplierinfo/common.py | 38 ++++--
.../models/product_supplierinfo/importer.py | 70 ++++------
.../models/product_template/common.py | 39 ++++--
.../models/product_template/exporter.py | 6 +-
.../models/product_template/importer.py | 121 ++++++++----------
.../models/res_country/common.py | 9 +-
.../models/res_country/importer.py | 5 +-
.../models/res_currency/common.py | 9 +-
.../models/res_currency/importer.py | 4 +-
.../models/res_lang/common.py | 9 +-
.../models/res_lang/importer.py | 5 +-
.../models/res_partner/common.py | 14 +-
.../models/res_partner/importer.py | 49 +++----
.../models/res_partner_category/common.py | 8 +-
.../models/res_partner_category/importer.py | 29 +++--
.../models/sale_order/common.py | 58 +++++++--
.../models/sale_order/importer.py | 107 ++++++----------
.../models/sale_order_state/common.py | 9 +-
.../models/sale_order_state/importer.py | 24 ++--
.../models/stock_tracking/common.py | 8 +-
.../models/stock_tracking/exporter.py | 5 +-
.../models/stock_warehouse/importer.py | 23 ++--
44 files changed, 545 insertions(+), 471 deletions(-)
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 6b5759888..971402eaa 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -3,7 +3,6 @@
import logging
-from odoo.addons.connector.unit.backend_adapter import BackendAdapter
from odoo.addons.component.core import Component
from odoo import _, exceptions
@@ -15,7 +14,6 @@ class AutoMatchingImporter(Component):
_name = 'prestashop.auto.matching.importer'
_inherit = 'prestashop.importer'
- _model_name = None
_erp_field = None
_ps_field = None
_copy_fields = []
@@ -36,8 +34,7 @@ def run(self):
model = self.env[erp_model_name].with_context(active_test=False)
erp_ids = model.search([])
erp_list_dict = erp_ids.read()
- # TODO: Fix
- adapter = self.unit_for(BackendAdapter)
+ adapter = self.component(usage='backend.adapter')
# Get the IDS from PS
ps_ids = adapter.search()
if not ps_ids:
diff --git a/connector_prestashop/components/deleter.py b/connector_prestashop/components/deleter.py
index 41643b38c..8d2324188 100644
--- a/connector_prestashop/components/deleter.py
+++ b/connector_prestashop/components/deleter.py
@@ -12,7 +12,7 @@
class PrestashopDeleter(AbstractComponent):
""" Base deleter for PrestaShop """
- _name = 'prestashop.exporter.deleter'
+ _name = 'prestashop.deleter'
_inherit = 'base.deleter'
_usage = 'record.exporter.deleter'
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index efc3f72da..a8f86c778 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -31,7 +31,6 @@ class PrestashopBaseImporter(AbstractComponent):
_name = 'prestashop.base.importer'
_inherit = ['base.importer', 'base.prestashop.connector']
- _usage = 'record.importer'
def _import_dependency(self, prestashop_id, binding_model,
importer_class=None, always=False,
@@ -62,7 +61,7 @@ class or parent class to use for the export.
importer_class = PrestashopImporter
binder = self.binder_for(binding_model)
if always or not binder.to_internal(prestashop_id):
- importer = self.unit_for(importer_class, model=binding_model)
+ importer = self.component(usage='prestashop.importer', model_name=binding_model)
importer.run(prestashop_id, **kwargs)
@@ -71,6 +70,7 @@ class PrestashopImporter(AbstractComponent):
_name = 'prestashop.importer'
_inherit = 'prestashop.base.importer'
+ _usage = 'record.importer'
def __init__(self, environment):
"""
@@ -364,11 +364,11 @@ class DirectBatchImporter(AbstractComponent):
_inherit = 'prestashop.batch.importer'
_model_name = None
- def _import_record(self, record):
+ def _import_record(self, external_id):
""" Import the record directly """
self.env[self.model._name].import_record(
backend=self.backend_record,
- prestashop_id=record)
+ prestashop_id=external_id)
class DelayedBatchImporter(AbstractComponent):
@@ -378,17 +378,17 @@ class DelayedBatchImporter(AbstractComponent):
_inherit = 'prestashop.batch.importer'
_model_name = None
- def _import_record(self, record, **kwargs):
+ def _import_record(self, external_id, **kwargs):
""" Delay the import of the records"""
self.env[self.model._name].with_delay().import_record(
backend=self.backend_record,
- prestashop_id=record,
+ prestashop_id=external_id,
**kwargs)
class TranslatableRecordImporter(AbstractComponent):
""" Import one translatable record """
- _name = 'translatable.record.importer'
+ _name = 'prestashop.translatable.record.importer'
_inherit = 'prestashop.importer'
_model_name = []
@@ -414,7 +414,7 @@ def _get_odoo_language(self, prestashop_id):
def find_each_language(self, record):
languages = {}
- for field in self._translatable_fields[self.connector_env.model_name]:
+ for field in self._translatable_fields[self.model._name]:
# TODO FIXME in prestapyt
if not isinstance(record[field]['language'], list):
record[field]['language'] = [record[field]['language']]
@@ -449,7 +449,7 @@ def _split_per_language(self, record, fields=None):
_('No language mapping defined. '
'Run "Synchronize base data".')
)
- model_name = self.connector_env.model_name
+ model_name = self.model._name
for language_id, language_code in languages.iteritems():
split_record[language_code] = record.copy()
_fields = self._translatable_fields[model_name]
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index dcde1670d..9e8bb07dd 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -2,13 +2,21 @@
# Copyright 2016 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.connector import ConnectorUnit
+from odoo import models
+from odoo.addons.component.core import Component
from ..backend import prestashop, prestashop_1_6_0_9, prestashop_1_6_1_2
+class VersionKeyModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '_prestashop.version.key'
+
+
@prestashop
-class VersionKey(ConnectorUnit):
- _model_name = '_prestashop.version.key'
+class VersionKey(Component):
+ _name = '_prestashop.version.key'
+ _apply_on = '_prestashop.version.key'
+ _usage = 'prestashop.version.key'
keys = {}
@@ -17,7 +25,10 @@ def get_key(self, key):
@prestashop_1_6_0_9
-class VersionKey_1_6_0_9(VersionKey):
+class VersionKey_1_6_0_9(Component):
+ _name = '_prestashop.version.key.1.6.0.9'
+ _inherit = '_prestashop.version.key'
+ _usage = 'prestashop.version.key.1.6.0.9'
keys = {
'product_option_value': 'product_option_values',
@@ -35,7 +46,10 @@ class VersionKey_1_6_0_9(VersionKey):
@prestashop_1_6_1_2
-class VersionKey_1_6_1_2(VersionKey):
+class VersionKey_1_6_1_2(Component):
+ _name = '_prestashop.version.key.1.6.1.2'
+ _inherit = '_prestashop.version.key'
+ _usage = 'prestashop.version.key.1.6.1.2'
# keys checked in 1.6.1.9:
# * customer_messages
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
index 007022453..e63164166 100644
--- a/connector_prestashop/models/account_invoice/common.py
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -77,10 +77,18 @@ class PrestashopRefund(models.Model):
oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
+ def import_refunds(self, backend, since_date, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.refund'].with_delay().import_batch(
+ backend,
+ filters,
+ **kwargs
+ )
+ backend.import_refunds_since = now_fmt
+ return True
class RefundAdapter(Component):
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index dbbee8980..8ccb6bf28 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -5,9 +5,8 @@
from odoo.addons.connector.exception import MappingError
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (
+from odoo.addons.connector.components.mapper import (
mapping,
- ImportMapper,
only_create,
)
from ...components.importer import (
@@ -253,23 +252,3 @@ class RefundBatchImporter(Component):
_apply_on = 'prestashop.refund'
_model_name = 'prestashop.refund'
-
-
-# TODO: Move it
-@job(default_channel='root.prestashop')
-def import_refunds(session, backend_id, since_date, **kwargs):
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- result = import_batch(
- session,
- 'prestashop.refund',
- backend_id,
- filters,
- **kwargs
- )
- session.env['prestashop.backend'].browse(backend_id).write({
- 'import_refunds_since': now_fmt
- })
- return result
diff --git a/connector_prestashop/models/account_payment_mode/common.py b/connector_prestashop/models/account_payment_mode/common.py
index b74626980..b7b807f4c 100644
--- a/connector_prestashop/models/account_payment_mode/common.py
+++ b/connector_prestashop/models/account_payment_mode/common.py
@@ -25,13 +25,13 @@ def search(self, filters=None):
class PaymentModeBinder(Component):
_name = 'account.payment.mode.binder'
- _inherit_id = 'prestashop.binder'
+ _inherit = 'prestashop.binder'
_apply_on = 'account.payment.mode'
_model_name = 'account.payment.mode'
_external_field = 'name'
- def to_openerp(self, external_id, unwrap=False, company=None):
+ def to_internal(self, external_id, unwrap=False, company=None):
if company is None:
company = self.backend_record.company_id
bindings = self.model.with_context(active_test=False).search(
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index 7fc67e72d..7e26d5473 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -47,7 +47,4 @@ def _import_record(self, record, **kwargs):
'fixed_journal_id': journals.id,
'payment_method_id': payment_method.id
})
- self.backend_record.add_checkpoint(
- model=self.model._name,
- record_id=mode.id,
- )
+ self.backend_record.add_checkpoint(mode)
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index 9fa6a5b07..aae64e2f5 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,15 +1,15 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.component.core import Component
+from ...components.auto_matching_importer import AutoMatchingImporter
+from ...backend import prestashop
-class AccountTaxImporter(Component):
+@prestashop
+class AccountTaxImporter(AutoMatchingImporter):
_name = 'prestashop.account.tax.importer'
- _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.account.tax'
- _model_name = 'prestashop.account.tax'
_erp_field = 'amount'
_ps_field = 'rate'
diff --git a/connector_prestashop/models/account_tax_group/importer.py b/connector_prestashop/models/account_tax_group/importer.py
index f765b43e0..8860258ea 100644
--- a/connector_prestashop/models/account_tax_group/importer.py
+++ b/connector_prestashop/models/account_tax_group/importer.py
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import (
- ImportMapper,
+from odoo.addons.connector.components.mapper import (
mapping,
only_create,
)
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index 4890fcb1d..30ece8b08 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -38,15 +38,6 @@ class PrestashopDeliveryCarrier(models.Model):
string='Export tracking numbers to PrestaShop',
)
- def import_carriers(self, backend, **kwargs):
- return import_batch(
- session,
- 'prestashop.delivery.carrier',
- backend_id,
- priority=5,
- **kwargs
- )
-
class DeliveryCarrier(models.Model):
_inherit = "delivery.carrier"
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index aa0fbe897..ac23c1562 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
-from odoo.addons.connector.unit.mapper import mapping, ImportMapper
+from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
diff --git a/connector_prestashop/models/mail_message/importer.py b/connector_prestashop/models/mail_message/importer.py
index bb3fbc533..4f0114f7a 100644
--- a/connector_prestashop/models/mail_message/importer.py
+++ b/connector_prestashop/models/mail_message/importer.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 08ee9f765..5fc694338 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -7,18 +7,12 @@
from odoo import models, fields, api, exceptions, _
-from odoo.addons.connector.connector import ConnectorEnvironment
from ...components.importer import import_batch, import_record
from ...components.auto_matching_importer import AutoMatchingImporter
-from ...components.backend_adapter import GenericAdapter, api_handle_errors
+from ...components.backend_adapter import api_handle_errors
from ...components.version_key import VersionKey
from ...backend import prestashop
-
-from ..product_template.importer import import_inventory
-from ..product_supplierinfo.importer import import_suppliers
-from ..account_invoice.importer import import_refunds
-from ..sale_order.importer import import_orders_since
-
+from odoo.addons.connector.checkpoint import checkpoint
_logger = logging.getLogger(__name__)
@@ -28,6 +22,13 @@ class PrestashopBackend(models.Model):
_description = 'PrestaShop Backend Configuration'
_inherit = 'connector.backend'
+ _versions = {
+ '1.5': 'prestashop.version.key',
+ '1.6.0.9': 'prestashop.version.key.1.6.0.9',
+ '1.6.0.11': 'prestashop.version.key.1.6.0.9',
+ '1.6.1.2': 'prestashop.version.key.1.6.1.2'
+ }
+
@api.model
def select_versions(self):
""" Available versions
@@ -123,9 +124,11 @@ def _default_pricelist_id(self):
return self.env['product.pricelist'].search([], limit=1)
@api.multi
- def get_environment(self, model_name,):
+ def add_checkpoint(self, record):
self.ensure_one()
- return ConnectorEnvironment(self, model_name)
+ record.ensure_one()
+ return checkpoint.add_checkpoint(self.env, record._name, record.id,
+ self._name, self.id)
@api.multi
def synchronize_metadata(self):
@@ -173,7 +176,7 @@ def button_check_connection(self):
def import_customers_since(self):
for backend_record in self:
since_date = backend_record.import_partners_since
- backend_record.with_delay(priority=10).import_customers_since(
+ self.env['prestashop.res.partner'].import_customers_since(
backend_record=backend_record,
since_date=since_date)
return True
@@ -182,8 +185,8 @@ def import_customers_since(self):
def import_products(self):
for backend_record in self:
since_date = backend_record.import_products_since
- backend_record.env['prestashop.product.template'].with_delay(
- priority=10).import_products(backend_record, since_date)
+ self.env['prestashop.product.template'].import_products(
+ backend_record, since_date)
return True
@api.multi
@@ -205,18 +208,16 @@ def update_product_stock_qty(self):
@api.multi
def import_stock_qty(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
- import_inventory.delay(session, backend_record.id)
+ backend_record.env['prestashop.product.template']\
+ .with_delay().import_inventory(backend_record)
@api.multi
def import_sale_orders(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_orders_since
- import_orders_since.delay(
- session,
- backend_record.id,
+ backend_record.env['prestashop.sale.order'].import_orders_since(
+ backend_record,
since_date,
priority=5,
)
@@ -224,33 +225,33 @@ def import_sale_orders(self):
@api.multi
def import_payment_modes(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
- import_batch.delay(session, 'account.payment.mode',
- backend_record.id)
+ with backend_record.work_on('account.payment.mode') as work:
+ importer = work.component(usage='batch.importer')
+ importer.run(filters={})
return True
@api.multi
def import_refunds(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_refunds_since
- import_refunds.delay(session, backend_record.id, since_date)
+ backend_record.env['prestashop.refund'].import_refunds(
+ backend_record, since_date)
return True
@api.multi
def import_suppliers(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_suppliers_since
- import_suppliers.delay(session, backend_record.id, since_date)
+ backend_record.env['prestashop.supplier'].import_suppliers(
+ backend_record, since_date)
return True
def get_version_ps_key(self, key):
self.ensure_one()
- env = self.get_environment('_prestashop.version.key')
- keys = env.get_connector_unit(VersionKey)
- return keys.get_key(key)
+ with self.work_on('_prestashop.version.key') as work:
+ keys = work.component(usage=self._versions[self.version])
+ return keys.get_key(key)
@api.model
def _scheduler_update_product_stock_qty(self, domain=None):
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index b7a2080b9..6ef69e3e5 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -2,10 +2,9 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...components.importer import PrestashopImporter, DirectBatchImporter
from ...backend import prestashop
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
class ShopGroupImportMapper(Component):
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index b85711181..2a4136581 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -2,11 +2,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
-from odoo.addons.connector.unit.mapper import (mapping,
- ImportMapper)
-from odoo.addons.connector.unit.mapper import external_to_m2o
-from ...components.importer import TranslatableRecordImporter, DelayedBatchImporter
+
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.connector.unit.mapper import external_to_m2o
import datetime
import logging
@@ -68,9 +67,9 @@ def data_upd(self, record):
return {'date_upd': record['date_upd']}
-class ProductCategoryImporter(TranslatableRecordImporter):
+class ProductCategoryImporter(Component):
_name = 'prestashop.product.category.importer'
- _inherit = 'translatable.record.importer'
+ _inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.category'
_model_name = 'prestashop.product.category'
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index dd50ef5f2..002349381 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -2,7 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import base64
-from odoo import models, fields
+from odoo import models, fields, api
+from odoo.addons.queue_job.job import job
from odoo.addons.component.core import AbstractComponent
from ...components.backend_adapter import PrestaShopWebServiceImage
@@ -35,6 +36,16 @@ class PrestashopProductImage(models.Model):
]
+ @job(default_channel='root.prestashop')
+ @api.multi
+ def import_product_image(self, backend, product_tmpl_id, image_id, **kwargs):
+ """Import a product image"""
+ self.ensure_one()
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='prestashop.importer')
+ return importer.run(product_tmpl_id, image_id)
+
+
class ProductImageAdapter(AbstractComponent):
_name = 'prestashop.product.image.adapter'
_inherit = 'prestashop.crud.adapter'
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 54ffcc04d..1b278f291 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -2,13 +2,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (mapping,
- ImportMapper)
+from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
from ...backend import prestashop
-from ...components.importer import PrestashopImporter
import mimetypes
import logging
@@ -102,23 +99,3 @@ def run(self, template_id, image_id, **kwargs):
'Error: `%s`'
) % (image_id, template_id, error.msg)
self.backend_record.add_checkpoint(message=msg)
-
-# TODO: Continue here
-@job(default_channel='root.prestashop')
-def import_product_image(session, model_name, backend_id, product_tmpl_id,
- image_id, **kwargs):
- """Import a product image"""
- backend = session.env['prestashop.backend'].browse(backend_id)
- env = backend.get_environment(model_name, session=session)
- with env.session.change_context(ctx):
- importer = env.get_connector_unit(PrestashopImporter)
- return importer.run(product_tmpl_id, image_id)
-
-
-@job(default_channel='root.prestashop')
-def set_product_image_variant(
- session, model_name, backend_id, combination_ids):
- backend = session.env['prestashop.backend'].browse(backend_id)
- env = backend.get_environment(model_name, session=session)
- importer = env.get_connector_unit(PrestashopImporter)
- importer.set_variant_images(combination_ids, **kwargs)
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index 148d37fc4..7f5fefc16 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -3,7 +3,7 @@
from odoo import fields, models
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -36,6 +36,8 @@ class PrestashopGroupsPricelist(models.Model):
@prestashop
-class PricelistAdapter(GenericAdapter):
- _model_name = 'prestashop.groups.pricelist'
+class PricelistAdapter(Component):
+ _name = 'prestashop.groups.pricelist.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.groups.pricelist'
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index bc3043287..94c639c77 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -1,17 +1,16 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import (
- ImportMapper,
- mapping,
-)
-from ...components.importer import TranslatableRecordImporter
+from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
from ...backend import prestashop
@prestashop
-class ProductPricelistMapper(ImportMapper):
- _model_name = 'prestashop.groups.pricelist'
+class ProductPricelistMapper(Component):
+ _name = 'prestashop.groups.pricelist.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.groups.pricelist'
direct = [
('name', 'name'),
@@ -42,10 +41,10 @@ def versions(self, record):
@prestashop
-class ProductPricelistImporter(TranslatableRecordImporter):
- _model_name = [
- 'prestashop.groups.pricelist',
- ]
+class ProductPricelistImporter(Component):
+ _name = 'prestashop.groups.pricelist.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.groups.pricelist'
_translatable_fields = {
'prestashop.groups.pricelist': ['name'],
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index aa2efd0cc..d46c85b79 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -7,9 +7,9 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
from exporter import CombinationInventoryExporter
+from odoo.addons.component.core import Component
class ProductProduct(models.Model):
@@ -194,6 +194,13 @@ def export_product_quantities(self, backend):
]).recompute_prestashop_qty()
+ @job(default_channel='root.prestashop')
+ def set_product_image_variant(self, backend, combination_ids, **kwargs):
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='prestashop.importer')
+ return importer.set_variant_images(combination_ids, **kwargs)
+
+
class ProductAttribute(models.Model):
_inherit = 'product.attribute'
@@ -260,14 +267,30 @@ class PrestashopProductCombinationOptionValue(models.Model):
@prestashop
-class ProductCombinationAdapter(GenericAdapter):
- _model_name = 'prestashop.product.combination'
+class ProductCombinationAdapter(Component):
+ _name = 'prestashop.product.combination.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.combination'
+
_prestashop_model = 'combinations'
_export_node_name = 'combination'
@prestashop
-class ProductCombinationOptionAdapter(GenericAdapter):
- _model_name = 'prestashop.product.combination.option'
+class ProductCombinationOptionAdapter(Component):
+ _name = 'prestashop.product.combination.option.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.combination.option'
+
_prestashop_model = 'product_options'
_export_node_name = 'product_options'
+
+
+@prestashop
+class ProductCombinationOptionValueAdapter(Component):
+ _name = 'prestashop.product.combination.option.value.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.combination.option.value'
+
+ _prestashop_model = 'product_option_values'
+ _export_node_name = 'product_option_value'
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index ed88dc1e6..109ae56f8 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -4,10 +4,9 @@
from odoo import models
from odoo.addons.connector.unit.backend_adapter import BackendAdapter
-from odoo.addons.connector.unit.mapper import (
+from odoo.addons.connector.components.mapper import (
mapping,
only_create,
- ImportMapper,
)
from ...components.importer import (
PrestashopImporter,
@@ -15,8 +14,9 @@
TranslatableRecordImporter,
DelayedBatchImporter,
)
-from ...components.backend_adapter import GenericAdapter, PrestaShopCRUDAdapter
+from ...components.backend_adapter import PrestaShopCRUDAdapter
from ...backend import prestashop
+from odoo.addons.component.core import Component
import logging
_logger = logging.getLogger(__name__)
@@ -27,8 +27,10 @@
@prestashop
-class ProductCombinationImporter(PrestashopImporter):
- _model_name = 'prestashop.product.combination'
+class ProductCombinationImporter(Component):
+ _name = 'prestashop.product.combination.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.product.combination'
def _import_dependencies(self):
record = self.prestashop_record
@@ -37,8 +39,9 @@ def _import_dependencies(self):
'product_option_values', {}).get(ps_key, [])
if not isinstance(option_values, list):
option_values = [option_values]
- backend_adapter = self.unit_for(
- BackendAdapter, 'prestashop.product.combination.option.value')
+ backend_adapter = self.component(
+ usage='prestashop.adapter',
+ model_name='prestashop.product.combination.option.value')
for option_value in option_values:
option_value = backend_adapter.read(option_value['id'])
self._import_dependency(
@@ -53,8 +56,9 @@ def _after_import(self, binding):
self.import_supplierinfo(binding)
def set_variant_images(self, combinations):
- backend_adapter = self.unit_for(
- PrestaShopCRUDAdapter, 'prestashop.product.combination')
+ backend_adapter = self.component(
+ usage='prestashop.adapter',
+ model_name='prestashop.product.combination')
for combination in combinations:
try:
record = backend_adapter.read(combination['id'])
@@ -106,8 +110,10 @@ def import_supplierinfo(self, binding):
@prestashop
-class ProductCombinationMapper(ImportMapper):
- _model_name = 'prestashop.product.combination'
+class ProductCombinationMapper(Component):
+ _name = 'prestashop.product.combination.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.combination'
direct = [
]
@@ -216,8 +222,10 @@ def barcode(self, record):
barcode = record.get('barcode') or record.get('ean13')
check_ean = self.env['barcode.nomenclature'].check_ean
if barcode in ['', '0']:
- backend_adapter = self.unit_for(
- GenericAdapter, 'prestashop.product.template')
+ backend_adapter = self.component(
+ usage='prestashop.adapter',
+ model_name='prestashop.product.template'
+ )
template = backend_adapter.read(record['id_product'])
barcode = template.get('barcode') or template.get('ean13')
if barcode and barcode != '0' and check_ean(barcode):
@@ -225,8 +233,8 @@ def barcode(self, record):
return {}
def _get_tax_ids(self, record):
- product_tmpl_adapter = self.unit_for(
- GenericAdapter, 'prestashop.product.template')
+ product_tmpl_adapter = self.component(
+ usage='prestashop.adapter', model_name='prestashop.product.template')
tax_group = product_tmpl_adapter.read(record['id_product'])
tax_group = self.binder_for('prestashop.account.tax.group').to_internal(
tax_group['id_tax_rules_group'], unwrap=True)
@@ -272,8 +280,10 @@ def odoo_id(self, record):
@prestashop
-class ProductCombinationOptionImporter(PrestashopImporter):
- _model_name = 'prestashop.product.combination.option'
+class ProductCombinationOptionImporter(Component):
+ _name = 'prestashop.product.combination.option.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.product.combination.option'
def _import_values(self, attribute_binding):
record = self.prestashop_record
@@ -294,8 +304,10 @@ def _after_import(self, binding):
@prestashop
-class ProductCombinationOptionMapper(ImportMapper):
- _model_name = 'prestashop.product.combination.option'
+class ProductCombinationOptionMapper(Component):
+ _name = 'prestashop.product.combination.option.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.combination.option'
direct = []
@@ -338,15 +350,10 @@ def name(self, record):
@prestashop
-class ProductCombinationOptionValueAdapter(GenericAdapter):
- _model_name = 'prestashop.product.combination.option.value'
- _prestashop_model = 'product_option_values'
- _export_node_name = 'product_option_value'
-
-
-@prestashop
-class ProductCombinationOptionValueImporter(TranslatableRecordImporter):
- _model_name = 'prestashop.product.combination.option.value'
+class ProductCombinationOptionValueImporter(Component):
+ _name = 'prestashop.product.combination.option.value.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.product.combination.option.value'
_translatable_fields = {
'prestashop.product.combination.option.value': ['name'],
@@ -354,8 +361,10 @@ class ProductCombinationOptionValueImporter(TranslatableRecordImporter):
@prestashop
-class ProductCombinationOptionValueMapper(ImportMapper):
- _model_name = 'prestashop.product.combination.option.value'
+class ProductCombinationOptionValueMapper(Component):
+ _name = 'prestashop.product.combination.option.value.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.product.combination.option.value'
direct = [
('name', 'name'),
@@ -392,5 +401,7 @@ def backend_id(self, record):
@prestashop
-class ProductProductBatchImporter(DelayedBatchImporter):
+class ProductProductBatchImporter(Component):
+ _name = 'prestashop.product.product.batch.importer'
+ _model_name = 'prestashop.direct.batch.importer'
_model_name = 'prestashop.product.product'
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index 15736c450..1a08352db 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -3,10 +3,9 @@
from odoo import models, fields
+from odoo.addons.component.core import Component
from ...components.backend_adapter import (
- PrestaShopCRUDAdapter,
PrestaShopWebServiceImage,
- GenericAdapter,
)
from ...backend import prestashop
@@ -34,6 +33,23 @@ class PrestashopSupplier(models.Model):
oldname='openerp_id',
)
+ def import_suppliers(self, backend, since_date, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.supplier'].with_delay().import_batch(
+ backend,
+ filters,
+ **kwargs
+ )
+ self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
+ backend,
+ **kwargs
+ )
+ backend.import_suppliers_since = now_fmt
+ return True
+
class ProductSupplierinfo(models.Model):
_inherit = 'product.supplierinfo'
@@ -65,8 +81,10 @@ class PrestashopProductSupplierinfo(models.Model):
@prestashop
-class SupplierImageAdapter(PrestaShopCRUDAdapter):
- _model_name = 'prestashop.supplier.image'
+class SupplierImageAdapter(Component):
+ _name = 'prestashop.supplier.image.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.supplier.image'
_prestashop_image_model = 'suppliers'
def read(self, supplier_id, options=None):
@@ -81,12 +99,16 @@ def read(self, supplier_id, options=None):
@prestashop
-class SupplierAdapter(GenericAdapter):
- _model_name = 'prestashop.supplier'
+class SupplierAdapter(Component):
+ _name = 'prestashop.supplier.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.supplier'
_prestashop_model = 'suppliers'
@prestashop
-class SupplierInfoAdapter(GenericAdapter):
- _model_name = 'prestashop.product.supplierinfo'
+class SupplierInfoAdapter(Component):
+ _name = 'prestashop.product.supplierinfo.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.supplierinfo'
_prestashop_model = 'product_suppliers'
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 1b9375922..6ac5bb82b 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -4,13 +4,12 @@
from odoo import fields
from odoo.addons.queue_job.exception import FailedJobError
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
from ...components.backend_adapter import PrestaShopCRUDAdapter
from ...components.importer import (
- PrestashopImporter,
import_batch,
- DelayedBatchImporter,
)
from ...backend import prestashop
@@ -23,8 +22,10 @@
@prestashop
-class SupplierMapper(ImportMapper):
- _model_name = 'prestashop.supplier'
+class SupplierMapper(Component):
+ _name = 'prestashop.supplier.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.supplier'
direct = [
('name', 'name'),
@@ -50,8 +51,8 @@ def supplier(self, record):
@mapping
def image(self, record):
- supplier_image_adapter = self.unit_for(
- PrestaShopCRUDAdapter, 'prestashop.supplier.image'
+ supplier_image_adapter = self.component(
+ usage='prestashop.adapter', model_name='prestashop.supplier.image'
)
try:
return {'image': supplier_image_adapter.read(record['id'])}
@@ -60,9 +61,11 @@ def image(self, record):
@prestashop
-class SupplierImporter(PrestashopImporter):
+class SupplierImporter(Component):
""" Import one simple record """
- _model_name = 'prestashop.supplier'
+ _name = 'prestashop.supplier.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.supplier'
def _create(self, record):
try:
@@ -85,13 +88,17 @@ def _after_import(self, binding):
@prestashop
-class SupplierBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.supplier'
+class SupplierBatchImporter(Component):
+ _name = 'prestashop.supplier.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.supplier'
@prestashop
-class SupplierInfoMapper(ImportMapper):
- _model_name = 'prestashop.product.supplierinfo'
+class SupplierInfoMapper(Component):
+ _name = 'prestashop.product.supplierinfo.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.supplierinfo'
direct = [
('product_supplier_reference', 'product_code'),
@@ -134,8 +141,10 @@ def required(self, record):
@prestashop
-class SupplierInfoImporter(PrestashopImporter):
- _model_name = 'prestashop.product.supplierinfo'
+class SupplierInfoImporter(Component):
+ _name = 'prestashop.product.supplierinfo.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.product.supplierinfo'
def _import_dependencies(self):
record = self.prestashop_record
@@ -157,30 +166,7 @@ def _import_dependencies(self):
@prestashop
-class SupplierInfoBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.product.supplierinfo'
-
-
-@job(default_channel='root.prestashop')
-def import_suppliers(session, backend_id, since_date, **kwargs):
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- result = import_batch(
- session,
- 'prestashop.supplier',
- backend_id,
- filters,
- **kwargs
- ) or ''
- result += import_batch(
- session,
- 'prestashop.product.supplierinfo',
- backend_id,
- **kwargs
- ) or ''
- session.env['prestashop.backend'].browse(backend_id).write({
- 'import_suppliers_since': now_fmt
- })
- return result
+class SupplierInfoBatchImporter(Component):
+ _name = 'prestashop.product.supplierinfo.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.product.supplierinfo'
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 1c17d5521..3133127b7 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -7,7 +7,7 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
from exporter import ProductInventoryExporter
@@ -145,19 +145,36 @@ def import_products(self, backend, since_date=None, **kwargs):
filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
now_fmt = fields.Datetime.now()
- result = self.env['prestashop.product.category'].with_delay(
- priority=10).import_batch(backend, filters=filters) or ''
+ self.env['prestashop.product.category'].with_delay(
+ priority=10).import_batch(backend, filters=filters or '')
- result += self.env['prestashop.product.template'].with_delay(
- priority=15).import_batch(backend, filters=filters) or ''
+ self.env['prestashop.product.template'].with_delay(
+ priority=15).import_batch(backend, filters=filters or '')
backend.import_products_since = now_fmt
- return result
+ return True
+
+ @job(default_channel='root.prestashop')
+ def import_inventory(sel, backend):
+ with backend.work_on('_import_stock_available') as work:
+ importer = work.component(usage='prestashop.importer')
+ return importer.set_variant_images()
+
+
+@prestashop
+class TemplateAdapter(Component):
+ _name = 'prestashop.product.template.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.template'
+ _prestashop_model = 'products'
+ _export_node_name = 'product'
@prestashop
-class ProductInventoryAdapter(GenericAdapter):
- _model_name = '_import_stock_available'
+class ProductInventoryAdapter(Component):
+ _name = '_import_stock_available.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = '_import_stock_available'
_prestashop_model = 'stock_availables'
_export_node_name = 'stock_available'
@@ -195,8 +212,10 @@ def export_quantity_url(self, filters, quantity, client=None):
@prestashop
-class PrestashopProductTags(GenericAdapter):
- _model_name = '_prestashop_product_tag'
+class PrestashopProductTags(Component):
+ _name = 'prestashop.product.tag.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = '_prestashop_product_tag'
_prestashop_model = 'tags'
_export_node_name = 'tag'
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index d8fa189d5..e440b6759 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -5,7 +5,7 @@
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.synchronizer import Exporter
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -24,7 +24,9 @@ def get_filter(self, template):
def run(self, binding_id, fields, **kwargs):
""" Export the product inventory to PrestaShop """
template = self.model.browse(binding_id)
- adapter = self.unit_for(GenericAdapter, '_import_stock_available')
+ adapter = self.component(
+ usage='prestashop.adapter', model_name='_import_stock_available'
+ )
filter = self.get_filter(template)
adapter.export_quantity(filter, int(template.quantity))
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index de2440b38..5e7262c97 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -3,27 +3,17 @@
from odoo import _, models, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (
+from odoo.addons.connector.components.mapper import (
mapping,
only_create,
- ImportMapper
)
-
from ...components.importer import (
- DelayedBatchImporter,
import_record,
import_batch,
- PrestashopImporter,
- PrestashopBaseImporter,
- TranslatableRecordImporter,
)
from odoo.addons.connector.unit.mapper import external_to_m2o
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
-from ..product_image.importer import (
- import_product_image,
- set_product_image_variant,
-)
import datetime
import logging
@@ -46,8 +36,10 @@
@prestashop
-class TemplateMapper(ImportMapper):
- _model_name = 'prestashop.product.template'
+class TemplateMapper(Component):
+ _name = 'prestashop.product.template.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.template'
direct = [
('weight', 'weight'),
@@ -85,7 +77,9 @@ def tags_to_text(self, record):
associations = record.get('associations', {})
tags = associations.get('tags', {}).get(
self.backend_record.get_version_ps_key('tag'), [])
- tag_adapter = self.unit_for(GenericAdapter, '_prestashop_product_tag')
+ tag_adapter = self.component(
+ usage='prestashop.adapter', model_name='_prestashop_product_tag'
+ )
if not isinstance(tags, list):
tags = [tags]
if tags:
@@ -270,20 +264,23 @@ def type(self, record):
@mapping
def extras_features(self, record):
- mapper = self.unit_for(FeaturesProductImportMapper)
+ mapper = self.component(usage='feature.product.import.mapper')
return mapper.map_record(record).values(**self.options)
@mapping
def extras_manufacturer(self, record):
- mapper = self.unit_for(ManufacturerProductImportMapper)
+ mapper = self.component(usage='manufacturer.product.import.mapper')
return mapper.map_record(record).values(**self.options)
@prestashop
-class FeaturesProductImportMapper(ImportMapper):
+class FeaturesProductImportMapper(Component):
# To extend in connector_prestashop_feature module. In this way we
# dependencies on other modules like product_custom_info
- _model_name = 'prestashop.product.template'
+ _name = 'prestashop.product.template.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'feature.product.import.mapper'
@mapping
def extras_features(self, record):
@@ -291,41 +288,42 @@ def extras_features(self, record):
@prestashop
-class ManufacturerProductDependency(PrestashopBaseImporter):
+class ManufacturerProductDependency(Component):
# To extend in connector_prestashop_feature module. In this way we
# dependencies on other modules like product_manufacturer
- _model_name = 'prestashop.product.template'
+ _name = 'prestashop.product.template.manufacturer.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'manufacturer.product.importer'
def import_manufacturer(self, manufacturer_id):
return
@prestashop
-class ManufacturerProductImportMapper(ImportMapper):
+class ManufacturerProductImportMapper(Component):
# To extend in connector_prestashop_manufacturer module. In this way we
# dependencies on other modules like product_manufacturer
- _model_name = 'prestashop.product.template'
+ _name = 'prestashop.product.template.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'manufacturer.product.import.mapper'
@mapping
def extras_manufacturer(self, record):
return {}
-@prestashop
-class TemplateAdapter(GenericAdapter):
- _model_name = 'prestashop.product.template'
- _prestashop_model = 'products'
- _export_node_name = 'product'
-
-
class ImportInventory(models.TransientModel):
# In actual connector version is mandatory use a model
_name = '_import_stock_available'
@prestashop
-class ProductInventoryBatchImporter(DelayedBatchImporter):
- _model_name = ['_import_stock_available']
+class ProductInventoryBatchImporter(Component):
+ _name = '_import_stock_available.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = '_import_stock_available'
def run(self, filters=None, **kwargs):
if filters is None:
@@ -354,8 +352,10 @@ def _import_record(self, record_id, record=None, **kwargs):
@prestashop
-class ProductInventoryImporter(PrestashopImporter):
- _model_name = ['_import_stock_available']
+class ProductInventoryImporter(Component):
+ _name = 'prestashop.product.inventory.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = ['_import_stock_available']
def _get_quantity(self, record):
filters = {
@@ -429,11 +429,11 @@ def _import(self, binding, **kwargs):
@prestashop
-class ProductTemplateImporter(TranslatableRecordImporter):
+class ProductTemplateImporter(Component):
""" Import one translatable record """
- _model_name = [
- 'prestashop.product.template',
- ]
+ _name = 'prestashop.product.template.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.product.template'
_base_mapper = TemplateMapper
@@ -518,14 +518,11 @@ def _import_combination(self, combination, **kwargs):
**kwargs)
def _delay_product_image_variant(self, combinations, **kwargs):
- set_product_image_variant.delay(
- self.session,
- 'prestashop.product.combination',
- self.backend_record.id,
+ delayable = self.env['prestashop.product.combination'].with_delay(priority=15)
+ delayable.set_product_image_variant(
+ self.backend_record,
combinations,
- priority=15,
- **kwargs
- )
+ **kwargs)
def import_combinations(self):
prestashop_record = self._get_prestashop_data()
@@ -550,17 +547,6 @@ def import_combinations(self):
if combinations and associations['images'].get('image'):
self._delay_product_image_variant(combinations)
- def _delay_import_product_image(self, prestashop_record, image, **kwargs):
- import_product_image.delay(
- self.session,
- 'prestashop.product.image',
- self.backend_record.id,
- prestashop_record['id'],
- image['id'],
- priority=10,
- **kwargs
- )
-
def import_images(self, binding):
prestashop_record = self._get_prestashop_data()
associations = prestashop_record.get('associations', {})
@@ -570,7 +556,12 @@ def import_images(self, binding):
images = [images]
for image in images:
if image.get('id'):
- self._delay_import_product_image(prestashop_record, image)
+ delayable = self.env['prestashop.product.image'].with_delay(priority=10)
+ delayable.import_product_image(
+ self.backend_record,
+ prestashop_record['id'],
+ image['id'],
+ **kwargs)
def import_supplierinfo(self, binding):
ps_id = self._get_prestashop_data()['id']
@@ -599,7 +590,7 @@ def _import_dependencies(self):
self._import_manufacturer()
def _import_manufacturer(self):
- self.unit_for(ManufacturerProductDependency).import_manufacturer(
+ self.component(usage='manufacturer.product.importer').import_manufacturer(
self.prestashop_record.get('id_manufacturer')
)
@@ -632,14 +623,8 @@ def _import_categories(self):
'prestashop.product.category')
-@job(default_channel='root.prestashop')
-def import_inventory(session, backend_id):
- backend = session.env['prestashop.backend'].browse(backend_id)
- env = backend.get_environment('_import_stock_available', session=session)
- inventory_importer = env.get_connector_unit(ProductInventoryBatchImporter)
- return inventory_importer.run()
-
-
@prestashop
-class ProductTemplateBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.product.template'
+class ProductTemplateBatchImporter(Component):
+ _name = 'prestashop.product.template.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.product.template'
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index 1ce5c2f66..d16f9f535 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -4,7 +4,7 @@
from odoo import fields, models
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -37,6 +37,9 @@ class ResCountry(models.Model):
@prestashop
-class ResCountryAdapter(GenericAdapter):
- _model_name = 'prestashop.res.country'
+class ResCountryAdapter(Component):
+ _name = 'prestashop.res.country.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.res.country'
+
_prestashop_model = 'countries'
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index 2f35a2923..f9e02b9a5 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -1,14 +1,15 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
@prestashop
class CountryImporter(AutoMatchingImporter):
- _model_name = 'prestashop.res.country'
+ _name = 'prestashop.res.country.importer'
+ _apply_on = 'prestashop.res.country'
+
_erp_field = 'code'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 67825f230..79c949413 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -4,7 +4,7 @@
from odoo import fields, models
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -38,6 +38,9 @@ class ResCurrency(models.Model):
@prestashop
-class ResCurrencyAdapter(GenericAdapter):
- _model_name = 'prestashop.res.currency'
+class ResCurrencyAdapter(Component):
+ _name = 'prestashop.res.currency.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.res.currency'
+
_prestashop_model = 'currencies'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index 0ff4a82aa..8b2070fa1 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -8,7 +8,9 @@
@prestashop
class ResCurrencyImporter(AutoMatchingImporter):
- _model_name = 'prestashop.res.currency'
+ _name = 'prestashop.res.currency.importer'
+ _apply_on = 'prestashop.res.currency'
+
_erp_field = 'name'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index b574d811c..a5abe4473 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -4,7 +4,7 @@
from odoo import models, fields
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -42,6 +42,9 @@ class ResLang(models.Model):
@prestashop
-class ResLangAdapter(GenericAdapter):
- _model_name = 'prestashop.res.lang'
+class ResLangAdapter(Component):
+ _name = 'prestashop.res.lang.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.res.lang'
+
_prestashop_model = 'languages'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index 49c3dcb02..f5f2fb5c4 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -1,14 +1,15 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
@prestashop
class LangImporter(AutoMatchingImporter):
- _model_name = 'prestashop.res.lang'
+ _name = 'prestashop.res.lang.importer'
+ _apply_on = 'prestashop.res.lang'
+
_erp_field = 'code'
_ps_field = 'language_code'
_copy_fields = [
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index 45e3b0736..117b6f2a7 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -4,7 +4,7 @@
from odoo import models, fields
from odoo.addons.queue_job.job import job
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
from ...components.importer import import_batch
@@ -159,12 +159,16 @@ class PrestashopAddress(models.Model):
@prestashop
-class PartnerAdapter(GenericAdapter):
- _model_name = 'prestashop.res.partner'
+class PartnerAdapter(Component):
+ _name = 'prestashop.res.partner.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.res.partner'
_prestashop_model = 'customers'
@prestashop
-class PartnerAddressAdapter(GenericAdapter):
- _model_name = 'prestashop.address'
+class PartnerAddressAdapter(Component):
+ _name = 'prestashop.address.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.address'
_prestashop_model = 'addresses'
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 034276c22..27064bd1b 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -5,23 +5,18 @@
from odoo import fields, _
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (
- ImportMapper,
- mapping,
- only_create,
-)
-from ...components.importer import (
- PrestashopImporter,
- import_batch,
- DelayedBatchImporter,
-)
+from odoo.addons.connector.components.mapper import (mapping, only_create)
+from ...components.importer import import_batch
from ...backend import prestashop
from odoo.addons.connector.unit.mapper import external_to_m2o
+from odoo.addons.component.core import Component
@prestashop
-class PartnerImportMapper(ImportMapper):
- _model_name = 'prestashop.res.partner'
+class PartnerImportMapper(Component):
+ _name = 'prestashop.res.partner.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.res.partner'
direct = [
('date_add', 'date_add'),
@@ -98,8 +93,10 @@ def company_id(self, record):
@prestashop
-class ResPartnerImporter(PrestashopImporter):
- _model_name = 'prestashop.res.partner'
+class ResPartnerImporter(Component):
+ _name = 'prestashop.res.partner.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.res.partner'
def _import_dependencies(self):
groups = self.prestashop_record.get('associations', {}) \
@@ -121,13 +118,17 @@ def _after_import(self, binding):
@prestashop
-class PartnerBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.res.partner'
+class PartnerBatchImporter(Component):
+ _name = 'prestashop.res.partner.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.res.partner'
@prestashop
-class AddressImportMapper(ImportMapper):
- _model_name = 'prestashop.address'
+class AddressImportMapper(Component):
+ _name = 'prestashop.address.mappper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.address'
direct = [
('address1', 'street'),
@@ -185,8 +186,10 @@ def type(self, record):
@prestashop
-class AddressImporter(PrestashopImporter):
- _model_name = 'prestashop.address'
+class AddressImporter(Component):
+ _name = 'prestashop.address.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.address'
def _check_vat(self, vat):
vat_country, vat_number = vat[:2].lower(), vat[2:]
@@ -219,8 +222,10 @@ def _after_import(self, binding):
@prestashop
-class AddressBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.address'
+class AddressBatchImporter(Component):
+ _name = 'prestashop.address.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.address'
@job(default_channel='root.prestashop')
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index 62125f796..aaebe64ca 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -3,7 +3,7 @@
from odoo import fields, models
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -48,6 +48,8 @@ class PrestashopResPartnerCategory(models.Model):
@prestashop
-class PartnerCategoryAdapter(GenericAdapter):
- _model_name = 'prestashop.res.partner.category'
+class PartnerCategoryAdapter(Component):
+ _name = 'prestashop.res.partner.category.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.res.partner.category'
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index 93ecb8350..b16c4083b 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -1,18 +1,17 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...components.importer import (
- TranslatableRecordImporter,
- import_record,
- DelayedBatchImporter,
-)
+from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
+from ...components.importer import import_record
from ...backend import prestashop
@prestashop
-class PartnerCategoryImportMapper(ImportMapper):
- _model_name = 'prestashop.res.partner.category'
+class PartnerCategoryImportMapper(Component):
+ _name = 'prestashop.res.partner.category.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.res.partner.category'
direct = [
('name', 'name'),
@@ -30,11 +29,11 @@ def backend_id(self, record):
@prestashop
-class PartnerCategoryImporter(TranslatableRecordImporter):
+class PartnerCategoryImporter(Component):
""" Import one translatable record """
- _model_name = [
- 'prestashop.res.partner.category',
- ]
+ _name = 'prestashop.res.partner.category.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.res.partner.category'
_translatable_fields = {
'prestashop.res.partner.category': ['name'],
@@ -53,5 +52,7 @@ def _after_import(self, binding):
@prestashop
-class PartnerCategoryBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.res.partner.category'
+class PartnerCategoryBatchImporter(Component):
+ _name = 'prestashop.res.partner.category.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.res.partner.category'
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 66fd98127..d1c49ac54 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -3,9 +3,9 @@
import openerp.addons.decimal_precision as dp
-from odoo import models, fields, api
+from odoo import models, fields, api, _
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
import logging
@@ -68,6 +68,31 @@ class PrestashopSaleOrder(models.Model):
)
+ def import_orders_since(self, backend, since_date=None, **kwargs):
+ """ Prepare the import of orders modified on PrestaShop """
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.sale.order'].with_delay(
+ priority=5, max_retries=0).import_batch(backend, filters=filters)
+ if since_date:
+ filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
+# try:
+# self.env['prestashop.mail.message'].import_batch(backend, filters)
+# except Exception as error:
+# msg = _(
+# 'Mail messages import failed with filters `%s`. '
+# 'Error: `%s`'
+# ) % (str(filters), str(error))
+# backend.add_checkpoint(
+# message=msg
+# )
+
+ backend.import_orders_since = now_fmt
+ return True
+
+
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -141,9 +166,16 @@ def create(self, vals):
return super(PrestashopSaleOrderLineDiscount, self).create(vals)
+class OrderPaymentModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '__not_exist_prestashop.payment'
+
+
@prestashop
-class SaleOrderAdapter(GenericAdapter):
- _model_name = 'prestashop.sale.order'
+class SaleOrderAdapter(Component):
+ _name = 'prestashop.sale.order.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.sale.order'
_prestashop_model = 'orders'
_export_node_name = 'order'
@@ -152,18 +184,24 @@ def update_sale_state(self, prestashop_id, datas):
@prestashop
-class SaleOrderLineAdapter(GenericAdapter):
- _model_name = 'prestashop.sale.order.line'
+class SaleOrderLineAdapter(Component):
+ _name = 'prestashop.sale.order.line.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.sale.order.line'
_prestashop_model = 'order_details'
@prestashop
-class OrderPaymentAdapter(GenericAdapter):
- _model_name = '__not_exist_prestashop.payment'
+class OrderPaymentAdapter(Component):
+ _name = '__not_exist_prestashop.payment.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = '__not_exist_prestashop.payment'
_prestashop_model = 'order_payments'
@prestashop
-class OrderDiscountAdapter(GenericAdapter):
- _model_name = 'prestashop.sale.order.line.discount'
+class OrderDiscountAdapter(Component):
+ _name = 'prestashop.sale.order.line.discount.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.sale.order.line.discount'
_prestashop_model = 'order_discounts'
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 140cdfaf6..a445af31c 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -3,18 +3,13 @@
from odoo import _, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.connector import ConnectorUnit
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
from odoo.addons.queue_job.exception import FailedJobError, NothingToDoJob
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from odoo.addons.connector_ecommerce.unit.sale_order_onchange import (
+from odoo.addons.connector_ecommerce.components.sale_order_onchange import (
SaleOrderOnChange,
)
-from ...components.backend_adapter import GenericAdapter
-from ...components.importer import (
- PrestashopImporter,
- import_batch,
- DelayedBatchImporter,
-)
+from ...components.importer import import_batch
from ...components.exception import OrderImportRuleRetry
from ...backend import prestashop
@@ -35,8 +30,11 @@ class PrestaShopSaleOrderOnChange(SaleOrderOnChange):
@prestashop
-class SaleImportRule(ConnectorUnit):
- _model_name = ['prestashop.sale.order']
+class SaleImportRule(Component):
+ _name = 'prestashop.sale.import.rule'
+ _inherit = 'base.prestashop.connector'
+ _apply_on = 'prestashop.sale.order'
+ _usage = 'sale.import.rule'
def _rule_always(self, record, mode):
""" Always import the order """
@@ -55,9 +53,8 @@ def _rule_paid(self, record, mode):
'The import will be retried later.')
def _get_paid_amount(self, record):
- payment_adapter = self.unit_for(
- GenericAdapter,
- '__not_exist_prestashop.payment'
+ payment_adapter = self.component(
+ model_name='__not_exist_prestashop.payment'
)
payment_ids = payment_adapter.search({
'filter[order_reference]': record['reference']
@@ -128,7 +125,7 @@ def _rule_state(self, record, mode):
if self.backend_record.importable_order_state_ids:
ps_state_id = record['current_state']
state = self.binder_for(
- 'prestashop.sale.order.state').to_odoo(ps_state_id, unwrap=1)
+ 'prestashop.sale.order.state').to_internal(ps_state_id, unwrap=1)
if not state:
raise FailedJobError(_(
"The configuration is missing "
@@ -145,8 +142,10 @@ def _rule_state(self, record, mode):
@prestashop
-class SaleOrderMapper(ImportMapper):
- _model_name = 'prestashop.sale.order'
+class SaleOrderMapper(Component):
+ _name = 'prestashop.sale.order.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.sale.order'
direct = [
('date_add', 'date_order'),
@@ -168,8 +167,10 @@ def _get_sale_order_lines(self, record):
def _get_discounts_lines(self, record):
if record['total_discounts'] == '0.00':
return []
- adapter = self.unit_for(
- GenericAdapter, 'prestashop.sale.order.line.discount')
+ adapter = self.component(
+ usage='prestashop.adapter',
+ model_name='prestashop.sale.order.line.discount'
+ )
discount_ids = adapter.search({'filter[id_order]': record['id']})
discount_mappers = []
for discount_id in discount_ids:
@@ -193,7 +194,9 @@ def _map_child(self, map_record, from_attr, to_attr, model_name):
children = []
for child_record in child_records:
- adapter = self.unit_for(GenericAdapter, model_name)
+ adapter = self.component(
+ usage='prestashop.adapter', model_name=model_name
+ )
detail_record = adapter.read(child_record['id'])
mapper = self._get_map_child_unit(model_name)
@@ -276,13 +279,15 @@ def total_tax_amount(self, record):
return {'total_amount_tax': tax}
def finalize(self, map_record, values):
- onchange = self.unit_for(SaleOrderOnChange)
+ onchange = self.component('ecommerce.onchange.manager.sale.order')
return onchange.play(values, values['prestashop_order_line_ids'])
@prestashop
-class SaleOrderImporter(PrestashopImporter):
- _model_name = ['prestashop.sale.order']
+class SaleOrderImporter(Component):
+ _name = 'prestashop.sale.order.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.sale.order'
def __init__(self, environment):
"""
@@ -357,7 +362,7 @@ def _has_to_skip(self):
""" Return True if the import can be skipped """
if self._get_binding():
return True
- rules = self.unit_for(SaleImportRule)
+ rules = self.component(usage='sale.import.rule')
try:
return rules.check(self.prestashop_record)
except NothingToDoJob as err:
@@ -368,13 +373,17 @@ def _has_to_skip(self):
@prestashop
-class SaleOrderBatchImporter(DelayedBatchImporter):
- _model_name = 'prestashop.sale.order'
+class SaleOrderBatchImporter(Component):
+ _name = 'prestashop.sale.order.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.sale.order'
@prestashop
-class SaleOrderLineMapper(ImportMapper):
- _model_name = 'prestashop.sale.order.line'
+class SaleOrderLineMapper(Component):
+ _name = 'prestashop.sale.order.line.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.sale.order.line'
direct = [
('product_name', 'name'),
@@ -449,8 +458,10 @@ def backend_id(self, record):
@prestashop
-class SaleOrderLineDiscountImporter(ImportMapper):
- _model_name = 'prestashop.sale.order.line.discount'
+class SaleOrderLineDiscountMapper(Component):
+ _name = 'prestashop.sale.order.discount.importer'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.sale.order.line.discount'
direct = []
@@ -492,39 +503,3 @@ def backend_id(self, record):
@mapping
def prestashop_id(self, record):
return {'prestashop_id': record['id']}
-
-
-@job(default_channel='root.prestashop')
-def import_orders_since(session, backend_id, since_date=None, **kwargs):
- """ Prepare the import of orders modified on PrestaShop """
- backend_record = session.env['prestashop.backend'].browse(backend_id)
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- result = import_batch(
- session,
- 'prestashop.sale.order',
- backend_id,
- filters,
- priority=10,
- max_retries=0,
- **kwargs
- )
- if since_date:
- filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
- try:
- import_batch(session, 'prestashop.mail.message', backend_id, filters)
- except Exception as error:
- msg = _(
- 'Mail messages import failed with filters `%s`. '
- 'Error: `%s`'
- ) % (str(filters), str(error))
- backend_record.add_checkpoint(
- message=msg
- )
-
- now_fmt = fields.Datetime.now()
- backend_record.write({
- 'import_orders_since': now_fmt
- })
- return result
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 52a6a9fc6..fe8f42ced 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@@ -72,6 +72,9 @@ class SaleOrderStateList(models.Model):
@prestashop
-class SaleOrderStateAdapter(GenericAdapter):
- _model_name = 'prestashop.sale.order.state'
+class SaleOrderStateAdapter(Component):
+ _name = 'prestashop.sale.order.state.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.sale.order.state'
+
_prestashop_model = 'order_states'
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index ced620a4c..eeff9be45 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -1,14 +1,16 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...components.importer import TranslatableRecordImporter, DirectBatchImporter
+from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
from ...backend import prestashop
@prestashop
-class SaleOrderStateMapper(ImportMapper):
- _model_name = 'prestashop.sale.order.state'
+class SaleOrderStateMapper(Component):
+ _name = 'prestashop.sale.order.state.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.sale.order.state'
direct = [
('name', 'name'),
@@ -24,11 +26,11 @@ def company_id(self, record):
@prestashop
-class SaleOrderStateImporter(TranslatableRecordImporter):
+class SaleOrderStateImporter(Component):
""" Import one translatable record """
- _model_name = [
- 'prestashop.sale.order.state',
- ]
+ _name = 'prestashop.sale.order.state.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.sale.order.state'
_translatable_fields = {
'prestashop.sale.order.state': [
@@ -38,5 +40,7 @@ class SaleOrderStateImporter(TranslatableRecordImporter):
@prestashop
-class SaleOrderStateBatchImporter(DirectBatchImporter):
- _model_name = 'prestashop.sale.order.state'
+class SaleOrderStateBatchImporter(Component):
+ _name = 'prestashop.sale.order.state.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.sale.order.state'
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
index 6a80c5534..46c4d5eea 100644
--- a/connector_prestashop/models/stock_tracking/common.py
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -1,12 +1,14 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.backend_adapter import GenericAdapter
+from odoo.addons.component.core import Component
from ...backend import prestashop
@prestashop
-class OrderCarriers(GenericAdapter):
- _model_name = '__not_exit_prestashop.order_carrier'
+class OrderCarriers(Component):
+ _name = 'prestashop.order_carrier.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = '__not_exit_prestashop.order_carrier'
_prestashop_model = 'order_carriers'
_export_node_name = 'order_carrier'
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index 246bb7f20..d739f0f47 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -26,8 +26,9 @@ def _get_tracking(self):
def run(self, binding_id, **kwargs):
""" Export the tracking number of a picking to Magento """
# verify the picking is done + magento id exists
- tracking_adapter = self.unit_for(
- PrestaShopCRUDAdapter, '__not_exit_prestashop.order_carrier')
+ tracking_adapter = self.component(
+ usage='prestashop.adapter',
+ model_name='__not_exit_prestashop.order_carrier')
self.binding = self.model.browse(binding_id)
tracking = self._get_tracking()
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index 08390856d..8453f8d88 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -1,15 +1,18 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from odoo.addons.connector.components.mapper import mapping
from ...components.importer import PrestashopImporter, DirectBatchImporter
from odoo.addons.connector.unit.mapper import external_to_m2o
from ...backend import prestashop
+from odoo.addons.component.core import Component
@prestashop
-class ShopImportMapper(ImportMapper):
- _model_name = 'prestashop.shop'
+class ShopImportMapper(Component):
+ _name = 'prestashop.shop.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.shop'
direct = [
('name', 'name'),
@@ -33,11 +36,13 @@ def opener_id(self, record):
return {'openerp_id': self.backend_record.warehouse_id.id}
-@prestashop
-class ShopImporter(PrestashopImporter):
- _model_name = 'prestashop.shop'
+class ShopImporter(Component):
+ _name = 'prestashop.shop.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.shop'
-@prestashop
-class ShopBatchImporter(DirectBatchImporter):
- _model_name = 'prestashop.shop'
+class ShopBatchImporter(Component):
+ _name = 'prestashop.shop.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.shop'
From 4e93e19fce992911b38296278db32faefa08d880 Mon Sep 17 00:00:00 2001
From: Florent THOMAS
Date: Tue, 10 Apr 2018 10:04:38 +0200
Subject: [PATCH 07/99] [FIX+MIG] connector_prestashop: Continue migration
* Wrong imports
* Add debug Options
* Make mammping more generic
* Use new Component for importers
* Reference the Components for lates OCA/connector
* Fix python import
* [REF]Change the way shop_group are referenced
* [IMP] Add debug options + requirements
(https://github.com/OCA/connector-prestashop/pull/85)
* [REF]Rename views as the model name
* [REF]Migrate new components structure
---
connector_prestashop/__manifest__.py | 5 +-
.../components/auto_matching_importer.py | 4 +
.../components/backend_adapter.py | 2 +
connector_prestashop/components/importer.py | 6 +-
connector_prestashop/components/mapper.py | 7 +-
.../components/version_key.py | 16 +
connector_prestashop/models/__init__.py | 3 +
.../models/account_invoice/importer.py | 4 +-
.../models/account_payment_mode/importer.py | 2 +-
.../models/account_tax/importer.py | 8 +-
.../models/account_tax_group/importer.py | 4 +-
.../models/delivery_carrier/common.py | 14 +
.../models/prestashop_backend/common.py | 109 +++----
.../models/prestashop_backend/importer.py | 62 +---
.../models/prestashop_shop_group/__init__.py | 4 +
.../models/prestashop_shop_group/common.py | 51 ++++
.../models/prestashop_shop_group/importer.py | 37 +++
.../models/product_category/importer.py | 11 +-
.../models/product_image/__init__.py | 2 +-
.../models/product_image/importer.py | 7 +-
.../models/product_pricelist/common.py | 5 +-
.../models/product_pricelist/importer.py | 9 +-
.../models/product_product/common.py | 23 +-
.../models/product_product/deleter.py | 2 +-
.../models/product_product/exporter.py | 2 +-
.../models/product_product/importer.py | 62 ++--
.../models/product_supplierinfo/common.py | 28 +-
.../models/product_supplierinfo/importer.py | 28 +-
.../models/product_template/common.py | 27 +-
.../models/product_template/exporter.py | 2 +-
.../models/product_template/importer.py | 148 +++++++---
.../models/res_country/common.py | 5 +-
.../models/res_country/importer.py | 10 +-
.../models/res_currency/common.py | 6 +-
.../models/res_currency/importer.py | 11 +-
.../models/res_lang/common.py | 5 +-
.../models/res_lang/importer.py | 10 +-
.../models/res_partner/common.py | 5 +-
.../models/res_partner/importer.py | 64 ++--
.../models/res_partner_category/common.py | 3 +-
.../models/res_partner_category/importer.py | 36 ++-
.../models/sale_order/common.py | 41 +--
.../models/sale_order/importer.py | 50 ++--
.../models/sale_order_state/common.py | 5 +-
.../models/sale_order_state/exporter.py | 2 +-
.../models/sale_order_state/importer.py | 29 +-
.../models/stock_tracking/common.py | 6 +-
.../models/stock_tracking/exporter.py | 2 +-
.../models/stock_warehouse/common.py | 4 +-
.../models/stock_warehouse/importer.py | 30 +-
.../tests/test_import_partner.py | 2 +-
.../views/prestashop_backend_view.xml | 259 ++++++++++++++++
.../views/prestashop_model_view.xml | 278 ------------------
53 files changed, 850 insertions(+), 707 deletions(-)
create mode 100644 connector_prestashop/models/prestashop_shop_group/__init__.py
create mode 100644 connector_prestashop/models/prestashop_shop_group/common.py
create mode 100644 connector_prestashop/models/prestashop_shop_group/importer.py
create mode 100644 connector_prestashop/views/prestashop_backend_view.xml
delete mode 100644 connector_prestashop/views/prestashop_model_view.xml
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index 5542ac99b..4c761cebc 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -44,7 +44,8 @@
'data': [
'data/cron.xml',
'data/product_decimal_precision.xml',
- 'views/prestashop_model_view.xml',
+ 'data/ecommerce_data.xml',
+ 'views/prestashop_backend_view.xml',
'views/product_view.xml',
'views/product_category_view.xml',
'views/image_view.xml',
@@ -56,7 +57,7 @@
'views/stock_view.xml',
'security/ir.model.access.csv',
'security/prestashop_security.xml',
- 'data/ecommerce_data.xml',
+
],
'installable': True,
"application": True,
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 971402eaa..3155b10b1 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -3,6 +3,7 @@
import logging
+from odoo.addons.connector.unit.backend_adapter import BackendAdapter
from odoo.addons.component.core import Component
from odoo import _, exceptions
@@ -14,6 +15,7 @@ class AutoMatchingImporter(Component):
_name = 'prestashop.auto.matching.importer'
_inherit = 'prestashop.importer'
+ _model_name = None
_erp_field = None
_ps_field = None
_copy_fields = []
@@ -34,6 +36,8 @@ def run(self):
model = self.env[erp_model_name].with_context(active_test=False)
erp_ids = model.search([])
erp_list_dict = erp_ids.read()
+
+
adapter = self.component(usage='backend.adapter')
# Get the IDS from PS
ps_ids = adapter.search()
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index ebe33c33a..b0bf4cd62 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -121,6 +121,8 @@ def __init__(self, environment):
self.client = PrestaShopWebServiceDict(
self.prestashop.api_url,
self.prestashop.webservice_key,
+ debug=self.backend_record.debug,
+ verbose=self.backend_record.verbose
)
def search(self, filters=None):
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index a8f86c778..3c1ce2cee 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -28,7 +28,6 @@ def import_batch():
pass
class PrestashopBaseImporter(AbstractComponent):
-
_name = 'prestashop.base.importer'
_inherit = ['base.importer', 'base.prestashop.connector']
@@ -61,7 +60,12 @@ class or parent class to use for the export.
importer_class = PrestashopImporter
binder = self.binder_for(binding_model)
if always or not binder.to_internal(prestashop_id):
+<<<<<<< HEAD
importer = self.component(usage='prestashop.importer', model_name=binding_model)
+=======
+
+ importer = self.unit_for(importer_class, model=binding_model)
+>>>>>>> 29848b8... [REF]Migrate new components structure
importer.run(prestashop_id, **kwargs)
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index d5749e57c..12dfbf5e3 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import AbstractComponent
-from odoo.addons.connector.unit.mapper import mapping
+from odoo.addons.connector.components.mapper import mapping
class PrestashopImportMapper(AbstractComponent):
@@ -11,6 +11,11 @@ class PrestashopImportMapper(AbstractComponent):
_usage = 'import.mapper'
+ @mapping
+ def backend_id(self, record):
+ return {'backend_id': self.backend_record.id}
+
+
class PrestashopExportMapper(AbstractComponent):
_name = 'prestashop.export.mapper'
_inherit = ['base.prestashop.connector', 'base.export.mapper']
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index 9e8bb07dd..049f17599 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -7,6 +7,7 @@
from ..backend import prestashop, prestashop_1_6_0_9, prestashop_1_6_1_2
+<<<<<<< HEAD
class VersionKeyModel(models.TransientModel):
# In actual connector version is mandatory use a model
_name = '_prestashop.version.key'
@@ -17,6 +18,11 @@ class VersionKey(Component):
_name = '_prestashop.version.key'
_apply_on = '_prestashop.version.key'
_usage = 'prestashop.version.key'
+=======
+# # @prestashop
+class VersionKey(ConnectorUnit):
+ _model_name = '_prestashop.version.key'
+>>>>>>> e218fce... ADD WIP for PR Akretion
keys = {}
@@ -24,11 +30,16 @@ def get_key(self, key):
return self.keys.get(key) or key
+<<<<<<< HEAD
@prestashop_1_6_0_9
class VersionKey_1_6_0_9(Component):
_name = '_prestashop.version.key.1.6.0.9'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.0.9'
+=======
+# # @prestashop_1_6_0_9
+class VersionKey_1_6_0_9(VersionKey):
+>>>>>>> e218fce... ADD WIP for PR Akretion
keys = {
'product_option_value': 'product_option_values',
@@ -45,11 +56,16 @@ class VersionKey_1_6_0_9(Component):
}
+<<<<<<< HEAD
@prestashop_1_6_1_2
class VersionKey_1_6_1_2(Component):
_name = '_prestashop.version.key.1.6.1.2'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.1.2'
+=======
+# # @prestashop_1_6_1_2
+class VersionKey_1_6_1_2(VersionKey):
+>>>>>>> e218fce... ADD WIP for PR Akretion
# keys checked in 1.6.1.9:
# * customer_messages
diff --git a/connector_prestashop/models/__init__.py b/connector_prestashop/models/__init__.py
index 01c7714fc..aac20238c 100644
--- a/connector_prestashop/models/__init__.py
+++ b/connector_prestashop/models/__init__.py
@@ -9,7 +9,10 @@
from . import account_tax_group
from . import delivery_carrier
from . import mail_message
+from . import payment
+from . import stock_warehouse
from . import prestashop_backend
+from . import prestashop_shop_group
from . import product_category
from . import product_image
from . import product_pricelist
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 8ccb6bf28..3ae06a4e0 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -5,8 +5,9 @@
from odoo.addons.connector.exception import MappingError
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.components.mapper import (
+from odoo.addons.connector.unit.mapper import (
mapping,
+ ImportMapper,
only_create,
)
from ...components.importer import (
@@ -252,3 +253,4 @@ class RefundBatchImporter(Component):
_apply_on = 'prestashop.refund'
_model_name = 'prestashop.refund'
+
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index 7e26d5473..7c246418b 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -5,7 +5,7 @@
from ...backend import prestashop
-@prestashop
+# # @prestashop
class PaymentModeBatchImporter(Component):
_name = 'account.payment.mode.importer'
_inherit = 'prestashop.batch.importer'
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index aae64e2f5..c484b1b07 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,15 +1,15 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.auto_matching_importer import AutoMatchingImporter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
-@prestashop
-class AccountTaxImporter(AutoMatchingImporter):
+class AccountTaxImporter(Component):
_name = 'prestashop.account.tax.importer'
+ _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.account.tax'
+# _model_name = 'prestashop.account.tax'
_erp_field = 'amount'
_ps_field = 'rate'
diff --git a/connector_prestashop/models/account_tax_group/importer.py b/connector_prestashop/models/account_tax_group/importer.py
index 8860258ea..d35089c54 100644
--- a/connector_prestashop/models/account_tax_group/importer.py
+++ b/connector_prestashop/models/account_tax_group/importer.py
@@ -42,7 +42,7 @@ class TaxGroupImporter(Component):
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.account.tax.group'
- _model_name = 'prestashop.account.tax.group'
+# _model_name = 'prestashop.account.tax.group'
class TaxGroupBatchImporter(Component):
@@ -50,4 +50,4 @@ class TaxGroupBatchImporter(Component):
_inherit = 'prestashop.direct.batch.importer'
_apply_on = 'prestashop.account.tax.group'
- _model_name = 'prestashop.account.tax.group'
+# _model_name = 'prestashop.account.tax.group'
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index 30ece8b08..01c618d6b 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -38,6 +38,20 @@ class PrestashopDeliveryCarrier(models.Model):
string='Export tracking numbers to PrestaShop',
)
+<<<<<<< HEAD
+=======
+ #Check with @bguillot where is it now
+ #https://github.com/Tecnativa/connector-prestashop/pull/6/files#diff-befe8c6495c83e59d4cc839009d90adaL41
+ def import_carriers(self, backend, **kwargs):
+ return import_batch(
+ session,
+ 'prestashop.delivery.carrier',
+ backend_id,
+ priority=5,
+ **kwargs
+ )
+
+>>>>>>> 96513fd... Add WIP for PR Akretion
class DeliveryCarrier(models.Model):
_inherit = "delivery.carrier"
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 5fc694338..cb75658dc 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -7,12 +7,18 @@
from odoo import models, fields, api, exceptions, _
+from odoo.addons.connector.connector import ConnectorEnvironment
from ...components.importer import import_batch, import_record
from ...components.auto_matching_importer import AutoMatchingImporter
-from ...components.backend_adapter import api_handle_errors
+from ...components.backend_adapter import GenericAdapter, api_handle_errors
from ...components.version_key import VersionKey
from ...backend import prestashop
-from odoo.addons.connector.checkpoint import checkpoint
+
+from ..product_template.importer import import_inventory
+from ..product_supplierinfo.importer import import_suppliers
+from ..account_invoice.importer import import_refunds
+from ..sale_order.importer import import_orders_since
+
_logger = logging.getLogger(__name__)
@@ -22,13 +28,6 @@ class PrestashopBackend(models.Model):
_description = 'PrestaShop Backend Configuration'
_inherit = 'connector.backend'
- _versions = {
- '1.5': 'prestashop.version.key',
- '1.6.0.9': 'prestashop.version.key.1.6.0.9',
- '1.6.0.11': 'prestashop.version.key.1.6.0.9',
- '1.6.1.2': 'prestashop.version.key.1.6.1.2'
- }
-
@api.model
def select_versions(self):
""" Available versions
@@ -41,6 +40,14 @@ def select_versions(self):
('1.6.0.11', '>= 1.6.0.11 - <1.6.1.2'),
('1.6.1.2', '=1.6.1.2')
]
+
+ @api.model
+ def _select_state(self):
+ """Available States for this Backend"""
+ return [('draft', 'Draft'),
+ ('checked', 'Checked'),
+ ('production', 'In Production'),]
+
version = fields.Selection(
selection='select_versions',
@@ -118,17 +125,32 @@ def select_versions(self):
string='Importable sale order states',
help="If valued only orders matching these states will be imported.",
)
+ active = fields.Boolean(
+ string='Active',
+ default=True
+ )
+ state = fields.Selection(
+ selection='_select_state',
+ string='State',
+ default='draft'
+ )
+
+ verbose = fields.Boolean(help="Output requests details in the logs")
+ debug = fields.Boolean(help="Activate PrestaShop's webservice debug mode")
@api.model
def _default_pricelist_id(self):
return self.env['product.pricelist'].search([], limit=1)
@api.multi
- def add_checkpoint(self, record):
+ def get_environment(self, model_name,):
+ self.ensure_one()
+ return ConnectorEnvironment(self, model_name)
+
+ @api.multi
+ def button_reset_to_draft(self):
self.ensure_one()
- record.ensure_one()
- return checkpoint.add_checkpoint(self.env, record._name, record.id,
- self._name, self.id)
+ self.write({'state': 'draft'})
@api.multi
def synchronize_metadata(self):
@@ -158,6 +180,8 @@ def synchronize_basedata(self):
self.env['prestashop.account.tax.group'].import_batch(backend)
self.env['prestashop.sale.order.state'].import_batch(backend)
return True
+
+
@api.multi
def _check_connection(self):
@@ -166,17 +190,19 @@ def _check_connection(self):
component = work.component_by_name(name='prestashop.adapter')
with api_handle_errors('Connection failed'):
component.head()
+
@api.multi
def button_check_connection(self):
self._check_connection()
- raise exceptions.UserError(_('Connection successful'))
+ #raise exceptions.UserError(_('Connection successful'))
+ self.write({'state': 'checked'})
@api.multi
def import_customers_since(self):
for backend_record in self:
since_date = backend_record.import_partners_since
- self.env['prestashop.res.partner'].import_customers_since(
+ backend_record.with_delay(priority=10).import_customers_since(
backend_record=backend_record,
since_date=since_date)
return True
@@ -185,8 +211,8 @@ def import_customers_since(self):
def import_products(self):
for backend_record in self:
since_date = backend_record.import_products_since
- self.env['prestashop.product.template'].import_products(
- backend_record, since_date)
+ backend_record.env['prestashop.product.template'].with_delay(
+ priority=10).import_products(backend_record, since_date)
return True
@api.multi
@@ -208,16 +234,18 @@ def update_product_stock_qty(self):
@api.multi
def import_stock_qty(self):
+ session = ConnectorSession.from_env(self.env)
for backend_record in self:
- backend_record.env['prestashop.product.template']\
- .with_delay().import_inventory(backend_record)
+ import_inventory.delay(session, backend_record.id)
@api.multi
def import_sale_orders(self):
+ session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_orders_since
- backend_record.env['prestashop.sale.order'].import_orders_since(
- backend_record,
+ import_orders_since.delay(
+ session,
+ backend_record.id,
since_date,
priority=5,
)
@@ -225,6 +253,7 @@ def import_sale_orders(self):
@api.multi
def import_payment_modes(self):
+ session = ConnectorSession.from_env(self.env)
for backend_record in self:
with backend_record.work_on('account.payment.mode') as work:
importer = work.component(usage='batch.importer')
@@ -233,25 +262,25 @@ def import_payment_modes(self):
@api.multi
def import_refunds(self):
+ session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_refunds_since
- backend_record.env['prestashop.refund'].import_refunds(
- backend_record, since_date)
+ import_refunds.delay(session, backend_record.id, since_date)
return True
@api.multi
def import_suppliers(self):
+ session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_suppliers_since
- backend_record.env['prestashop.supplier'].import_suppliers(
- backend_record, since_date)
+ import_suppliers.delay(session, backend_record.id, since_date)
return True
def get_version_ps_key(self, key):
self.ensure_one()
- with self.work_on('_prestashop.version.key') as work:
- keys = work.component(usage=self._versions[self.version])
- return keys.get_key(key)
+ env = self.get_environment('_prestashop.version.key')
+ keys = env.get_connector_unit(VersionKey)
+ return keys.get_key(key)
@api.model
def _scheduler_update_product_stock_qty(self, domain=None):
@@ -317,24 +346,6 @@ def _get_locations_for_stock_quantities(self):
return locations
-class PrestashopShopGroup(models.Model):
- _name = 'prestashop.shop.group'
- _inherit = 'prestashop.binding'
- _description = 'PrestaShop Shop Group'
-
- name = fields.Char('Name', required=True)
- shop_ids = fields.One2many(
- comodel_name='prestashop.shop',
- inverse_name='shop_group_id',
- readonly=True,
- string="Shops",
- )
- company_id = fields.Many2one(
- related='backend_id.company_id',
- comodel_name="res.company",
- string='Company'
- )
-
class NoModelAdapter(Component):
""" Used to test the connection """
@@ -344,9 +355,3 @@ class NoModelAdapter(Component):
_prestashop_model = ''
-class ShopGroupAdapter(Component):
- _name = 'prestashop.shop.group'
- _inherit = 'prestashop.adapter'
- _model_name = 'prestashop.shop.group'
- _apply_on = 'prestashop.shop.group'
- _prestashop_model = 'shop_groups'
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index 6ef69e3e5..ab47bd314 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -2,61 +2,25 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
-from ...backend import prestashop
-from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
-class ShopGroupImportMapper(Component):
- _name = 'prestashop.shop.group.mapper'
- _inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.shop.group'
-
- _model_name = 'prestashop.shop.group'
-
- direct = [('name', 'name')]
-
- @mapping
- def name(self, record):
- name = record['name']
- if name is None:
- name = _('Undefined')
- return {'name': name}
-
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
-
-
-# class MetadataBatchImporter(Component):
-# """ Import the records directly, without delaying the jobs.
-#
-# Import the PrestShop Websites, Stores, Storeviews
-#
-# They are imported directly because this is a rare and fast operation,
-# and we don't really bother if it blocks the UI during this time.
-# (that's also a mean to rapidly check the connectivity with Magento).
-#
-# """
-#
-# _name = 'prestashop.metadata.batch.importer'
-# _inherit = 'prestashop.direct.batch.importer'
-# _apply_on = [
-# 'prestashop.shop.group',
-# ]
-
+class MetadataBatchImporter(Component):
+ """ Import the records directly, without delaying the jobs.
-class ShopGroupImporter(Component):
- _name = 'prestashop.shop.group.importer'
- _inherit = 'prestashop.importer'
- _apply_on = 'prestashop.shop.group'
+ Import the PrestShop Websites, Shop Groups and Shops
- _model_name = 'prestashop.shop.group'
+ They are imported directly because this is a rare and fast operation,
+ and we don't really bother if it blocks the UI during this time.
+ (that's also a mean to rapidly check the connectivity with Magento).
+ """
-class ShopGroupBatchImporter(Component):
- _name = 'prestashop.shop.group.batch.importer'
+ _name = 'prestashop.metadata.batch.importer'
_inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.shop.group'
+ _apply_on = [
+ 'prestashop.shop.group',
+ 'prestashop.shop',
+ ]
- _model_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/prestashop_shop_group/__init__.py b/connector_prestashop/models/prestashop_shop_group/__init__.py
new file mode 100644
index 000000000..5c10a1d51
--- /dev/null
+++ b/connector_prestashop/models/prestashop_shop_group/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/prestashop_shop_group/common.py b/connector_prestashop/models/prestashop_shop_group/common.py
new file mode 100644
index 000000000..fbafa1683
--- /dev/null
+++ b/connector_prestashop/models/prestashop_shop_group/common.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+from odoo.addons.component.core import Component
+from contextlib import contextmanager
+
+from odoo import models, fields, api, exceptions, _
+
+from odoo.addons.connector.connector import ConnectorEnvironment
+from ...components.importer import import_batch, import_record
+# from ...components.auto_matching_importer import AutoMatchingImporter
+from ...components.backend_adapter import api_handle_errors
+from ...components.version_key import VersionKey
+
+
+from ..product_template.importer import import_inventory
+from ..product_supplierinfo.importer import import_suppliers
+from ..account_invoice.importer import import_refunds
+from ..sale_order.importer import import_orders_since
+
+
+_logger = logging.getLogger(__name__)
+
+
+class PrestashopShopGroup(models.Model):
+ _name = 'prestashop.shop.group'
+ _inherit = 'prestashop.binding'
+ _description = 'PrestaShop Shop Group'
+
+ name = fields.Char('Name', required=True)
+ shop_ids = fields.One2many(
+ comodel_name='prestashop.shop',
+ inverse_name='shop_group_id',
+ readonly=True,
+ string="Shops",
+ )
+ company_id = fields.Many2one(
+ related='backend_id.company_id',
+ comodel_name="res.company",
+ string='Company'
+ )
+
+
+
+class ShopGroupAdapter(Component):
+ _name = 'prestashop.shop.group.adapter'
+ _inherit = 'prestashop.adapter'
+# _model_name = 'prestashop.shop.group'
+ _apply_on = 'prestashop.shop.group'
+ _prestashop_model = 'shop_groups'
diff --git a/connector_prestashop/models/prestashop_shop_group/importer.py b/connector_prestashop/models/prestashop_shop_group/importer.py
new file mode 100644
index 000000000..ae89f01ad
--- /dev/null
+++ b/connector_prestashop/models/prestashop_shop_group/importer.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
+from odoo import _
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+
+class ShopGroupImporter(Component):
+ _name = 'prestashop.shop.group.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.shop.group'
+
+class ShopGroupMapper(Component):
+ _name = 'prestashop.shop.group.mapper'
+ _inherit = 'prestashop.import.mapper'
+ _apply_on = 'prestashop.shop.group'
+
+
+ direct = [('name', 'name')]
+
+ @mapping
+ def name(self, record):
+ name = record['name']
+ if name is None:
+ name = _('Undefined')
+ return {'name': name}
+
+
+
+#TODO: Check deletion as backend importer list multiple objects to import
+# class ShopGroupBatchImporter(Component):
+# _name = 'prestashop.shop.group.batch.importer'
+# _inherit = 'prestashop.direct.batch.importer'
+# _apply_on = 'prestashop.shop.group'
+
+# _model_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index 2a4136581..34d993729 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -3,9 +3,14 @@
from odoo import _
+
+#from ...components.importer import TranslatableRecordImporter, DelayedBatchImporter
+
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping
-from odoo.addons.connector.unit.mapper import external_to_m2o
+from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+
+
+
import datetime
import logging
@@ -67,7 +72,7 @@ def data_upd(self, record):
return {'date_upd': record['date_upd']}
-class ProductCategoryImporter(Component):
+class ProductCategoryImporter(TranslatableRecordImporter):
_name = 'prestashop.product.category.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.category'
diff --git a/connector_prestashop/models/product_image/__init__.py b/connector_prestashop/models/product_image/__init__.py
index be91db619..dc5f14229 100644
--- a/connector_prestashop/models/product_image/__init__.py
+++ b/connector_prestashop/models/product_image/__init__.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from . import common
-from . import deleter
from . import importer
+# from . import deleter
\ No newline at end of file
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 1b278f291..689841b5d 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -2,10 +2,11 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.queue_job.job import job
+
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping, external_to_m2o
-from ...backend import prestashop
import mimetypes
import logging
@@ -99,3 +100,5 @@ def run(self, template_id, image_id, **kwargs):
'Error: `%s`'
) % (image_id, template_id, error.msg)
self.backend_record.add_checkpoint(message=msg)
+
+
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index 7f5fefc16..c1468e8d2 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -4,8 +4,6 @@
from odoo import fields, models
from odoo.addons.component.core import Component
-from ...backend import prestashop
-
class ProductPricelist(models.Model):
_inherit = 'product.pricelist'
@@ -35,9 +33,10 @@ class PrestashopGroupsPricelist(models.Model):
]
-@prestashop
class PricelistAdapter(Component):
_name = 'prestashop.groups.pricelist.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.groups.pricelist'
+
+
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index 94c639c77..e9e7b6699 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -1,12 +1,9 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
-from ...backend import prestashop
+from odoo.addons.connector.components.mapper import mapping, external_to_m2o
-
-@prestashop
class ProductPricelistMapper(Component):
_name = 'prestashop.groups.pricelist.mapper'
_inherit = 'prestashop.import.mapper'
@@ -40,12 +37,14 @@ def versions(self, record):
return {'item_ids': [(5,), (0, 0, item)]}
-@prestashop
class ProductPricelistImporter(Component):
_name = 'prestashop.groups.pricelist.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.groups.pricelist'
+ _usage= "Translate"
+
+
_translatable_fields = {
'prestashop.groups.pricelist': ['name'],
}
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index d46c85b79..113a60019 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -7,9 +7,8 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from ...backend import prestashop
-from exporter import CombinationInventoryExporter
from odoo.addons.component.core import Component
+from exporter import CombinationInventoryExporter
class ProductProduct(models.Model):
@@ -194,13 +193,6 @@ def export_product_quantities(self, backend):
]).recompute_prestashop_qty()
- @job(default_channel='root.prestashop')
- def set_product_image_variant(self, backend, combination_ids, **kwargs):
- with backend.work_on(self._name) as work:
- importer = work.component(usage='prestashop.importer')
- return importer.set_variant_images(combination_ids, **kwargs)
-
-
class ProductAttribute(models.Model):
_inherit = 'product.attribute'
@@ -266,27 +258,26 @@ class PrestashopProductCombinationOptionValue(models.Model):
]
-@prestashop
+# # @prestashop
class ProductCombinationAdapter(Component):
_name = 'prestashop.product.combination.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.combination'
-
+
_prestashop_model = 'combinations'
_export_node_name = 'combination'
-@prestashop
+# # @prestashop
class ProductCombinationOptionAdapter(Component):
_name = 'prestashop.product.combination.option.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.combination.option'
-
+
_prestashop_model = 'product_options'
_export_node_name = 'product_options'
-
-
-@prestashop
+
+
class ProductCombinationOptionValueAdapter(Component):
_name = 'prestashop.product.combination.option.value.adapter'
_inherit = 'prestashop.adapter'
diff --git a/connector_prestashop/models/product_product/deleter.py b/connector_prestashop/models/product_product/deleter.py
index 16e724dcf..ff5233208 100644
--- a/connector_prestashop/models/product_product/deleter.py
+++ b/connector_prestashop/models/product_product/deleter.py
@@ -6,7 +6,7 @@
from ...backend import prestashop
-@prestashop
+# # @prestashop
class ProductCombinationDelete(PrestashopDeleter):
_model_name = 'prestashop.product.combination'
diff --git a/connector_prestashop/models/product_product/exporter.py b/connector_prestashop/models/product_product/exporter.py
index 5f6f91c12..7c5226501 100644
--- a/connector_prestashop/models/product_product/exporter.py
+++ b/connector_prestashop/models/product_product/exporter.py
@@ -5,7 +5,7 @@
from ..product_template.exporter import ProductInventoryExporter
-@prestashop
+# # @prestashop
class CombinationInventoryExporter(ProductInventoryExporter):
_model_name = ['prestashop.product.combination']
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 109ae56f8..83923911a 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -3,20 +3,19 @@
from odoo import models
-from odoo.addons.connector.unit.backend_adapter import BackendAdapter
-from odoo.addons.connector.components.mapper import (
- mapping,
- only_create,
-)
+# from odoo.addons.connector.unit.backend_adapter import BackendAdapter
+
from ...components.importer import (
PrestashopImporter,
import_batch,
TranslatableRecordImporter,
DelayedBatchImporter,
)
-from ...components.backend_adapter import PrestaShopCRUDAdapter
-from ...backend import prestashop
+
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import (
+ mapping, external_to_m2o, only_create)
+
import logging
_logger = logging.getLogger(__name__)
@@ -26,7 +25,6 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
class ProductCombinationImporter(Component):
_name = 'prestashop.product.combination.importer'
_inherit = 'prestashop.importer'
@@ -39,9 +37,8 @@ def _import_dependencies(self):
'product_option_values', {}).get(ps_key, [])
if not isinstance(option_values, list):
option_values = [option_values]
- backend_adapter = self.component(
- usage='prestashop.adapter',
- model_name='prestashop.product.combination.option.value')
+ backend_adapter = self.unit_for(
+ BackendAdapter, 'prestashop.product.combination.option.value')
for option_value in option_values:
option_value = backend_adapter.read(option_value['id'])
self._import_dependency(
@@ -56,9 +53,8 @@ def _after_import(self, binding):
self.import_supplierinfo(binding)
def set_variant_images(self, combinations):
- backend_adapter = self.component(
- usage='prestashop.adapter',
- model_name='prestashop.product.combination')
+ backend_adapter = self.unit_for(
+ PrestaShopCRUDAdapter, 'prestashop.product.combination')
for combination in combinations:
try:
record = backend_adapter.read(combination['id'])
@@ -109,12 +105,15 @@ def import_supplierinfo(self, binding):
ps_supplierinfo.odoo_id.unlink()
-@prestashop
+# # @prestashop
class ProductCombinationMapper(Component):
+ #_model_name = 'prestashop.product.combination'
+
_name = 'prestashop.product.combination.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.combination'
+
direct = [
]
@@ -234,7 +233,8 @@ def barcode(self, record):
def _get_tax_ids(self, record):
product_tmpl_adapter = self.component(
- usage='prestashop.adapter', model_name='prestashop.product.template')
+ usage='prestashop.adapter',
+ model_name='prestashop.product.template')
tax_group = product_tmpl_adapter.read(record['id_product'])
tax_group = self.binder_for('prestashop.account.tax.group').to_internal(
tax_group['id_tax_rules_group'], unwrap=True)
@@ -279,12 +279,13 @@ def odoo_id(self, record):
return {'odoo_id': product.id}
-@prestashop
+
class ProductCombinationOptionImporter(Component):
_name = 'prestashop.product.combination.option.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.combination.option'
+
def _import_values(self, attribute_binding):
record = self.prestashop_record
option_values = record.get('associations', {}).get(
@@ -303,7 +304,7 @@ def _after_import(self, binding):
self._import_values(binding)
-@prestashop
+# # @prestashop
class ProductCombinationOptionMapper(Component):
_name = 'prestashop.product.combination.option.mapper'
_inherit = 'prestashop.import.mapper'
@@ -349,23 +350,34 @@ def name(self, record):
return {'name': name}
-@prestashop
+# # @prestashop
+class ProductCombinationOptionValueAdapter(Component):
+ _name = 'prestashop.product.combination.option.value.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.combination.option.value'
+
+ _prestashop_model = 'product_option_values'
+ _export_node_name = 'product_option_value'
+
+
class ProductCombinationOptionValueImporter(Component):
_name = 'prestashop.product.combination.option.value.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.combination.option.value'
+ _usage= "translate"
+
_translatable_fields = {
'prestashop.product.combination.option.value': ['name'],
}
-@prestashop
class ProductCombinationOptionValueMapper(Component):
- _name = 'prestashop.product.combination.option.value.importer'
- _inherit = 'prestashop.importer'
+ _name = 'prestashop.product.combination.option.value.mapper'
+ _inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.combination.option.value'
+
direct = [
('name', 'name'),
]
@@ -400,8 +412,8 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-@prestashop
class ProductProductBatchImporter(Component):
_name = 'prestashop.product.product.batch.importer'
- _model_name = 'prestashop.direct.batch.importer'
- _model_name = 'prestashop.product.product'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = 'prestashop.product.product'
+
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index 1a08352db..2749ac15c 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -3,9 +3,10 @@
from odoo import models, fields
-from odoo.addons.component.core import Component
from ...components.backend_adapter import (
+ PrestaShopCRUDAdapter,
PrestaShopWebServiceImage,
+ GenericAdapter,
)
from ...backend import prestashop
@@ -33,23 +34,6 @@ class PrestashopSupplier(models.Model):
oldname='openerp_id',
)
- def import_suppliers(self, backend, since_date, **kwargs):
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- self.env['prestashop.supplier'].with_delay().import_batch(
- backend,
- filters,
- **kwargs
- )
- self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
- backend,
- **kwargs
- )
- backend.import_suppliers_since = now_fmt
- return True
-
class ProductSupplierinfo(models.Model):
_inherit = 'product.supplierinfo'
@@ -81,10 +65,11 @@ class PrestashopProductSupplierinfo(models.Model):
@prestashop
-class SupplierImageAdapter(Component):
+class SupplierImageAdapter(PrestaShopCRUDAdapter):
_name = 'prestashop.supplier.image.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.supplier.image'
+
_prestashop_image_model = 'suppliers'
def read(self, supplier_id, options=None):
@@ -98,17 +83,18 @@ def read(self, supplier_id, options=None):
return res['content']
-@prestashop
class SupplierAdapter(Component):
_name = 'prestashop.supplier.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.supplier'
+
_prestashop_model = 'suppliers'
-@prestashop
class SupplierInfoAdapter(Component):
_name = 'prestashop.product.supplierinfo.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.supplierinfo'
+
+
_prestashop_model = 'product_suppliers'
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 6ac5bb82b..bd3c29e81 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -4,12 +4,12 @@
from odoo import fields
from odoo.addons.queue_job.exception import FailedJobError
from odoo.addons.queue_job.job import job
-from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping
from ...components.backend_adapter import PrestaShopCRUDAdapter
from ...components.importer import (
+ PrestashopImporter,
import_batch,
+ DelayedBatchImporter,
)
from ...backend import prestashop
@@ -21,12 +21,13 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
+# # @prestashop
class SupplierMapper(Component):
_name = 'prestashop.supplier.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.supplier'
+
direct = [
('name', 'name'),
('id', 'prestashop_id'),
@@ -51,8 +52,8 @@ def supplier(self, record):
@mapping
def image(self, record):
- supplier_image_adapter = self.component(
- usage='prestashop.adapter', model_name='prestashop.supplier.image'
+ supplier_image_adapter = self.unit_for(
+ PrestaShopCRUDAdapter, 'prestashop.supplier.image'
)
try:
return {'image': supplier_image_adapter.read(record['id'])}
@@ -60,13 +61,15 @@ def image(self, record):
return {}
-@prestashop
+# # @prestashop
class SupplierImporter(Component):
""" Import one simple record """
_name = 'prestashop.supplier.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.supplier'
+
+
def _create(self, record):
try:
return super(SupplierImporter, self)._create(record)
@@ -87,19 +90,20 @@ def _after_import(self, binding):
)
-@prestashop
class SupplierBatchImporter(Component):
_name = 'prestashop.supplier.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.supplier'
-@prestashop
+
class SupplierInfoMapper(Component):
_name = 'prestashop.product.supplierinfo.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.supplierinfo'
+
+
direct = [
('product_supplier_reference', 'product_code'),
]
@@ -140,8 +144,10 @@ def required(self, record):
return {'min_qty': 0.0, 'delay': 1}
-@prestashop
+# # @prestashop
class SupplierInfoImporter(Component):
+ #_model_name = 'prestashop.product.supplierinfo'
+
_name = 'prestashop.product.supplierinfo.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.supplierinfo'
@@ -165,8 +171,10 @@ def _import_dependencies(self):
raise FailedJobError('Error fetching a dependency')
-@prestashop
class SupplierInfoBatchImporter(Component):
_name = 'prestashop.product.supplierinfo.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.product.supplierinfo'
+
+
+
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 3133127b7..b15e67929 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -8,7 +8,6 @@
from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
-from ...backend import prestashop
from exporter import ProductInventoryExporter
import logging
@@ -145,15 +144,16 @@ def import_products(self, backend, since_date=None, **kwargs):
filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
now_fmt = fields.Datetime.now()
- self.env['prestashop.product.category'].with_delay(
- priority=10).import_batch(backend, filters=filters or '')
+ result = self.env['prestashop.product.category'].with_delay(
+ priority=10).import_batch(backend, filters=filters) or ''
- self.env['prestashop.product.template'].with_delay(
- priority=15).import_batch(backend, filters=filters or '')
+ result += self.env['prestashop.product.template'].with_delay(
+ priority=15).import_batch(backend, filters=filters) or ''
backend.import_products_since = now_fmt
return True
-
+
+
@job(default_channel='root.prestashop')
def import_inventory(sel, backend):
with backend.work_on('_import_stock_available') as work:
@@ -161,20 +161,11 @@ def import_inventory(sel, backend):
return importer.set_variant_images()
-@prestashop
-class TemplateAdapter(Component):
- _name = 'prestashop.product.template.adapter'
- _inherit = 'prestashop.adapter'
- _apply_on = 'prestashop.product.template'
- _prestashop_model = 'products'
- _export_node_name = 'product'
-
-
-@prestashop
class ProductInventoryAdapter(Component):
_name = '_import_stock_available.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '_import_stock_available'
+
_prestashop_model = 'stock_availables'
_export_node_name = 'stock_available'
@@ -211,11 +202,11 @@ def export_quantity_url(self, filters, quantity, client=None):
})
-@prestashop
class PrestashopProductTags(Component):
- _name = 'prestashop.product.tag.adapter'
+ _name = '_prestashop_product_tag.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '_prestashop_product_tag'
+
_prestashop_model = 'tags'
_export_node_name = 'tag'
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index e440b6759..99f839eb8 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -9,7 +9,7 @@
from ...backend import prestashop
-@prestashop
+# # @prestashop
class ProductInventoryExporter(Exporter):
_model_name = ['prestashop.product.template']
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 5e7262c97..16f6eb42a 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -3,17 +3,34 @@
from odoo import _, models, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.components.mapper import (
+
+from odoo.addons.connector.unit.mapper import (
mapping,
only_create,
+ ImportMapper
)
+
from ...components.importer import (
+ DelayedBatchImporter,
import_record,
import_batch,
+ PrestashopImporter,
+ PrestashopBaseImporter,
+ TranslatableRecordImporter,
)
-from odoo.addons.connector.unit.mapper import external_to_m2o
-from odoo.addons.component.core import Component
+from ...components.backend_adapter import GenericAdapter
from ...backend import prestashop
+from ..product_image.importer import (
+ import_product_image,
+ set_product_image_variant,
+)
+
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import (
+ mapping, external_to_m2o, only_create)
+
+
import datetime
import logging
@@ -35,11 +52,13 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
+# # @prestashop
class TemplateMapper(Component):
+ #_model_name = 'prestashop.product.template'
_name = 'prestashop.product.template.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.product.template'
+ _apply_on = ['prestashop.product.template']
+
direct = [
('weight', 'weight'),
@@ -77,9 +96,7 @@ def tags_to_text(self, record):
associations = record.get('associations', {})
tags = associations.get('tags', {}).get(
self.backend_record.get_version_ps_key('tag'), [])
- tag_adapter = self.component(
- usage='prestashop.adapter', model_name='_prestashop_product_tag'
- )
+ tag_adapter = self.unit_for(GenericAdapter, '_prestashop_product_tag')
if not isinstance(tags, list):
tags = [tags]
if tags:
@@ -264,66 +281,73 @@ def type(self, record):
@mapping
def extras_features(self, record):
- mapper = self.component(usage='feature.product.import.mapper')
+ mapper = self.unit_for(FeaturesProductImportMapper)
return mapper.map_record(record).values(**self.options)
@mapping
def extras_manufacturer(self, record):
- mapper = self.component(usage='manufacturer.product.import.mapper')
+ mapper = self.unit_for(ManufacturerProductImportMapper)
return mapper.map_record(record).values(**self.options)
-@prestashop
-class FeaturesProductImportMapper(Component):
+# # @prestashop
+class FeaturesProductImportMapper(ImportMapper):
# To extend in connector_prestashop_feature module. In this way we
# dependencies on other modules like product_custom_info
- _name = 'prestashop.product.template.mapper'
- _inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.product.template'
- _usage = 'feature.product.import.mapper'
+ _model_name = 'prestashop.product.template'
@mapping
def extras_features(self, record):
return {}
-@prestashop
-class ManufacturerProductDependency(Component):
+# # @prestashop
+class ManufacturerProductDependency(PrestashopBaseImporter):
# To extend in connector_prestashop_feature module. In this way we
# dependencies on other modules like product_manufacturer
- _name = 'prestashop.product.template.manufacturer.importer'
- _inherit = 'prestashop.importer'
- _apply_on = 'prestashop.product.template'
- _usage = 'manufacturer.product.importer'
+ _model_name = 'prestashop.product.template'
def import_manufacturer(self, manufacturer_id):
return
-@prestashop
+# # @prestashop
class ManufacturerProductImportMapper(Component):
# To extend in connector_prestashop_manufacturer module. In this way we
# dependencies on other modules like product_manufacturer
- _name = 'prestashop.product.template.mapper'
- _inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.product.template'
- _usage = 'manufacturer.product.import.mapper'
-
+ _model_name = 'prestashop.product.template'
+ _name= "TODO"
+
+
@mapping
def extras_manufacturer(self, record):
return {}
+# # @prestashop
+class TemplateAdapter(Component):
+ _name = 'prestashop.product.template.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.template'
+
+ _prestashop_model = 'products'
+ _export_node_name = 'product'
+
+
+
+
class ImportInventory(models.TransientModel):
# In actual connector version is mandatory use a model
_name = '_import_stock_available'
-@prestashop
+# # @prestashop
class ProductInventoryBatchImporter(Component):
- _name = '_import_stock_available.batch.importer'
+# _model_name = ['_import_stock_available']
+ _name = 'prestashop._import_stock_available.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = '_import_stock_available'
+
def run(self, filters=None, **kwargs):
if filters is None:
@@ -351,11 +375,13 @@ def _import_record(self, record_id, record=None, **kwargs):
)
-@prestashop
-class ProductInventoryImporter(Component):
- _name = 'prestashop.product.inventory.importer'
+# # @prestashop
+class ProductInventoryImporter(PrestashopImporter):
+ _model_name = ['_import_stock_available']
+ _name = 'prestashop._import_stock_available.importer'
_inherit = 'prestashop.importer'
- _apply_on = ['_import_stock_available']
+ _apply_on = '_import_stock_available'
+
def _get_quantity(self, record):
filters = {
@@ -428,12 +454,17 @@ def _import(self, binding, **kwargs):
).change_product_qty()
-@prestashop
+# # @prestashop
class ProductTemplateImporter(Component):
""" Import one translatable record """
+ _model_name = [
+ 'prestashop.product.template',
+ ]
_name = 'prestashop.product.template.importer'
- _inherit = 'prestashop.translatable.record.importer'
+ _inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.template'
+
+
_base_mapper = TemplateMapper
@@ -518,11 +549,14 @@ def _import_combination(self, combination, **kwargs):
**kwargs)
def _delay_product_image_variant(self, combinations, **kwargs):
- delayable = self.env['prestashop.product.combination'].with_delay(priority=15)
- delayable.set_product_image_variant(
- self.backend_record,
+ set_product_image_variant.delay(
+ self.session,
+ 'prestashop.product.combination',
+ self.backend_record.id,
combinations,
- **kwargs)
+ priority=15,
+ **kwargs
+ )
def import_combinations(self):
prestashop_record = self._get_prestashop_data()
@@ -547,6 +581,17 @@ def import_combinations(self):
if combinations and associations['images'].get('image'):
self._delay_product_image_variant(combinations)
+ def _delay_import_product_image(self, prestashop_record, image, **kwargs):
+ import_product_image.delay(
+ self.session,
+ 'prestashop.product.image',
+ self.backend_record.id,
+ prestashop_record['id'],
+ image['id'],
+ priority=10,
+ **kwargs
+ )
+
def import_images(self, binding):
prestashop_record = self._get_prestashop_data()
associations = prestashop_record.get('associations', {})
@@ -556,12 +601,7 @@ def import_images(self, binding):
images = [images]
for image in images:
if image.get('id'):
- delayable = self.env['prestashop.product.image'].with_delay(priority=10)
- delayable.import_product_image(
- self.backend_record,
- prestashop_record['id'],
- image['id'],
- **kwargs)
+ self._delay_import_product_image(prestashop_record, image)
def import_supplierinfo(self, binding):
ps_id = self._get_prestashop_data()['id']
@@ -590,7 +630,7 @@ def _import_dependencies(self):
self._import_manufacturer()
def _import_manufacturer(self):
- self.component(usage='manufacturer.product.importer').import_manufacturer(
+ self.unit_for(ManufacturerProductDependency).import_manufacturer(
self.prestashop_record.get('id_manufacturer')
)
@@ -623,8 +663,20 @@ def _import_categories(self):
'prestashop.product.category')
-@prestashop
+@job(default_channel='root.prestashop')
+def import_inventory(session, backend_id):
+ backend = session.env['prestashop.backend'].browse(backend_id)
+ env = backend.get_environment('_import_stock_available', session=session)
+ inventory_importer = env.get_connector_unit(ProductInventoryBatchImporter)
+ return inventory_importer.run()
+
+
+# # @prestashop
class ProductTemplateBatchImporter(Component):
+ #_model_name = 'prestashop.product.template'
+
_name = 'prestashop.product.template.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.product.template'
+
+
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index d16f9f535..56dfdf327 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -5,7 +5,6 @@
from odoo import fields, models
from odoo.addons.component.core import Component
-from ...backend import prestashop
class PrestashopResCountry(models.Model):
@@ -35,11 +34,9 @@ class ResCountry(models.Model):
string='prestashop Bindings',
)
-
-@prestashop
class ResCountryAdapter(Component):
_name = 'prestashop.res.country.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.country'
-
+
_prestashop_model = 'countries'
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index f9e02b9a5..f604a9418 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -1,15 +1,17 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
-@prestashop
-class CountryImporter(AutoMatchingImporter):
+# # @prestashop
+class CountryImporter(Component):
_name = 'prestashop.res.country.importer'
- _apply_on = 'prestashop.res.country'
-
+ _inherit = 'prestashop.auto.matching.importer'
+ _apply_on = ['prestashop.res.country']
+
_erp_field = 'code'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 79c949413..16350a4e8 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -5,8 +5,6 @@
from odoo import fields, models
from odoo.addons.component.core import Component
-from ...backend import prestashop
-
class PrestashopResCurrency(models.Model):
_name = 'prestashop.res.currency'
@@ -36,11 +34,9 @@ class ResCurrency(models.Model):
readonly=True
)
-
-@prestashop
class ResCurrencyAdapter(Component):
_name = 'prestashop.res.currency.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.currency'
-
+
_prestashop_model = 'currencies'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index 8b2070fa1..cc3f0d82a 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -6,11 +6,14 @@
from ...backend import prestashop
-@prestashop
-class ResCurrencyImporter(AutoMatchingImporter):
- _name = 'prestashop.res.currency.importer'
- _apply_on = 'prestashop.res.currency'
+# # @prestashop
+class ResCurrencyImporter(Component):
+ #_model_name = 'prestashop.res.currency'
+ _name = 'prestashop.res.currency.importer'
+ _inherit = 'prestashop.auto.matching.importer'
+ _apply_on = ['prestashop.res.currency']
+
_erp_field = 'name'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index a5abe4473..3f3d649fa 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -5,8 +5,6 @@
from odoo import models, fields
from odoo.addons.component.core import Component
-from ...backend import prestashop
-
class PrestashopResLang(models.Model):
_name = 'prestashop.res.lang'
@@ -41,10 +39,9 @@ class ResLang(models.Model):
)
-@prestashop
class ResLangAdapter(Component):
_name = 'prestashop.res.lang.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.lang'
-
+
_prestashop_model = 'languages'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index f5f2fb5c4..39dba4cb6 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -1,15 +1,17 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+
from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
-@prestashop
-class LangImporter(AutoMatchingImporter):
- _name = 'prestashop.res.lang.importer'
- _apply_on = 'prestashop.res.lang'
+class LangImporter(Component):
+ _name = 'prestashop.res.lang.importer'
+ _inherit = 'prestashop.auto.matching.importer'
+ _apply_on = ['prestashop.res.lang']
+
_erp_field = 'code'
_ps_field = 'language_code'
_copy_fields = [
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index 117b6f2a7..c9a9eedbc 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -5,7 +5,6 @@
from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
-from ...backend import prestashop
from ...components.importer import import_batch
@@ -158,17 +157,17 @@ class PrestashopAddress(models.Model):
vat_number = fields.Char('PrestaShop VAT')
-@prestashop
class PartnerAdapter(Component):
_name = 'prestashop.res.partner.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.partner'
+
_prestashop_model = 'customers'
-@prestashop
class PartnerAddressAdapter(Component):
_name = 'prestashop.address.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.address'
+
_prestashop_model = 'addresses'
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 27064bd1b..b34190660 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -5,18 +5,30 @@
from odoo import fields, _
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.components.mapper import (mapping, only_create)
-from ...components.importer import import_batch
-from ...backend import prestashop
-from odoo.addons.connector.unit.mapper import external_to_m2o
+from odoo.addons.connector.unit.mapper import (
+ ImportMapper,
+ mapping,
+ only_create,
+)
+from ...components.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
+# from ...backend import prestashop
+# from odoo.addons.connector.unit.mapper import external_to_m2o
+
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import (
+ mapping, external_to_m2o, only_create)
-@prestashop
+# # @prestashop
class PartnerImportMapper(Component):
+ #_model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.res.partner'
+ _apply_on = ['prestashop.res.partner']
direct = [
('date_add', 'date_add'),
@@ -92,11 +104,14 @@ def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
-@prestashop
+# # @prestashop
class ResPartnerImporter(Component):
+ #_model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.importer'
_inherit = 'prestashop.importer'
- _apply_on = 'prestashop.res.partner'
+ _apply_on = ['prestashop.res.partner']
+
+
def _import_dependencies(self):
groups = self.prestashop_record.get('associations', {}) \
@@ -117,18 +132,22 @@ def _after_import(self, binding):
filters={'filter[id_customer]': '%d' % (ps_id,)})
-@prestashop
+# # @prestashop
class PartnerBatchImporter(Component):
+# _model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.res.partner'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = ['prestashop.res.partner']
+
-@prestashop
+# # @prestashop
class AddressImportMapper(Component):
- _name = 'prestashop.address.mappper'
+ #_model_name = 'prestashop.address'
+ _name = 'prestashop.address.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.address'
+ _apply_on = ['prestashop.address']
+
direct = [
('address1', 'street'),
@@ -185,11 +204,14 @@ def type(self, record):
return {'type': 'other'}
-@prestashop
+# # @prestashop
class AddressImporter(Component):
+# _model_name = 'prestashop.address'
_name = 'prestashop.address.importer'
_inherit = 'prestashop.importer'
- _apply_on = 'prestashop.address'
+ _apply_on = ['prestashop.address']
+
+
def _check_vat(self, vat):
vat_country, vat_number = vat[:2].lower(), vat[2:]
@@ -221,11 +243,13 @@ def _after_import(self, binding):
)
-@prestashop
+# # @prestashop
class AddressBatchImporter(Component):
- _name = 'prestashop.address.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.address'
+ #_model_name = 'prestashop.address'
+ _name = 'prestashop.address.mapper'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = ['prestashop.address']
+
@job(default_channel='root.prestashop')
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index aaebe64ca..4a972f611 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -4,7 +4,6 @@
from odoo import fields, models
from odoo.addons.component.core import Component
-from ...backend import prestashop
class ResPartnerCategory(models.Model):
@@ -47,9 +46,9 @@ class PrestashopResPartnerCategory(models.Model):
# see http://forge.prestashop.com/browse/PSCFV-8284
-@prestashop
class PartnerCategoryAdapter(Component):
_name = 'prestashop.res.partner.category.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.partner.category'
+
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index b16c4083b..047500875 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -1,15 +1,27 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
-from odoo.addons.component.core import Component
-from ...components.importer import import_record
+from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+from ...components.importer import (
+ TranslatableRecordImporter,
+ import_record,
+ DelayedBatchImporter,
+)
from ...backend import prestashop
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
+
+
+class PartnerCategoryBatchImporter(Component):
+ _name = 'prestashop.res.partner.category.batch.importer'
+ _inherit = 'prestashop.batch.importer'
+ _apply_on = 'prestashop.res.partner.category'
+
+
-@prestashop
class PartnerCategoryImportMapper(Component):
- _name = 'prestashop.res.partner.category.mapper'
+ _name = 'prestashop.res.partner.category.import.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.res.partner.category'
@@ -28,17 +40,16 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-@prestashop
-class PartnerCategoryImporter(Component):
+class PartnerCategoryImporter(TranslatableRecordImporter):
""" Import one translatable record """
_name = 'prestashop.res.partner.category.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.res.partner.category'
-
+
_translatable_fields = {
'prestashop.res.partner.category': ['name'],
}
-
+
def _after_import(self, binding):
super(PartnerCategoryImporter, self)._after_import(binding)
record = self.prestashop_record
@@ -49,10 +60,3 @@ def _after_import(self, binding):
self.backend_record.id,
record['id']
)
-
-
-@prestashop
-class PartnerCategoryBatchImporter(Component):
- _name = 'prestashop.res.partner.category.batch.importer'
- _inherit = 'prestashop.delayed.batch.importer'
- _apply_on = 'prestashop.res.partner.category'
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index d1c49ac54..a2b97e5e0 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -3,10 +3,9 @@
import openerp.addons.decimal_precision as dp
-from odoo import models, fields, api, _
+from odoo import models, fields, api
from odoo.addons.component.core import Component
-from ...backend import prestashop
import logging
_logger = logging.getLogger(__name__)
@@ -68,31 +67,6 @@ class PrestashopSaleOrder(models.Model):
)
- def import_orders_since(self, backend, since_date=None, **kwargs):
- """ Prepare the import of orders modified on PrestaShop """
- filters = None
- if since_date:
- filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
- now_fmt = fields.Datetime.now()
- self.env['prestashop.sale.order'].with_delay(
- priority=5, max_retries=0).import_batch(backend, filters=filters)
- if since_date:
- filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
-# try:
-# self.env['prestashop.mail.message'].import_batch(backend, filters)
-# except Exception as error:
-# msg = _(
-# 'Mail messages import failed with filters `%s`. '
-# 'Error: `%s`'
-# ) % (str(filters), str(error))
-# backend.add_checkpoint(
-# message=msg
-# )
-
- backend.import_orders_since = now_fmt
- return True
-
-
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -166,16 +140,11 @@ def create(self, vals):
return super(PrestashopSaleOrderLineDiscount, self).create(vals)
-class OrderPaymentModel(models.TransientModel):
- # In actual connector version is mandatory use a model
- _name = '__not_exist_prestashop.payment'
-
-
-@prestashop
class SaleOrderAdapter(Component):
_name = 'prestashop.sale.order.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order'
+
_prestashop_model = 'orders'
_export_node_name = 'order'
@@ -183,25 +152,25 @@ def update_sale_state(self, prestashop_id, datas):
return self.client.add('order_histories', datas)
-@prestashop
class SaleOrderLineAdapter(Component):
_name = 'prestashop.sale.order.line.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.line'
+
_prestashop_model = 'order_details'
-@prestashop
class OrderPaymentAdapter(Component):
_name = '__not_exist_prestashop.payment.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '__not_exist_prestashop.payment'
+
_prestashop_model = 'order_payments'
-@prestashop
class OrderDiscountAdapter(Component):
_name = 'prestashop.sale.order.line.discount.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.line.discount'
+
_prestashop_model = 'order_discounts'
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index a445af31c..90dcf4966 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -3,13 +3,17 @@
from odoo import _, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.connector.connector import ConnectorUnit
from odoo.addons.queue_job.exception import FailedJobError, NothingToDoJob
-from odoo.addons.connector_ecommerce.components.sale_order_onchange import (
+from odoo.addons.connector_ecommerce.unit.sale_order_onchange import (
SaleOrderOnChange,
)
-from ...components.importer import import_batch
+from ...components.backend_adapter import GenericAdapter
+from ...components.importer import (
+ PrestashopImporter,
+ import_batch,
+ DelayedBatchImporter,
+)
from ...components.exception import OrderImportRuleRetry
from ...backend import prestashop
@@ -53,8 +57,9 @@ def _rule_paid(self, record, mode):
'The import will be retried later.')
def _get_paid_amount(self, record):
- payment_adapter = self.component(
- model_name='__not_exist_prestashop.payment'
+ payment_adapter = self.unit_for(
+ GenericAdapter,
+ '__not_exist_prestashop.payment'
)
payment_ids = payment_adapter.search({
'filter[order_reference]': record['reference']
@@ -125,7 +130,7 @@ def _rule_state(self, record, mode):
if self.backend_record.importable_order_state_ids:
ps_state_id = record['current_state']
state = self.binder_for(
- 'prestashop.sale.order.state').to_internal(ps_state_id, unwrap=1)
+ 'prestashop.sale.order.state').to_odoo(ps_state_id, unwrap=1)
if not state:
raise FailedJobError(_(
"The configuration is missing "
@@ -141,8 +146,7 @@ def _rule_state(self, record, mode):
) % record['id'])
-@prestashop
-class SaleOrderMapper(Component):
+class SaleOrderImportMapper(Component):
_name = 'prestashop.sale.order.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.sale.order'
@@ -195,7 +199,8 @@ def _map_child(self, map_record, from_attr, to_attr, model_name):
children = []
for child_record in child_records:
adapter = self.component(
- usage='prestashop.adapter', model_name=model_name
+ usage='prestashop.adapter',
+ model_name=model_name
)
detail_record = adapter.read(child_record['id'])
@@ -279,15 +284,13 @@ def total_tax_amount(self, record):
return {'total_amount_tax': tax}
def finalize(self, map_record, values):
- onchange = self.component('ecommerce.onchange.manager.sale.order')
+ onchange = self.unit_for(SaleOrderOnChange)
return onchange.play(values, values['prestashop_order_line_ids'])
-
-@prestashop
class SaleOrderImporter(Component):
_name = 'prestashop.sale.order.importer'
_inherit = 'prestashop.importer'
- _apply_on = 'prestashop.sale.order'
+ _apply_on = ['prestashop.sale.order']
def __init__(self, environment):
"""
@@ -362,7 +365,7 @@ def _has_to_skip(self):
""" Return True if the import can be skipped """
if self._get_binding():
return True
- rules = self.component(usage='sale.import.rule')
+ rules = self.unit_for(SaleImportRule)
try:
return rules.check(self.prestashop_record)
except NothingToDoJob as err:
@@ -372,18 +375,18 @@ def _has_to_skip(self):
return err.message
-@prestashop
+# # # @prestashop
class SaleOrderBatchImporter(Component):
_name = 'prestashop.sale.order.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.sale.order'
+ _inherit = 'prestashop.delayed.batch.importer'
+ _apply_on = ['prestashop.sale.order']
-@prestashop
+# # # @prestashop
class SaleOrderLineMapper(Component):
_name = 'prestashop.sale.order.line.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.sale.order.line'
+ _apply_on = ['prestashop.sale.order.line']
direct = [
('product_name', 'name'),
@@ -458,10 +461,10 @@ def backend_id(self, record):
@prestashop
-class SaleOrderLineDiscountMapper(Component):
- _name = 'prestashop.sale.order.discount.importer'
+class SaleOrderLineDiscountMapper(ImportMapper):
+ _name = 'prestashop.sale.order.line.discount.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.sale.order.line.discount'
+ _apply_on = ['prestashop.sale.order.line.discount']
direct = []
@@ -503,3 +506,4 @@ def backend_id(self, record):
@mapping
def prestashop_id(self, record):
return {'prestashop_id': record['id']}
+
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index fe8f42ced..8102a1711 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -3,7 +3,6 @@
from odoo import models, fields
from odoo.addons.component.core import Component
-from ...backend import prestashop
class SaleOrderState(models.Model):
@@ -71,10 +70,10 @@ class SaleOrderStateList(models.Model):
)
-@prestashop
class SaleOrderStateAdapter(Component):
_name = 'prestashop.sale.order.state.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.state'
-
+
+
_prestashop_model = 'order_states'
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
index f973f42e9..2afa27789 100644
--- a/connector_prestashop/models/sale_order_state/exporter.py
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -7,7 +7,7 @@
from ...backend import prestashop
-@prestashop
+# # @prestashop
class SaleStateExporter(Exporter):
_model_name = ['prestashop.sale.order']
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index eeff9be45..93c865f73 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -1,12 +1,12 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
-from odoo.addons.component.core import Component
-from ...backend import prestashop
+# from odoo.addons.connector.unit.mapper import ImportMapper, mapping
+# from ...components.importer import TranslatableRecordImporter, DirectBatchImporter
+# from ...backend import prestashop
+
-@prestashop
class SaleOrderStateMapper(Component):
_name = 'prestashop.sale.order.state.mapper'
_inherit = 'prestashop.import.mapper'
@@ -25,12 +25,19 @@ def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
-@prestashop
+
+
+class SaleOrderStateBatchImporter(Component):
+ _name = 'prestashop.sale.order.state.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.sale.order.state'
+
+
class SaleOrderStateImporter(Component):
""" Import one translatable record """
- _name = 'prestashop.sale.order.state.importer'
- _inherit = 'prestashop.translatable.record.importer'
- _apply_on = 'prestashop.sale.order.state'
+ _model_name = [
+ 'prestashop.sale.order.state',
+ ]
_translatable_fields = {
'prestashop.sale.order.state': [
@@ -39,8 +46,4 @@ class SaleOrderStateImporter(Component):
}
-@prestashop
-class SaleOrderStateBatchImporter(Component):
- _name = 'prestashop.sale.order.state.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.sale.order.state'
+
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
index 46c4d5eea..d47884706 100644
--- a/connector_prestashop/models/stock_tracking/common.py
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -2,13 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
-from ...backend import prestashop
-@prestashop
+# # @prestashop
class OrderCarriers(Component):
- _name = 'prestashop.order_carrier.adapter'
+ _name = '__not_exit_prestashop.order_carrier.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '__not_exit_prestashop.order_carrier'
+
_prestashop_model = 'order_carriers'
_export_node_name = 'order_carrier'
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index d739f0f47..60e74809a 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -12,7 +12,7 @@
_logger = logging.getLogger(__name__)
-@prestashop
+# # @prestashop
class PrestashopTrackingExporter(Exporter):
_model_name = ['prestashop.sale.order']
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
index 6fe590492..2b9b1fbe0 100644
--- a/connector_prestashop/models/stock_warehouse/common.py
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -4,7 +4,7 @@
from odoo import api, fields, models
from odoo.addons.component.core import Component
-from ...backend import prestashop
+# from ...backend import prestashop
class StockWarehouse(models.Model):
@@ -55,7 +55,7 @@ def _compute_backend_id(self):
default_url = fields.Char('Default url')
-@prestashop
+# # @prestashop
class ShopAdapter(Component):
_name = 'prestashop.shop'
_model_name = 'prestashop.shop'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index 8453f8d88..579a97c7c 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -1,18 +1,21 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.components.mapper import mapping
-from ...components.importer import PrestashopImporter, DirectBatchImporter
-from odoo.addons.connector.unit.mapper import external_to_m2o
-from ...backend import prestashop
+
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+
+
+class ShopImporter(Component):
+ _name = 'prestashop.shop.importer'
+ _inherit = 'prestashop.importer'
+ _apply_on = 'prestashop.shop'
-@prestashop
class ShopImportMapper(Component):
- _name = 'prestashop.shop.mapper'
+ _name = 'prestashop.shop.import.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = 'prestashop.shop'
+ _apply_on = ['prestashop.shop']
direct = [
('name', 'name'),
@@ -36,13 +39,16 @@ def opener_id(self, record):
return {'openerp_id': self.backend_record.warehouse_id.id}
+# # @prestashop
class ShopImporter(Component):
_name = 'prestashop.shop.importer'
_inherit = 'prestashop.importer'
- _apply_on = 'prestashop.shop'
+ _apply_on = ['prestashop.shop']
-class ShopBatchImporter(Component):
- _name = 'prestashop.shop.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.shop'
+# # # @prestashop
+# class ShopBatchImporter(DirectBatchImporter):
+# _model_name = 'prestashop.shop'
+#
+#
+
diff --git a/connector_prestashop/tests/test_import_partner.py b/connector_prestashop/tests/test_import_partner.py
index c70f9490a..629e4e614 100644
--- a/connector_prestashop/tests/test_import_partner.py
+++ b/connector_prestashop/tests/test_import_partner.py
@@ -150,7 +150,7 @@ def test_import_partner_record(self):
expected = [
ExpectedPartner(
name='John DOE',
- email='pub@prestashop.com',
+ email='pub# # @prestashop.com',
newsletter=True,
company=False,
active=True,
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
new file mode 100644
index 000000000..d1f096497
--- /dev/null
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+ prestashop.backend.form
+ prestashop.backend
+
+
+
+
+
+
+ prestashop.backend.tree
+ prestashop.backend
+
+
+
+
+
+
+
+
+
+ PrestaShop Backends
+ prestashop.backend
+ form
+ tree,form
+
+
+
+
+ prestashop.shop.group.form
+ prestashop.shop.group
+
+
+
+
+
+
+ prestashop.shop.group.tree
+ prestashop.shop.group
+
+
+
+
+
+
+
+
+
+ PrestaShop Shop Groups
+ prestashop.shop.group
+ form
+ tree,form
+
+
+
+
+ prestashop.shop.form
+ prestashop.shop
+
+
+
+
+
+
+ prestashop.shop.tree
+ prestashop.shop
+
+
+
+
+
+
+
+
+
+
+ PrestaShop Shops
+ prestashop.shop
+ form
+ tree,form
+
+
+
+
diff --git a/connector_prestashop/views/prestashop_model_view.xml b/connector_prestashop/views/prestashop_model_view.xml
deleted file mode 100644
index 81d15967f..000000000
--- a/connector_prestashop/views/prestashop_model_view.xml
+++ /dev/null
@@ -1,278 +0,0 @@
-
-
-
-
-
-
- prestashop.backend.form
- prestashop.backend
-
-
-
-
-
-
- prestashop.backend.tree
- prestashop.backend
-
-
-
-
-
-
-
-
-
- PrestaShop Backends
- prestashop.backend
- form
- tree,form
-
-
-
-
- prestashop.shop.group.form
- prestashop.shop.group
-
-
-
-
-
-
- prestashop.shop.group.tree
- prestashop.shop.group
-
-
-
-
-
-
-
-
-
- PrestaShop Shop Groups
- prestashop.shop.group
- form
- tree,form
-
-
-
-
- prestashop.shop.form
- prestashop.shop
-
-
-
-
-
-
- prestashop.shop.tree
- prestashop.shop
-
-
-
-
-
-
-
-
-
-
- PrestaShop Shops
- prestashop.shop
- form
- tree,form
-
-
-
-
From 0d271511c9bc4fd9e8fd9731b004670e0a05b130 Mon Sep 17 00:00:00 2001
From: Benoit
Date: Tue, 10 Apr 2018 23:02:49 +0200
Subject: [PATCH 08/99] [FIX] connector_prestashop: More fixes
* merge
* component usage
* product views
* remove prestshop decorator and various fixes
---
.../components/auto_matching_importer.py | 1 +
connector_prestashop/components/exporter.py | 4 +-
connector_prestashop/components/importer.py | 23 +--
connector_prestashop/data/ecommerce_data.xml | 8 +-
.../models/account_payment_mode/importer.py | 4 -
.../models/account_tax/importer.py | 6 +-
connector_prestashop/models/binding/common.py | 7 +-
.../models/prestashop_backend/common.py | 11 +-
.../models/prestashop_backend/importer.py | 2 +-
.../models/prestashop_shop_group/common.py | 19 --
.../models/prestashop_shop_group/importer.py | 12 +-
.../models/product_image/common.py | 10 +-
.../models/product_image/importer.py | 8 +-
.../models/product_product/common.py | 23 ++-
.../models/product_product/deleter.py | 2 -
.../models/product_product/exporter.py | 2 -
.../models/product_product/importer.py | 41 ++---
.../models/product_supplierinfo/common.py | 32 +++-
.../models/product_supplierinfo/importer.py | 22 +--
.../models/product_template/common.py | 9 +-
.../models/product_template/exporter.py | 4 +-
.../models/product_template/importer.py | 166 ++++++------------
.../models/queue_job/__init__.py | 3 +
.../models/queue_job/common.py | 26 +++
.../models/res_partner_category/importer.py | 18 +-
.../models/sale_order/common.py | 35 +++-
.../models/sale_order/importer.py | 49 ++----
.../models/sale_order_state/exporter.py | 2 -
.../models/stock_move/common.py | 4 +-
.../models/stock_tracking/exporter.py | 8 +-
.../models/stock_warehouse/common.py | 3 -
.../models/stock_warehouse/importer.py | 27 +--
connector_prestashop/views/product_view.xml | 35 ++--
33 files changed, 258 insertions(+), 368 deletions(-)
create mode 100644 connector_prestashop/models/queue_job/__init__.py
create mode 100644 connector_prestashop/models/queue_job/common.py
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 3155b10b1..5d1b0904d 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -14,6 +14,7 @@
class AutoMatchingImporter(Component):
_name = 'prestashop.auto.matching.importer'
_inherit = 'prestashop.importer'
+ _usage = 'auto.matching.importer'
_model_name = None
_erp_field = None
diff --git a/connector_prestashop/components/exporter.py b/connector_prestashop/components/exporter.py
index 85b13c9d6..5e8e6a2b4 100644
--- a/connector_prestashop/components/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -59,7 +59,7 @@ def run(self, binding_id, *args, **kwargs):
self.binder.bind(self.prestashop_id, self.binding)
# commit so we keep the external ID if several cascading exports
# are called and one of them fails
- self.session.commit()
+ self._cr.commit()
self._after_export()
return result
@@ -155,7 +155,7 @@ def _get_or_create_binding(
binding = model_c.create(_bind_values)
# Eager commit to avoid having 2 jobs
# exporting at the same time.
- self.session.commit()
+ self._cr.commit()
else:
# If prestashop_bind_ids does not exist we are typically in a
# "direct" binding (the binding record is the same record).
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index 3c1ce2cee..88136edd1 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -60,12 +60,16 @@ class or parent class to use for the export.
importer_class = PrestashopImporter
binder = self.binder_for(binding_model)
if always or not binder.to_internal(prestashop_id):
+<<<<<<< HEAD
<<<<<<< HEAD
importer = self.component(usage='prestashop.importer', model_name=binding_model)
=======
importer = self.unit_for(importer_class, model=binding_model)
>>>>>>> 29848b8... [REF]Migrate new components structure
+=======
+ importer = self.component(usage='record.importer', model_name=binding_model)
+>>>>>>> 6855cf5... [FIX] component usage
importer.run(prestashop_id, **kwargs)
@@ -119,7 +123,7 @@ def _get_binding(self):
return self.binder.to_internal(self.prestashop_id)
def _context(self, **kwargs):
- return dict(self.session.context, connector_no_export=True, **kwargs)
+ return dict(self._context, connector_no_export=True, **kwargs)
def _create_context(self):
return {'connector_no_export': True}
@@ -341,23 +345,6 @@ def _import_record(self, record):
raise NotImplementedError
-# TODO 2016-10-25: is this used at all somewhere???
-class AddCheckpoint(AbstractComponent):
- """ Add a connector.checkpoint on the underlying model
- (not the prestashop.* but the _inherits'ed model) """
-
- _name = 'connector_prestashop_component'
- _model_name = []
-
- def run(self, binding_id):
- record = self.model.browse(binding_id)
- self.backend_record.add_checkpoint(
- session=self.session,
- model=record._model._name,
- record_id=record.id,
- )
-
-
class DirectBatchImporter(AbstractComponent):
""" Import the PrestaShop Shop Groups + Shops
diff --git a/connector_prestashop/data/ecommerce_data.xml b/connector_prestashop/data/ecommerce_data.xml
index d1e52e5f7..d6587e1a9 100644
--- a/connector_prestashop/data/ecommerce_data.xml
+++ b/connector_prestashop/data/ecommerce_data.xml
@@ -13,7 +13,7 @@ Check your taxes and fiscal positions configuration and correct them if necessar
30
sale
sale.order
- if order.prestashop_bind_ids and abs(order.amount_total - order.prestashop_bind_ids[0].total_amount) >= 0.001:
+ if sale.prestashop_bind_ids and abs(sale.amount_total - sale.prestashop_bind_ids[0].total_amount) >= 0.001:
failed = True
@@ -31,9 +31,9 @@ Check your taxes and fiscal positions configuration and correct them if necessar
sale
sale.order
# By default, a cent of difference for the tax amount is allowed, feel free to customise it in your own module
-if order.prestashop_bind_ids:
- ps_amount = order.prestashop_bind_ids[0].total_amount_tax
- oerp_amount = order.amount_tax
+if sale.prestashop_bind_ids:
+ ps_amount = sale.prestashop_bind_ids[0].total_amount_tax
+ oerp_amount = sale.amount_tax
if (ps_amount == 0.0 and oerp_amount != 0.0) or (ps_amount and abs(1 - oerp_amount / ps_amount) > 0.02):
failed = True
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index 7c246418b..2394666ff 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -2,17 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
-from ...backend import prestashop
-# # @prestashop
class PaymentModeBatchImporter(Component):
_name = 'account.payment.mode.importer'
_inherit = 'prestashop.batch.importer'
_apply_on = 'account.payment.mode'
- _model_name = 'account.payment.mode'
-
def run(self, filters=None, **kwargs):
if filters is None:
filters = {}
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index c484b1b07..f8654a9f8 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,15 +1,13 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.component.core import Component
+from ...components.auto_matching_importer import AutoMatchingImporter
-class AccountTaxImporter(Component):
+class AccountTaxImporter(AutoMatchingImporter):
_name = 'prestashop.account.tax.importer'
- _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.account.tax'
-# _model_name = 'prestashop.account.tax'
_erp_field = 'amount'
_ps_field = 'rate'
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index e69ca4af1..7c7a46e9d 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields, api
-from odoo.addons.queue_job.job import job
+from odoo.addons.queue_job.job import job, related_action
from ...components.importer import import_record
@@ -44,9 +44,10 @@ def import_batch(self, backend, filters=None):
return importer.run(filters=filters)
@job(default_channel='root.prestashop')
+ @related_action(action='related_action_record')
@api.multi
def export_record(self, fields=None):
- """ Export a record on Magento """
+ """ Export a record on PrestaShop """
self.ensure_one()
with self.backend_id.work_on(self._name) as work:
exporter = work.component(usage='record.exporter')
@@ -54,7 +55,7 @@ def export_record(self, fields=None):
@job(default_channel='root.prestashop')
def export_delete_record(self, backend, external_id):
- """ Delete a record on Magento """
+ """ Delete a record on PrestaShop """
with backend.work_on(self._name) as work:
deleter = work.component(usage='record.exporter.deleter')
return deleter.run(external_id)
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index cb75658dc..2e452a908 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -175,7 +175,7 @@ def synchronize_basedata(self):
'prestashop.account.tax',
]:
with backend.work_on(model_name) as work:
- importer = work.component(usage='record.importer')
+ importer = work.component(usage='auto.matching.importer')
importer.run()
self.env['prestashop.account.tax.group'].import_batch(backend)
self.env['prestashop.sale.order.state'].import_batch(backend)
@@ -312,13 +312,6 @@ def _scheduler_import_payment_methods(self, domain=None):
def _scheduler_import_suppliers(self, domain=None):
self.search(domain or []).import_suppliers()
- @api.multi
- def import_record(self, model_name, ext_id):
- self.ensure_one()
- session = ConnectorSession.from_env(self.env)
- import_record(session, model_name, self.id, ext_id)
- return True
-
@api.multi
def _get_locations_for_stock_quantities(self):
root_location = (self.stock_location_id or
@@ -351,7 +344,7 @@ class NoModelAdapter(Component):
""" Used to test the connection """
_name = 'prestashop.adapter.test'
_inherit = 'prestashop.adapter'
- _model_name = 'prestashop.backend'
+ _apply_on = 'prestashop.backend'
_prestashop_model = ''
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index ab47bd314..c6c2fb5f5 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -13,7 +13,7 @@ class MetadataBatchImporter(Component):
They are imported directly because this is a rare and fast operation,
and we don't really bother if it blocks the UI during this time.
- (that's also a mean to rapidly check the connectivity with Magento).
+ (that's also a mean to rapidly check the connectivity with PrestaShop).
"""
diff --git a/connector_prestashop/models/prestashop_shop_group/common.py b/connector_prestashop/models/prestashop_shop_group/common.py
index fbafa1683..139c453e9 100644
--- a/connector_prestashop/models/prestashop_shop_group/common.py
+++ b/connector_prestashop/models/prestashop_shop_group/common.py
@@ -1,27 +1,9 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-import logging
from odoo.addons.component.core import Component
-from contextlib import contextmanager
-
from odoo import models, fields, api, exceptions, _
-from odoo.addons.connector.connector import ConnectorEnvironment
-from ...components.importer import import_batch, import_record
-# from ...components.auto_matching_importer import AutoMatchingImporter
-from ...components.backend_adapter import api_handle_errors
-from ...components.version_key import VersionKey
-
-
-from ..product_template.importer import import_inventory
-from ..product_supplierinfo.importer import import_suppliers
-from ..account_invoice.importer import import_refunds
-from ..sale_order.importer import import_orders_since
-
-
-_logger = logging.getLogger(__name__)
-
class PrestashopShopGroup(models.Model):
_name = 'prestashop.shop.group'
@@ -46,6 +28,5 @@ class PrestashopShopGroup(models.Model):
class ShopGroupAdapter(Component):
_name = 'prestashop.shop.group.adapter'
_inherit = 'prestashop.adapter'
-# _model_name = 'prestashop.shop.group'
_apply_on = 'prestashop.shop.group'
_prestashop_model = 'shop_groups'
diff --git a/connector_prestashop/models/prestashop_shop_group/importer.py b/connector_prestashop/models/prestashop_shop_group/importer.py
index ae89f01ad..6da1e9443 100644
--- a/connector_prestashop/models/prestashop_shop_group/importer.py
+++ b/connector_prestashop/models/prestashop_shop_group/importer.py
@@ -6,11 +6,13 @@
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+
class ShopGroupImporter(Component):
_name = 'prestashop.shop.group.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.shop.group'
+
class ShopGroupMapper(Component):
_name = 'prestashop.shop.group.mapper'
_inherit = 'prestashop.import.mapper'
@@ -25,13 +27,3 @@ def name(self, record):
if name is None:
name = _('Undefined')
return {'name': name}
-
-
-
-#TODO: Check deletion as backend importer list multiple objects to import
-# class ShopGroupBatchImporter(Component):
-# _name = 'prestashop.shop.group.batch.importer'
-# _inherit = 'prestashop.direct.batch.importer'
-# _apply_on = 'prestashop.shop.group'
-
-# _model_name = 'prestashop.shop.group'
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index 002349381..64f2c86c7 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -4,7 +4,7 @@
import base64
from odoo import models, fields, api
from odoo.addons.queue_job.job import job
-from odoo.addons.component.core import AbstractComponent
+from odoo.addons.component.core import Component
from ...components.backend_adapter import PrestaShopWebServiceImage
@@ -40,17 +40,15 @@ class PrestashopProductImage(models.Model):
@api.multi
def import_product_image(self, backend, product_tmpl_id, image_id, **kwargs):
"""Import a product image"""
- self.ensure_one()
with backend.work_on(self._name) as work:
- importer = work.component(usage='prestashop.importer')
+ importer = work.component(usage='record.importer')
return importer.run(product_tmpl_id, image_id)
-class ProductImageAdapter(AbstractComponent):
+class ProductImageAdapter(Component):
_name = 'prestashop.product.image.adapter'
_inherit = 'prestashop.crud.adapter'
-
- _model_name = 'prestashop.product.image'
+ _apply_on = 'prestashop.product.image'
_prestashop_image_model = 'products'
_prestashop_model = '/images/products'
_export_node_name = '/images/products'
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 689841b5d..c3fd4c154 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -66,14 +66,14 @@ def owner_model(self, record):
class ProductImageImporter(Component):
_name = 'prestashop.product.image.importer'
- _importer = 'prestashop.importer'
+ _inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.image'
- _model_name = 'prestashop.product.image'
-
def _get_prestashop_data(self):
""" Return the raw PrestaShop data for ``self.prestashop_id`` """
- return self.backend_adapter.read(self.template_id, self.image_id)
+ adapter = self.component(
+ usage='backend.adapter', model_name=self.model._name)
+ return adapter.read(self.template_id, self.image_id)
def run(self, template_id, image_id, **kwargs):
self.template_id = template_id
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index 113a60019..2d1b786b2 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -7,8 +7,8 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from odoo.addons.component.core import Component
from exporter import CombinationInventoryExporter
+from odoo.addons.component.core import Component
class ProductProduct(models.Model):
@@ -192,6 +192,18 @@ def export_product_quantities(self, backend):
('backend_id', 'in', backend.ids),
]).recompute_prestashop_qty()
+ @job(default_channel='root.prestashop')
+ def set_product_image_variant(self, backend, combination_ids, **kwargs):
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='record.importer')
+ return importer.set_variant_images(combination_ids, **kwargs)
+
+ @job(default_channel='root.prestashop')
+ def set_product_image_variant(self, backend, combination_ids, **kwargs):
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='record.importer')
+ return importer.set_variant_images(combination_ids, **kwargs)
+
class ProductAttribute(models.Model):
_inherit = 'product.attribute'
@@ -258,26 +270,23 @@ class PrestashopProductCombinationOptionValue(models.Model):
]
-# # @prestashop
class ProductCombinationAdapter(Component):
_name = 'prestashop.product.combination.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.combination'
-
_prestashop_model = 'combinations'
_export_node_name = 'combination'
-# # @prestashop
class ProductCombinationOptionAdapter(Component):
_name = 'prestashop.product.combination.option.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.combination.option'
-
+
_prestashop_model = 'product_options'
_export_node_name = 'product_options'
-
-
+
+
class ProductCombinationOptionValueAdapter(Component):
_name = 'prestashop.product.combination.option.value.adapter'
_inherit = 'prestashop.adapter'
diff --git a/connector_prestashop/models/product_product/deleter.py b/connector_prestashop/models/product_product/deleter.py
index ff5233208..56830b969 100644
--- a/connector_prestashop/models/product_product/deleter.py
+++ b/connector_prestashop/models/product_product/deleter.py
@@ -3,10 +3,8 @@
from ...components.deleter import PrestashopDeleter
-from ...backend import prestashop
-# # @prestashop
class ProductCombinationDelete(PrestashopDeleter):
_model_name = 'prestashop.product.combination'
diff --git a/connector_prestashop/models/product_product/exporter.py b/connector_prestashop/models/product_product/exporter.py
index 7c5226501..976cbfe2e 100644
--- a/connector_prestashop/models/product_product/exporter.py
+++ b/connector_prestashop/models/product_product/exporter.py
@@ -1,11 +1,9 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...backend import prestashop
from ..product_template.exporter import ProductInventoryExporter
-# # @prestashop
class CombinationInventoryExporter(ProductInventoryExporter):
_model_name = ['prestashop.product.combination']
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 83923911a..a8c6e0b14 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -3,19 +3,15 @@
from odoo import models
-# from odoo.addons.connector.unit.backend_adapter import BackendAdapter
-
+from odoo.addons.connector.components.mapper import (
+ mapping,
+ only_create,
+)
from ...components.importer import (
- PrestashopImporter,
import_batch,
- TranslatableRecordImporter,
- DelayedBatchImporter,
)
-
+from ...components.backend_adapter import PrestaShopCRUDAdapter
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import (
- mapping, external_to_m2o, only_create)
-
import logging
_logger = logging.getLogger(__name__)
@@ -37,8 +33,9 @@ def _import_dependencies(self):
'product_option_values', {}).get(ps_key, [])
if not isinstance(option_values, list):
option_values = [option_values]
- backend_adapter = self.unit_for(
- BackendAdapter, 'prestashop.product.combination.option.value')
+ backend_adapter = self.component(
+ usage='backend.adapter',
+ model_name='prestashop.product.combination.option.value')
for option_value in option_values:
option_value = backend_adapter.read(option_value['id'])
self._import_dependency(
@@ -53,8 +50,9 @@ def _after_import(self, binding):
self.import_supplierinfo(binding)
def set_variant_images(self, combinations):
- backend_adapter = self.unit_for(
- PrestaShopCRUDAdapter, 'prestashop.product.combination')
+ backend_adapter = self.component(
+ usage='backend.adapter',
+ model_name='prestashop.product.combination')
for combination in combinations:
try:
record = backend_adapter.read(combination['id'])
@@ -105,15 +103,11 @@ def import_supplierinfo(self, binding):
ps_supplierinfo.odoo_id.unlink()
-# # @prestashop
class ProductCombinationMapper(Component):
- #_model_name = 'prestashop.product.combination'
-
_name = 'prestashop.product.combination.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.combination'
-
direct = [
]
@@ -233,8 +227,7 @@ def barcode(self, record):
def _get_tax_ids(self, record):
product_tmpl_adapter = self.component(
- usage='prestashop.adapter',
- model_name='prestashop.product.template')
+ usage='backend.adapter', model_name='prestashop.product.template')
tax_group = product_tmpl_adapter.read(record['id_product'])
tax_group = self.binder_for('prestashop.account.tax.group').to_internal(
tax_group['id_tax_rules_group'], unwrap=True)
@@ -279,13 +272,11 @@ def odoo_id(self, record):
return {'odoo_id': product.id}
-
class ProductCombinationOptionImporter(Component):
_name = 'prestashop.product.combination.option.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.combination.option'
-
def _import_values(self, attribute_binding):
record = self.prestashop_record
option_values = record.get('associations', {}).get(
@@ -304,7 +295,6 @@ def _after_import(self, binding):
self._import_values(binding)
-# # @prestashop
class ProductCombinationOptionMapper(Component):
_name = 'prestashop.product.combination.option.mapper'
_inherit = 'prestashop.import.mapper'
@@ -350,7 +340,6 @@ def name(self, record):
return {'name': name}
-# # @prestashop
class ProductCombinationOptionValueAdapter(Component):
_name = 'prestashop.product.combination.option.value.adapter'
_inherit = 'prestashop.adapter'
@@ -358,15 +347,13 @@ class ProductCombinationOptionValueAdapter(Component):
_prestashop_model = 'product_option_values'
_export_node_name = 'product_option_value'
-
+
class ProductCombinationOptionValueImporter(Component):
_name = 'prestashop.product.combination.option.value.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.combination.option.value'
- _usage= "translate"
-
_translatable_fields = {
'prestashop.product.combination.option.value': ['name'],
}
@@ -377,7 +364,6 @@ class ProductCombinationOptionValueMapper(Component):
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.combination.option.value'
-
direct = [
('name', 'name'),
]
@@ -416,4 +402,3 @@ class ProductProductBatchImporter(Component):
_name = 'prestashop.product.product.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.product.product'
-
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index 2749ac15c..852621364 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -3,12 +3,10 @@
from odoo import models, fields
+from odoo.addons.component.core import Component
from ...components.backend_adapter import (
- PrestaShopCRUDAdapter,
PrestaShopWebServiceImage,
- GenericAdapter,
)
-from ...backend import prestashop
class ResPartner(models.Model):
@@ -34,6 +32,23 @@ class PrestashopSupplier(models.Model):
oldname='openerp_id',
)
+ def import_suppliers(self, backend, since_date, **kwargs):
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.supplier'].with_delay().import_batch(
+ backend,
+ filters,
+ **kwargs
+ )
+ self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
+ backend,
+ **kwargs
+ )
+ backend.import_suppliers_since = now_fmt
+ return True
+
class ProductSupplierinfo(models.Model):
_inherit = 'product.supplierinfo'
@@ -64,8 +79,12 @@ class PrestashopProductSupplierinfo(models.Model):
]
-@prestashop
-class SupplierImageAdapter(PrestaShopCRUDAdapter):
+class SupplierImageModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = 'prestashop.supplier.image'
+
+
+class SupplierImageAdapter(Component):
_name = 'prestashop.supplier.image.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.supplier.image'
@@ -87,7 +106,6 @@ class SupplierAdapter(Component):
_name = 'prestashop.supplier.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.supplier'
-
_prestashop_model = 'suppliers'
@@ -95,6 +113,4 @@ class SupplierInfoAdapter(Component):
_name = 'prestashop.product.supplierinfo.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.product.supplierinfo'
-
-
_prestashop_model = 'product_suppliers'
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index bd3c29e81..39e40e825 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -4,14 +4,13 @@
from odoo import fields
from odoo.addons.queue_job.exception import FailedJobError
from odoo.addons.queue_job.job import job
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
from ...components.backend_adapter import PrestaShopCRUDAdapter
from ...components.importer import (
- PrestashopImporter,
import_batch,
- DelayedBatchImporter,
)
-from ...backend import prestashop
import logging
_logger = logging.getLogger(__name__)
@@ -21,13 +20,11 @@
_logger.debug('Cannot import from `prestapyt`')
-# # @prestashop
class SupplierMapper(Component):
_name = 'prestashop.supplier.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.supplier'
-
direct = [
('name', 'name'),
('id', 'prestashop_id'),
@@ -52,8 +49,8 @@ def supplier(self, record):
@mapping
def image(self, record):
- supplier_image_adapter = self.unit_for(
- PrestaShopCRUDAdapter, 'prestashop.supplier.image'
+ supplier_image_adapter = self.component(
+ usage='backend.adapter', model_name='prestashop.supplier.image'
)
try:
return {'image': supplier_image_adapter.read(record['id'])}
@@ -61,7 +58,6 @@ def image(self, record):
return {}
-# # @prestashop
class SupplierImporter(Component):
""" Import one simple record """
_name = 'prestashop.supplier.importer'
@@ -69,7 +65,6 @@ class SupplierImporter(Component):
_apply_on = 'prestashop.supplier'
-
def _create(self, record):
try:
return super(SupplierImporter, self)._create(record)
@@ -96,14 +91,11 @@ class SupplierBatchImporter(Component):
_apply_on = 'prestashop.supplier'
-
class SupplierInfoMapper(Component):
_name = 'prestashop.product.supplierinfo.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.supplierinfo'
-
-
direct = [
('product_supplier_reference', 'product_code'),
]
@@ -144,10 +136,7 @@ def required(self, record):
return {'min_qty': 0.0, 'delay': 1}
-# # @prestashop
class SupplierInfoImporter(Component):
- #_model_name = 'prestashop.product.supplierinfo'
-
_name = 'prestashop.product.supplierinfo.importer'
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.product.supplierinfo'
@@ -175,6 +164,3 @@ class SupplierInfoBatchImporter(Component):
_name = 'prestashop.product.supplierinfo.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.product.supplierinfo'
-
-
-
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index b15e67929..77fde6b4c 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -157,8 +157,8 @@ def import_products(self, backend, since_date=None, **kwargs):
@job(default_channel='root.prestashop')
def import_inventory(sel, backend):
with backend.work_on('_import_stock_available') as work:
- importer = work.component(usage='prestashop.importer')
- return importer.set_variant_images()
+ importer = work.component(usage='batch.importer')
+ return importer.run()
class ProductInventoryAdapter(Component):
@@ -202,6 +202,11 @@ def export_quantity_url(self, filters, quantity, client=None):
})
+class PrestashopProductTagsModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '_prestashop_product_tag'
+
+
class PrestashopProductTags(Component):
_name = '_prestashop_product_tag.adapter'
_inherit = 'prestashop.adapter'
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index 99f839eb8..65c43ba1f 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -6,10 +6,8 @@
from odoo.addons.connector.unit.synchronizer import Exporter
from odoo.addons.component.core import Component
-from ...backend import prestashop
-# # @prestashop
class ProductInventoryExporter(Exporter):
_model_name = ['prestashop.product.template']
@@ -25,7 +23,7 @@ def run(self, binding_id, fields, **kwargs):
""" Export the product inventory to PrestaShop """
template = self.model.browse(binding_id)
adapter = self.component(
- usage='prestashop.adapter', model_name='_import_stock_available'
+ usage='backend.adapter', model_name='_import_stock_available'
)
filter = self.get_filter(template)
adapter.export_quantity(filter, int(template.quantity))
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 16f6eb42a..f3d4d2b6d 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -1,37 +1,21 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import _, models, fields
+from odoo import _, models, fields, api
from odoo.addons.queue_job.job import job
-
-from odoo.addons.connector.unit.mapper import (
+from odoo.addons.connector.components.mapper import (
mapping,
only_create,
- ImportMapper
)
-
from ...components.importer import (
- DelayedBatchImporter,
import_record,
import_batch,
- PrestashopImporter,
- PrestashopBaseImporter,
- TranslatableRecordImporter,
)
-from ...components.backend_adapter import GenericAdapter
-from ...backend import prestashop
-from ..product_image.importer import (
- import_product_image,
- set_product_image_variant,
-)
-
-
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
-
import datetime
import logging
_logger = logging.getLogger(__name__)
@@ -52,13 +36,10 @@
_logger.debug('Cannot import from `prestapyt`')
-# # @prestashop
class TemplateMapper(Component):
- #_model_name = 'prestashop.product.template'
_name = 'prestashop.product.template.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.product.template']
-
+ _apply_on = 'prestashop.product.template'
direct = [
('weight', 'weight'),
@@ -96,7 +77,9 @@ def tags_to_text(self, record):
associations = record.get('associations', {})
tags = associations.get('tags', {}).get(
self.backend_record.get_version_ps_key('tag'), [])
- tag_adapter = self.unit_for(GenericAdapter, '_prestashop_product_tag')
+ tag_adapter = self.component(
+ usage='prestashop.adapter', model_name='_prestashop_product_tag'
+ )
if not isinstance(tags, list):
tags = [tags]
if tags:
@@ -278,76 +261,73 @@ def type(self, record):
if record['type']['value'] and record['type']['value'] == 'virtual':
return {"type": 'service'}
return {"type": 'product'}
-
- @mapping
- def extras_features(self, record):
- mapper = self.unit_for(FeaturesProductImportMapper)
- return mapper.map_record(record).values(**self.options)
-
- @mapping
- def extras_manufacturer(self, record):
- mapper = self.unit_for(ManufacturerProductImportMapper)
- return mapper.map_record(record).values(**self.options)
-
-
-# # @prestashop
-class FeaturesProductImportMapper(ImportMapper):
+#TODO FIXME
+# @mapping
+# def extras_features(self, record):
+# mapper = self.component(usage='feature.product.import.mapper')
+# return mapper.map_record(record).values(**self.options)
+#
+# @mapping
+# def extras_manufacturer(self, record):
+# mapper = self.component(usage='manufacturer.product.import.mapper')
+# return mapper.map_record(record).values(**self.options)
+
+
+class FeaturesProductImportMapper(Component):
# To extend in connector_prestashop_feature module. In this way we
# dependencies on other modules like product_custom_info
- _model_name = 'prestashop.product.template'
+ _name = 'prestashop.feature.product.template.mapper'
+ _inherit = 'prestashop.product.template.mapper'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'feature.product.import.mapper'
@mapping
def extras_features(self, record):
return {}
-# # @prestashop
-class ManufacturerProductDependency(PrestashopBaseImporter):
- # To extend in connector_prestashop_feature module. In this way we
+class ManufacturerProductImportMapper(Component):
+ # To extend in connector_prestashop_manufacturer module. In this way we
# dependencies on other modules like product_manufacturer
- _model_name = 'prestashop.product.template'
+ _name = 'prestashop.manufacturer.product.template.mapper'
+ _inherit = 'prestashop.product.template.mapper'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'manufacturer.product.import.mapper'
def import_manufacturer(self, manufacturer_id):
return
-# # @prestashop
class ManufacturerProductImportMapper(Component):
# To extend in connector_prestashop_manufacturer module. In this way we
# dependencies on other modules like product_manufacturer
- _model_name = 'prestashop.product.template'
- _name= "TODO"
-
-
+ _name = 'prestashop.manufacturer.product.template.mapper'
+ _inherit = 'prestashop.product.template.mapper'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'manufacturer.product.import.mapper'
+
@mapping
def extras_manufacturer(self, record):
return {}
-# # @prestashop
-class TemplateAdapter(Component):
- _name = 'prestashop.product.template.adapter'
- _inherit = 'prestashop.adapter'
- _apply_on = 'prestashop.product.template'
-
- _prestashop_model = 'products'
- _export_node_name = 'product'
-
-
-
-
class ImportInventory(models.TransientModel):
# In actual connector version is mandatory use a model
_name = '_import_stock_available'
+ @job(default_channel='root.prestashop')
+ @api.model
+ def import_record(self, backend, prestashop_id, record=None, **kwargs):
+ """ Import a record from PrestaShop """
+ with backend.work_on(self._name) as work:
+ importer = work.component(usage='record.importer')
+ return importer.run(prestashop_id, record=record, **kwargs)
+
-# # @prestashop
class ProductInventoryBatchImporter(Component):
-# _model_name = ['_import_stock_available']
_name = 'prestashop._import_stock_available.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = '_import_stock_available'
-
def run(self, filters=None, **kwargs):
if filters is None:
@@ -365,23 +345,18 @@ def _run_page(self, filters, **kwargs):
def _import_record(self, record_id, record=None, **kwargs):
""" Delay the import of the records"""
assert record
- import_record.delay(
- self.session,
- '_import_stock_available',
- self.backend_record.id,
+ self.env['_import_stock_available'].with_delay().import_record(
+ self.backend_record,
record_id,
record=record,
**kwargs
)
-# # @prestashop
-class ProductInventoryImporter(PrestashopImporter):
- _model_name = ['_import_stock_available']
+class ProductInventoryImporter(Component):
_name = 'prestashop._import_stock_available.importer'
_inherit = 'prestashop.importer'
_apply_on = '_import_stock_available'
-
def _get_quantity(self, record):
filters = {
@@ -454,17 +429,11 @@ def _import(self, binding, **kwargs):
).change_product_qty()
-# # @prestashop
class ProductTemplateImporter(Component):
""" Import one translatable record """
- _model_name = [
- 'prestashop.product.template',
- ]
_name = 'prestashop.product.template.importer'
- _inherit = 'prestashop.importer'
+ _inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.template'
-
-
_base_mapper = TemplateMapper
@@ -549,14 +518,11 @@ def _import_combination(self, combination, **kwargs):
**kwargs)
def _delay_product_image_variant(self, combinations, **kwargs):
- set_product_image_variant.delay(
- self.session,
- 'prestashop.product.combination',
- self.backend_record.id,
+ delayable = self.env['prestashop.product.combination'].with_delay(priority=15)
+ delayable.set_product_image_variant(
+ self.backend_record,
combinations,
- priority=15,
- **kwargs
- )
+ **kwargs)
def import_combinations(self):
prestashop_record = self._get_prestashop_data()
@@ -581,17 +547,6 @@ def import_combinations(self):
if combinations and associations['images'].get('image'):
self._delay_product_image_variant(combinations)
- def _delay_import_product_image(self, prestashop_record, image, **kwargs):
- import_product_image.delay(
- self.session,
- 'prestashop.product.image',
- self.backend_record.id,
- prestashop_record['id'],
- image['id'],
- priority=10,
- **kwargs
- )
-
def import_images(self, binding):
prestashop_record = self._get_prestashop_data()
associations = prestashop_record.get('associations', {})
@@ -601,7 +556,11 @@ def import_images(self, binding):
images = [images]
for image in images:
if image.get('id'):
- self._delay_import_product_image(prestashop_record, image)
+ delayable = self.env['prestashop.product.image'].with_delay(priority=10)
+ delayable.import_product_image(
+ self.backend_record,
+ prestashop_record['id'],
+ image['id'])
def import_supplierinfo(self, binding):
ps_id = self._get_prestashop_data()['id']
@@ -630,7 +589,7 @@ def _import_dependencies(self):
self._import_manufacturer()
def _import_manufacturer(self):
- self.unit_for(ManufacturerProductDependency).import_manufacturer(
+ self.component(usage='manufacturer.product.importer').import_manufacturer(
self.prestashop_record.get('id_manufacturer')
)
@@ -663,20 +622,7 @@ def _import_categories(self):
'prestashop.product.category')
-@job(default_channel='root.prestashop')
-def import_inventory(session, backend_id):
- backend = session.env['prestashop.backend'].browse(backend_id)
- env = backend.get_environment('_import_stock_available', session=session)
- inventory_importer = env.get_connector_unit(ProductInventoryBatchImporter)
- return inventory_importer.run()
-
-
-# # @prestashop
class ProductTemplateBatchImporter(Component):
- #_model_name = 'prestashop.product.template'
-
_name = 'prestashop.product.template.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.product.template'
-
-
diff --git a/connector_prestashop/models/queue_job/__init__.py b/connector_prestashop/models/queue_job/__init__.py
new file mode 100644
index 000000000..aa9c3f5d9
--- /dev/null
+++ b/connector_prestashop/models/queue_job/__init__.py
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+
+from . import common
diff --git a/connector_prestashop/models/queue_job/common.py b/connector_prestashop/models/queue_job/common.py
new file mode 100644
index 000000000..826d8dc53
--- /dev/null
+++ b/connector_prestashop/models/queue_job/common.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, exceptions, api, models
+
+class QueueJob(models.Model):
+ _inherit = 'queue.job'
+
+ @api.multi
+ def related_action_record(self, binding_id_pos=0):
+ self.ensure_one()
+
+ model_name = self.model_name
+ binding_id = self.args[binding_id_pos]
+ record = self.env[binding_model].browse(binding_id)
+ odoo_name = record.odoo_id._name
+
+ action = {
+ 'name': _(odoo_name),
+ 'type': 'ir.actions.act_window',
+ 'res_model': odoo_name,
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_id': record.odoo_id.id,
+ }
+ return action
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index 047500875..c304a8f60 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -1,25 +1,16 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-from ...components.importer import (
- TranslatableRecordImporter,
- import_record,
- DelayedBatchImporter,
-)
-from ...backend import prestashop
-
-from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
class PartnerCategoryBatchImporter(Component):
_name = 'prestashop.res.partner.category.batch.importer'
- _inherit = 'prestashop.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.res.partner.category'
-
class PartnerCategoryImportMapper(Component):
_name = 'prestashop.res.partner.category.import.mapper'
_inherit = 'prestashop.import.mapper'
@@ -40,16 +31,15 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-class PartnerCategoryImporter(TranslatableRecordImporter):
+class PartnerCategoryImporter(Component):
""" Import one translatable record """
_name = 'prestashop.res.partner.category.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.res.partner.category'
-
_translatable_fields = {
'prestashop.res.partner.category': ['name'],
}
-
+
def _after_import(self, binding):
super(PartnerCategoryImporter, self)._after_import(binding)
record = self.prestashop_record
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index a2b97e5e0..918f1555a 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -3,7 +3,7 @@
import openerp.addons.decimal_precision as dp
-from odoo import models, fields, api
+from odoo import models, fields, api, _
from odoo.addons.component.core import Component
@@ -66,6 +66,30 @@ class PrestashopSaleOrder(models.Model):
readonly=True,
)
+ def import_orders_since(self, backend, since_date=None, **kwargs):
+ """ Prepare the import of orders modified on PrestaShop """
+ filters = None
+ if since_date:
+ filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
+ now_fmt = fields.Datetime.now()
+ self.env['prestashop.sale.order'].with_delay(
+ priority=5, max_retries=0).import_batch(backend, filters=filters)
+ if since_date:
+ filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
+# try:
+# self.env['prestashop.mail.message'].import_batch(backend, filters)
+# except Exception as error:
+# msg = _(
+# 'Mail messages import failed with filters `%s`. '
+# 'Error: `%s`'
+# ) % (str(filters), str(error))
+# backend.add_checkpoint(
+# message=msg
+# )
+
+ backend.import_orders_since = now_fmt
+ return True
+
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -140,11 +164,15 @@ def create(self, vals):
return super(PrestashopSaleOrderLineDiscount, self).create(vals)
+class OrderPaymentModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '__not_exist_prestashop.payment'
+
+
class SaleOrderAdapter(Component):
_name = 'prestashop.sale.order.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order'
-
_prestashop_model = 'orders'
_export_node_name = 'order'
@@ -156,7 +184,6 @@ class SaleOrderLineAdapter(Component):
_name = 'prestashop.sale.order.line.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.line'
-
_prestashop_model = 'order_details'
@@ -164,7 +191,6 @@ class OrderPaymentAdapter(Component):
_name = '__not_exist_prestashop.payment.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '__not_exist_prestashop.payment'
-
_prestashop_model = 'order_payments'
@@ -172,5 +198,4 @@ class OrderDiscountAdapter(Component):
_name = 'prestashop.sale.order.line.discount.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.line.discount'
-
_prestashop_model = 'order_discounts'
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 90dcf4966..108ce8b0b 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -3,19 +3,14 @@
from odoo import _, fields
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.connector import ConnectorUnit
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
from odoo.addons.queue_job.exception import FailedJobError, NothingToDoJob
-from odoo.addons.connector_ecommerce.unit.sale_order_onchange import (
+from odoo.addons.connector_ecommerce.components.sale_order_onchange import (
SaleOrderOnChange,
)
-from ...components.backend_adapter import GenericAdapter
-from ...components.importer import (
- PrestashopImporter,
- import_batch,
- DelayedBatchImporter,
-)
+from ...components.importer import import_batch
from ...components.exception import OrderImportRuleRetry
-from ...backend import prestashop
from datetime import datetime, timedelta
from decimal import Decimal
@@ -28,12 +23,10 @@
_logger.debug('Cannot import from `prestapyt`')
-@prestashop
class PrestaShopSaleOrderOnChange(SaleOrderOnChange):
_model_name = 'prestashop.sale.order'
-@prestashop
class SaleImportRule(Component):
_name = 'prestashop.sale.import.rule'
_inherit = 'base.prestashop.connector'
@@ -57,9 +50,9 @@ def _rule_paid(self, record, mode):
'The import will be retried later.')
def _get_paid_amount(self, record):
- payment_adapter = self.unit_for(
- GenericAdapter,
- '__not_exist_prestashop.payment'
+ payment_adapter = self.component(
+ usage='backend.adapter',
+ model_name='__not_exist_prestashop.payment'
)
payment_ids = payment_adapter.search({
'filter[order_reference]': record['reference']
@@ -130,7 +123,7 @@ def _rule_state(self, record, mode):
if self.backend_record.importable_order_state_ids:
ps_state_id = record['current_state']
state = self.binder_for(
- 'prestashop.sale.order.state').to_odoo(ps_state_id, unwrap=1)
+ 'prestashop.sale.order.state').to_internal(ps_state_id, unwrap=1)
if not state:
raise FailedJobError(_(
"The configuration is missing "
@@ -199,8 +192,7 @@ def _map_child(self, map_record, from_attr, to_attr, model_name):
children = []
for child_record in child_records:
adapter = self.component(
- usage='prestashop.adapter',
- model_name=model_name
+ usage='backend.adapter', model_name=model_name
)
detail_record = adapter.read(child_record['id'])
@@ -284,13 +276,14 @@ def total_tax_amount(self, record):
return {'total_amount_tax': tax}
def finalize(self, map_record, values):
- onchange = self.unit_for(SaleOrderOnChange)
+ onchange = self.component('ecommerce.onchange.manager.sale.order')
return onchange.play(values, values['prestashop_order_line_ids'])
+
class SaleOrderImporter(Component):
_name = 'prestashop.sale.order.importer'
_inherit = 'prestashop.importer'
- _apply_on = ['prestashop.sale.order']
+ _apply_on = 'prestashop.sale.order'
def __init__(self, environment):
"""
@@ -365,7 +358,7 @@ def _has_to_skip(self):
""" Return True if the import can be skipped """
if self._get_binding():
return True
- rules = self.unit_for(SaleImportRule)
+ rules = self.component(usage='sale.import.rule')
try:
return rules.check(self.prestashop_record)
except NothingToDoJob as err:
@@ -375,18 +368,16 @@ def _has_to_skip(self):
return err.message
-# # # @prestashop
class SaleOrderBatchImporter(Component):
_name = 'prestashop.sale.order.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
- _apply_on = ['prestashop.sale.order']
+ _apply_on = 'prestashop.sale.order'
-# # # @prestashop
class SaleOrderLineMapper(Component):
_name = 'prestashop.sale.order.line.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.sale.order.line']
+ _apply_on = 'prestashop.sale.order.line'
direct = [
('product_name', 'name'),
@@ -460,11 +451,10 @@ def backend_id(self, record):
return {'backend_id': self.backend_record.id}
-@prestashop
-class SaleOrderLineDiscountMapper(ImportMapper):
- _name = 'prestashop.sale.order.line.discount.mapper'
+class SaleOrderLineDiscountMapper(Component):
+ _name = 'prestashop.sale.order.discount.importer'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.sale.order.line.discount']
+ _apply_on = 'prestashop.sale.order.line.discount'
direct = []
@@ -489,7 +479,7 @@ def price_unit(self, record):
def product_id(self, record):
if self.backend_record.discount_product_id:
return {'product_id': self.backend_record.discount_product_id.id}
- product_discount = self.session.env.ref(
+ product_discount = self.env.ref(
'connector_ecommerce.product_product_discount')
return {'product_id': product_discount.id}
@@ -506,4 +496,3 @@ def backend_id(self, record):
@mapping
def prestashop_id(self, record):
return {'prestashop_id': record['id']}
-
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
index 2afa27789..13d104f46 100644
--- a/connector_prestashop/models/sale_order_state/exporter.py
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -4,10 +4,8 @@
from odoo.addons.queue_job.job import job
from odoo.addons.connector.unit.synchronizer import Exporter
-from ...backend import prestashop
-# # @prestashop
class SaleStateExporter(Exporter):
_model_name = ['prestashop.sale.order']
diff --git a/connector_prestashop/models/stock_move/common.py b/connector_prestashop/models/stock_move/common.py
index 5f3f4cc3e..f5407d1ca 100644
--- a/connector_prestashop/models/stock_move/common.py
+++ b/connector_prestashop/models/stock_move/common.py
@@ -38,11 +38,11 @@ def write(self, vals):
ps_locations = location_obj.get_prestashop_stock_locations()
for quant in self:
location = quant.location_id
- res = super(StockQuant, self).write(vals)
+ super(StockQuant, self).write(vals)
if location in ps_locations:
quant.invalidate_cache()
quant.product_id.update_prestashop_qty()
- return res
+ return True
@api.multi
def unlink(self):
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index 60e74809a..a70730043 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -6,13 +6,11 @@
from odoo.addons.connector.unit.synchronizer import Exporter
from odoo.exceptions import UserError
from odoo.addons.queue_job.job import job
-from ...backend import prestashop
from ...components.backend_adapter import PrestaShopCRUDAdapter
_logger = logging.getLogger(__name__)
-# # @prestashop
class PrestashopTrackingExporter(Exporter):
_model_name = ['prestashop.sale.order']
@@ -24,10 +22,10 @@ def _get_tracking(self):
return ';'.join(trackings) if trackings else None
def run(self, binding_id, **kwargs):
- """ Export the tracking number of a picking to Magento """
- # verify the picking is done + magento id exists
+ """ Export the tracking number of a picking to PrestaShop """
+ # verify the picking is done + prestashop id exists
tracking_adapter = self.component(
- usage='prestashop.adapter',
+ usage='backend.adapter',
model_name='__not_exit_prestashop.order_carrier')
self.binding = self.model.browse(binding_id)
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
index 2b9b1fbe0..6c8082079 100644
--- a/connector_prestashop/models/stock_warehouse/common.py
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -2,9 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import api, fields, models
-
from odoo.addons.component.core import Component
-# from ...backend import prestashop
class StockWarehouse(models.Model):
@@ -55,7 +53,6 @@ def _compute_backend_id(self):
default_url = fields.Char('Default url')
-# # @prestashop
class ShopAdapter(Component):
_name = 'prestashop.shop'
_model_name = 'prestashop.shop'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index 579a97c7c..dc98b04f9 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -1,21 +1,13 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping, external_to_m2o
-
-class ShopImporter(Component):
- _name = 'prestashop.shop.importer'
- _inherit = 'prestashop.importer'
- _apply_on = 'prestashop.shop'
-
-
class ShopImportMapper(Component):
- _name = 'prestashop.shop.import.mapper'
+ _name = 'prestashop.shop.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.shop']
+ _apply_on = 'prestashop.shop'
direct = [
('name', 'name'),
@@ -30,25 +22,12 @@ def backend_id(self, record):
def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
- @mapping
- def warehouse_id(self, record):
- return {'warehouse_id': self.backend_record.warehouse_id.id}
-
@mapping
def opener_id(self, record):
return {'openerp_id': self.backend_record.warehouse_id.id}
-# # @prestashop
class ShopImporter(Component):
_name = 'prestashop.shop.importer'
_inherit = 'prestashop.importer'
- _apply_on = ['prestashop.shop']
-
-
-# # # @prestashop
-# class ShopBatchImporter(DirectBatchImporter):
-# _model_name = 'prestashop.shop'
-#
-#
-
+ _apply_on = 'prestashop.shop'
diff --git a/connector_prestashop/views/product_view.xml b/connector_prestashop/views/product_view.xml
index 583878099..070e903f2 100644
--- a/connector_prestashop/views/product_view.xml
+++ b/connector_prestashop/views/product_view.xml
@@ -7,11 +7,9 @@
@@ -60,23 +58,22 @@
-
-
- product.template
-
-
-
- 0
-
-
-
-
-
-
-
-
+
+
+ product.template
+
+
+
+ 0
+
+
+
+
+
+
+
+
product.template
From 94ed1abe61d0b38ae17d10ebc54ae74902d2cf9c Mon Sep 17 00:00:00 2001
From: Florent THOMAS
Date: Mon, 16 Apr 2018 09:05:35 +0200
Subject: [PATCH 09/99] [FIX+IMP] connector_prestashop: More things
* Prevent unicode to be used as filter.
particulary tru for the first import
* Add menus for finding intermediate object easily
* Better way to handle direct matching with components
* Add Fields for more options
Redefine the Checkpoint method
* Add dependencies for stock fields
* Clean the add_checkpoint part
* Better Views and easier menus
* Error lines where not appended but pushed into a list
* Prevent duplication of useless delivery carrier
* Add options in stock field
---
connector_prestashop/README.rst | 1 +
connector_prestashop/__manifest__.py | 3 +
.../models/account_invoice/importer.py | 3 +-
.../models/account_payment_mode/importer.py | 2 +-
.../models/account_tax/importer.py | 6 +-
.../models/delivery_carrier/importer.py | 14 +-
.../models/prestashop_backend/common.py | 131 +++++++++++++-----
.../models/product_category/importer.py | 10 +-
.../models/product_image/importer.py | 7 +-
.../models/product_template/common.py | 23 +--
.../models/product_template/importer.py | 19 ++-
.../models/res_country/importer.py | 8 +-
.../models/res_currency/importer.py | 12 +-
.../models/res_lang/importer.py | 9 +-
.../models/res_partner/importer.py | 5 +-
.../models/sale_order/importer.py | 5 +-
.../views/connector_prestashop_menu.xml | 113 ++++++++++-----
.../views/prestashop_backend_view.xml | 59 ++++++--
18 files changed, 287 insertions(+), 143 deletions(-)
diff --git a/connector_prestashop/README.rst b/connector_prestashop/README.rst
index e53c35ec7..7eb601dd5 100644
--- a/connector_prestashop/README.rst
+++ b/connector_prestashop/README.rst
@@ -154,6 +154,7 @@ Contributors
* Mikel Arregi
* Pedro M. Baeza
* Simone Orsi
+* Florent THOMAS
Maintainer
----------
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index 4c761cebc..96bd49da9 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -18,6 +18,7 @@
"base_multi_image", # oca/product-attribute
"purchase",
"product_variant_supplierinfo", # oca/product-variant
+ "stock_available", #stock-logistics-warehouse
# TODO: perhaps not needed:
# "product_variant_cost_price", # oca/product-variant
],
@@ -35,7 +36,9 @@
"Camptocamp,"
"AvanzOSC,"
"Tecnativa,"
+ "Mind And Go,"
"Odoo Community Association (OCA)",
+
"website": "https://github.com/OCA/connector-prestashop",
"category": "Connector",
'demo': [
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 3ae06a4e0..8676d7a22 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -36,8 +36,7 @@ def _open_refund(self, binding):
invoice.signal_workflow('invoice_open')
else:
self.backend_record.add_checkpoint(
- model='account.invoice',
- record_id=invoice.id,
+ invoice,
message=_('The refund for order %s has a different amount '
'in PrestaShop and in Odoo.') % invoice.origin
)
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index 2394666ff..c56b148d5 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -43,4 +43,4 @@ def _import_record(self, record, **kwargs):
'fixed_journal_id': journals.id,
'payment_method_id': payment_method.id
})
- self.backend_record.add_checkpoint(mode)
+ self.backend_record.add_checkpoint(mode, message=None)
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index f8654a9f8..85a1200bb 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.auto_matching_importer import AutoMatchingImporter
+from odoo.addons.component.core import Component
-
-class AccountTaxImporter(AutoMatchingImporter):
+class AccountTaxImporter(Component):
_name = 'prestashop.account.tax.importer'
+ _inherit= 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.account.tax'
_erp_field = 'amount'
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index ac23c1562..c385f440d 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
-from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.connector.components.mapper import mapping, only_create
from odoo.addons.component.core import Component
_logger = logging.getLogger(__name__)
@@ -25,9 +25,19 @@ class CarrierImportMapper(Component):
direct = [
('name', 'name_ext'),
('name', 'name'),
- ('id_reference', 'id_reference'),
]
+ @only_create
+ @mapping
+ def openerp_id(self, record):
+ #Prevent The duplication of delivery method if id_reference is the same
+ id_reference = record['id_reference']
+ delivery = self.env['prestashop.delivery.carrier'].search([('id_reference', '=', id_reference)])
+ if len(delivery) == 1 :
+ return {'openerp_id': delivery.openerp_id.id}
+ else:
+ return {'id_reference': id_reference}
+
@mapping
def active(self, record):
return {'active_ext': record['active'] == '1'}
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 2e452a908..baa2e6ba2 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -7,18 +7,11 @@
from odoo import models, fields, api, exceptions, _
-from odoo.addons.connector.connector import ConnectorEnvironment
from ...components.importer import import_batch, import_record
-from ...components.auto_matching_importer import AutoMatchingImporter
-from ...components.backend_adapter import GenericAdapter, api_handle_errors
+from ...components.backend_adapter import api_handle_errors
from ...components.version_key import VersionKey
from ...backend import prestashop
-
-from ..product_template.importer import import_inventory
-from ..product_supplierinfo.importer import import_suppliers
-from ..account_invoice.importer import import_refunds
-from ..sale_order.importer import import_orders_since
-
+from odoo.addons.connector.checkpoint import checkpoint
_logger = logging.getLogger(__name__)
@@ -28,6 +21,13 @@ class PrestashopBackend(models.Model):
_description = 'PrestaShop Backend Configuration'
_inherit = 'connector.backend'
+ _versions = {
+ '1.5': 'prestashop.version.key',
+ '1.6.0.9': 'prestashop.version.key.1.6.0.9',
+ '1.6.0.11': 'prestashop.version.key.1.6.0.9',
+ '1.6.1.2': 'prestashop.version.key.1.6.1.2'
+ }
+
@api.model
def select_versions(self):
""" Available versions
@@ -40,14 +40,13 @@ def select_versions(self):
('1.6.0.11', '>= 1.6.0.11 - <1.6.1.2'),
('1.6.1.2', '=1.6.1.2')
]
-
+
@api.model
def _select_state(self):
"""Available States for this Backend"""
return [('draft', 'Draft'),
('checked', 'Checked'),
('production', 'In Production'),]
-
version = fields.Selection(
selection='select_versions',
@@ -138,14 +137,86 @@ def _select_state(self):
verbose = fields.Boolean(help="Output requests details in the logs")
debug = fields.Boolean(help="Activate PrestaShop's webservice debug mode")
+
+ matching_product_template = fields.Boolean(string="Match product template")
+
+ matching_product_ch = fields.Selection([('reference','Reference'),('ean13','Barcode')],string="Matching Field for product")
+
+ matching_customer = fields.Boolean(string="Matching Customer",
+ help="The selected fields will be matched to the ref field \
+ of the partner. Please adapt your datas consequently.")
+ matching_customer_ch = fields.Many2one(comodel_name='prestashop.partner.field'
+ , string="Matched field", help="Field that will be matched.")
+
+
+ quantity_field = fields.Selection(
+ [('qty_available','Available Quantity'),
+ ('virtual_available','Forecast quantity'),
+ ('immediately_usable_qty', 'Available to promise'),
+ ('potential_qty', 'Potential')],
+ string='Field use for quantity update',
+ help="""
+ Some of this options may need some additionnal
+ modules you'll have to install by yourself from
+ https://github.com/OCA/stock-logistics-warehouse/tree/10.0
+ """,
+ string='Field use for quantity update',
+ required=True,
+ default='virtual_available'
+ )
+
+ @api.onchange("matching_customer")
+ def change_matching_customer(self):
+ #Update the field list so that if you API change you could find the new fields to map
+ if self._origin.id:
+ self.fill_matched_fields(self._origin.id)
+
+
+ @api.multi
+ def fill_matched_fields(self, backend_id):
+ self.ensure_one()
+
+ options={'limit': 1,'display': 'full'}
+
+# prestashop = PrestaShopLocation(
+# self.location.encode(),
+# self.webservice_key,
+# )
+#
+# client = PrestaShopWebServiceDict(
+# prestashop.api_url,
+# prestashop.webservice_key)
+#
+# customer = client.get('customers', options=options)
+# tab=customer['customers']['customer'].keys()
+# for key in tab:
+# key_present = self.env['prestashop.partner.field'].search(
+# [('value', '=', key), ('backend_id', '=', backend_id)])
+#
+# if len(key_present) == 0 :
+# self.env['prestashop.partner.field'].create({
+# 'name' : key,
+# 'value' : key,
+# 'backend_id': backend_id
+# })
+
+
@api.model
def _default_pricelist_id(self):
return self.env['product.pricelist'].search([], limit=1)
@api.multi
- def get_environment(self, model_name,):
+ def add_checkpoint(self, record, message=''):
+ """
+ @param message: used with this https://github.com/OCA/connector/issues/37
+ """
self.ensure_one()
- return ConnectorEnvironment(self, model_name)
+ record.ensure_one()
+ chk_point = checkpoint.add_checkpoint(self.env, record._name, record.id,
+ self._name, self.id)
+ if message:
+ chk_point.message_post(body=message)
+ return chk_point
@api.multi
def button_reset_to_draft(self):
@@ -180,8 +251,6 @@ def synchronize_basedata(self):
self.env['prestashop.account.tax.group'].import_batch(backend)
self.env['prestashop.sale.order.state'].import_batch(backend)
return True
-
-
@api.multi
def _check_connection(self):
@@ -190,7 +259,6 @@ def _check_connection(self):
component = work.component_by_name(name='prestashop.adapter')
with api_handle_errors('Connection failed'):
component.head()
-
@api.multi
def button_check_connection(self):
@@ -202,7 +270,7 @@ def button_check_connection(self):
def import_customers_since(self):
for backend_record in self:
since_date = backend_record.import_partners_since
- backend_record.with_delay(priority=10).import_customers_since(
+ self.env['prestashop.res.partner'].import_customers_since(
backend_record=backend_record,
since_date=since_date)
return True
@@ -211,8 +279,8 @@ def import_customers_since(self):
def import_products(self):
for backend_record in self:
since_date = backend_record.import_products_since
- backend_record.env['prestashop.product.template'].with_delay(
- priority=10).import_products(backend_record, since_date)
+ self.env['prestashop.product.template'].import_products(
+ backend_record, since_date)
return True
@api.multi
@@ -234,18 +302,16 @@ def update_product_stock_qty(self):
@api.multi
def import_stock_qty(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
- import_inventory.delay(session, backend_record.id)
+ backend_record.env['prestashop.product.template']\
+ .with_delay().import_inventory(backend_record)
@api.multi
def import_sale_orders(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_orders_since
- import_orders_since.delay(
- session,
- backend_record.id,
+ backend_record.env['prestashop.sale.order'].import_orders_since(
+ backend_record,
since_date,
priority=5,
)
@@ -253,7 +319,6 @@ def import_sale_orders(self):
@api.multi
def import_payment_modes(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
with backend_record.work_on('account.payment.mode') as work:
importer = work.component(usage='batch.importer')
@@ -262,25 +327,25 @@ def import_payment_modes(self):
@api.multi
def import_refunds(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_refunds_since
- import_refunds.delay(session, backend_record.id, since_date)
+ backend_record.env['prestashop.refund'].import_refunds(
+ backend_record, since_date)
return True
@api.multi
def import_suppliers(self):
- session = ConnectorSession.from_env(self.env)
for backend_record in self:
since_date = backend_record.import_suppliers_since
- import_suppliers.delay(session, backend_record.id, since_date)
+ backend_record.env['prestashop.supplier'].import_suppliers(
+ backend_record, since_date)
return True
def get_version_ps_key(self, key):
self.ensure_one()
- env = self.get_environment('_prestashop.version.key')
- keys = env.get_connector_unit(VersionKey)
- return keys.get_key(key)
+ with self.work_on('_prestashop.version.key') as work:
+ keys = work.component(usage=self._versions[self.version])
+ return keys.get_key(key)
@api.model
def _scheduler_update_product_stock_qty(self, domain=None):
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index 34d993729..f10bb2bc0 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -45,9 +45,9 @@ def name(self, record):
return {'name': ''}
return {'name': record['name']}
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
+# @mapping
+# def backend_id(self, record):
+# return {'backend_id': self.backend_record.id}
@mapping
def parent_id(self, record):
@@ -111,9 +111,7 @@ def _import_dependencies(self):
record, fields=['name', ])
name = values[self._default_language]['name']
- self.backend_record.add_checkpoint(
- model=category._name,
- record_id=category.id,
+ self.backend_record.add_checkpoint(category,
message=msg % (name, str(e))
)
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index c3fd4c154..0f314f353 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -90,8 +90,7 @@ def run(self, template_id, image_id, **kwargs):
'Error: `%s`'
) % (image_id, error.msg)
self.backend_record.add_checkpoint(
- model='product.template',
- record_id=template.id,
+ template,
message=msg)
else:
msg = _(
@@ -99,6 +98,10 @@ def run(self, template_id, image_id, **kwargs):
'with id `%s` failed. '
'Error: `%s`'
) % (image_id, template_id, error.msg)
+<<<<<<< HEAD
self.backend_record.add_checkpoint(message=msg)
+=======
+ self.backend_record.add_checkpoint()
+>>>>>>> 2a5e0f4... Clean the add_checkpoint part
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 77fde6b4c..5d3df474e 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -144,16 +144,15 @@ def import_products(self, backend, since_date=None, **kwargs):
filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
now_fmt = fields.Datetime.now()
- result = self.env['prestashop.product.category'].with_delay(
- priority=10).import_batch(backend, filters=filters) or ''
+ self.env['prestashop.product.category'].with_delay(
+ priority=10).import_batch(backend, filters=filters)
- result += self.env['prestashop.product.template'].with_delay(
- priority=15).import_batch(backend, filters=filters) or ''
+ self.env['prestashop.product.template'].with_delay(
+ priority=15).import_batch(backend, filters=filters)
backend.import_products_since = now_fmt
return True
-
-
+
@job(default_channel='root.prestashop')
def import_inventory(sel, backend):
with backend.work_on('_import_stock_available') as work:
@@ -161,11 +160,18 @@ def import_inventory(sel, backend):
return importer.run()
+class TemplateAdapter(Component):
+ _name = 'prestashop.product.template.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'prestashop.product.template'
+ _prestashop_model = 'products'
+ _export_node_name = 'product'
+
+
class ProductInventoryAdapter(Component):
_name = '_import_stock_available.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '_import_stock_available'
-
_prestashop_model = 'stock_availables'
_export_node_name = 'stock_available'
@@ -208,10 +214,9 @@ class PrestashopProductTagsModel(models.TransientModel):
class PrestashopProductTags(Component):
- _name = '_prestashop_product_tag.adapter'
+ _name = 'prestashop.product.tag.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '_prestashop_product_tag'
-
_prestashop_model = 'tags'
_export_node_name = 'tag'
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index f3d4d2b6d..6b2248455 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -3,14 +3,14 @@
from odoo import _, models, fields, api
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.components.mapper import (
- mapping,
- only_create,
-)
-from ...components.importer import (
- import_record,
- import_batch,
-)
+# from odoo.addons.connector.components.mapper import (
+# mapping,
+# only_create,
+# )
+# from ...components.importer import (
+# import_record,
+# import_batch,
+# )
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
@@ -470,8 +470,7 @@ def checkpoint_default_category_missing(self, binding):
if self.default_category_error:
msg = _('The default category could not be imported.')
self.backend_record.add_checkpoint(
- model='product.template',
- record_id=binding.odoo_id.id,
+ binding,
message=msg,
)
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index f604a9418..e48c2e892 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -1,17 +1,13 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from ...components.auto_matching_importer import AutoMatchingImporter
from ...backend import prestashop
-
-# # @prestashop
class CountryImporter(Component):
_name = 'prestashop.res.country.importer'
- _inherit = 'prestashop.auto.matching.importer'
- _apply_on = ['prestashop.res.country']
-
+ _apply_on = 'prestashop.res.country'
+
_erp_field = 'code'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index cc3f0d82a..4af9acd65 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -2,18 +2,10 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.auto_matching_importer import AutoMatchingImporter
-from ...backend import prestashop
-
-
-
-# # @prestashop
class ResCurrencyImporter(Component):
- #_model_name = 'prestashop.res.currency'
_name = 'prestashop.res.currency.importer'
- _inherit = 'prestashop.auto.matching.importer'
- _apply_on = ['prestashop.res.currency']
-
+ _apply_on = 'prestashop.res.currency'
+
_erp_field = 'name'
_ps_field = 'iso_code'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index 39dba4cb6..d222f0984 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -1,17 +1,12 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from ...components.auto_matching_importer import AutoMatchingImporter
-from ...backend import prestashop
-
-
class LangImporter(Component):
_name = 'prestashop.res.lang.importer'
- _inherit = 'prestashop.auto.matching.importer'
- _apply_on = ['prestashop.res.lang']
-
+ _apply_on = 'prestashop.res.lang'
+
_erp_field = 'code'
_ps_field = 'language_code'
_copy_fields = [
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index b34190660..58b05ad0c 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -18,6 +18,8 @@
# from ...backend import prestashop
# from odoo.addons.connector.unit.mapper import external_to_m2o
+
+from odoo.addons.connector.checkpoint import checkpoint
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
@@ -237,8 +239,7 @@ def _after_import(self, binding):
else:
msg = _('Please, check the VAT number: %s') % vat_number
self.backend_record.add_checkpoint(
- model=binding.parent_id._name,
- record_id=binding.parent_id.id,
+ binding.parent_id,
message=msg,
)
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 108ce8b0b..5367bb1ae 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -322,7 +322,7 @@ def _import_dependencies(self):
# we ignore it, the order line will be imported without product
_logger.error('PrestaShop product %s could not be imported, '
'error: %s', row['product_id'], err)
- self.line_template_errors.push(row)
+ self.line_template_errors.append(row)
def _add_shipping_line(self, binding):
shipping_total = (binding.total_shipping_tax_included
@@ -349,8 +349,7 @@ def checkpoint_line_without_template(self, binding):
return
msg = _('Product(s) used in the sales order could not be imported.')
self.backend_record.add_checkpoint(
- model='sale.order',
- record_id=binding.odoo_id.id,
+ binding,
message=msg,
)
diff --git a/connector_prestashop/views/connector_prestashop_menu.xml b/connector_prestashop/views/connector_prestashop_menu.xml
index 5c1b02e4e..5f5b001d1 100644
--- a/connector_prestashop/views/connector_prestashop_menu.xml
+++ b/connector_prestashop/views/connector_prestashop_menu.xml
@@ -1,40 +1,85 @@
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prestashop Options / Attributes
+ prestashop.product.combination.option
+ tree,form
+
+
+
+ Prestashop Options/Attribute Values
+ prestashop.product.combination.option.value
+ tree,form
+
+
+
+ Odoo product Categories
+ prestashop.product.category
+ tree,form
+
+
+
+
+ Prestashop Products
+ prestashop.product.combination
+ tree,form
+
+
+ Odoo Product Templates
+ prestashop.product.template
+ tree,form
+
+
+
+ Languages
+ prestashop.res.lang
+ tree,form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
index d1f096497..750f47462 100644
--- a/connector_prestashop/views/prestashop_backend_view.xml
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -45,34 +45,45 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
By clicking on the buttons,
- you will initiate the synchronizations
+ you will initiate the
+ synchronizations
with PrestaShop.
Note that the import or exports
won't be done directly,
they will create 'Jobs'
- executed as soon as possible.
+ executed as soon
+ as possible.
Once imported,
some types of records,
- like the products or categories,
+ like the products
+ or categories,
need a manual review.
You will find the list
- of the new records to review
+ of the
+ new records to review
in the menu 'Connectors > Checkpoint'.
@@ -156,6 +167,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 4469acb8bb7b70c4300c595ea6ca7d7ddef23cf2 Mon Sep 17 00:00:00 2001
From: Benoit
Date: Tue, 17 Apr 2018 16:40:53 +0200
Subject: [PATCH 10/99] [WIP] start to port tests
---
.../models/product_image/importer.py | 2 +-
.../models/product_product/common.py | 6 ---
connector_prestashop/tests/common.py | 6 +--
.../tests/test_import_carrier.py | 27 ++++--------
.../tests/test_import_inventory.py | 38 +++++++----------
.../tests/test_import_partner.py | 41 +++++++------------
.../tests/test_import_products.py | 41 ++++++++-----------
.../tests/test_import_sale.py | 31 +++++---------
8 files changed, 69 insertions(+), 123 deletions(-)
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 0f314f353..71326c6a4 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -90,7 +90,7 @@ def run(self, template_id, image_id, **kwargs):
'Error: `%s`'
) % (image_id, error.msg)
self.backend_record.add_checkpoint(
- template,
+ template,
message=msg)
else:
msg = _(
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index 2d1b786b2..e7338c35b 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -198,12 +198,6 @@ def set_product_image_variant(self, backend, combination_ids, **kwargs):
importer = work.component(usage='record.importer')
return importer.set_variant_images(combination_ids, **kwargs)
- @job(default_channel='root.prestashop')
- def set_product_image_variant(self, backend, combination_ids, **kwargs):
- with backend.work_on(self._name) as work:
- importer = work.component(usage='record.importer')
- return importer.set_variant_images(combination_ids, **kwargs)
-
class ProductAttribute(models.Model):
_inherit = 'product.attribute'
diff --git a/connector_prestashop/tests/common.py b/connector_prestashop/tests/common.py
index 86e97acf6..6bd4fb43d 100644
--- a/connector_prestashop/tests/common.py
+++ b/connector_prestashop/tests/common.py
@@ -4,8 +4,8 @@
import functools
-import openerp.tests.common as common
from odoo.addons.connector.connector import ConnectorEnvironment
+from odoo.addons.component.tests.common import SavepointComponentCase
from contextlib import contextmanager
from os.path import dirname, exists, join
@@ -77,7 +77,7 @@ def _decorated(self, *args, **kwargs):
return functools.wraps(func)(_decorated)
-class PrestashopTransactionCase(common.TransactionCase):
+class PrestashopTransactionCase(SavepointComponentCase):
""" Base class for Tests with Prestashop """
def setUp(self):
@@ -166,7 +166,7 @@ def get_record_field(record, field):
record = record[attr]
return record
- model_name = records._model._name
+ model_name = records._name
records = list(records)
assert len(expected_records) > 0, "must have > 0 expected record"
fields = expected_records[0]._fields
diff --git a/connector_prestashop/tests/test_import_carrier.py b/connector_prestashop/tests/test_import_carrier.py
index 9838e6f4c..846b15215 100644
--- a/connector_prestashop/tests/test_import_carrier.py
+++ b/connector_prestashop/tests/test_import_carrier.py
@@ -6,14 +6,6 @@
import mock
-from odoo.addons.connector_prestashop.unit.importer import (
- import_record,
-)
-from odoo.addons.connector_prestashop.models.\
- delivery_carrier.importer import (
- import_carriers
- )
-
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -36,8 +28,8 @@ def setUp(self):
@assert_no_job_delayed
def test_import_carriers(self):
import_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
- '.import_carriers')
+ '.binding.common'
+ '.import_record')
with mock.patch(import_job) as import_mock:
self.backend_record.import_carriers()
import_mock.delay.assert_called_with(
@@ -47,16 +39,15 @@ def test_import_carriers(self):
@assert_no_job_delayed
def test_import_products_batch(self):
- record_job_path = ('openerp.addons.connector_prestashop.unit'
- '.importer.import_record')
+ record_job_path = ('openerp.addons.connector_prestashop.models'
+ '.binding.common.import_record')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_carrier_batch') as cassette, \
mock.patch(record_job_path) as import_record_mock:
- import_carriers(
- self.conn_session,
- self.backend_record.id,
+ self.env['prestashop.delivery.carrier'].import_batch(
+ self.backend_record,
)
expected_query = {
'filter[deleted]': ['0'],
@@ -74,9 +65,9 @@ def test_import_products_batch(self):
def test_import_carrier_record(self):
""" Import a carrier """
with recorder.use_cassette('test_import_carrier_record_2'):
- import_record(self.conn_session, 'prestashop.delivery.carrier',
- self.backend_record.id, 2)
-
+ self.env['prestashop.delivery.carrier'].import_record(
+ self.backend_record, 2
+ )
domain = [('prestashop_id', '=', 2),
('backend_id', '=', self.backend_record.id)]
binding = self.env['prestashop.delivery.carrier'].search(domain)
diff --git a/connector_prestashop/tests/test_import_inventory.py b/connector_prestashop/tests/test_import_inventory.py
index 695cbf268..551cd1163 100644
--- a/connector_prestashop/tests/test_import_inventory.py
+++ b/connector_prestashop/tests/test_import_inventory.py
@@ -6,14 +6,6 @@
import mock
-from odoo.addons.connector_prestashop.unit.importer import (
- import_record,
-)
-from odoo.addons.connector_prestashop.models.\
- product_template.importer import (
- import_inventory
- )
-
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -37,7 +29,7 @@ def setUp(self):
def test_import_inventory_delay(self):
""" Backend button delay a job to delay inventory import """
import_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
+ '.product_template.common'
'.import_inventory')
with mock.patch(import_job) as import_mock:
self.backend_record.import_stock_qty()
@@ -48,13 +40,13 @@ def test_import_inventory_delay(self):
@assert_no_job_delayed
def test_import_inventory_batch(self):
record_job_path = ('openerp.addons.connector_prestashop.models'
- '.product_template.importer.import_record')
+ '.product_template.common.import_inventory')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_inventory_batch') as cassette,\
mock.patch(record_job_path) as import_record_mock:
- import_inventory(self.conn_session, self.backend_record.id)
+ self.env['prestashop.product.template'].import_inventory(self.backend_record)
expected_query = {
'display': ['[id,id_product,id_product_attribute]'],
'limit': ['0,1000'],
@@ -82,13 +74,13 @@ def test_import_inventory_record_template(self):
self.assertEqual(0, template.qty_available)
with recorder.use_cassette('test_import_inventory_record_template_1'):
- import_record(self.conn_session, '_import_stock_available',
- self.backend_record.id, 1,
- # id_product_attribute='0' means we
- # import the template quantity
- record={'id_product_attribute': '0',
- 'id': '1',
- 'id_product': '1'})
+ self.env['_import_stock_available'].import_record(
+ self.backend_record, 1,
+ # id_product_attribute='0' means we
+ # import the template quantity
+ record={'id_product_attribute': '0',
+ 'id': '1',
+ 'id_product': '1'})
# cumulative stock of all the variants
self.assertEqual(1799, template.qty_available)
@@ -105,9 +97,9 @@ def test_import_inventory_record_variant(self):
self.assertEqual(0, template.qty_available)
with recorder.use_cassette('test_import_inventory_record_variant_1'):
- import_record(self.conn_session, '_import_stock_available',
- self.backend_record.id, 1,
- record={'id_product_attribute': '1',
- 'id': '1',
- 'id_product': '1'})
+ self.env['_import_stock_available'].import_record(
+ self.backend_record, 1,
+ record={'id_product_attribute': '1',
+ 'id': '1',
+ 'id_product': '1'})
self.assertEqual(299, template.qty_available)
diff --git a/connector_prestashop/tests/test_import_partner.py b/connector_prestashop/tests/test_import_partner.py
index 629e4e614..47e14903c 100644
--- a/connector_prestashop/tests/test_import_partner.py
+++ b/connector_prestashop/tests/test_import_partner.py
@@ -8,14 +8,6 @@
from freezegun import freeze_time
-from odoo.addons.connector_prestashop.models.res_partner.importer import (
- import_customers_since
-)
-from odoo.addons.connector_prestashop.unit.importer import (
- import_record,
- import_batch,
-)
-
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -53,8 +45,8 @@ def test_import_partner_since(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_partners_since = from_date
import_since_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
- '.import_customers_since')
+ '.binding.common'
+ '.import_batch')
with mock.patch(import_since_job) as import_mock:
self.backend_record.import_customers_since()
import_mock.delay.assert_called_with(
@@ -68,16 +60,15 @@ def test_import_partner_since(self):
def test_import_partner_batch(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_res_partner_from_date = from_date
- record_job_path = ('openerp.addons.connector_prestashop.unit'
- '.importer.import_record')
+ record_job_path = ('openerp.addons.connector_prestashop.models'
+ '.binding.common.import_record')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_partner_batch') as cassette, \
mock.patch(record_job_path) as import_record_mock:
- import_customers_since(
- self.conn_session,
- self.backend_record.id,
+ self.env['prestashop.res.partner'].import_customers_since(
+ self.backend_record,
since_date=from_date,
)
expected_query = {
@@ -103,8 +94,8 @@ def test_import_partner_batch(self):
def test_import_partner_category_record(self):
""" Import a partner category """
with recorder.use_cassette('test_import_partner_category_record_1'):
- import_record(self.conn_session, 'prestashop.res.partner.category',
- self.backend_record.id, 3)
+ self.env['prestashop.res.partner.category'].import_record(
+ self.backend_record, 3)
domain = [('prestashop_id', '=', 3)]
category_model = self.env['prestashop.res.partner.category']
@@ -130,11 +121,11 @@ def test_import_partner_record(self):
)
batch_job_path = ('openerp.addons.connector_prestashop.models'
- '.res_partner.importer.import_batch')
+ '.binding.common.import_batch')
with recorder.use_cassette('test_import_partner_record_1'), \
mock.patch(batch_job_path) as address_batch_mock:
- import_record(self.conn_session, 'prestashop.res.partner',
- self.backend_record.id, 1)
+ self.env['prestashop.res.partner'].import_record(
+ self.backend_record, 1)
address_batch_mock.delay.assert_called_with(
mock.ANY,
'prestashop.address',
@@ -164,18 +155,16 @@ def test_import_partner_record(self):
@assert_no_job_delayed
def test_import_partner_address_batch(self):
- record_job_path = ('openerp.addons.connector_prestashop.unit'
- '.importer.import_record')
+ record_job_path = ('openerp.addons.connector_prestashop.binding'
+ '.common.import_record')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
cassette_name = 'test_import_partner_address_batch'
with recorder.use_cassette(cassette_name) as cassette, \
mock.patch(record_job_path) as import_record_mock:
- import_batch(
- self.conn_session,
- 'prestashop.address',
- self.backend_record.id,
+ self.env['prestashop.address'].import_batch(
+ self.backend_record,
filters={'filter[id_customer]': '1'}
)
expected_query = {
diff --git a/connector_prestashop/tests/test_import_products.py b/connector_prestashop/tests/test_import_products.py
index 38ea5acc0..492e2cef9 100644
--- a/connector_prestashop/tests/test_import_products.py
+++ b/connector_prestashop/tests/test_import_products.py
@@ -8,14 +8,6 @@
from freezegun import freeze_time
-from odoo.addons.connector_prestashop.unit.importer import (
- import_record,
-)
-from odoo.addons.connector_prestashop.models.\
- product_template.importer import (
- import_products
- )
-
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -48,24 +40,24 @@ def setUp(self):
self.mock_delay_import_image = mock.MagicMock()
self.patch_delay_import_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_template'
- '.importer.set_product_image_variant',
+ 'openerp.addons.connector_prestashop.models.product_product'
+ '.common.set_product_image_variant',
new=self.mock_delay_import_image
)
self.patch_delay_import_image.start()
self.mock_delay_import_image = mock.MagicMock()
self.patch_delay_import_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_template'
- '.importer.import_product_image',
+ 'openerp.addons.connector_prestashop.models.product_image'
+ '.common.import_product_image',
new=self.mock_delay_import_image
)
self.patch_delay_import_image.start()
self.mock_delay_set_image = mock.MagicMock()
self.patch_delay_set_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_template'
- '.importer.set_product_image_variant',
+ 'openerp.addons.connector_prestashop.models.product_product'
+ '.common.set_product_image_variant',
new=self.mock_delay_set_image
)
self.patch_delay_set_image.start()
@@ -81,8 +73,8 @@ def test_import_products(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_products_since = from_date
import_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
- '.import_products')
+ '.binding.common'
+ '.import_record')
with mock.patch(import_job) as import_mock:
self.backend_record.import_products()
import_mock.delay.assert_called_with(
@@ -96,16 +88,15 @@ def test_import_products(self):
def test_import_products_batch(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_products_since = from_date
- record_job_path = ('openerp.addons.connector_prestashop.unit'
- '.importer.import_record')
+ record_job_path = ('openerp.addons.connector_prestashop.models'
+ '.binding.common.import_record')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_product_batch') as cassette, \
mock.patch(record_job_path) as import_record_mock:
- import_products(
- self.conn_session,
- self.backend_record.id,
+ self.env['prestashop.product.template'].import_products(
+ self.backend_record,
from_date,
)
expected_query = {
@@ -131,8 +122,8 @@ def test_import_products_batch(self):
def test_import_product_record_category(self):
""" Import a product category """
with recorder.use_cassette('test_import_product_category_record_1'):
- import_record(self.conn_session, 'prestashop.product.category',
- self.backend_record.id, 5)
+ self.env['prestashop.product.category'].import_record(
+ self.backend_record, 5)
domain = [('prestashop_id', '=', 5),
('backend_id', '=', self.backend_record.id)]
@@ -162,8 +153,8 @@ def test_import_product_record(self):
categs |= cat
with recorder.use_cassette('test_import_product_template_record_1'):
- import_record(self.conn_session, 'prestashop.product.template',
- self.backend_record.id, 1)
+ self.env['prestashop.product.template'].import_record(
+ self.backend_record, 1)
domain = [('prestashop_id', '=', 1),
('backend_id', '=', self.backend_record.id)]
diff --git a/connector_prestashop/tests/test_import_sale.py b/connector_prestashop/tests/test_import_sale.py
index 49bb39678..6c6cb9371 100644
--- a/connector_prestashop/tests/test_import_sale.py
+++ b/connector_prestashop/tests/test_import_sale.py
@@ -8,14 +8,6 @@
from freezegun import freeze_time
-from odoo.addons.connector_prestashop.unit.importer import (
- import_record,
-)
-from odoo.addons.connector_prestashop.models.\
- sale_order.importer import (
- import_orders_since
- )
-
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -48,8 +40,8 @@ def test_import_sales(self):
from_date = '2016-12-01 00:00:00'
self.backend_record.import_orders_since = from_date
import_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
- '.import_orders_since')
+ '.binding.common'
+ '.import_bacth')
with mock.patch(import_job) as import_mock:
self.backend_record.import_sale_orders()
import_mock.delay.assert_called_with(
@@ -63,16 +55,15 @@ def test_import_sales(self):
def test_import_sale_batch(self):
from_date = '2016-12-01 00:00:00'
self.backend_record.import_res_partner_from_date = from_date
- record_job_path = ('openerp.addons.connector_prestashop.unit'
- '.importer.import_record')
+ record_job_path = ('openerp.addons.connector_prestashop.models'
+ '.binding.common.import_batch')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_sale_batch') as cassette, \
mock.patch(record_job_path) as import_record_mock:
- import_orders_since(
- self.conn_session,
- self.backend_record.id,
+ self.env['prestashop.sale.order'].import_orders_since(
+ self.backend_record,
from_date,
)
@@ -167,9 +158,8 @@ def test_import_sale_record(self):
# import of the sale order
with recorder.use_cassette('test_import_sale_record_5'):
- result = import_record(
- self.conn_session, 'prestashop.sale.order',
- self.backend_record.id, 5)
+ result = self.env['prestashop.sale.order'].import_record(
+ self.backend_record, 5)
error_msg = ('Import of the order 5 canceled '
'because it has not been paid since 30 days')
@@ -177,9 +167,8 @@ def test_import_sale_record(self):
with recorder.use_cassette('test_import_sale_record_5'):
with freeze_time("2016-12-08"):
- import_record(
- self.conn_session, 'prestashop.sale.order',
- self.backend_record.id, 5)
+ self.env['prestashop.sale.order'].import_record(
+ self.backend_record, 5)
domain = [('prestashop_id', '=', 5),
('backend_id', '=', self.backend_record.id)]
From db5ed0722a04cf40eb6629a94c951169ab440be2 Mon Sep 17 00:00:00 2001
From: Florent THOMAS
Date: Tue, 17 Apr 2018 15:48:16 +0200
Subject: [PATCH 11/99] [FIX+IMP] connector_prestashop: Several refinements:
* FIX duplicate key
* FIX bad adpter for testing connexion
* fix bad field for binding
* Implement the product matching functionnality
* Add active button
* Better defensive method on matching delivery carriers
* more logs
* Better sql constraint
* Prevent jobs to be executed on inactive backends
* Preserve unique mapping on delivery methods
---
connector_prestashop/models/binding/common.py | 17 ++++
.../models/delivery_carrier/common.py | 5 ++
.../models/delivery_carrier/importer.py | 28 +++++--
.../models/prestashop_backend/common.py | 9 ++-
.../models/product_product/importer.py | 37 ++++++---
.../models/product_template/importer.py | 78 ++++++++++++++++++-
.../views/prestashop_backend_view.xml | 15 +++-
7 files changed, 162 insertions(+), 27 deletions(-)
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index 7c7a46e9d..b7eb1446d 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -4,6 +4,7 @@
from odoo import models, fields, api
from odoo.addons.queue_job.job import job, related_action
from ...components.importer import import_record
+from odoo.addons.connector.exception import RetryableJobError
class PrestashopBinding(models.AbstractModel):
@@ -18,6 +19,10 @@ class PrestashopBinding(models.AbstractModel):
required=True,
ondelete='restrict'
)
+ active = fields.Boolean(
+ string='Active',
+ default=True
+ )
prestashop_id = fields.Integer('ID on PrestaShop')
_sql_constraints = [
@@ -25,10 +30,19 @@ class PrestashopBinding(models.AbstractModel):
'A record with same ID on PrestaShop already exists.'),
]
+ def check_active(self, backend):
+ if not backend.active:
+ raise RetryableJobError(
+ 'Backend %s is inactive please consider changing this'
+ 'The job will be retried later.' %
+ (backend.name,))
+
+
@job(default_channel='root.prestashop')
@api.model
def import_record(self, backend, prestashop_id, force=False):
""" Import a record from PrestaShop """
+ self.check_active(backend)
with backend.work_on(self._name) as work:
importer = work.component(usage='record.importer')
return importer.run(prestashop_id, force=force)
@@ -37,6 +51,7 @@ def import_record(self, backend, prestashop_id, force=False):
@api.model
def import_batch(self, backend, filters=None):
""" Prepare a batch import of records from PrestaShop """
+ self.check_active(backend)
if filters is None:
filters = {}
with backend.work_on(self._name) as work:
@@ -49,6 +64,7 @@ def import_batch(self, backend, filters=None):
def export_record(self, fields=None):
""" Export a record on PrestaShop """
self.ensure_one()
+ self.check_active(backend)
with self.backend_id.work_on(self._name) as work:
exporter = work.component(usage='record.exporter')
return exporter.run(self, fields)
@@ -56,6 +72,7 @@ def export_record(self, fields=None):
@job(default_channel='root.prestashop')
def export_delete_record(self, backend, external_id):
""" Delete a record on PrestaShop """
+ self.check_active(backend)
with backend.work_on(self._name) as work:
deleter = work.component(usage='record.exporter.deleter')
return deleter.run(external_id)
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index 01c618d6b..eed90135b 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -37,6 +37,11 @@ class PrestashopDeliveryCarrier(models.Model):
export_tracking = fields.Boolean(
string='Export tracking numbers to PrestaShop',
)
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, odoo_id, id_reference)',
+ 'An ERP record with same ID already exists on PrestaShop with the same id_reference'),
+ ]
<<<<<<< HEAD
=======
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index c385f440d..61f934307 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -29,14 +29,28 @@ class CarrierImportMapper(Component):
@only_create
@mapping
- def openerp_id(self, record):
- #Prevent The duplication of delivery method if id_reference is the same
- id_reference = record['id_reference']
- delivery = self.env['prestashop.delivery.carrier'].search([('id_reference', '=', id_reference)])
- if len(delivery) == 1 :
- return {'openerp_id': delivery.openerp_id.id}
+ def odoo_id(self, record):
+ """
+ Prevent The duplication of delivery method if id_reference is the same
+ Has to be improved
+ """
+ id_reference = int(str(record['id_reference']))
+ ps_delivery = self.env['prestashop.delivery.carrier'].search([
+ ('id_reference', '=', id_reference),
+ ('backend_id', '=', self.backend_record.id)])
+ _logger.debug("Found delivery %s for reference %s" % (ps_delivery, id_reference))
+ if len(ps_delivery) == 1 :
+ #Temporary defensive mode so that only a single delivery method still available
+ delivery = ps_delivery.odoo_id
+ ps_delivery.unlink()
+ return {'odoo_id': delivery.id}
else:
- return {'id_reference': id_reference}
+ return {}
+
+ @mapping
+ def id_reference(self, record):
+ id_reference = int(str(record['id_reference']))
+ return {'id_reference': id_reference}
@mapping
def active(self, record):
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index baa2e6ba2..173f60fdf 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -140,7 +140,9 @@ def _select_state(self):
matching_product_template = fields.Boolean(string="Match product template")
- matching_product_ch = fields.Selection([('reference','Reference'),('ean13','Barcode')],string="Matching Field for product")
+ matching_product_ch = fields.Selection([('reference','Reference'),
+ ('barcode','Barcode')],
+ string="Matching Field for product")
matching_customer = fields.Boolean(string="Matching Customer",
help="The selected fields will be matched to the ref field \
@@ -154,7 +156,6 @@ def _select_state(self):
('virtual_available','Forecast quantity'),
('immediately_usable_qty', 'Available to promise'),
('potential_qty', 'Potential')],
- string='Field use for quantity update',
help="""
Some of this options may need some additionnal
modules you'll have to install by yourself from
@@ -177,7 +178,7 @@ def fill_matched_fields(self, backend_id):
self.ensure_one()
options={'limit': 1,'display': 'full'}
-
+ #TODO : Unse new adapter pattern to get a simple partner json
# prestashop = PrestaShopLocation(
# self.location.encode(),
# self.webservice_key,
@@ -256,7 +257,7 @@ def synchronize_basedata(self):
def _check_connection(self):
self.ensure_one()
with self.work_on('prestashop.backend') as work:
- component = work.component_by_name(name='prestashop.adapter')
+ component = work.component_by_name(name='prestashop.adapter.test')
with api_handle_errors('Connection failed'):
component.head()
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index a8c6e0b14..90e614776 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -206,9 +206,9 @@ def default_code(self, record):
current_code = '%s_%s' % (code, i)
return {'default_code': current_code}
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
+# @mapping
+# def backend_id(self, record):
+# return {'backend_id': self.backend_record.id}
@mapping
def barcode(self, record):
@@ -264,12 +264,31 @@ def specific_price(self, record):
@only_create
@mapping
def odoo_id(self, record):
- product = self.env['product.product'].search([
- ('default_code', '=', record['reference']),
- ('prestashop_bind_ids', '=', False),
- ], limit=1)
- if product:
- return {'odoo_id': product.id}
+# product = self.env['product.product'].search([
+# ('default_code', '=', record['reference']),
+# ('prestashop_bind_ids', '=', False),
+# ], limit=1)
+# if product:
+# return {'odoo_id': product.id}
+
+
+ """ Will bind the product to an existing one with the same code """
+ if self.backend_record.matching_product_template:
+ code = record.get(self.backend_record.matching_product_ch)
+ if self.backend_record.matching_product_ch == 'reference':
+ if code:
+ product = self.env['product.product'].search(
+ [('default_code', '=', code)], limit=1)
+ if product:
+ return {'openerp_id': product.id}
+ if self.backend_record.matching_product_ch == 'barcode':
+ if code:
+ product = self.env['product.product'].search(
+ [('barcode', '=', code)], limit=1)
+ if product:
+ return {'odoo_id': product.id}
+ else:
+ return {}
class ProductCombinationOptionImporter(Component):
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 6b2248455..936f8517c 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -118,10 +118,80 @@ def has_combinations(self, record):
@mapping
def odoo_id(self, record):
""" Will bind the product to an existing one with the same code """
- product = self.env['product.template'].search(
- [('default_code', '=', record['reference'])], limit=1)
- if product:
- return {'odoo_id': product.id}
+# product = self.env['product.template'].search(
+# [('default_code', '=', record['reference'])], limit=1)
+# if product:
+# return {'odoo_id': product.id}
+
+
+ if self.backend_record.matching_product_template:
+ if self.has_combinations(record):
+ #Browse combinations for matching products and find if there
+ #is a potential template to be matched
+
+ template = self.env['product.template']
+ associations = record.get('associations', {})
+ combinations = associations.get('combinations', {}).get(
+ 'combinations', [])
+ if len(combinations) == 1 :
+ #Defensive mode when product have no combinations, force the list mode
+ combinations = [combinations]
+ for prod in combinations:
+ backend_adapter = self.unit_for(
+ BackendAdapter, 'prestashop.product.combination')
+ variant = backend_adapter.read(int(prod['id']))
+ code = variant.get(self.backend_record.matching_product_ch)
+
+ if self.backend_record.matching_product_ch == 'reference':
+ product = self.env['product.product'].search(
+ [('default_code', '=', code)])
+
+ if len(product) > 1 :
+ raise ValidationError(_('Error! Multiple products '
+ 'found with combinations reference %s.'
+ 'Maybe consider to update you datas') % code)
+ template |= product.product_tmpl_id
+
+ if self.backend_record.matching_product_ch == 'barcode':
+ product = self.env['product.product'].search(
+ [('barcode', '=', code)])
+ if len(product) > 1 :
+ raise ValidationError(_('Error! Multiple products '
+ 'found with combinations reference %s.'
+ 'Maybe consider to update you datas') % code)
+ template |= product.product_tmpl_id
+
+ _logger.debug('template %s' % template)
+ if len(template) == 1:
+ return {'odoo_id': template.id}
+ if len(template) > 1 :
+ raise ValidationError(_('Error! Multiple templates are '
+ 'found with combinations reference.'
+ 'Maybe consider to change matching option'))
+
+ else:
+ code = record.get(self.backend_record.matching_product_ch)
+ if self.backend_record.matching_product_ch == 'reference':
+ if code:
+ if self._template_code_exists(code):
+ product = self.env['product.template'].search(
+ [('default_code', '=', code)], limit=1)
+ if product:
+ return {'odoo_id': product.id}
+
+
+ if self.backend_record.matching_product_ch == 'barcode':
+ if code:
+ product = self.env['product.template'].search(
+ [('barcode', '=', code)], limit=1)
+ if product:
+ return {'odoo_id': product.id}
+
+
+ return {}
+
+
+
def _template_code_exists(self, code):
model = self.session.env['product.template']
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
index 750f47462..a8e6bf3b1 100644
--- a/connector_prestashop/views/prestashop_backend_view.xml
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -13,10 +13,12 @@
+ help="Synchonize shop and shop groups" string="Synchronize Metadata"
+ attrs="{'invisible':[('state', 'in', ['draft'])]}" />
+ string="Synchronize Base Data"
+ attrs="{'invisible':[('state', 'in', ['draft'])]}" />
@@ -24,6 +26,13 @@
+
+
+
+
+
+
@@ -62,7 +71,7 @@
-
+
By clicking on the buttons,
From e8ababb225530c497ba7eb71eb8d482ae5131261 Mon Sep 17 00:00:00 2001
From: Benoit
Date: Fri, 27 Apr 2018 17:10:10 +0200
Subject: [PATCH 12/99] [IMP+FIX] connector_prestashop: Refinements:
* [IMP] migrate export of inventory, sale state and tracking number
* [IMP] fixes and add no_export field
* [FIX] listener
* [FIX] temprorary remove unfinished fonctionality
* [IMP] continue migration
* [FIX] various fixes
* [FIX] stock export
---
connector_prestashop/__init__.py | 1 -
connector_prestashop/components/__init__.py | 1 +
.../components/backend_adapter.py | 2 +-
connector_prestashop/components/deleter.py | 10 ---
connector_prestashop/components/exporter.py | 49 +++----------
connector_prestashop/components/listener.py | 55 ++++++++++++++
connector_prestashop/components/mapper.py | 20 ++++-
.../components/version_key.py | 4 +-
connector_prestashop/consumer.py | 69 ------------------
connector_prestashop/models/__init__.py | 2 +-
connector_prestashop/models/binding/common.py | 4 +-
.../models/delivery_carrier/importer.py | 7 --
.../models/mail_message/common.py | 18 ++++-
.../models/prestashop_backend/common.py | 22 +++---
.../models/product_image/common.py | 22 ++++--
.../models/product_product/common.py | 21 ++----
.../models/product_product/exporter.py | 20 +++--
.../models/product_product/importer.py | 6 +-
.../models/product_template/common.py | 59 +++++++++++++--
.../models/product_template/exporter.py | 46 ++++--------
.../models/product_template/importer.py | 17 +----
.../models/sale_order/common.py | 73 ++++++++++++++++---
.../models/sale_order/importer.py | 22 ++++--
.../models/sale_order_state/common.py | 10 +--
.../models/sale_order_state/exporter.py | 41 +++--------
.../models/stock_move/common.py | 11 +++
.../models/stock_tracking/exporter.py | 36 +++------
.../security/ir.model.access.csv | 12 ++-
.../views/prestashop_backend_view.xml | 9 ++-
connector_prestashop/views/product_view.xml | 6 +-
30 files changed, 359 insertions(+), 316 deletions(-)
create mode 100644 connector_prestashop/components/listener.py
delete mode 100644 connector_prestashop/consumer.py
diff --git a/connector_prestashop/__init__.py b/connector_prestashop/__init__.py
index d1917fe6a..eefba89b7 100644
--- a/connector_prestashop/__init__.py
+++ b/connector_prestashop/__init__.py
@@ -3,7 +3,6 @@
from . import backend
from . import connector
-from . import consumer
from . import components
from . import models
diff --git a/connector_prestashop/components/__init__.py b/connector_prestashop/components/__init__.py
index aa3d50c54..5ffaedbf5 100644
--- a/connector_prestashop/components/__init__.py
+++ b/connector_prestashop/components/__init__.py
@@ -7,6 +7,7 @@
from . import binder
from . import importer
from . import exporter
+from . import listener
from . import mapper
from . import deleter
from . import auto_matching_importer
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index b0bf4cd62..e0f01fdba 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -122,7 +122,7 @@ def __init__(self, environment):
self.prestashop.api_url,
self.prestashop.webservice_key,
debug=self.backend_record.debug,
- verbose=self.backend_record.verbose
+# verbose=self.backend_record.verbose
)
def search(self, filters=None):
diff --git a/connector_prestashop/components/deleter.py b/connector_prestashop/components/deleter.py
index 8d2324188..0787e0101 100644
--- a/connector_prestashop/components/deleter.py
+++ b/connector_prestashop/components/deleter.py
@@ -24,13 +24,3 @@ def run(self, resource, external_id):
self.backend_adapter.delete(resource, external_id)
return _('Record %s deleted on PrestaShop on resource %s') % (
external_id, resource)
-
-
-@job(default_channel='root.prestashop')
-def export_delete_record(
- session, model_name, backend_id, external_id, resource):
- """ Delete a record on PrestaShop """
- backend = session.env['prestashop.backend'].browse(backend_id)
- env = backend.get_environment(model_name, session=session)
- deleter = env.get_connector_unit(PrestashopDeleter)
- return deleter.run(resource, external_id)
diff --git a/connector_prestashop/components/exporter.py b/connector_prestashop/components/exporter.py
index 5e8e6a2b4..a4fe77a63 100644
--- a/connector_prestashop/components/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -46,20 +46,20 @@ def _get_binding(self):
""" Return the raw Odoo data for ``self.binding_id`` """
return self.model.browse(self.binding_id)
- def run(self, binding_id, *args, **kwargs):
+ def run(self, binding, *args, **kwargs):
""" Run the synchronization
:param binding_id: identifier of the binding record to export
"""
- self.binding_id = binding_id
- self.binding = self._get_binding()
+ self.binding_id = binding.id
+ self.binding = binding
self.prestashop_id = self.binder.to_external(self.binding)
result = self._run(*args, **kwargs)
self.binder.bind(self.prestashop_id, self.binding)
# commit so we keep the external ID if several cascading exports
# are called and one of them fails
- self._cr.commit()
+ self.env.cr.commit()
self._after_export()
return result
@@ -325,42 +325,11 @@ def _run(self, fields=None, **kwargs):
class TranslationPrestashopExporter(AbstractComponent):
-
_name = 'translation.prestashop.exporter'
_inherit = 'prestashop.exporter'
- @property
- def mapper(self):
- if self._mapper is None:
- self._mapper = self.connector_env.get_connector_unit(
- TranslationPrestashopExportMapper)
- return self._mapper
-
-
-def related_action_record(session, job):
- binding_model = job.args[0]
- binding_id = job.args[1]
- record = session.env[binding_model].browse(binding_id)
- odoo_name = record.odoo_id._name
-
- action = {
- 'name': _(odoo_name),
- 'type': 'ir.actions.act_window',
- 'res_model': odoo_name,
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_id': record.odoo_id.id,
- }
- return action
-
-
-@job(default_channel='root.prestashop')
-@related_action(action=related_action_record)
-def export_record(session, model_name, binding_id, fields=None, **kwargs):
- """ Export a record on PrestaShop """
- # TODO: FIX PRESTASHOP do not support partial edit
- fields = None
- record = session.env[model_name].browse(binding_id)
- env = record.backend_id.get_environment(model_name, session=session)
- exporter = env.get_connector_unit(PrestashopExporter)
- return exporter.run(binding_id, fields=fields, **kwargs)
+# @property
+# def mapper(self):
+# if self._mapper is None:
+# self._mapper = self.component(usage='translation.export.mapper')
+# return self._mapper
diff --git a/connector_prestashop/components/listener.py b/connector_prestashop/components/listener.py
new file mode 100644
index 000000000..e44a8f011
--- /dev/null
+++ b/connector_prestashop/components/listener.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# Copyright 2013-2017 Camptocamp SA
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+import logging
+from odoo.addons.component.core import AbstractComponent
+
+_logger = logging.getLogger(__name__)
+
+
+class PrestashopListener(AbstractComponent):
+ """ Base Backend Adapter for the connectors """
+
+ _name = 'prestashop.connector.listener'
+ _inherit = 'base.connector.listener'
+
+ def need_to_export(self, record, fields=None):
+ """ Check if the record has to be exported to prestashop.
+ It depends on the written fields and if the record has flag no_export
+
+ To be used with :func:`odoo.addons.component_event.skip_if`
+ on Events::
+
+ from odoo.addons.component.core import Component
+ from odoo.addons.component_event import skip_if
+
+
+ class MyEventListener(Component):
+ _name = 'my.event.listener'
+ _inherit = 'base.connector.event.listener'
+ _apply_on = ['magento.res.partner']
+
+ @skip_if(lambda: self, record, *args, **kwargs:
+ self.need_to_export(record, fields=fields))
+ def on_record_write(self, record, fields=None):
+ record.with_delay().export_record()
+
+ """
+ if not record or not record.backend_id:
+ return True
+ with record.backend_id.work_on(record._name) as work:
+ mapper = work.component(usage='export.mapper')
+ exported_fields = mapper.changed_by_fields()
+ if fields:
+ if not exported_fields & set(fields):
+ _logger.debug(
+ "Skip export of %s because modified fields: %s are not part "
+ "of exported fields %s",
+ record, fields, list(exported_fields))
+ return True
+ if record.no_export:
+ _logger.debug(
+ "Skip export of %s because export is disable for it",
+ record)
+ return True
+ return False
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index 12dfbf5e3..4a57f6d94 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -26,10 +26,10 @@ def _map_direct(self, record, from_attr, to_attr):
from_attr,
to_attr) or ''
if isinstance(from_attr, basestring):
- column = self.model._all_columns[from_attr].column
- if column._type == 'boolean':
+ column = self.model.fields_get()[from_attr]
+ if column['type'] == 'boolean':
return res and 1 or 0
- elif column._type == 'float':
+ elif column['type'] == 'float':
res = str(res)
return res
@@ -37,6 +37,19 @@ def _map_direct(self, record, from_attr, to_attr):
class TranslationPrestashopExportMapper(AbstractComponent):
_name = 'translation.prestashop.export.mapper'
_inherit = 'prestashop.export.mapper'
+# _usage = 'translation.export.mapper'
+
+ def changed_by_fields(self):
+ """ Build a set of fields used by the mapper
+
+ It adds the translatable fields in the set.
+ """
+ changed_by = super(TranslationPrestashopExportMapper, self).changed_by_fields()
+ if getattr(self, '_translatable_fields', None):
+ for from_attr, __ in self._translatable_fields:
+ fieldname = self._direct_source_field_name(from_attr)
+ changed_by.add(fieldname)
+ return changed_by
@mapping
def translatable_fields(self, record):
@@ -70,6 +83,7 @@ def _convert_languages(self, records_by_language, translatable_fields):
'value': record[from_attr] or ''
})
res[to_attr] = value
+
return res
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index 049f17599..b72b709ca 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -24,7 +24,9 @@ class VersionKey(ConnectorUnit):
_model_name = '_prestashop.version.key'
>>>>>>> e218fce... ADD WIP for PR Akretion
- keys = {}
+ keys = {
+ 'messages': 'customer_messages',
+ }
def get_key(self, key):
return self.keys.get(key) or key
diff --git a/connector_prestashop/consumer.py b/connector_prestashop/consumer.py
deleted file mode 100644
index 6e43a5b1d..000000000
--- a/connector_prestashop/consumer.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
-
-from odoo.addons.connector.event import on_record_write
-from odoo.addons.connector_ecommerce.models.event import (
- on_tracking_number_added,
-)
-from .models.sale_order_state.exporter import export_sale_state
-from .models.stock_tracking.exporter import export_tracking_number
-
-def delay_export(session, model_name, record_id, fields=None, priority=20):
- """ Delay a job which export a binding record.
-
- (A binding record being a ``external.res.partner``,
- ``external.product.product``, ...)
- """
- if session.context.get('connector_no_export'):
- return
- export_record.delay(
- session, model_name, record_id, fields=fields, priority=priority)
-
-
-def delay_export_all_bindings(
- session, model_name, record_id, fields=None, priority=20):
- """ Delay a job which export all the bindings of a record.
-
-@on_record_write(model_names=[
- 'prestashop.product.template',
- 'prestashop.product.combination'
-])
-def prestashop_product_stock_updated(
- env, model_name, record_id, fields=None):
- if env.context.get('connector_no_export'):
- return
- inventory_fields = list(set(fields).intersection(INVENTORY_FIELDS))
- if inventory_fields:
- env[model_name].browse(record_id).with_delay(
- priority=20).export_inventory(fields=inventory_fields)
-
-
-@on_record_write(model_names='sale.order')
-def prestashop_sale_state_modified(env, model_name, record_id,
- fields=None):
- if 'state' in fields:
- sale = env[model_name].browse(record_id)
- if not sale.prestashop_bind_ids:
- return
- # a quick test to see if it is worth trying to export sale state
- states = env['sale.order.state.list'].search(
- [('name', '=', sale.state)]
- )
- if states:
- export_sale_state.delay(env, 'prestashop.sale.order',
- record_id, priority=20)
-
-
-@on_tracking_number_added
-def delay_export_tracking_number(env, model_name, record_id):
- """
- Call a job to export the tracking number to a existing picking that
- must be in done state.
- """
- picking = env['stock.picking'].browse(record_id)
- for binding in picking.sale_id.prestashop_bind_ids:
- export_tracking_number.delay(env,
- binding._model._name,
- binding.id,
- priority=20)
diff --git a/connector_prestashop/models/__init__.py b/connector_prestashop/models/__init__.py
index aac20238c..df1c97da7 100644
--- a/connector_prestashop/models/__init__.py
+++ b/connector_prestashop/models/__init__.py
@@ -16,9 +16,9 @@
from . import product_category
from . import product_image
from . import product_pricelist
+from . import product_template
from . import product_product
from . import product_supplierinfo
-from . import product_template
from . import res_country
from . import res_currency
from . import res_lang
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index b7eb1446d..248c2d32f 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -24,6 +24,7 @@ class PrestashopBinding(models.AbstractModel):
default=True
)
prestashop_id = fields.Integer('ID on PrestaShop')
+ no_export = fields.Boolean('No export to PrestaShop')
_sql_constraints = [
('prestashop_uniq', 'unique(backend_id, prestashop_id)',
@@ -37,7 +38,6 @@ def check_active(self, backend):
'The job will be retried later.' %
(backend.name,))
-
@job(default_channel='root.prestashop')
@api.model
def import_record(self, backend, prestashop_id, force=False):
@@ -64,7 +64,7 @@ def import_batch(self, backend, filters=None):
def export_record(self, fields=None):
""" Export a record on PrestaShop """
self.ensure_one()
- self.check_active(backend)
+ self.check_active(self.backend_id)
with self.backend_id.work_on(self._name) as work:
exporter = work.component(usage='record.exporter')
return exporter.run(self, fields)
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index 61f934307..4efc21b01 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -56,13 +56,6 @@ def id_reference(self, record):
def active(self, record):
return {'active_ext': record['active'] == '1'}
- @mapping
- def product_id(self, record):
- if self.backend_record.shipping_product_id:
- return {'product_id': self.backend_record.shipping_product_id.id}
- product = self.env.ref('connector_ecommerce.product_product_shipping')
- return {'product_id': product.id}
-
@mapping
def backend_id(self, record):
return {'backend_id': self.backend_record.id}
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
index 479166085..72680e0a2 100644
--- a/connector_prestashop/models/mail_message/common.py
+++ b/connector_prestashop/models/mail_message/common.py
@@ -34,8 +34,22 @@ class MailMessageAdapter(Component):
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.mail.message'
- _model_name = 'prestashop.mail.message'
-
@property
def _prestashop_model(self):
return self.backend_record.get_version_ps_key('messages')
+
+ def read(self, id, attributes=None):
+ """ Merge message and thread datas
+
+ :rtype: dict
+ """
+ api = self.client
+ res = api.get(self._prestashop_model, id, options=attributes)
+ first_key = res.keys()[0]
+ message_data = res[first_key]
+ thread_data = api.get('customer_threads', message_data['id_customer_thread'], options=attributes)
+ first_key = thread_data.keys()[0]
+ del thread_data[first_key]['id']
+ del thread_data[first_key]['date_add']
+ message_data.update(thread_data[first_key])
+ return message_data
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 173f60fdf..31f6edba4 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -12,6 +12,7 @@
from ...components.version_key import VersionKey
from ...backend import prestashop
from odoo.addons.connector.checkpoint import checkpoint
+from odoo.addons.base.res.res_partner import _tz_get
_logger = logging.getLogger(__name__)
@@ -147,8 +148,8 @@ def _select_state(self):
matching_customer = fields.Boolean(string="Matching Customer",
help="The selected fields will be matched to the ref field \
of the partner. Please adapt your datas consequently.")
- matching_customer_ch = fields.Many2one(comodel_name='prestashop.partner.field'
- , string="Matched field", help="Field that will be matched.")
+# matching_customer_ch = fields.Many2one(comodel_name='prestashop.partner.field'
+# , string="Matched field", help="Field that will be matched.")
quantity_field = fields.Selection(
@@ -161,29 +162,30 @@ def _select_state(self):
modules you'll have to install by yourself from
https://github.com/OCA/stock-logistics-warehouse/tree/10.0
""",
- string='Field use for quantity update',
- required=True,
- default='virtual_available'
+ required=True,
+ default='virtual_available'
)
+ tz = fields.Selection(_tz_get, 'Timezone', size=64,
+ help="The timezone of the backend. Used to synchronize the sale order date.")
@api.onchange("matching_customer")
def change_matching_customer(self):
#Update the field list so that if you API change you could find the new fields to map
if self._origin.id:
self.fill_matched_fields(self._origin.id)
-
-
+
+
@api.multi
def fill_matched_fields(self, backend_id):
self.ensure_one()
-
+
options={'limit': 1,'display': 'full'}
#TODO : Unse new adapter pattern to get a simple partner json
# prestashop = PrestaShopLocation(
# self.location.encode(),
# self.webservice_key,
# )
-#
+#
# client = PrestaShopWebServiceDict(
# prestashop.api_url,
# prestashop.webservice_key)
@@ -297,7 +299,7 @@ def update_product_stock_qty(self):
for backend_record in self:
backend_record.env['prestashop.product.template']\
.with_delay().export_product_quantities(backend=backend_record)
- backend_record.env['prestashop.product.product']\
+ backend_record.env['prestashop.product.combination']\
.with_delay().export_product_quantities(backend=backend_record)
return True
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index 64f2c86c7..999d8ac71 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import base64
+from odoo.tools import config
from odoo import models, fields, api
from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
@@ -54,9 +55,17 @@ class ProductImageAdapter(Component):
_export_node_name = '/images/products'
_export_node_name_res = 'image'
+
+ def connect(self):
+ debug = False
+ if config['log_level'] == 'debug':
+ debug = True
+ return PrestaShopWebServiceImage(self.prestashop.api_url,
+ self.prestashop.webservice_key,
+ debug=debug)
+
def read(self, product_tmpl_id, image_id, options=None):
- api = PrestaShopWebServiceImage(self.prestashop.api_url,
- self.prestashop.webservice_key)
+ api = self.connect()
return api.get_image(
self._prestashop_image_model,
product_tmpl_id,
@@ -65,8 +74,7 @@ def read(self, product_tmpl_id, image_id, options=None):
)
def create(self, attributes=None):
- api = PrestaShopWebServiceImage(
- self.prestashop.api_url, self.prestashop.webservice_key)
+ api = self.connect()
# TODO: odoo logic in the adapter? :-(
url = '{}/{}'.format(self._prestashop_model, attributes['id_product'])
return api.add(url, files=[(
@@ -76,8 +84,7 @@ def create(self, attributes=None):
)])
def write(self, id, attributes=None):
- api = PrestaShopWebServiceImage(
- self.prestashop.api_url, self.prestashop.webservice_key)
+ api = self.connect()
# TODO: odoo logic in the adapter? :-(
url = '{}/{}'.format(self._prestashop_model, attributes['id_product'])
url_del = '{}/{}/{}/{}'.format(
@@ -94,6 +101,5 @@ def write(self, id, attributes=None):
def delete(self, resource, id):
""" Delete a record on the external system """
- api = PrestaShopWebServiceImage(
- self.prestashop.api_url, self.prestashop.webservice_key)
+ api = self.connect()
return api.delete(resource, resource_ids=id)
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index e7338c35b..d121d9574 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -14,12 +14,6 @@
class ProductProduct(models.Model):
_inherit = 'product.product'
- prestashop_bind_ids = fields.One2many(
- comodel_name='prestashop.product.combination',
- inverse_name='openerp_id',
- copy=False,
- string='PrestaShop Bindings',
- )
prestashop_combinations_bind_ids = fields.One2many(
comodel_name='prestashop.product.combination',
inverse_name='odoo_id',
@@ -62,8 +56,7 @@ def _compute_lst_price(self):
# which could be not installed
uom = hasattr(product, 'uos_id') \
and product.uos_id or product.uom_id
- price = uom._compute_price(
- product.uom_id.id, price, self.env.context['uom'])
+ price = uom._compute_price(price, product.uom_id)
product.lst_price = price
lst_price = fields.Float(
@@ -178,18 +171,18 @@ def _prestashop_qty(self):
return self.qty_available
@job(default_channel='root.prestashop')
- def export_inventory(self, backend, fields=None, **kwargs):
+ def export_inventory(self, fields=None):
""" Export the inventory configuration and quantity of a product. """
- env = backend.get_environment(self._name)
- inventory_exporter = env.get_connector_unit(
- CombinationInventoryExporter)
- return inventory_exporter.run(self.id, fields, **kwargs)
+ backend = self.backend_id
+ with backend.work_on('prestashop.product.combination') as work:
+ exporter = work.component(usage='inventory.exporter')
+ return exporter.run(self, fields)
@api.model
@job(default_channel='root.prestashop')
def export_product_quantities(self, backend):
self.search([
- ('backend_id', 'in', backend.ids),
+ ('backend_id', '=', backend.id),
]).recompute_prestashop_qty()
@job(default_channel='root.prestashop')
diff --git a/connector_prestashop/models/product_product/exporter.py b/connector_prestashop/models/product_product/exporter.py
index 976cbfe2e..831dbfc1f 100644
--- a/connector_prestashop/models/product_product/exporter.py
+++ b/connector_prestashop/models/product_product/exporter.py
@@ -1,14 +1,22 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ..product_template.exporter import ProductInventoryExporter
+from odoo.addons.component.core import Component
-class CombinationInventoryExporter(ProductInventoryExporter):
- _model_name = ['prestashop.product.combination']
+class CombinationInventoryExporter(Component):
+ _name = 'prestashop.product.combination.inventory.exporter'
+ _inherit = 'prestashop.product.template.inventory.exporter'
+ _apply_on = 'prestashop.product.combination'
- def get_filter(self, template):
+ def get_filter(self, product):
return {
- 'filter[id_product]': template.main_template_id.prestashop_id,
- 'filter[id_product_attribute]': template.prestashop_id,
+ 'filter[id_product]': product.main_template_id.prestashop_id,
+ 'filter[id_product_attribute]': product.prestashop_id,
+ }
+
+ def get_quantity_vals(self, product):
+ return {
+ 'quantity': int(product.quantity),
+ 'out_of_stock': int(product.main_template_id.out_of_stock),
}
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 90e614776..8454792e8 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -280,7 +280,7 @@ def odoo_id(self, record):
product = self.env['product.product'].search(
[('default_code', '=', code)], limit=1)
if product:
- return {'openerp_id': product.id}
+ return {'odoo_id': product.id}
if self.backend_record.matching_product_ch == 'barcode':
if code:
product = self.env['product.product'].search(
@@ -418,6 +418,6 @@ def backend_id(self, record):
class ProductProductBatchImporter(Component):
- _name = 'prestashop.product.product.batch.importer'
+ _name = 'prestashop.product.combination.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
- _apply_on = 'prestashop.product.product'
+ _apply_on = 'prestashop.product.combination'
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 5d3df474e..8a0667c05 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -8,7 +8,7 @@
from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
-from exporter import ProductInventoryExporter
+from odoo.addons.component_event import skip_if
import logging
@@ -42,7 +42,7 @@ def update_prestashop_quantities(self):
template.mapped('prestashop_bind_ids').recompute_prestashop_qty()
# Recompute variant PrestaShop qty
template.mapped(
- 'product_variant_ids.prestashop_bind_ids'
+ 'product_variant_ids.prestashop_combination_bind_ids'
).recompute_prestashop_qty()
return True
@@ -111,6 +111,12 @@ class PrestashopProductTemplate(models.Model):
string='Cost Price',
digits=dp.get_precision('Product Price'),
)
+ out_of_stock = fields.Selection(
+ [('0', 'Refuse order'),
+ ('1', 'Accept order'),
+ ('2', 'Default prestashop')],
+ string='If stock shortage'
+ )
@api.multi
def recompute_prestashop_qty(self):
@@ -130,11 +136,13 @@ def _recompute_prestashop_qty_backend(self, backend):
self_loc = self.with_context(location=locations.ids,
compute_child=False)
for product in self_loc:
- new_qty = product._prestashop_qty()
- if product.quantity != new_qty:
- product.quantity = new_qty
+ if product.type == 'product':
+ new_qty = product._prestashop_qty()
+ if product.quantity != new_qty:
+ product.quantity = new_qty
return True
+ @api.multi
def _prestashop_qty(self):
return self.qty_available
@@ -154,12 +162,27 @@ def import_products(self, backend, since_date=None, **kwargs):
return True
@job(default_channel='root.prestashop')
- def import_inventory(sel, backend):
+ def import_inventory(self, backend):
with backend.work_on('_import_stock_available') as work:
importer = work.component(usage='batch.importer')
return importer.run()
+ @job(default_channel='root.prestashop')
+ def export_inventory(self, fields=None):
+ """ Export the inventory configuration and quantity of a product. """
+ backend = self.backend_id
+ with backend.work_on('prestashop.product.template') as work:
+ exporter = work.component(usage='inventory.exporter')
+ return exporter.run(self, fields)
+
+
+ @job(default_channel='root.prestashop')
+ def export_product_quantities(self, backend=None):
+ self.search([('backend_id', '=', backend.id)]
+ ).recompute_prestashop_qty()
+
+
class TemplateAdapter(Component):
_name = 'prestashop.product.template.adapter'
_inherit = 'prestashop.adapter'
@@ -202,7 +225,8 @@ def export_quantity_url(self, filters, quantity, client=None):
res = client.get(self._prestashop_model, stock_id)
first_key = res.keys()[0]
stock = res[first_key]
- stock['quantity'] = int(quantity)
+ stock['quantity'] = int(quantity['quantity'])
+ stock['out_of_stock'] = int(quantity['out_of_stock'])
client.edit(self._prestashop_model, {
self._export_node_name: stock
})
@@ -229,3 +253,24 @@ def search(self, filters=None):
if isinstance(tags, dict):
return [tags]
return tags
+
+
+class PrestashopProductQuantityListener(Component):
+ _name = 'prestashop.product.quantity.listener'
+ _inherit = 'base.connector.listener'
+ _apply_on = ['prestashop.product.combination', 'prestashop.product.template']
+
+ def _get_inventory_fields(self):
+ # fields which should not trigger an export of the products
+ # but an export of their inventory
+ return ('quantity', 'out_of_stock')
+
+ @skip_if(lambda self, record, **kwargs: self.no_connector_export(record))
+ def on_record_write(self, record, fields=None):
+ inventory_fields = list(
+ set(fields).intersection(self._get_inventory_fields())
+ )
+ if inventory_fields:
+ record.with_delay(priority=20).export_inventory(
+ fields=inventory_fields
+ )
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index 65c43ba1f..201effdf1 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -1,50 +1,34 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
-from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.synchronizer import Exporter
-
from odoo.addons.component.core import Component
-class ProductInventoryExporter(Exporter):
- _model_name = ['prestashop.product.template']
+class ProductInventoryExporter(Component):
+ _name = 'prestashop.product.template.inventory.exporter'
+ _inherit = 'prestashop.exporter'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'inventory.exporter'
def get_filter(self, template):
binder = self.binder_for()
- prestashop_id = binder.to_external(template.id)
+ prestashop_id = binder.to_external(template)
return {
'filter[id_product]': prestashop_id,
'filter[id_product_attribute]': 0
}
- def run(self, binding_id, fields, **kwargs):
+ def get_quantity_vals(self, template):
+ return {
+ 'quantity': int(template.quantity),
+ 'out_of_stock': int(template.out_of_stock),
+ }
+
+ def run(self, template, fields):
""" Export the product inventory to PrestaShop """
- template = self.model.browse(binding_id)
adapter = self.component(
usage='backend.adapter', model_name='_import_stock_available'
)
filter = self.get_filter(template)
- adapter.export_quantity(filter, int(template.quantity))
-
-
-# TODO: Remove because it has been moved to prestashop product template and
-# prestashop product combination
-@job(default_channel='root.prestashop')
-def export_inventory(session, model_name, record_id, fields=None, **kwargs):
- """ Export the inventory configuration and quantity of a product. """
- binding = session.env[model_name].browse(record_id)
- backend = binding.backend_id
- env = backend.get_environment(model_name, session=session)
- inventory_exporter = env.get_connector_unit(ProductInventoryExporter)
- return inventory_exporter.run(record_id, fields, **kwargs)
-
-
-@job(default_channel='root.prestashop')
-def export_product_quantities(session, ids):
- for model in ['template', 'combination']:
- model_obj = session.env['prestashop.product.' + model]
- model_obj.search([
- ('backend_id', 'in', [ids]),
- ]).recompute_prestashop_qty()
+ quantity_vals = self.get_quantity_vals(template)
+ adapter.export_quantity(filter, quantity_vals)
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 936f8517c..e83cc5d9a 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -122,13 +122,10 @@ def odoo_id(self, record):
# [('default_code', '=', record['reference'])], limit=1)
# if product:
# return {'odoo_id': product.id}
-
-
if self.backend_record.matching_product_template:
if self.has_combinations(record):
#Browse combinations for matching products and find if there
#is a potential template to be matched
-
template = self.env['product.template']
associations = record.get('associations', {})
combinations = associations.get('combinations', {}).get(
@@ -141,17 +138,14 @@ def odoo_id(self, record):
BackendAdapter, 'prestashop.product.combination')
variant = backend_adapter.read(int(prod['id']))
code = variant.get(self.backend_record.matching_product_ch)
-
if self.backend_record.matching_product_ch == 'reference':
product = self.env['product.product'].search(
[('default_code', '=', code)])
-
if len(product) > 1 :
raise ValidationError(_('Error! Multiple products '
'found with combinations reference %s.'
'Maybe consider to update you datas') % code)
template |= product.product_tmpl_id
-
if self.backend_record.matching_product_ch == 'barcode':
product = self.env['product.product'].search(
[('barcode', '=', code)])
@@ -160,7 +154,6 @@ def odoo_id(self, record):
'found with combinations reference %s.'
'Maybe consider to update you datas') % code)
template |= product.product_tmpl_id
-
_logger.debug('template %s' % template)
if len(template) == 1:
return {'odoo_id': template.id}
@@ -168,10 +161,9 @@ def odoo_id(self, record):
raise ValidationError(_('Error! Multiple templates are '
'found with combinations reference.'
'Maybe consider to change matching option'))
-
else:
code = record.get(self.backend_record.matching_product_ch)
- if self.backend_record.matching_product_ch == 'reference':
+ if self.backend_record.matching_product_ch == 'reference':
if code:
if self._template_code_exists(code):
product = self.env['product.template'].search(
@@ -186,12 +178,7 @@ def odoo_id(self, record):
[('barcode', '=', code)], limit=1)
if product:
return {'odoo_id': product.id}
-
-
- return {}
-
-
-
+ return {}
def _template_code_exists(self, code):
model = self.session.env['product.template']
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 918f1555a..94c73834f 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -2,9 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import openerp.addons.decimal_precision as dp
-
from odoo import models, fields, api, _
-
+from odoo.addons.queue_job.job import job, related_action
from odoo.addons.component.core import Component
import logging
@@ -76,20 +75,47 @@ def import_orders_since(self, backend, since_date=None, **kwargs):
priority=5, max_retries=0).import_batch(backend, filters=filters)
if since_date:
filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
-# try:
-# self.env['prestashop.mail.message'].import_batch(backend, filters)
-# except Exception as error:
-# msg = _(
-# 'Mail messages import failed with filters `%s`. '
-# 'Error: `%s`'
-# ) % (str(filters), str(error))
-# backend.add_checkpoint(
-# message=msg
-# )
+ self.env['prestashop.mail.message'].import_batch(backend, filters)
backend.import_orders_since = now_fmt
return True
+ @job(default_channel='root.prestashop')
+ @related_action(action='related_action_unwrap_binding')
+ @api.multi
+ def export_tracking_number(self):
+ """ Export the tracking number of a delivery order. """
+ self.ensure_one()
+ with self.backend_id.work_on(self._name) as work:
+ exporter = work.component(usage='tracking.exporter')
+ return exporter.run(self)
+
+ @api.multi
+ def find_prestashop_state(self):
+ self.ensure_one()
+ state_list_model = self.env['sale.order.state.list']
+ state_lists = state_list_model.search(
+ [('name', '=', self.state)]
+ )
+ for state_list in state_lists:
+ if state_list.prestashop_state_id.backend_id == self.backend_id:
+ return state_list.prestashop_state_id.prestashop_id
+ return None
+
+
+ @job(default_channel='root.prestashop')
+ @related_action(action='related_action_unwrap_binding')
+ @api.multi
+ def export_sale_state(self):
+ for sale in self:
+ backend = sale.backend_id
+ new_state = sale.find_prestashop_state()
+ if not new_state:
+ continue
+ with sale.backend_id.work_on(self._name) as work:
+ exporter = work.component(usage='sale.order.state.exporter')
+ return exporter.run(self, new_state)
+
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@@ -169,6 +195,11 @@ class OrderPaymentModel(models.TransientModel):
_name = '__not_exist_prestashop.payment'
+class OrderCarrierModel(models.TransientModel):
+ # In actual connector version is mandatory use a model
+ _name = '__not_exit_prestashop.order_carrier'
+
+
class SaleOrderAdapter(Component):
_name = 'prestashop.sale.order.adapter'
_inherit = 'prestashop.adapter'
@@ -199,3 +230,21 @@ class OrderDiscountAdapter(Component):
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.line.discount'
_prestashop_model = 'order_discounts'
+
+
+class PrestashopSaleOrderListener(Component):
+ _name = 'prestashop.sale.order.listener'
+ _inherit = 'base.event.listener'
+ _apply_on = ['sale.order']
+
+ def on_record_write(self, record, fields=None):
+ if 'state' in fields:
+ if not record.prestashop_bind_ids:
+ return
+ # a quick test to see if it is worth trying to export sale state
+ states = self.env['sale.order.state.list'].search(
+ [('name', '=', record.state)]
+ )
+ if states:
+ for binding in record.prestashop_bind_ids:
+ binding.with_delay(priority=20).export_sale_state()
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 5367bb1ae..259b827d8 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -1,15 +1,13 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
+import pytz
from odoo import _, fields
-from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping
from odoo.addons.queue_job.exception import FailedJobError, NothingToDoJob
from odoo.addons.connector_ecommerce.components.sale_order_onchange import (
SaleOrderOnChange,
)
-from ...components.importer import import_batch
from ...components.exception import OrderImportRuleRetry
from datetime import datetime, timedelta
@@ -145,7 +143,6 @@ class SaleOrderImportMapper(Component):
_apply_on = 'prestashop.sale.order'
direct = [
- ('date_add', 'date_order'),
('invoice_number', 'prestashop_invoice_number'),
('delivery_number', 'prestashop_delivery_number'),
('total_paid', 'total_amount'),
@@ -275,6 +272,14 @@ def total_tax_amount(self, record):
float(record['total_paid_tax_excl']))
return {'total_amount_tax': tax}
+ @mapping
+ def date_order(self, record):
+ local = pytz.timezone(self.backend_record.tz)
+ naive = fields.Datetime.from_string(record['date_add'])
+ local_dt = local.localize(naive, is_dst=None)
+ date_order = fields.Datetime.to_string(local_dt.astimezone(pytz.utc))
+ return {'date_order': date_order}
+
def finalize(self, map_record, values):
onchange = self.component('ecommerce.onchange.manager.sale.order')
return onchange.play(values, values['prestashop_order_line_ids'])
@@ -339,6 +344,12 @@ def _add_shipping_line(self, binding):
)
binding.odoo_id.recompute()
+ def _create(self, data):
+ binding = super(SaleOrderImporter, self)._create(data)
+ if binding.fiscal_position_id:
+ binding.odoo_id._compute_tax_id()
+ return binding
+
def _after_import(self, binding):
super(SaleOrderImporter, self)._after_import(binding)
self._add_shipping_line(binding)
@@ -418,7 +429,8 @@ def product_id(self, record):
template = binder.to_internal(record['product_id'], unwrap=True)
product = self.env['product.product'].search([
('product_tmpl_id', '=', template.id),
- ('company_id', '=', self.backend_record.company_id.id)],
+ '|', ('company_id', '=', self.backend_record.company_id.id),
+ ('company_id', '=', False)],
limit=1,
)
if not product:
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 8102a1711..30571fdf5 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -48,12 +48,12 @@ class SaleOrderStateList(models.Model):
_name = 'sale.order.state.list'
name = fields.Selection(
- [
+ selection=[
('draft', 'Quotation'),
('sent', 'Quotation Sent'),
+ ('sale', 'Sales Order'),
+ ('done', 'Locked'),
('cancel', 'Cancelled'),
- ('sale', 'Sale Order'),
- ('done', 'Done')
],
string='Odoo Sales State',
required=True,
@@ -74,6 +74,6 @@ class SaleOrderStateAdapter(Component):
_name = 'prestashop.sale.order.state.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.state'
-
-
+
+
_prestashop_model = 'order_states'
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
index 13d104f46..9ac9f7e48 100644
--- a/connector_prestashop/models/sale_order_state/exporter.py
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -3,42 +3,21 @@
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.synchronizer import Exporter
+from odoo.addons.component.core import Component
-class SaleStateExporter(Exporter):
- _model_name = ['prestashop.sale.order']
+class SaleStateExporter(Component):
+ _name = 'prestashop.sale.order.state.exporter'
+ _inherit = 'prestashop.exporter'
+ _apply_on = ['prestashop.sale.order']
+ _usage = 'sale.order.state.exporter'
- def run(self, prestashop_id, state, **kwargs):
+
+ def run(self, binding, state, **kwargs):
datas = {
'order_history': {
- 'id_order': prestashop_id,
+ 'id_order': binding.prestashop_id,
'id_order_state': state,
}
}
- self.backend_adapter.update_sale_state(prestashop_id, datas)
-
-
-def find_prestashop_state(session, sale_state, backend):
- state_list_model = session.env['sale.order.state.list']
- state_lists = state_list_model.search(
- [('name', '=', sale_state)]
- )
- for state_list in state_lists:
- if state_list.prestashop_state_id.backend_id == backend:
- return state_list.prestashop_state_id.prestashop_id
- return None
-
-
-@job
-def export_sale_state(session, model_name, record_id):
- binding_model = session.env[model_name]
- sales = binding_model.search([('openerp_id', '=', record_id)])
- for sale in sales:
- backend = sale.backend_id
- new_state = find_prestashop_state(session, sale.state, backend)
- if not new_state:
- continue
- env = backend.get_environment(binding_model._name, session=session)
- sale_exporter = env.get_connector_unit(SaleStateExporter)
- sale_exporter.run(sale.prestashop_id, new_state)
+ self.backend_adapter.update_sale_state(binding.prestashop_id, datas)
diff --git a/connector_prestashop/models/stock_move/common.py b/connector_prestashop/models/stock_move/common.py
index f5407d1ca..e1fc5a233 100644
--- a/connector_prestashop/models/stock_move/common.py
+++ b/connector_prestashop/models/stock_move/common.py
@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
+from odoo.addons.component.core import Component
class StockLocation(models.Model):
@@ -51,3 +52,13 @@ def unlink(self):
self.filtered(lambda x: x.location_id in ps_locations).mapped(
'product_id').update_prestashop_qty()
return super(StockQuant, self).unlink()
+
+
+class PrestashopStockPickingListener(Component):
+ _name = 'prestashop.stock.picking.listener'
+ _inherit = 'base.event.listener'
+ _apply_on = ['stock.picking']
+
+ def on_tracking_number_added(self, record):
+ for binding in record.sale_id.prestashop_bind_ids:
+ binding.with_delay().export_tracking_number()
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index a70730043..18bb33a1f 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -1,18 +1,15 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-import logging
-from odoo import _
-from odoo.addons.connector.unit.synchronizer import Exporter
-from odoo.exceptions import UserError
-from odoo.addons.queue_job.job import job
-from ...components.backend_adapter import PrestaShopCRUDAdapter
+from odoo.addons.component.core import Component
+from odoo.addons.queue_job.exception import FailedJobError
-_logger = logging.getLogger(__name__)
-
-class PrestashopTrackingExporter(Exporter):
- _model_name = ['prestashop.sale.order']
+class PrestashopTrackingExporter(Component):
+ _name = 'prestashop.stock.tracking.exporter'
+ _inherit = 'prestashop.exporter'
+ _apply_on = ['prestashop.sale.order']
+ _usage = 'tracking.exporter'
def _get_tracking(self):
trackings = []
@@ -21,14 +18,13 @@ def _get_tracking(self):
trackings.append(picking.carrier_tracking_ref)
return ';'.join(trackings) if trackings else None
- def run(self, binding_id, **kwargs):
+ def run(self, binding, **kwargs):
""" Export the tracking number of a picking to PrestaShop """
# verify the picking is done + prestashop id exists
tracking_adapter = self.component(
usage='backend.adapter',
model_name='__not_exit_prestashop.order_carrier')
-
- self.binding = self.model.browse(binding_id)
+ self.binding = binding
tracking = self._get_tracking()
if tracking:
prestashop_order_id = self.binder.to_external(self.binding)
@@ -43,18 +39,6 @@ def run(self, binding_id, **kwargs):
tracking_adapter.write(order_carrier_id, vals)
return "Tracking %s exported" % tracking
else:
- raise exceptions.Warning(
- _('PrestaShop Error'),
- _('No carrier found on sale order'))
+ raise FailedJobError('No carrier found on sale order')
else:
return "No tracking to export"
-
-
-@job
-def export_tracking_number(session, model_name, record_id):
- """ Export the tracking number of a delivery order. """
- order = session.env[model_name].browse(record_id)
- backend = order.backend_id
- env = backend.get_environment(model_name, session=session)
- tracking_exporter = env.get_connector_unit(PrestashopTrackingExporter)
- return tracking_exporter.run(record_id)
diff --git a/connector_prestashop/security/ir.model.access.csv b/connector_prestashop/security/ir.model.access.csv
index 7303207a1..94950dd40 100644
--- a/connector_prestashop/security/ir.model.access.csv
+++ b/connector_prestashop/security/ir.model.access.csv
@@ -23,8 +23,9 @@ access_prestashop_sale_order_line_full,Full access on prestashop.sale.order.line
access_prestashop_sale_order_line_discount_user,User access on prestashop.sale.order.line.discount,model_prestashop_sale_order_line_discount,base.group_user,1,0,0,0
access_prestashop_sale_order_line_discount_full,Full access on prestashop.sale.order.line.discount,model_prestashop_sale_order_line_discount,connector.group_connector_manager,1,1,1,1
access_prestashop_delivery_carrier_full,Full access on prestashop.delivery.carrier,model_prestashop_delivery_carrier,connector.group_connector_manager,1,1,1,1
-access_prestashop_product_category_full,Full access on prestashop.product.category,model_prestashop_product_category,connector.group_connector_manager,1,1,1,1
access_prestashop_product_category_user,User access on prestashop.product.category,model_prestashop_product_category,base.group_user,1,0,0,0
+access_prestashop_product_category_full,Full access on prestashop.product.category,model_prestashop_product_category,connector.group_connector_manager,1,1,1,1
+access_prestashop_product_image_user,User access on prestashop.product.image,model_prestashop_product_image,base.group_user,1,0,0,0
access_prestashop_product_image_full,Full access on prestashop.product.image,model_prestashop_product_image,connector.group_connector_manager,1,1,1,1
access_prestashop_product_template_user,User access on prestashop.product.template,model_prestashop_product_template,base.group_user,1,0,0,0
access_prestashop_product_template,Full access on prestashop.product.template,model_prestashop_product_template,connector.group_connector_manager,1,1,1,1
@@ -41,3 +42,12 @@ access_prestashop_product_supplierinfo_user,User access on prestashop.product.su
access_prestashop_product_supplierinfo,Full access on prestashop.product.supplierinfo,model_prestashop_product_supplierinfo,connector.group_connector_manager,1,1,1,1
access_mail_message,Full access on prestashop.mail.message,model_prestashop_mail_message,connector.group_connector_manager,1,1,1,1
access_prestashop_groups_pricelist,Full access on prestashop.groups.pricelist,model_prestashop_groups_pricelist,connector.group_connector_manager,1,1,1,1
+access_prestashop_backend_user,User access on prestashop.backend,model_prestashop_backend,base.group_user,1,0,0,0
+access_prestashop_address_user,prestashop_address user,model_prestashop_address,base.group_user,1,0,0,0
+access_sale_order_state_user,sale_order_state user,model_sale_order_state,base.group_user,1,0,0,0
+access_sale_order_state_list_user,sale_order_state_list user,model_sale_order_state_list,base.group_user,1,0,0,0
+access_prestashop_sale_order_state_user,prestashop_sale_order_state user,model_prestashop_sale_order_state,base.group_user,1,0,0,0
+access_prestashop_account_tax_user,User access on prestashop.account.tax,model_prestashop_account_tax,base.group_user,1,0,0,0
+access_prestashop_account_tax_group_user,User access on prestashop.account.tax.group,model_prestashop_account_tax_group,base.group_user,1,0,0,0
+access_prestashop_res_lang_user,User access on prestashop.res.lang,model_prestashop_res_lang,base.group_user,1,0,0,0
+access_prestashop_shop_user,User access on prestashop.shop,model_prestashop_shop,base.group_user,1,0,0,0
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
index a8e6bf3b1..a155f4e8a 100644
--- a/connector_prestashop/views/prestashop_backend_view.xml
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -55,6 +55,7 @@
+
@@ -190,10 +191,10 @@
-
+
+
+
+
diff --git a/connector_prestashop/views/product_view.xml b/connector_prestashop/views/product_view.xml
index 070e903f2..0f6d3acd6 100644
--- a/connector_prestashop/views/product_view.xml
+++ b/connector_prestashop/views/product_view.xml
@@ -94,9 +94,9 @@
@@ -156,6 +159,7 @@
+
Date: Mon, 16 Jul 2018 18:18:24 +0200
Subject: [PATCH 13/99] [FIX] connector_prestashop: Several fixes
* Do not import product template stock into product variants
* Update combination quantity when variant stock changes
* Set variant images also for default combination
* Import supplier prices
* Do not duplicate payment modes for each language
* connector_prestashop: Do not set default product taxes if they are unset in Prestashop
---
.../models/account_payment_mode/common.py | 12 +++++++-----
.../models/product_product/common.py | 12 ++++++++++--
.../models/product_supplierinfo/importer.py | 7 +++++++
.../models/product_template/importer.py | 11 ++++++++++-
connector_prestashop/models/sale_order/importer.py | 4 +---
5 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/connector_prestashop/models/account_payment_mode/common.py b/connector_prestashop/models/account_payment_mode/common.py
index b7b807f4c..db7ef4701 100644
--- a/connector_prestashop/models/account_payment_mode/common.py
+++ b/connector_prestashop/models/account_payment_mode/common.py
@@ -34,11 +34,13 @@ class PaymentModeBinder(Component):
def to_internal(self, external_id, unwrap=False, company=None):
if company is None:
company = self.backend_record.company_id
- bindings = self.model.with_context(active_test=False).search(
- [(self._external_field, '=', external_id),
- ('company_id', '=', company.id),
- ]
- )
+ bindings = self.model
+ for language in self.backend_record.language_ids:
+ bindings |= self.model.with_context(
+ active_test=False,
+ lang=language.code).search([
+ (self._external_field, '=', external_id),
+ ('company_id', '=', company.id)])
if not bindings:
return self.model.browse()
bindings.ensure_one()
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index d121d9574..faf44d301 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -26,8 +26,16 @@ class ProductProduct(models.Model):
@api.multi
def update_prestashop_qty(self):
for product in self:
- for combination_binding in product.prestashop_bind_ids:
- combination_binding.recompute_prestashop_qty()
+ if product.product_variant_count > 1:
+ # Recompute qty in combination binding
+ for combination_binding in \
+ product.prestashop_combinations_bind_ids:
+ combination_binding.recompute_prestashop_qty()
+ # Recompute qty in product template binding if any combination
+ # if modified
+ for prestashop_product in \
+ product.product_tmpl_id.prestashop_bind_ids:
+ prestashop_product.recompute_prestashop_qty()
@api.multi
def update_prestashop_quantities(self):
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 39e40e825..e7bd0e23f 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -98,6 +98,7 @@ class SupplierInfoMapper(Component):
direct = [
('product_supplier_reference', 'product_code'),
+ ('product_supplier_price_te', 'price'),
]
@mapping
@@ -131,6 +132,12 @@ def product_tmpl_id(self, record):
template = binder.to_internal(record['id_product'], unwrap=True)
return {'product_tmpl_id': template.id}
+ @mapping
+ def currency_id(self, record):
+ binder = self.binder_for('prestashop.res.currency')
+ currency = binder.to_internal(record['id_currency'], unwrap=True)
+ return {'currency_id': currency.id}
+
@mapping
def required(self, record):
return {'min_qty': 0.0, 'delay': 1}
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index e83cc5d9a..83c0a4b5e 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -396,6 +396,15 @@ def run(self, filters=None, **kwargs):
def _run_page(self, filters, **kwargs):
records = self.backend_adapter.get(filters)
for record in records['stock_availables']['stock_available']:
+ # if product has combinations then do not import product stock
+ # since combination stocks will be imported
+ if record['id_product_attribute'] == '0':
+ combination_stock_ids = self.backend_adapter.search({
+ 'filter[id_product]': record['id_product'],
+ 'filter[id_product_attribute]': '>[0]',
+ })
+ if combination_stock_ids:
+ continue
self._import_record(record['id'], record=record, **kwargs)
return records['stock_availables']['stock_available']
@@ -601,7 +610,7 @@ def import_combinations(self):
self._import_combination(combination)
if combinations and associations['images'].get('image'):
- self._delay_product_image_variant(combinations)
+ self._delay_product_image_variant([first_exec] + combinations)
def import_images(self, binding):
prestashop_record = self._get_prestashop_data()
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 259b827d8..46657f9a3 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -453,9 +453,7 @@ def tax_id(self, record):
result = self.env['account.tax'].browse()
for ps_tax in taxes:
result |= self._find_tax(ps_tax['id'])
- if result:
- return {'tax_id': [(6, 0, result.ids)]}
- return {}
+ return {'tax_id': [(6, 0, result.ids)]}
@mapping
def backend_id(self, record):
From 791c3c1105c4801971e54092327c06adde779bc3 Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Tue, 14 Aug 2018 19:01:07 +0200
Subject: [PATCH 14/99] Improve partner import performance
---
connector_prestashop/models/res_partner/importer.py | 4 ----
1 file changed, 4 deletions(-)
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 58b05ad0c..6551536b1 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -83,10 +83,6 @@ def groups(self, record):
for b in partner_category_bindings]}
return result
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
-
@mapping
def lang(self, record):
binder = self.binder_for('prestashop.res.lang')
From 283b46fb37c35c3cdc9781b15f2b90546fad4613 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Tue, 21 Aug 2018 13:16:40 +0200
Subject: [PATCH 15/99] [FIX] connect_prestashop: Merge conflicts
Due to the total mess on commit history, I finally ended resolving merge conflicts
with automated tools and this is the final diff for letting things as they were.
---
.../components/auto_matching_importer.py | 4 --
connector_prestashop/components/importer.py | 9 ---
.../components/version_key.py | 20 ------
.../models/account_invoice/importer.py | 4 +-
.../models/delivery_carrier/common.py | 14 ----
.../models/prestashop_backend/importer.py | 2 +-
.../models/product_category/importer.py | 8 +--
.../models/product_image/importer.py | 7 --
.../models/product_pricelist/common.py | 3 +-
.../models/product_product/importer.py | 10 ++-
.../models/product_supplierinfo/importer.py | 7 +-
.../models/product_template/importer.py | 34 +++++-----
.../models/res_country/common.py | 1 -
.../models/res_country/importer.py | 4 +-
.../models/res_currency/common.py | 4 +-
.../models/res_currency/importer.py | 2 +
.../models/res_lang/common.py | 4 +-
.../models/res_lang/importer.py | 3 +-
.../models/res_partner/common.py | 2 -
.../models/res_partner/importer.py | 67 +++----------------
.../models/res_partner_category/common.py | 1 -
.../models/res_partner_category/importer.py | 6 +-
.../models/sale_order/importer.py | 4 +-
.../models/sale_order_state/common.py | 2 -
.../models/sale_order_state/importer.py | 30 +++------
.../models/stock_tracking/common.py | 5 +-
.../models/stock_warehouse/importer.py | 1 +
27 files changed, 60 insertions(+), 198 deletions(-)
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 5d1b0904d..85cee4b73 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -3,7 +3,6 @@
import logging
-from odoo.addons.connector.unit.backend_adapter import BackendAdapter
from odoo.addons.component.core import Component
from odoo import _, exceptions
@@ -16,7 +15,6 @@ class AutoMatchingImporter(Component):
_inherit = 'prestashop.importer'
_usage = 'auto.matching.importer'
- _model_name = None
_erp_field = None
_ps_field = None
_copy_fields = []
@@ -37,8 +35,6 @@ def run(self):
model = self.env[erp_model_name].with_context(active_test=False)
erp_ids = model.search([])
erp_list_dict = erp_ids.read()
-
-
adapter = self.component(usage='backend.adapter')
# Get the IDS from PS
ps_ids = adapter.search()
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index 88136edd1..1617f29ed 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -60,16 +60,7 @@ class or parent class to use for the export.
importer_class = PrestashopImporter
binder = self.binder_for(binding_model)
if always or not binder.to_internal(prestashop_id):
-<<<<<<< HEAD
-<<<<<<< HEAD
- importer = self.component(usage='prestashop.importer', model_name=binding_model)
-=======
-
- importer = self.unit_for(importer_class, model=binding_model)
->>>>>>> 29848b8... [REF]Migrate new components structure
-=======
importer = self.component(usage='record.importer', model_name=binding_model)
->>>>>>> 6855cf5... [FIX] component usage
importer.run(prestashop_id, **kwargs)
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index b72b709ca..c3fb47d19 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -4,25 +4,17 @@
from odoo import models
from odoo.addons.component.core import Component
-from ..backend import prestashop, prestashop_1_6_0_9, prestashop_1_6_1_2
-<<<<<<< HEAD
class VersionKeyModel(models.TransientModel):
# In actual connector version is mandatory use a model
_name = '_prestashop.version.key'
-@prestashop
class VersionKey(Component):
_name = '_prestashop.version.key'
_apply_on = '_prestashop.version.key'
_usage = 'prestashop.version.key'
-=======
-# # @prestashop
-class VersionKey(ConnectorUnit):
- _model_name = '_prestashop.version.key'
->>>>>>> e218fce... ADD WIP for PR Akretion
keys = {
'messages': 'customer_messages',
@@ -32,16 +24,10 @@ def get_key(self, key):
return self.keys.get(key) or key
-<<<<<<< HEAD
-@prestashop_1_6_0_9
class VersionKey_1_6_0_9(Component):
_name = '_prestashop.version.key.1.6.0.9'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.0.9'
-=======
-# # @prestashop_1_6_0_9
-class VersionKey_1_6_0_9(VersionKey):
->>>>>>> e218fce... ADD WIP for PR Akretion
keys = {
'product_option_value': 'product_option_values',
@@ -58,16 +44,10 @@ class VersionKey_1_6_0_9(VersionKey):
}
-<<<<<<< HEAD
-@prestashop_1_6_1_2
class VersionKey_1_6_1_2(Component):
_name = '_prestashop.version.key.1.6.1.2'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.1.2'
-=======
-# # @prestashop_1_6_1_2
-class VersionKey_1_6_1_2(VersionKey):
->>>>>>> e218fce... ADD WIP for PR Akretion
# keys checked in 1.6.1.9:
# * customer_messages
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 8676d7a22..26042391a 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -5,9 +5,8 @@
from odoo.addons.connector.exception import MappingError
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (
+from odoo.addons.connector.components.mapper import (
mapping,
- ImportMapper,
only_create,
)
from ...components.importer import (
@@ -252,4 +251,3 @@ class RefundBatchImporter(Component):
_apply_on = 'prestashop.refund'
_model_name = 'prestashop.refund'
-
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index eed90135b..e202cc256 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -43,20 +43,6 @@ class PrestashopDeliveryCarrier(models.Model):
'An ERP record with same ID already exists on PrestaShop with the same id_reference'),
]
-<<<<<<< HEAD
-=======
- #Check with @bguillot where is it now
- #https://github.com/Tecnativa/connector-prestashop/pull/6/files#diff-befe8c6495c83e59d4cc839009d90adaL41
- def import_carriers(self, backend, **kwargs):
- return import_batch(
- session,
- 'prestashop.delivery.carrier',
- backend_id,
- priority=5,
- **kwargs
- )
-
->>>>>>> 96513fd... Add WIP for PR Akretion
class DeliveryCarrier(models.Model):
_inherit = "delivery.carrier"
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index c6c2fb5f5..83d83e121 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -2,8 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
-from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
class MetadataBatchImporter(Component):
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index f10bb2bc0..bd78468a9 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -3,15 +3,9 @@
from odoo import _
-
-#from ...components.importer import TranslatableRecordImporter, DelayedBatchImporter
-
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping, external_to_m2o
-
-
-
import datetime
import logging
_logger = logging.getLogger(__name__)
@@ -72,7 +66,7 @@ def data_upd(self, record):
return {'date_upd': record['date_upd']}
-class ProductCategoryImporter(TranslatableRecordImporter):
+class ProductCategoryImporter(Component):
_name = 'prestashop.product.category.importer'
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.product.category'
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 71326c6a4..e74224ea9 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -7,7 +7,6 @@
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping, external_to_m2o
-
import mimetypes
import logging
@@ -98,10 +97,4 @@ def run(self, template_id, image_id, **kwargs):
'with id `%s` failed. '
'Error: `%s`'
) % (image_id, template_id, error.msg)
-<<<<<<< HEAD
- self.backend_record.add_checkpoint(message=msg)
-
-
-=======
self.backend_record.add_checkpoint()
->>>>>>> 2a5e0f4... Clean the add_checkpoint part
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index c1468e8d2..513a1ea47 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -5,6 +5,7 @@
from odoo.addons.component.core import Component
+
class ProductPricelist(models.Model):
_inherit = 'product.pricelist'
@@ -37,6 +38,4 @@ class PricelistAdapter(Component):
_name = 'prestashop.groups.pricelist.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.groups.pricelist'
-
-
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 8454792e8..8a9da7971 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -87,10 +87,8 @@ def import_supplierinfo(self, binding):
# 'filter[id_product]': ps_id,
'filter[id_product_attribute]': ps_id
}
- import_batch(
- self.session,
- 'prestashop.product.supplierinfo',
- self.backend_record.id,
+ self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
+ self.backend_record,
filters=filters
)
ps_product_template = binding
@@ -183,7 +181,7 @@ def main_template_id(self, record):
return {'main_template_id': template_binding.id}
def _template_code_exists(self, code):
- model = self.session.env['product.product']
+ model = self.env['product.product']
combination_binder = self.binder_for('prestashop.product.combination')
template_ids = model.search([
('default_code', '=', code),
@@ -216,7 +214,7 @@ def barcode(self, record):
check_ean = self.env['barcode.nomenclature'].check_ean
if barcode in ['', '0']:
backend_adapter = self.component(
- usage='prestashop.adapter',
+ usage='backend.adapter',
model_name='prestashop.product.template'
)
template = backend_adapter.read(record['id_product'])
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index e7bd0e23f..14a6fb573 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -76,12 +76,9 @@ def _after_import(self, binding):
super(SupplierImporter, self)._after_import(binding)
binder = self.binder_for()
ps_id = binder.to_external(binding)
- import_batch(
- self.session,
- 'prestashop.product.supplierinfo',
- self.backend_record.id,
+ self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
+ self.backend_record,
filters={'filter[id_supplier]': '%d' % ps_id},
- priority=10,
)
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 83c0a4b5e..1a5136753 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -78,7 +78,7 @@ def tags_to_text(self, record):
tags = associations.get('tags', {}).get(
self.backend_record.get_version_ps_key('tag'), [])
tag_adapter = self.component(
- usage='prestashop.adapter', model_name='_prestashop_product_tag'
+ usage='backend.adapter', model_name='_prestashop_product_tag'
)
if not isinstance(tags, list):
tags = [tags]
@@ -181,7 +181,7 @@ def odoo_id(self, record):
return {}
def _template_code_exists(self, code):
- model = self.session.env['product.template']
+ model = self.env['product.template']
template_ids = model.search([
('default_code', '=', code),
('company_id', '=', self.backend_record.company_id.id),
@@ -343,18 +343,6 @@ def extras_features(self, record):
return {}
-class ManufacturerProductImportMapper(Component):
- # To extend in connector_prestashop_manufacturer module. In this way we
- # dependencies on other modules like product_manufacturer
- _name = 'prestashop.manufacturer.product.template.mapper'
- _inherit = 'prestashop.product.template.mapper'
- _apply_on = 'prestashop.product.template'
- _usage = 'manufacturer.product.import.mapper'
-
- def import_manufacturer(self, manufacturer_id):
- return
-
-
class ManufacturerProductImportMapper(Component):
# To extend in connector_prestashop_manufacturer module. In this way we
# dependencies on other modules like product_manufacturer
@@ -633,10 +621,8 @@ def import_supplierinfo(self, binding):
'filter[id_product]': ps_id,
'filter[id_product_attribute]': 0
}
- import_batch(
- self.session,
- 'prestashop.product.supplierinfo',
- self.backend_record.id,
+ self.env['prestashop.product.supplierinfo'].with_delay().import_batch(
+ self.backend_record,
filters=filters
)
ps_product_template = binding
@@ -687,6 +673,18 @@ def _import_categories(self):
'prestashop.product.category')
+class ManufacturerProductDependency(Component):
+ # To extend in connector_prestashop_feature module. In this way we
+ # dependencies on other modules like product_manufacturer
+ _name = 'prestashop.product.template.manufacturer.importer'
+ _inherit = 'prestashop.product.template.importer'
+ _apply_on = 'prestashop.product.template'
+ _usage = 'manufacturer.product.importer'
+
+ def import_manufacturer(self, manufacturer_id):
+ return
+
+
class ProductTemplateBatchImporter(Component):
_name = 'prestashop.product.template.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index 56dfdf327..9800e259a 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -38,5 +38,4 @@ class ResCountryAdapter(Component):
_name = 'prestashop.res.country.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.country'
-
_prestashop_model = 'countries'
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index e48c2e892..769ec9c2f 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.auto_matching_importer import AutoMatchingImporter
-from ...backend import prestashop
+from odoo.addons.component.core import Component
class CountryImporter(Component):
_name = 'prestashop.res.country.importer'
+ _inherit= 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.country'
_erp_field = 'code'
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 16350a4e8..484ae3adc 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from odoo import fields, models
from odoo.addons.component.core import Component
+
class PrestashopResCurrency(models.Model):
_name = 'prestashop.res.currency'
_inherit = 'prestashop.binding'
@@ -34,9 +34,9 @@ class ResCurrency(models.Model):
readonly=True
)
+
class ResCurrencyAdapter(Component):
_name = 'prestashop.res.currency.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.currency'
-
_prestashop_model = 'currencies'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index 4af9acd65..bc3f832ed 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
+from odoo.addons.component.core import Component
class ResCurrencyImporter(Component):
_name = 'prestashop.res.currency.importer'
+ _inherit= 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.currency'
_erp_field = 'name'
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index 3f3d649fa..2381bf9d0 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -1,11 +1,10 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-
from odoo import models, fields
-
from odoo.addons.component.core import Component
+
class PrestashopResLang(models.Model):
_name = 'prestashop.res.lang'
_inherit = 'prestashop.binding'
@@ -43,5 +42,4 @@ class ResLangAdapter(Component):
_name = 'prestashop.res.lang.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.lang'
-
_prestashop_model = 'languages'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index d222f0984..d28338d45 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -1,10 +1,11 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from ...components.auto_matching_importer import AutoMatchingImporter
+from odoo.addons.component.core import Component
class LangImporter(Component):
_name = 'prestashop.res.lang.importer'
+ _inherit= 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.lang'
_erp_field = 'code'
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index c9a9eedbc..d45355b7e 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -161,7 +161,6 @@ class PartnerAdapter(Component):
_name = 'prestashop.res.partner.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.partner'
-
_prestashop_model = 'customers'
@@ -169,5 +168,4 @@ class PartnerAddressAdapter(Component):
_name = 'prestashop.address.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.address'
-
_prestashop_model = 'addresses'
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 6551536b1..0af29437e 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -5,18 +5,6 @@
from odoo import fields, _
from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.mapper import (
- ImportMapper,
- mapping,
- only_create,
-)
-from ...components.importer import (
- PrestashopImporter,
- import_batch,
- DelayedBatchImporter,
-)
-# from ...backend import prestashop
-# from odoo.addons.connector.unit.mapper import external_to_m2o
from odoo.addons.connector.checkpoint import checkpoint
@@ -25,12 +13,10 @@
mapping, external_to_m2o, only_create)
-# # @prestashop
class PartnerImportMapper(Component):
- #_model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.mapper'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.res.partner']
+ _apply_on = 'prestashop.res.partner'
direct = [
('date_add', 'date_add'),
@@ -102,14 +88,10 @@ def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
-# # @prestashop
class ResPartnerImporter(Component):
- #_model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.importer'
_inherit = 'prestashop.importer'
- _apply_on = ['prestashop.res.partner']
-
-
+ _apply_on = 'prestashop.res.partner'
def _import_dependencies(self):
groups = self.prestashop_record.get('associations', {}) \
@@ -130,22 +112,16 @@ def _after_import(self, binding):
filters={'filter[id_customer]': '%d' % (ps_id,)})
-# # @prestashop
class PartnerBatchImporter(Component):
-# _model_name = 'prestashop.res.partner'
_name = 'prestashop.res.partner.batch.importer'
_inherit = 'prestashop.delayed.batch.importer'
- _apply_on = ['prestashop.res.partner']
+ _apply_on = 'prestashop.res.partner'
-
-# # @prestashop
class AddressImportMapper(Component):
- #_model_name = 'prestashop.address'
- _name = 'prestashop.address.mapper'
+ _name = 'prestashop.address.mappper'
_inherit = 'prestashop.import.mapper'
- _apply_on = ['prestashop.address']
-
+ _apply_on = 'prestashop.address'
direct = [
('address1', 'street'),
@@ -202,14 +178,10 @@ def type(self, record):
return {'type': 'other'}
-# # @prestashop
class AddressImporter(Component):
-# _model_name = 'prestashop.address'
_name = 'prestashop.address.importer'
_inherit = 'prestashop.importer'
- _apply_on = ['prestashop.address']
-
-
+ _apply_on = 'prestashop.address'
def _check_vat(self, vat):
vat_country, vat_number = vat[:2].lower(), vat[2:]
@@ -240,28 +212,7 @@ def _after_import(self, binding):
)
-# # @prestashop
class AddressBatchImporter(Component):
- #_model_name = 'prestashop.address'
- _name = 'prestashop.address.mapper'
- _inherit = 'prestashop.delayed.batch.importer'
- _apply_on = ['prestashop.address']
-
-
-
-@job(default_channel='root.prestashop')
-def import_customers_since(env, since_date=None, **kwargs):
- """ Prepare the import of partners modified on PrestaShop """
- filters = None
- if since_date:
- filters = {
- 'date': '1',
- 'filter[date_upd]': '>[%s]' % since_date}
- now_fmt = fields.Datetime.now()
- result = import_batch(env, filters, **kwargs) or ''
- result += import_batch(env, filters, priority=15, **kwargs) or ''
- env.backend_record.import_partners_since = now_fmt
- # env['prestashop.backend'].browse(backend_id).write({
- # 'import_partners_since': now_fmt,
- # })
- return result
+ _name = 'prestashop.address.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.address'
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index 4a972f611..7c7eaa8b5 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -50,5 +50,4 @@ class PartnerCategoryAdapter(Component):
_name = 'prestashop.res.partner.category.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.res.partner.category'
-
_prestashop_model = 'groups'
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index c304a8f60..233fbffee 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -44,9 +44,7 @@ def _after_import(self, binding):
super(PartnerCategoryImporter, self)._after_import(binding)
record = self.prestashop_record
if float(record['reduction']):
- import_record(
- self.session,
- 'prestashop.groups.pricelist',
- self.backend_record.id,
+ self.env['prestashop.groups.pricelist'].import_record(
+ self.backend_record,
record['id']
)
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 46657f9a3..35aeb644b 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -162,7 +162,7 @@ def _get_discounts_lines(self, record):
if record['total_discounts'] == '0.00':
return []
adapter = self.component(
- usage='prestashop.adapter',
+ usage='backend.adapter',
model_name='prestashop.sale.order.line.discount'
)
discount_ids = adapter.search({'filter[id_order]': record['id']})
@@ -193,7 +193,7 @@ def _map_child(self, map_record, from_attr, to_attr, model_name):
)
detail_record = adapter.read(child_record['id'])
- mapper = self._get_map_child_unit(model_name)
+ mapper = self._get_map_child_component(model_name)
items = mapper.get_items(
[detail_record], map_record, to_attr, options=self.options
)
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 30571fdf5..5ecab535f 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -74,6 +74,4 @@ class SaleOrderStateAdapter(Component):
_name = 'prestashop.sale.order.state.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.sale.order.state'
-
-
_prestashop_model = 'order_states'
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index 93c865f73..d92264d15 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -1,11 +1,8 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-# from odoo.addons.connector.unit.mapper import ImportMapper, mapping
-# from ...components.importer import TranslatableRecordImporter, DirectBatchImporter
-# from ...backend import prestashop
-
-
+from odoo.addons.connector.components.mapper import mapping
+from odoo.addons.component.core import Component
class SaleOrderStateMapper(Component):
_name = 'prestashop.sale.order.state.mapper'
@@ -16,28 +13,16 @@ class SaleOrderStateMapper(Component):
('name', 'name'),
]
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
-
@mapping
def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
-
-
-class SaleOrderStateBatchImporter(Component):
- _name = 'prestashop.sale.order.state.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
- _apply_on = 'prestashop.sale.order.state'
-
-
class SaleOrderStateImporter(Component):
""" Import one translatable record """
- _model_name = [
- 'prestashop.sale.order.state',
- ]
+ _name = 'prestashop.sale.order.state.importer'
+ _inherit = 'prestashop.translatable.record.importer'
+ _apply_on = 'prestashop.sale.order.state'
_translatable_fields = {
'prestashop.sale.order.state': [
@@ -46,4 +31,7 @@ class SaleOrderStateImporter(Component):
}
-
+class SaleOrderStateBatchImporter(Component):
+ _name = 'prestashop.sale.order.state.batch.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'prestashop.sale.order.state'
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
index d47884706..1e1555fad 100644
--- a/connector_prestashop/models/stock_tracking/common.py
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -4,11 +4,10 @@
from odoo.addons.component.core import Component
-# # @prestashop
class OrderCarriers(Component):
- _name = '__not_exit_prestashop.order_carrier.adapter'
+ _name = 'prestashop.order_carrier.adapter'
_inherit = 'prestashop.adapter'
_apply_on = '__not_exit_prestashop.order_carrier'
-
+
_prestashop_model = 'order_carriers'
_export_node_name = 'order_carrier'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index dc98b04f9..d92c3aee4 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -4,6 +4,7 @@
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+
class ShopImportMapper(Component):
_name = 'prestashop.shop.mapper'
_inherit = 'prestashop.import.mapper'
From 73b29e4be5f06d47ecb00ffad8b4cdea7f9320d8 Mon Sep 17 00:00:00 2001
From: "@PlanetaTIC" <@PlanetaTIC>
Date: Thu, 6 Sep 2018 15:04:28 +0200
Subject: [PATCH 16/99] [FIX] connector_prestashop: Greenify branch
* :green_apple: flake8
* :green_apple: pylint
* :green_apple: tests
* :copyright: Add me as contributor
---
connector_prestashop/README.rst | 1 +
connector_prestashop/__manifest__.py | 4 +-
.../components/auto_matching_importer.py | 2 +-
.../components/backend_adapter.py | 4 +-
connector_prestashop/components/core.py | 1 -
connector_prestashop/components/deleter.py | 4 -
connector_prestashop/components/exporter.py | 7 +-
connector_prestashop/components/importer.py | 39 +-
connector_prestashop/components/listener.py | 7 +-
connector_prestashop/components/mapper.py | 4 +-
.../components/version_key.py | 4 +-
.../models/account_invoice/importer.py | 8 +-
.../models/account_tax/importer.py | 3 +-
connector_prestashop/models/binding/common.py | 6 +-
.../models/delivery_carrier/common.py | 5 +-
.../models/delivery_carrier/importer.py | 12 +-
.../models/mail_message/common.py | 5 +-
.../models/prestashop_backend/common.py | 99 ++-
.../models/prestashop_backend/importer.py | 3 -
.../models/prestashop_shop_group/common.py | 3 +-
.../models/prestashop_shop_group/importer.py | 3 +-
.../models/product_category/importer.py | 5 +-
.../models/product_image/__init__.py | 2 +-
.../models/product_image/common.py | 11 +-
.../models/product_image/importer.py | 4 +-
.../models/product_pricelist/importer.py | 6 +-
.../models/product_product/common.py | 1 -
.../models/product_product/importer.py | 45 +-
.../models/product_supplierinfo/common.py | 2 +
.../models/product_supplierinfo/importer.py | 8 -
.../models/product_template/common.py | 30 +-
.../models/product_template/importer.py | 75 ++-
.../models/queue_job/common.py | 5 +-
.../models/res_country/common.py | 1 +
.../models/res_country/importer.py | 3 +-
.../models/res_currency/importer.py | 3 +-
.../models/res_lang/importer.py | 3 +-
.../models/res_partner/common.py | 18 +-
.../models/res_partner/importer.py | 6 +-
.../models/sale_order/common.py | 9 +-
.../models/sale_order/importer.py | 18 +-
.../models/sale_order_state/exporter.py | 2 -
.../models/sale_order_state/importer.py | 1 +
.../models/stock_warehouse/importer.py | 4 -
connector_prestashop/tests/common.py | 6 +-
.../test_import_inventory_batch.yaml | 609 +++++++++++++-----
connector_prestashop/tests/test_auth.py | 6 +-
.../tests/test_export_stock_qty.py | 53 +-
.../tests/test_export_stock_qty_job.py | 14 +-
.../tests/test_export_tracking.py | 30 +-
.../tests/test_import_backend_data.py | 3 +-
.../tests/test_import_carrier.py | 30 +-
.../tests/test_import_inventory.py | 34 +-
.../tests/test_import_partner.py | 51 +-
.../tests/test_import_products.py | 52 +-
.../tests/test_import_sale.py | 23 +-
.../views/connector_prestashop_menu.xml | 152 ++---
.../views/prestashop_backend_view.xml | 544 ++++++++--------
58 files changed, 1151 insertions(+), 942 deletions(-)
diff --git a/connector_prestashop/README.rst b/connector_prestashop/README.rst
index 7eb601dd5..ec6d2b594 100644
--- a/connector_prestashop/README.rst
+++ b/connector_prestashop/README.rst
@@ -155,6 +155,7 @@ Contributors
* Pedro M. Baeza
* Simone Orsi
* Florent THOMAS
+* Francisco Fernández
Maintainer
----------
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index 96bd49da9..56fb60d36 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -18,7 +18,7 @@
"base_multi_image", # oca/product-attribute
"purchase",
"product_variant_supplierinfo", # oca/product-variant
- "stock_available", #stock-logistics-warehouse
+ "stock_available", # stock-logistics-warehouse
# TODO: perhaps not needed:
# "product_variant_cost_price", # oca/product-variant
],
@@ -38,7 +38,7 @@
"Tecnativa,"
"Mind And Go,"
"Odoo Community Association (OCA)",
-
+
"website": "https://github.com/OCA/connector-prestashop",
"category": "Connector",
'demo': [
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 85cee4b73..e164b073e 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -74,7 +74,7 @@ def run(self):
'backend_id': self.backend_record.id,
}
for oe_field, ps_field in self._copy_fields:
- data[oe_field] = erp_dict[ps_field]
+ data[oe_field] = ps_dict[ps_field]
record = self.model.create(data)
binder.bind(ps_id, record)
_logger.debug(
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index e0f01fdba..4d8f531bc 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -106,6 +106,7 @@ class PrestaShopCRUDAdapter(AbstractComponent):
_name = 'prestashop.crud.adapter'
_inherit = ['base.backend.adapter', 'base.prestashop.connector']
_usage = 'backend.adapter'
+ # pylint: disable=method-required-super
def __init__(self, environment):
"""
@@ -122,7 +123,7 @@ def __init__(self, environment):
self.prestashop.api_url,
self.prestashop.webservice_key,
debug=self.backend_record.debug,
-# verbose=self.backend_record.verbose
+ # verbose=self.backend_record.verbose
)
def search(self, filters=None):
@@ -159,6 +160,7 @@ def head(self):
class GenericAdapter(AbstractComponent):
_name = 'prestashop.adapter'
_inherit = 'prestashop.crud.adapter'
+ # pylint: disable=method-required-super
_model_name = None
_prestashop_model = None
diff --git a/connector_prestashop/components/core.py b/connector_prestashop/components/core.py
index d3a0c40cd..30a843938 100644
--- a/connector_prestashop/components/core.py
+++ b/connector_prestashop/components/core.py
@@ -14,4 +14,3 @@ class BasePrestaShopConnectorComponent(AbstractComponent):
_name = 'base.prestashop.connector'
_inherit = 'base.connector'
_collection = 'prestashop.backend'
-
diff --git a/connector_prestashop/components/deleter.py b/connector_prestashop/components/deleter.py
index 0787e0101..25e39b992 100644
--- a/connector_prestashop/components/deleter.py
+++ b/connector_prestashop/components/deleter.py
@@ -4,10 +4,6 @@
from odoo.tools.translate import _
from odoo.addons.component.core import AbstractComponent
-from odoo.tools.translate import _
-from odoo.addons.queue_job.job import job
-from odoo.addons.connector.unit.synchronizer import Deleter
-
class PrestashopDeleter(AbstractComponent):
""" Base deleter for PrestaShop """
diff --git a/connector_prestashop/components/exporter.py b/connector_prestashop/components/exporter.py
index a4fe77a63..e1dec3218 100644
--- a/connector_prestashop/components/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -10,10 +10,7 @@
from odoo import _, exceptions
from odoo.addons.component.core import AbstractComponent
-from odoo.addons.queue_job.job import job
-from odoo.addons.queue_job.job import related_action
from odoo.addons.connector.exception import RetryableJobError
-from .mapper import TranslationPrestashopExportMapper
_logger = logging.getLogger(__name__)
@@ -59,7 +56,7 @@ def run(self, binding, *args, **kwargs):
self.binder.bind(self.prestashop_id, self.binding)
# commit so we keep the external ID if several cascading exports
# are called and one of them fails
- self.env.cr.commit()
+ self.env.cr.commit() # pylint: disable=invalid-commit
self._after_export()
return result
@@ -155,7 +152,7 @@ def _get_or_create_binding(
binding = model_c.create(_bind_values)
# Eager commit to avoid having 2 jobs
# exporting at the same time.
- self._cr.commit()
+ self._cr.commit() # pylint: disable=invalid-commit
else:
# If prestashop_bind_ids does not exist we are typically in a
# "direct" binding (the binding record is the same record).
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index 1617f29ed..eed0d0d16 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -5,28 +5,29 @@
from contextlib import closing, contextmanager
import odoo
-from odoo import _, fields
+from odoo import _
-from odoo.addons.queue_job.job import job
from odoo.addons.queue_job.exception import (
RetryableJobError,
FailedJobError,
)
-from odoo.addons.component.core import AbstractComponent, Component
-from odoo.addons.connector.exception import IDMissingInBackend
-from odoo.addons.queue_job.exception import NothingToDoJob
+from odoo.addons.component.core import AbstractComponent
_logger = logging.getLogger(__name__)
RETRY_ON_ADVISORY_LOCK = 1 # seconds
RETRY_WHEN_CONCURRENT_DETECTED = 1 # seconds
+
def import_record():
pass
+
+
def import_batch():
pass
+
class PrestashopBaseImporter(AbstractComponent):
_name = 'prestashop.base.importer'
_inherit = ['base.importer', 'base.prestashop.connector']
@@ -60,7 +61,8 @@ class or parent class to use for the export.
importer_class = PrestashopImporter
binder = self.binder_for(binding_model)
if always or not binder.to_internal(prestashop_id):
- importer = self.component(usage='record.importer', model_name=binding_model)
+ importer = self.component(usage='record.importer',
+ model_name=binding_model)
importer.run(prestashop_id, **kwargs)
@@ -170,14 +172,14 @@ def do_in_new_connector_env(self, model_name=None):
with closing(registry.cursor()) as cr:
try:
new_env = odoo.api.Environment(cr, self.env.uid,
- self.env.context)
+ self.env.context)
# connector_env = self.connector_env.create_environment(
# self.backend_record.with_env(new_env),
# model_name or self.model._name,
# connector_env=self.connector_env
# )
- with self.backend_record.with_env(
- new_env).work_on(self.model._name) as work2:
+ with self.backend_record.with_env(new_env).work_on(
+ self.model._name) as work2:
yield work2
except:
cr.rollback()
@@ -188,7 +190,8 @@ def do_in_new_connector_env(self, model_name=None):
cr.commit() # pylint: disable=invalid-commit
def _check_in_new_connector_env(self):
- with self.do_in_new_connector_env() as new_connector_env:
+ # with self.do_in_new_connector_env() as new_connector_env:
+ with self.do_in_new_connector_env():
# Even when we use an advisory lock, we may have
# concurrent issues.
# Explanation:
@@ -362,7 +365,21 @@ class DelayedBatchImporter(AbstractComponent):
def _import_record(self, external_id, **kwargs):
""" Delay the import of the records"""
- self.env[self.model._name].with_delay().import_record(
+ priority = kwargs.pop('priority', None)
+ eta = kwargs.pop('eta', None)
+ max_retries = kwargs.pop('max_retries', None)
+ description = kwargs.pop('description', None)
+ channel = kwargs.pop('channel', None)
+ identity_key = kwargs.pop('identity_key', None)
+
+ self.env[self.model._name].with_delay(
+ priority=priority,
+ eta=eta,
+ max_retries=max_retries,
+ description=description,
+ channel=channel,
+ identity_key=identity_key
+ ).import_record(
backend=self.backend_record,
prestashop_id=external_id,
**kwargs)
diff --git a/connector_prestashop/components/listener.py b/connector_prestashop/components/listener.py
index e44a8f011..972025578 100644
--- a/connector_prestashop/components/listener.py
+++ b/connector_prestashop/components/listener.py
@@ -43,13 +43,12 @@ def on_record_write(self, record, fields=None):
if fields:
if not exported_fields & set(fields):
_logger.debug(
- "Skip export of %s because modified fields: %s are not part "
- "of exported fields %s",
+ "Skip export of %s because modified fields: %s are "
+ "not part of exported fields %s",
record, fields, list(exported_fields))
return True
if record.no_export:
_logger.debug(
- "Skip export of %s because export is disable for it",
- record)
+ "Skip export of %s because export is disable for it", record)
return True
return False
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index 4a57f6d94..2eb4ae8cd 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -10,7 +10,6 @@ class PrestashopImportMapper(AbstractComponent):
_inherit = ['base.prestashop.connector', 'base.import.mapper']
_usage = 'import.mapper'
-
@mapping
def backend_id(self, record):
return {'backend_id': self.backend_record.id}
@@ -44,7 +43,8 @@ def changed_by_fields(self):
It adds the translatable fields in the set.
"""
- changed_by = super(TranslationPrestashopExportMapper, self).changed_by_fields()
+ changed_by = super(TranslationPrestashopExportMapper, self
+ ).changed_by_fields()
if getattr(self, '_translatable_fields', None):
for from_attr, __ in self._translatable_fields:
fieldname = self._direct_source_field_name(from_attr)
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index c3fb47d19..50360ac5c 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -24,7 +24,7 @@ def get_key(self, key):
return self.keys.get(key) or key
-class VersionKey_1_6_0_9(Component):
+class VersionKey1609(Component):
_name = '_prestashop.version.key.1.6.0.9'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.0.9'
@@ -44,7 +44,7 @@ class VersionKey_1_6_0_9(Component):
}
-class VersionKey_1_6_1_2(Component):
+class VersionKey1612(Component):
_name = '_prestashop.version.key.1.6.1.2'
_inherit = '_prestashop.version.key'
_usage = 'prestashop.version.key.1.6.1.2'
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 26042391a..84a5144be 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -1,17 +1,13 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo import _, fields
+from odoo import _
from odoo.addons.connector.exception import MappingError
-from odoo.addons.queue_job.job import job
from odoo.addons.connector.components.mapper import (
mapping,
only_create,
)
-from ...components.importer import (
- import_batch,
-)
from odoo.addons.component.core import Component
@@ -35,7 +31,7 @@ def _open_refund(self, binding):
invoice.signal_workflow('invoice_open')
else:
self.backend_record.add_checkpoint(
- invoice,
+ invoice,
message=_('The refund for order %s has a different amount '
'in PrestaShop and in Odoo.') % invoice.origin
)
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index 85a1200bb..ce003a711 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -3,9 +3,10 @@
from odoo.addons.component.core import Component
+
class AccountTaxImporter(Component):
_name = 'prestashop.account.tax.importer'
- _inherit= 'prestashop.auto.matching.importer'
+ _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.account.tax'
_erp_field = 'amount'
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index 248c2d32f..7be1e10ed 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -49,14 +49,14 @@ def import_record(self, backend, prestashop_id, force=False):
@job(default_channel='root.prestashop')
@api.model
- def import_batch(self, backend, filters=None):
+ def import_batch(self, backend, filters=None, **kwargs):
""" Prepare a batch import of records from PrestaShop """
self.check_active(backend)
if filters is None:
filters = {}
with backend.work_on(self._name) as work:
importer = work.component(usage='batch.importer')
- return importer.run(filters=filters)
+ return importer.run(filters=filters, **kwargs)
@job(default_channel='root.prestashop')
@related_action(action='related_action_record')
@@ -77,7 +77,7 @@ def export_delete_record(self, backend, external_id):
deleter = work.component(usage='record.exporter.deleter')
return deleter.run(external_id)
- #TODO: Research
+ # TODO: Research
@api.multi
def resync(self):
func = import_record
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index e202cc256..39dbe8d7b 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -37,10 +37,11 @@ class PrestashopDeliveryCarrier(models.Model):
export_tracking = fields.Boolean(
string='Export tracking numbers to PrestaShop',
)
-
+
_sql_constraints = [
('prestashop_erp_uniq', 'unique(backend_id, odoo_id, id_reference)',
- 'An ERP record with same ID already exists on PrestaShop with the same id_reference'),
+ 'An ERP record with same ID already exists on PrestaShop with the '
+ 'same id_reference'),
]
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index 4efc21b01..a0aa713d3 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -33,19 +33,21 @@ def odoo_id(self, record):
"""
Prevent The duplication of delivery method if id_reference is the same
Has to be improved
- """
+ """
id_reference = int(str(record['id_reference']))
ps_delivery = self.env['prestashop.delivery.carrier'].search([
('id_reference', '=', id_reference),
('backend_id', '=', self.backend_record.id)])
- _logger.debug("Found delivery %s for reference %s" % (ps_delivery, id_reference))
- if len(ps_delivery) == 1 :
- #Temporary defensive mode so that only a single delivery method still available
+ _logger.debug("Found delivery %s for reference %s" % (ps_delivery,
+ id_reference))
+ if len(ps_delivery) == 1:
+ # Temporary defensive mode so that only a single delivery method
+ # still available
delivery = ps_delivery.odoo_id
ps_delivery.unlink()
return {'odoo_id': delivery.id}
else:
- return {}
+ return {}
@mapping
def id_reference(self, record):
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
index 72680e0a2..5d4ec9a5c 100644
--- a/connector_prestashop/models/mail_message/common.py
+++ b/connector_prestashop/models/mail_message/common.py
@@ -33,6 +33,7 @@ class MailMessageAdapter(Component):
_name = 'prestashop.mail.message.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.mail.message'
+ # pylint: disable=method-required-super
@property
def _prestashop_model(self):
@@ -47,7 +48,9 @@ def read(self, id, attributes=None):
res = api.get(self._prestashop_model, id, options=attributes)
first_key = res.keys()[0]
message_data = res[first_key]
- thread_data = api.get('customer_threads', message_data['id_customer_thread'], options=attributes)
+ thread_data = api.get('customer_threads',
+ message_data['id_customer_thread'],
+ options=attributes)
first_key = thread_data.keys()[0]
del thread_data[first_key]['id']
del thread_data[first_key]['date_add']
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 31f6edba4..acea29281 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -3,14 +3,10 @@
import logging
from odoo.addons.component.core import Component
-from contextlib import contextmanager
from odoo import models, fields, api, exceptions, _
-from ...components.importer import import_batch, import_record
from ...components.backend_adapter import api_handle_errors
-from ...components.version_key import VersionKey
-from ...backend import prestashop
from odoo.addons.connector.checkpoint import checkpoint
from odoo.addons.base.res.res_partner import _tz_get
@@ -47,7 +43,7 @@ def _select_state(self):
"""Available States for this Backend"""
return [('draft', 'Draft'),
('checked', 'Checked'),
- ('production', 'In Production'),]
+ ('production', 'In Production')]
version = fields.Selection(
selection='select_versions',
@@ -138,49 +134,48 @@ def _select_state(self):
verbose = fields.Boolean(help="Output requests details in the logs")
debug = fields.Boolean(help="Activate PrestaShop's webservice debug mode")
-
matching_product_template = fields.Boolean(string="Match product template")
-
- matching_product_ch = fields.Selection([('reference','Reference'),
- ('barcode','Barcode')],
- string="Matching Field for product")
-
- matching_customer = fields.Boolean(string="Matching Customer",
- help="The selected fields will be matched to the ref field \
- of the partner. Please adapt your datas consequently.")
-# matching_customer_ch = fields.Many2one(comodel_name='prestashop.partner.field'
-# , string="Matched field", help="Field that will be matched.")
+ matching_product_ch = fields.Selection(
+ [('reference', 'Reference'), ('barcode', 'Barcode')],
+ string="Matching Field for product")
+
+ matching_customer = fields.Boolean(
+ string="Matching Customer",
+ help="The selected fields will be matched to the ref field of the "
+ "partner. Please adapt your datas consequently.")
+ # matching_customer_ch = fields.Many2one(
+ # comodel_name='prestashop.partner.field', string="Matched field",
+ # help="Field that will be matched.")
quantity_field = fields.Selection(
- [('qty_available','Available Quantity'),
- ('virtual_available','Forecast quantity'),
- ('immediately_usable_qty', 'Available to promise'),
- ('potential_qty', 'Potential')],
- help="""
- Some of this options may need some additionnal
- modules you'll have to install by yourself from
- https://github.com/OCA/stock-logistics-warehouse/tree/10.0
- """,
- required=True,
- default='virtual_available'
- )
- tz = fields.Selection(_tz_get, 'Timezone', size=64,
- help="The timezone of the backend. Used to synchronize the sale order date.")
+ [('qty_available', 'Available Quantity'),
+ ('virtual_available', 'Forecast quantity'),
+ ('immediately_usable_qty', 'Available to promise'),
+ ('potential_qty', 'Potential')],
+ help="Some of this options may need some additionnal modules you'll "
+ "have to install by yourself from "
+ "https://github.com/OCA/stock-logistics-warehouse",
+ required=True,
+ default='virtual_available')
+ tz = fields.Selection(
+ _tz_get, 'Timezone', size=64,
+ help="The timezone of the backend. Used to synchronize the sale order "
+ "date.")
@api.onchange("matching_customer")
def change_matching_customer(self):
- #Update the field list so that if you API change you could find the new fields to map
+ # Update the field list so that if you API change you could find the
+ # new fields to map
if self._origin.id:
self.fill_matched_fields(self._origin.id)
-
@api.multi
def fill_matched_fields(self, backend_id):
self.ensure_one()
- options={'limit': 1,'display': 'full'}
- #TODO : Unse new adapter pattern to get a simple partner json
+ # options = {'limit': 1, 'display': 'full'}
+ # TODO : Unse new adapter pattern to get a simple partner json
# prestashop = PrestaShopLocation(
# self.location.encode(),
# self.webservice_key,
@@ -189,13 +184,13 @@ def fill_matched_fields(self, backend_id):
# client = PrestaShopWebServiceDict(
# prestashop.api_url,
# prestashop.webservice_key)
-#
+#
# customer = client.get('customers', options=options)
# tab=customer['customers']['customer'].keys()
# for key in tab:
# key_present = self.env['prestashop.partner.field'].search(
# [('value', '=', key), ('backend_id', '=', backend_id)])
-#
+#
# if len(key_present) == 0 :
# self.env['prestashop.partner.field'].create({
# 'name' : key,
@@ -203,7 +198,6 @@ def fill_matched_fields(self, backend_id):
# 'backend_id': backend_id
# })
-
@api.model
def _default_pricelist_id(self):
return self.env['product.pricelist'].search([], limit=1)
@@ -211,12 +205,13 @@ def _default_pricelist_id(self):
@api.multi
def add_checkpoint(self, record, message=''):
"""
- @param message: used with this https://github.com/OCA/connector/issues/37
+ @param message: used with this
+ https://github.com/OCA/connector/issues/37
"""
self.ensure_one()
record.ensure_one()
- chk_point = checkpoint.add_checkpoint(self.env, record._name, record.id,
- self._name, self.id)
+ chk_point = checkpoint.add_checkpoint(self.env, record._name,
+ record.id, self._name, self.id)
if message:
chk_point.message_post(body=message)
return chk_point
@@ -266,30 +261,30 @@ def _check_connection(self):
@api.multi
def button_check_connection(self):
self._check_connection()
- #raise exceptions.UserError(_('Connection successful'))
+ # raise exceptions.UserError(_('Connection successful'))
self.write({'state': 'checked'})
@api.multi
def import_customers_since(self):
for backend_record in self:
since_date = backend_record.import_partners_since
- self.env['prestashop.res.partner'].import_customers_since(
- backend_record=backend_record,
- since_date=since_date)
+ self.env['prestashop.res.partner'].with_delay(
+ ).import_customers_since(
+ backend_record=backend_record, since_date=since_date)
return True
@api.multi
def import_products(self):
for backend_record in self:
since_date = backend_record.import_products_since
- self.env['prestashop.product.template'].import_products(
- backend_record, since_date)
+ self.env['prestashop.product.template'].with_delay(
+ ).import_products(backend_record, since_date)
return True
@api.multi
def import_carriers(self):
for backend_record in self:
- self.env['prestashop.delivery.carrier'].import_batch(
+ self.env['prestashop.delivery.carrier'].with_delay().import_batch(
backend_record,
)
return True
@@ -313,11 +308,8 @@ def import_stock_qty(self):
def import_sale_orders(self):
for backend_record in self:
since_date = backend_record.import_orders_since
- backend_record.env['prestashop.sale.order'].import_orders_since(
- backend_record,
- since_date,
- priority=5,
- )
+ backend_record.env['prestashop.sale.order'].with_delay(
+ ).import_orders_since(backend_record, since_date)
return True
@api.multi
@@ -407,12 +399,9 @@ def _get_locations_for_stock_quantities(self):
return locations
-
class NoModelAdapter(Component):
""" Used to test the connection """
_name = 'prestashop.adapter.test'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.backend'
_prestashop_model = ''
-
-
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index 83d83e121..d95df85a5 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import _
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping
class MetadataBatchImporter(Component):
@@ -23,4 +21,3 @@ class MetadataBatchImporter(Component):
'prestashop.shop.group',
'prestashop.shop',
]
-
diff --git a/connector_prestashop/models/prestashop_shop_group/common.py b/connector_prestashop/models/prestashop_shop_group/common.py
index 139c453e9..0fb5c2913 100644
--- a/connector_prestashop/models/prestashop_shop_group/common.py
+++ b/connector_prestashop/models/prestashop_shop_group/common.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import Component
-from odoo import models, fields, api, exceptions, _
+from odoo import models, fields
class PrestashopShopGroup(models.Model):
@@ -24,7 +24,6 @@ class PrestashopShopGroup(models.Model):
)
-
class ShopGroupAdapter(Component):
_name = 'prestashop.shop.group.adapter'
_inherit = 'prestashop.adapter'
diff --git a/connector_prestashop/models/prestashop_shop_group/importer.py b/connector_prestashop/models/prestashop_shop_group/importer.py
index 6da1e9443..6135091c6 100644
--- a/connector_prestashop/models/prestashop_shop_group/importer.py
+++ b/connector_prestashop/models/prestashop_shop_group/importer.py
@@ -4,7 +4,7 @@
from odoo import _
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+from odoo.addons.connector.components.mapper import mapping
class ShopGroupImporter(Component):
@@ -18,7 +18,6 @@ class ShopGroupMapper(Component):
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.shop.group'
-
direct = [('name', 'name')]
@mapping
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index bd78468a9..72bfd14b6 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -105,9 +105,8 @@ def _import_dependencies(self):
record, fields=['name', ])
name = values[self._default_language]['name']
- self.backend_record.add_checkpoint(category,
- message=msg % (name, str(e))
- )
+ self.backend_record.add_checkpoint(
+ category, message=msg % (name, str(e)))
class ProductCategoryBatchImporter(Component):
diff --git a/connector_prestashop/models/product_image/__init__.py b/connector_prestashop/models/product_image/__init__.py
index dc5f14229..c210a2460 100644
--- a/connector_prestashop/models/product_image/__init__.py
+++ b/connector_prestashop/models/product_image/__init__.py
@@ -2,4 +2,4 @@
from . import common
from . import importer
-# from . import deleter
\ No newline at end of file
+# from . import deleter
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index 999d8ac71..2d7803359 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -31,15 +31,10 @@ class PrestashopProductImage(models.Model):
string='Product image',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
-
@job(default_channel='root.prestashop')
@api.multi
- def import_product_image(self, backend, product_tmpl_id, image_id, **kwargs):
+ def import_product_image(self, backend, product_tmpl_id, image_id,
+ **kwargs):
"""Import a product image"""
with backend.work_on(self._name) as work:
importer = work.component(usage='record.importer')
@@ -54,7 +49,7 @@ class ProductImageAdapter(Component):
_prestashop_model = '/images/products'
_export_node_name = '/images/products'
_export_node_name_res = 'image'
-
+ # pylint: disable=method-required-super
def connect(self):
debug = False
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index e74224ea9..1ad679674 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -2,10 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.queue_job.job import job
-
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+from odoo.addons.connector.components.mapper import mapping
import mimetypes
import logging
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index e9e7b6699..f0334389a 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -2,7 +2,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import mapping, external_to_m2o
+from odoo.addons.connector.components.mapper import mapping
+
class ProductPricelistMapper(Component):
_name = 'prestashop.groups.pricelist.mapper'
@@ -42,8 +43,7 @@ class ProductPricelistImporter(Component):
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.groups.pricelist'
- _usage= "Translate"
-
+ _usage = "Translate"
_translatable_fields = {
'prestashop.groups.pricelist': ['name'],
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index faf44d301..63ef4d0a7 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -7,7 +7,6 @@
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
-from exporter import CombinationInventoryExporter
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 8a9da7971..ba75dbabb 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -7,10 +7,6 @@
mapping,
only_create,
)
-from ...components.importer import (
- import_batch,
-)
-from ...components.backend_adapter import PrestaShopCRUDAdapter
from odoo.addons.component.core import Component
import logging
@@ -158,16 +154,6 @@ def _get_option_value(self, record):
assert option_value_binding, "must have a binding for the option"
yield option_value_binding.odoo_id
- @mapping
- def name(self, record):
- template = self.get_main_template_binding(record)
- options = []
- for option_value_object in self._get_option_value(record):
- key = option_value_object.attribute_id.name
- value = option_value_object.name
- options.append('%s:%s' % (key, value))
- return {'name_template': template.name}
-
@mapping
def attribute_value_ids(self, record):
results = []
@@ -227,8 +213,9 @@ def _get_tax_ids(self, record):
product_tmpl_adapter = self.component(
usage='backend.adapter', model_name='prestashop.product.template')
tax_group = product_tmpl_adapter.read(record['id_product'])
- tax_group = self.binder_for('prestashop.account.tax.group').to_internal(
- tax_group['id_tax_rules_group'], unwrap=True)
+ tax_group = self.binder_for(
+ 'prestashop.account.tax.group').to_internal(
+ tax_group['id_tax_rules_group'], unwrap=True)
return tax_group.tax_ids
def _apply_taxes(self, tax, price):
@@ -262,29 +249,28 @@ def specific_price(self, record):
@only_create
@mapping
def odoo_id(self, record):
-# product = self.env['product.product'].search([
-# ('default_code', '=', record['reference']),
-# ('prestashop_bind_ids', '=', False),
-# ], limit=1)
-# if product:
-# return {'odoo_id': product.id}
-
+ # product = self.env['product.product'].search([
+ # ('default_code', '=', record['reference']),
+ # ('prestashop_bind_ids', '=', False),
+ # ], limit=1)
+ # if product:
+ # return {'odoo_id': product.id}
""" Will bind the product to an existing one with the same code """
if self.backend_record.matching_product_template:
- code = record.get(self.backend_record.matching_product_ch)
- if self.backend_record.matching_product_ch == 'reference':
+ code = record.get(self.backend_record.matching_product_ch)
+ if self.backend_record.matching_product_ch == 'reference':
if code:
product = self.env['product.product'].search(
- [('default_code', '=', code)], limit=1)
+ [('default_code', '=', code)], limit=1)
if product:
return {'odoo_id': product.id}
if self.backend_record.matching_product_ch == 'barcode':
if code:
product = self.env['product.product'].search(
- [('barcode', '=', code)], limit=1)
+ [('barcode', '=', code)], limit=1)
if product:
- return {'odoo_id': product.id}
+ return {'odoo_id': product.id}
else:
return {}
@@ -407,7 +393,8 @@ def odoo_id(self, record):
@mapping
def attribute_id(self, record):
binder = self.binder_for('prestashop.product.combination.option')
- attribute = binder.to_internal(record['id_attribute_group'], unwrap=True)
+ attribute = binder.to_internal(record['id_attribute_group'],
+ unwrap=True)
return {'attribute_id': attribute.id}
@mapping
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index 852621364..2c974fdc8 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -9,6 +9,7 @@
)
+# pylint: disable=consider-merging-classes-inherited
class ResPartner(models.Model):
_inherit = 'res.partner'
@@ -88,6 +89,7 @@ class SupplierImageAdapter(Component):
_name = 'prestashop.supplier.image.adapter'
_inherit = 'prestashop.adapter'
_apply_on = 'prestashop.supplier.image'
+ # pylint: disable=method-required-super
_prestashop_image_model = 'suppliers'
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 14a6fb573..e9a174fd5 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -1,17 +1,10 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import fields
from odoo.addons.queue_job.exception import FailedJobError
-from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping
-from ...components.backend_adapter import PrestaShopCRUDAdapter
-from ...components.importer import (
- import_batch,
-)
-
import logging
_logger = logging.getLogger(__name__)
try:
@@ -64,7 +57,6 @@ class SupplierImporter(Component):
_inherit = 'prestashop.importer'
_apply_on = 'prestashop.supplier'
-
def _create(self, record):
try:
return super(SupplierImporter, self)._create(record)
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 8a0667c05..a5939ba19 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -3,7 +3,7 @@
from collections import defaultdict
-from odoo import _, api, exceptions, fields, models
+from odoo import api, fields, models
from odoo.addons import decimal_precision as dp
from odoo.addons.queue_job.job import job
@@ -111,12 +111,12 @@ class PrestashopProductTemplate(models.Model):
string='Cost Price',
digits=dp.get_precision('Product Price'),
)
- out_of_stock = fields.Selection(
- [('0', 'Refuse order'),
- ('1', 'Accept order'),
- ('2', 'Default prestashop')],
- string='If stock shortage'
- )
+ out_of_stock = fields.Selection([
+ ('0', 'Refuse order'),
+ ('1', 'Accept order'),
+ ('2', 'Default prestashop')],
+ string='If stock shortage'
+ )
@api.multi
def recompute_prestashop_qty(self):
@@ -146,17 +146,18 @@ def _recompute_prestashop_qty_backend(self, backend):
def _prestashop_qty(self):
return self.qty_available
+ @job(default_channel='root.prestashop')
def import_products(self, backend, since_date=None, **kwargs):
filters = None
if since_date:
filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
now_fmt = fields.Datetime.now()
- self.env['prestashop.product.category'].with_delay(
- priority=10).import_batch(backend, filters=filters)
+ self.env['prestashop.product.category'].import_batch(
+ backend, filters=filters, priority=10)
- self.env['prestashop.product.template'].with_delay(
- priority=15).import_batch(backend, filters=filters)
+ self.env['prestashop.product.template'].import_batch(
+ backend, filters=filters, priority=15)
backend.import_products_since = now_fmt
return True
@@ -167,7 +168,6 @@ def import_inventory(self, backend):
importer = work.component(usage='batch.importer')
return importer.run()
-
@job(default_channel='root.prestashop')
def export_inventory(self, fields=None):
""" Export the inventory configuration and quantity of a product. """
@@ -176,11 +176,10 @@ def export_inventory(self, fields=None):
exporter = work.component(usage='inventory.exporter')
return exporter.run(self, fields)
-
@job(default_channel='root.prestashop')
def export_product_quantities(self, backend=None):
self.search([('backend_id', '=', backend.id)]
- ).recompute_prestashop_qty()
+ ).recompute_prestashop_qty()
class TemplateAdapter(Component):
@@ -258,7 +257,8 @@ def search(self, filters=None):
class PrestashopProductQuantityListener(Component):
_name = 'prestashop.product.quantity.listener'
_inherit = 'base.connector.listener'
- _apply_on = ['prestashop.product.combination', 'prestashop.product.template']
+ _apply_on = ['prestashop.product.combination',
+ 'prestashop.product.template']
def _get_inventory_fields(self):
# fields which should not trigger an export of the products
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 1a5136753..9c8fd61b4 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo import _, models, fields, api
+from odoo import _, models, api
from odoo.addons.queue_job.job import job
# from odoo.addons.connector.components.mapper import (
# mapping,
@@ -14,6 +14,7 @@
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
+from odoo.exceptions import ValidationError
import datetime
@@ -122,60 +123,64 @@ def odoo_id(self, record):
# [('default_code', '=', record['reference'])], limit=1)
# if product:
# return {'odoo_id': product.id}
- if self.backend_record.matching_product_template:
- if self.has_combinations(record):
- #Browse combinations for matching products and find if there
- #is a potential template to be matched
+ if self.backend_record.matching_product_template:
+ if self.has_combinations(record):
+ # Browse combinations for matching products and find if there
+ # is a potential template to be matched
template = self.env['product.template']
associations = record.get('associations', {})
combinations = associations.get('combinations', {}).get(
- 'combinations', [])
- if len(combinations) == 1 :
- #Defensive mode when product have no combinations, force the list mode
+ self.backend_record.get_version_ps_key('combinations'))
+ if len(combinations) == 1:
+ # Defensive mode when product have no combinations, force
+ # the list mode
combinations = [combinations]
for prod in combinations:
- backend_adapter = self.unit_for(
- BackendAdapter, 'prestashop.product.combination')
+ backend_adapter = self.component(
+ usage='backend.adapter',
+ model_name='prestashop.product.combination')
variant = backend_adapter.read(int(prod['id']))
code = variant.get(self.backend_record.matching_product_ch)
- if self.backend_record.matching_product_ch == 'reference':
+ if self.backend_record.matching_product_ch == 'reference':
product = self.env['product.product'].search(
- [('default_code', '=', code)])
- if len(product) > 1 :
- raise ValidationError(_('Error! Multiple products '
- 'found with combinations reference %s.'
- 'Maybe consider to update you datas') % code)
+ [('default_code', '=', code)])
+ if len(product) > 1:
+ raise ValidationError(_(
+ 'Error! Multiple products found with '
+ 'combinations reference %s. Maybe consider to '
+ 'update you datas') % code)
template |= product.product_tmpl_id
if self.backend_record.matching_product_ch == 'barcode':
product = self.env['product.product'].search(
- [('barcode', '=', code)])
- if len(product) > 1 :
- raise ValidationError(_('Error! Multiple products '
- 'found with combinations reference %s.'
- 'Maybe consider to update you datas') % code)
+ [('barcode', '=', code)])
+ if len(product) > 1:
+ raise ValidationError(_(
+ 'Error! Multiple products found with '
+ 'combinations reference %s. Maybe consider to '
+ 'update you datas') % code)
template |= product.product_tmpl_id
_logger.debug('template %s' % template)
if len(template) == 1:
return {'odoo_id': template.id}
- if len(template) > 1 :
- raise ValidationError(_('Error! Multiple templates are '
- 'found with combinations reference.'
- 'Maybe consider to change matching option'))
+ if len(template) > 1:
+ raise ValidationError(_(
+ 'Error! Multiple templates are found with '
+ 'combinations reference. Maybe consider to change '
+ 'matching option'))
else:
code = record.get(self.backend_record.matching_product_ch)
if self.backend_record.matching_product_ch == 'reference':
if code:
if self._template_code_exists(code):
product = self.env['product.template'].search(
- [('default_code', '=', code)], limit=1)
+ [('default_code', '=', code)], limit=1)
if product:
return {'odoo_id': product.id}
-
if self.backend_record.matching_product_ch == 'barcode':
if code:
product = self.env['product.template'].search(
- [('barcode', '=', code)], limit=1)
+ [('barcode', '=', code)], limit=1)
if product:
return {'odoo_id': product.id}
return {}
@@ -318,7 +323,7 @@ def type(self, record):
if record['type']['value'] and record['type']['value'] == 'virtual':
return {"type": 'service'}
return {"type": 'product'}
-#TODO FIXME
+# TODO FIXME
# @mapping
# def extras_features(self, record):
# mapper = self.component(usage='feature.product.import.mapper')
@@ -571,7 +576,8 @@ def _import_combination(self, combination, **kwargs):
**kwargs)
def _delay_product_image_variant(self, combinations, **kwargs):
- delayable = self.env['prestashop.product.combination'].with_delay(priority=15)
+ delayable = self.env['prestashop.product.combination'].with_delay(
+ priority=15)
delayable.set_product_image_variant(
self.backend_record,
combinations,
@@ -609,7 +615,8 @@ def import_images(self, binding):
images = [images]
for image in images:
if image.get('id'):
- delayable = self.env['prestashop.product.image'].with_delay(priority=10)
+ delayable = self.env['prestashop.product.image'].with_delay(
+ priority=10)
delayable.import_product_image(
self.backend_record,
prestashop_record['id'],
@@ -640,9 +647,9 @@ def _import_dependencies(self):
self._import_manufacturer()
def _import_manufacturer(self):
- self.component(usage='manufacturer.product.importer').import_manufacturer(
- self.prestashop_record.get('id_manufacturer')
- )
+ self.component(
+ usage='manufacturer.product.importer').import_manufacturer(
+ self.prestashop_record.get('id_manufacturer'))
def get_template_model_id(self):
ir_model = self.env['ir.model'].search([
diff --git a/connector_prestashop/models/queue_job/common.py b/connector_prestashop/models/queue_job/common.py
index 826d8dc53..94741c231 100644
--- a/connector_prestashop/models/queue_job/common.py
+++ b/connector_prestashop/models/queue_job/common.py
@@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from odoo import _, exceptions, api, models
+from odoo import _, api, models
+
class QueueJob(models.Model):
_inherit = 'queue.job'
@@ -10,7 +11,7 @@ class QueueJob(models.Model):
def related_action_record(self, binding_id_pos=0):
self.ensure_one()
- model_name = self.model_name
+ binding_model = self.model_name
binding_id = self.args[binding_id_pos]
record = self.env[binding_model].browse(binding_id)
odoo_name = record.odoo_id._name
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index 9800e259a..a8402c3dd 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -34,6 +34,7 @@ class ResCountry(models.Model):
string='prestashop Bindings',
)
+
class ResCountryAdapter(Component):
_name = 'prestashop.res.country.adapter'
_inherit = 'prestashop.adapter'
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index 769ec9c2f..cf7ef8087 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -3,9 +3,10 @@
from odoo.addons.component.core import Component
+
class CountryImporter(Component):
_name = 'prestashop.res.country.importer'
- _inherit= 'prestashop.auto.matching.importer'
+ _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.country'
_erp_field = 'code'
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index bc3f832ed..cae759216 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -3,9 +3,10 @@
from odoo.addons.component.core import Component
+
class ResCurrencyImporter(Component):
_name = 'prestashop.res.currency.importer'
- _inherit= 'prestashop.auto.matching.importer'
+ _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.currency'
_erp_field = 'name'
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index d28338d45..3fb6299b9 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -3,9 +3,10 @@
from odoo.addons.component.core import Component
+
class LangImporter(Component):
_name = 'prestashop.res.lang.importer'
- _inherit= 'prestashop.auto.matching.importer'
+ _inherit = 'prestashop.auto.matching.importer'
_apply_on = 'prestashop.res.lang'
_erp_field = 'code'
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index d45355b7e..e74335b17 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -3,9 +3,8 @@
from odoo import models, fields
-from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
-from ...components.importer import import_batch
+from odoo.addons.queue_job.job import job
class ResPartner(models.Model):
@@ -86,8 +85,9 @@ class PrestashopResPartner(models.Model):
newsletter = fields.Boolean(string='Newsletter')
birthday = fields.Date(string='Birthday')
- def import_customers_since(
- self, backend_record=None, since_date=None, **kwargs):
+ @job(default_channel='root.prestashop')
+ def import_customers_since(self, backend_record=None, since_date=None,
+ **kwargs):
""" Prepare the import of partners modified on PrestaShop """
filters = None
if since_date:
@@ -95,12 +95,10 @@ def import_customers_since(
'date': '1',
'filter[date_upd]': '>[%s]' % since_date}
now_fmt = fields.Datetime.now()
- self.env['prestashop.res.partner.category'].with_delay(
- priority=10
- ).import_batch(backend=backend_record, filters=filters, **kwargs)
- self.env['prestashop.res.partner'].with_delay(
- priority=15
- ).import_batch(backend=backend_record, filters=filters, **kwargs)
+ self.env['prestashop.res.partner.category'].import_batch(
+ backend=backend_record, filters=filters, priority=10, **kwargs)
+ self.env['prestashop.res.partner'].import_batch(
+ backend=backend_record, filters=filters, priority=15, **kwargs)
backend_record.import_partners_since = now_fmt
return True
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 0af29437e..7fe6b42b3 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -3,11 +3,9 @@
import re
-from odoo import fields, _
-from odoo.addons.queue_job.job import job
+from odoo import _
-from odoo.addons.connector.checkpoint import checkpoint
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
@@ -214,5 +212,5 @@ def _after_import(self, binding):
class AddressBatchImporter(Component):
_name = 'prestashop.address.batch.importer'
- _inherit = 'prestashop.direct.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.address'
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 94c73834f..929e9614c 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import openerp.addons.decimal_precision as dp
-from odoo import models, fields, api, _
+from odoo import models, fields, api
from odoo.addons.queue_job.job import job, related_action
from odoo.addons.component.core import Component
@@ -65,14 +65,15 @@ class PrestashopSaleOrder(models.Model):
readonly=True,
)
+ @job(default_channel='root.prestashop')
def import_orders_since(self, backend, since_date=None, **kwargs):
""" Prepare the import of orders modified on PrestaShop """
filters = None
if since_date:
filters = {'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)}
now_fmt = fields.Datetime.now()
- self.env['prestashop.sale.order'].with_delay(
- priority=5, max_retries=0).import_batch(backend, filters=filters)
+ self.env['prestashop.sale.order'].import_batch(
+ backend, filters=filters, priority=5, max_retries=0)
if since_date:
filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
self.env['prestashop.mail.message'].import_batch(backend, filters)
@@ -102,13 +103,11 @@ def find_prestashop_state(self):
return state_list.prestashop_state_id.prestashop_id
return None
-
@job(default_channel='root.prestashop')
@related_action(action='related_action_unwrap_binding')
@api.multi
def export_sale_state(self):
for sale in self:
- backend = sale.backend_id
new_state = sale.find_prestashop_state()
if not new_state:
continue
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 35aeb644b..8a988f6e4 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -120,8 +120,8 @@ def _rule_state(self, record, mode):
"""
if self.backend_record.importable_order_state_ids:
ps_state_id = record['current_state']
- state = self.binder_for(
- 'prestashop.sale.order.state').to_internal(ps_state_id, unwrap=1)
+ state = self.binder_for('prestashop.sale.order.state'
+ ).to_internal(ps_state_id, unwrap=1)
if not state:
raise FailedJobError(_(
"The configuration is missing "
@@ -234,7 +234,8 @@ def partner_invoice_id(self, record):
@mapping
def partner_shipping_id(self, record):
binder = self.binder_for('prestashop.address')
- shipping = binder.to_internal(record['id_address_delivery'], unwrap=True)
+ shipping = binder.to_internal(record['id_address_delivery'],
+ unwrap=True)
return {'partner_shipping_id': shipping.id}
@mapping
@@ -274,10 +275,13 @@ def total_tax_amount(self, record):
@mapping
def date_order(self, record):
- local = pytz.timezone(self.backend_record.tz)
- naive = fields.Datetime.from_string(record['date_add'])
- local_dt = local.localize(naive, is_dst=None)
- date_order = fields.Datetime.to_string(local_dt.astimezone(pytz.utc))
+ date_order = record['date_add']
+ if self.backend_record.tz:
+ local = pytz.timezone(self.backend_record.tz)
+ naive = fields.Datetime.from_string(date_order)
+ local_dt = local.localize(naive, is_dst=None)
+ date_order = fields.Datetime.to_string(local_dt.astimezone(
+ pytz.utc))
return {'date_order': date_order}
def finalize(self, map_record, values):
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
index 9ac9f7e48..f9b47565f 100644
--- a/connector_prestashop/models/sale_order_state/exporter.py
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -2,7 +2,6 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
-from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
@@ -12,7 +11,6 @@ class SaleStateExporter(Component):
_apply_on = ['prestashop.sale.order']
_usage = 'sale.order.state.exporter'
-
def run(self, binding, state, **kwargs):
datas = {
'order_history': {
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index d92264d15..1f30bd331 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -4,6 +4,7 @@
from odoo.addons.connector.components.mapper import mapping
from odoo.addons.component.core import Component
+
class SaleOrderStateMapper(Component):
_name = 'prestashop.sale.order.state.mapper'
_inherit = 'prestashop.import.mapper'
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index d92c3aee4..5341c0401 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -19,10 +19,6 @@ class ShopImportMapper(Component):
def backend_id(self, record):
return {'backend_id': self.backend_record.id}
- @mapping
- def company_id(self, record):
- return {'company_id': self.backend_record.company_id.id}
-
@mapping
def opener_id(self, record):
return {'openerp_id': self.backend_record.warehouse_id.id}
diff --git a/connector_prestashop/tests/common.py b/connector_prestashop/tests/common.py
index 6bd4fb43d..1c9a1566d 100644
--- a/connector_prestashop/tests/common.py
+++ b/connector_prestashop/tests/common.py
@@ -4,7 +4,6 @@
import functools
-from odoo.addons.connector.connector import ConnectorEnvironment
from odoo.addons.component.tests.common import SavepointComponentCase
from contextlib import contextmanager
@@ -96,7 +95,7 @@ def configure(self):
self.env.ref('base.GBP').active = True
def base_mapping(self):
- self.create_binding_no_export('prestashop.res.lang', 1, 1)
+ self.create_binding_no_export('prestashop.res.lang', 1, 1, active=True)
countries = [
(self.env.ref('base.fr'), 8),
(self.env.ref('base.uk'), 17),
@@ -310,7 +309,8 @@ def _create_product_binding(self, name=None,
template_ps_id=None,
variant_ps_id=None):
product = self.env['product.product'].create({
- 'name': name
+ 'name': name,
+ 'type': 'product',
})
template = product.product_tmpl_id
template_binding = self.create_binding_no_export(
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
index 800e919a7..38c38f2e3 100644
--- a/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_inventory_batch.yaml
@@ -5,181 +5,448 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- User-Agent: [python-requests/2.6.0 CPython/2.7.9 Linux/4.4.0-51-generic]
+ User-Agent: [python-requests/2.18.4]
method: GET
- uri: http://172.22.0.4/api/stock_availables?limit=0%2C1000&display=%5Bid%2Cid_product%2Cid_product_attribute%5D
+ uri: http://localhost:8080/api/stock_availables?limit=0%2C1000&display=%5Bid%2Cid_product%2Cid_product_attribute%5D
response:
- body: {string: !!python/unicode "\n\
- \n\n\
- \n\t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n\
- \n\n\t \n\t \n\
- \t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n\n\
- \t \n\t \n\t \n \n \n\
- \n"}
- headers:
- access-time: ['1481290492']
- connection: [Keep-Alive]
- content-length: ['13277']
- content-sha1: [7e59ece6cb6ac8781aee1e5491bf305858ed8201]
+ body: {string: !!python/unicode "\n\n\n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n\n\t \n\t \n\t \n \n \n \n"}
+ headers:
+ access-time: ['1536828054']
+ connection: [keep-alive]
+ content-sha1: [d3b496c686bdacfbfdeda1b1c0ab00a91ba33351]
content-type: [text/xml;charset=utf-8]
- date: ['Fri, 09 Dec 2016 13:34:52 GMT']
+ date: ['Thu, 13 Sep 2018 08:40:54 GMT']
execution-time: ['0.008']
- keep-alive: ['timeout=5, max=100']
- psws-version: [1.6.1.9]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=1
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828054']
+ connection: [keep-alive]
+ content-sha1: [7e162f8f62ab031ff1902bd77a13124ff0538aa9]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:54 GMT']
+ execution-time: ['0.002']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ set-cookie: ['PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D;
+ expires=Wed, 03-Oct-2018 08:40:54 GMT; Max-Age=1728000; path=/; HttpOnly']
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=2
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828054']
+ connection: [keep-alive]
+ content-sha1: [5974181b31ec216dbb01fa59b28ac47049d781d2]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:54 GMT']
+ execution-time: ['0.002']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=3
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828054']
+ connection: [keep-alive]
+ content-sha1: [dee923fc0ff84b2f49ed53ff40485fa19e32df31]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:54 GMT']
+ execution-time: ['0.002']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=4
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828054']
+ connection: [keep-alive]
+ content-sha1: [e51fce53d498c64d53c26e6b7752bcce9175e6dc]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:54 GMT']
+ execution-time: ['0.002']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=5
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828055']
+ connection: [keep-alive]
+ content-sha1: [cdd87832c0c5b63ca1ce88c294edf2bb48540c53]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:55 GMT']
+ execution-time: ['0.002']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=6
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828055']
+ connection: [keep-alive]
+ content-sha1: [d940691940e11f2815858dfe0a6a3e7f82161893]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:55 GMT']
+ execution-time: ['0.003']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
+ x-powered-by: [PrestaShop Webservice]
+ status: {code: 200, message: OK}
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Cookie: [PrestaShop-afa88870cc72c3359653551ba256dfd3=a16037d68747712a71b95e0c820029f76721ef066c3ad2057b2e7e346ccb6c85%3AyxxHtEKBxuS%2B68yQm0bfSc70YbwM64IZHcny1T63uSv5RcxVSrzGnimFRaiZ5f7AAdc%2BR481elvDTZaCs5zmYMjRFLGQjnlGkEmWFqYSE0M%3D]
+ User-Agent: [python-requests/2.18.4]
+ method: GET
+ uri: http://localhost:8080/api/stock_availables?filter%5Bid_product_attribute%5D=%3E%5B0%5D&filter%5Bid_product%5D=7
+ response:
+ body: {string: !!python/unicode '
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'}
+ headers:
+ access-time: ['1536828055']
+ connection: [keep-alive]
+ content-sha1: [096a97a8e0ce312114a8c45bfe56391d9fce2141]
+ content-type: [text/xml;charset=utf-8]
+ date: ['Thu, 13 Sep 2018 08:40:55 GMT']
+ execution-time: ['0.003']
+ psws-version: [1.6.1.20]
+ server: [nginx/1.10.3 (Ubuntu)]
+ transfer-encoding: [chunked]
x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
version: 1
diff --git a/connector_prestashop/tests/test_auth.py b/connector_prestashop/tests/test_auth.py
index 5b6d7aa19..9bcd52c68 100644
--- a/connector_prestashop/tests/test_auth.py
+++ b/connector_prestashop/tests/test_auth.py
@@ -12,9 +12,9 @@ class TestAuth(PrestashopTransactionCase):
@recorder.use_cassette
def test_auth_success(self):
- with self.assertRaisesRegexp(exceptions.UserError,
- u'Connection successful'):
- self.backend_record.button_check_connection()
+ self.assertEqual('draft', self.backend_record.state)
+ self.backend_record.button_check_connection()
+ self.assertEqual('checked', self.backend_record.state)
@recorder.use_cassette
def test_auth_failure(self):
diff --git a/connector_prestashop/tests/test_export_stock_qty.py b/connector_prestashop/tests/test_export_stock_qty.py
index 87512bcf7..aada70f05 100644
--- a/connector_prestashop/tests/test_export_stock_qty.py
+++ b/connector_prestashop/tests/test_export_stock_qty.py
@@ -4,7 +4,6 @@
import mock
-from ..models.product_template.exporter import export_product_quantities
from .common import (
ExportStockQuantityCase,
assert_no_job_delayed
@@ -16,19 +15,18 @@ class TestExportStockQuantity(ExportStockQuantityCase):
@assert_no_job_delayed
def test_export_stock_qty_delay(self):
""" Backend button delay a job to delay stock quantities export """
- export_job = ('openerp.addons.connector_prestashop.models'
- '.prestashop_backend.common'
- '.export_product_quantities')
- with mock.patch(export_job) as export_mock:
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path) as delay_record_mock:
self.backend_record.update_product_stock_qty()
- export_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
- )
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.export_product_quantities.assert_called_with(
+ backend=self.backend_record)
@assert_no_job_delayed
def test_job_recompute_prestashop_qty(self):
- export_job_path = ('openerp.addons.connector_prestashop.consumer'
- '.export_inventory')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
variant_binding = self._create_product_binding(
name='Faded Short Sleeves T-shirt',
@@ -40,29 +38,30 @@ def test_job_recompute_prestashop_qty(self):
self.assertEqual(0, base_qty)
self.assertEqual(0, base_prestashop_qty)
- with mock.patch(export_job_path) as export_record_mock:
- export_product_quantities(self.conn_session,
- self.backend_record.ids)
+ with mock.patch(delay_record_path) as delay_record_mock:
+ self.env['prestashop.product.template'].export_product_quantities(
+ self.backend_record)
# no job delayed because no quantity has been changed
- self.assertEqual(0, export_record_mock.delay.call_count)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(
+ 0, delay_record_instance.export_inventory.call_count)
self._change_product_qty(variant_binding.odoo_id, 42)
- with mock.patch(export_job_path) as export_record_mock:
+ with mock.patch(delay_record_path) as delay_record_mock:
variant_binding.with_context(
connector_no_export=False).recompute_prestashop_qty()
- self.assertEqual(1, export_record_mock.delay.call_count)
- export_record_mock.delay.assert_called_with(
- mock.ANY,
- 'prestashop.product.combination',
- variant_binding.id,
- fields=['quantity'],
- priority=20,
- )
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(
+ 1, delay_record_instance.export_inventory.call_count)
+ delay_record_instance.export_inventory.assert_called_with(
+ fields=['quantity'])
self._change_product_qty(variant_binding.odoo_id, 42)
- with mock.patch(export_job_path) as export_record_mock:
+ with mock.patch(delay_record_path) as delay_record_mock:
# the function call the update qty for template and combination
# depending on the state of the tests we may have one or two call
- export_product_quantities(self.conn_session,
- self.backend_record.ids)
- self.assertGreater(export_record_mock.delay.call_count, 0)
+ self.env['prestashop.product.template'].export_product_quantities(
+ self.backend_record)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertGreater(
+ delay_record_instance.export_inventory.call_count, 0)
diff --git a/connector_prestashop/tests/test_export_stock_qty_job.py b/connector_prestashop/tests/test_export_stock_qty_job.py
index 5456baddd..272c86bec 100644
--- a/connector_prestashop/tests/test_export_stock_qty_job.py
+++ b/connector_prestashop/tests/test_export_stock_qty_job.py
@@ -4,7 +4,6 @@
import mock
-from ..models.product_template.exporter import export_inventory
from .common import (
ExportStockQuantityCase,
assert_no_job_delayed,
@@ -27,18 +26,15 @@ def test_job_export_qty(self):
self.assertEqual(0, base_qty)
self.assertEqual(0, base_prestashop_qty)
- export_job_path = ('openerp.addons.connector_prestashop.consumer'
- '.export_inventory')
- with mock.patch(export_job_path):
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path):
self._change_product_qty(variant_binding.odoo_id, 42)
cassette_name = 'test_export_stock_quantity'
with recorder.use_cassette(cassette_name) as cassette:
- export_inventory(
- self.conn_session, 'prestashop.product.template',
- variant_binding.main_template_id.id,
- fields=['quantity'],
- )
+ variant_binding.main_template_id.prestashop_bind_ids.\
+ export_inventory(fields=['quantity'])
self.assertEqual(len(cassette.requests), 3)
request = cassette.requests[0]
diff --git a/connector_prestashop/tests/test_export_tracking.py b/connector_prestashop/tests/test_export_tracking.py
index 92cb1de8d..713bccbfe 100644
--- a/connector_prestashop/tests/test_export_tracking.py
+++ b/connector_prestashop/tests/test_export_tracking.py
@@ -4,8 +4,6 @@
import mock
-from odoo.addons.connector_prestashop.models.stock_tracking.\
- exporter import export_tracking_number
from .common import recorder, PrestashopTransactionCase, assert_no_job_delayed
@@ -15,13 +13,13 @@ def setUp(self):
super(TestExportPicking, self).setUp()
self.sync_metadata()
- self.mock_delay_export = mock.MagicMock()
- self.patch_delay = mock.patch(
- 'openerp.addons.connector_prestashop'
- '.consumer.export_tracking_number.delay',
- new=self.mock_delay_export
+ mock_delay_record = mock.MagicMock()
+ self.instance_delay_record = mock_delay_record.return_value
+ self.patch_delay_record = mock.patch(
+ 'odoo.addons.queue_job.models.base.DelayableRecordset',
+ new=mock_delay_record
)
- self.patch_delay.start()
+ self.patch_delay_record.start()
stock_loc = self.ref('stock.stock_location_stock')
customer_loc = self.ref('stock.stock_location_customers')
@@ -98,26 +96,24 @@ def setUp(self):
def tearDown(self):
super(TestExportPicking, self).tearDown()
- self.patch_delay.stop()
+ self.patch_delay_record.stop()
@assert_no_job_delayed
def test_event_tracking_number__not_prestashop_sale(self):
""" Test that nothing is exported """
self.picking.carrier_tracking_ref = 'xyz'
- self.assertEqual(0, self.mock_delay_export.call_count)
+ self.assertEqual(0, self.instance_delay_record.call_count)
@assert_no_job_delayed
def test_event_tracking_number__prestashop_sale(self):
""" Test that tracking number is exported """
- sale_binding = self.create_binding_no_export(
+ self.create_binding_no_export(
'prestashop.sale.order', self.sale.id, prestashop_id=2
)
self.picking.carrier_tracking_ref = 'xyz'
- self.mock_delay_export.assert_called_once_with(
- mock.ANY, 'prestashop.sale.order', sale_binding.id,
- priority=mock.ANY
- )
+ self.assertEqual(
+ 1, self.instance_delay_record.export_tracking_number.call_count)
@assert_no_job_delayed
def test_export_tracking_number(self):
@@ -127,9 +123,7 @@ def test_export_tracking_number(self):
self.picking.carrier_tracking_ref = 'xyz'
cassette_name = 'test_export_tracking_number'
with recorder.use_cassette(cassette_name) as cassette:
- export_tracking_number(
- self.conn_session, 'prestashop.sale.order', sale_binding.id,
- )
+ sale_binding.export_tracking_number()
self.assertEqual(len(cassette.requests), 3)
request = cassette.requests[0]
diff --git a/connector_prestashop/tests/test_import_backend_data.py b/connector_prestashop/tests/test_import_backend_data.py
index 973ea6876..555c88a9b 100644
--- a/connector_prestashop/tests/test_import_backend_data.py
+++ b/connector_prestashop/tests/test_import_backend_data.py
@@ -59,7 +59,8 @@ def test_import_basedata(self):
self.env['prestashop.res.lang'].search([]).unlink()
self.configure_taxes()
auto_import_logger = (
- 'openerp.addons.connector_prestashop.unit.auto_matching_importer'
+ 'odoo.addons.connector_prestashop.components.'
+ 'auto_matching_importer'
)
with quiet_logger('vcr'), quiet_logger('urllib3'):
with quiet_logger(auto_import_logger):
diff --git a/connector_prestashop/tests/test_import_carrier.py b/connector_prestashop/tests/test_import_carrier.py
index 846b15215..e206f555b 100644
--- a/connector_prestashop/tests/test_import_carrier.py
+++ b/connector_prestashop/tests/test_import_carrier.py
@@ -11,7 +11,7 @@
ExpectedCarrier = namedtuple(
'ExpectedCarrier',
- 'name partner_id product_id company_id'
+ 'name company_id'
)
@@ -27,24 +27,22 @@ def setUp(self):
@assert_no_job_delayed
def test_import_carriers(self):
- import_job = ('openerp.addons.connector_prestashop.models'
- '.binding.common'
- '.import_record')
- with mock.patch(import_job) as import_mock:
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path) as delay_record_mock:
self.backend_record.import_carriers()
- import_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
- priority=10,
- )
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.import_batch.assert_called_with(
+ self.backend_record)
@assert_no_job_delayed
def test_import_products_batch(self):
- record_job_path = ('openerp.addons.connector_prestashop.models'
- '.binding.common.import_record')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_carrier_batch') as cassette, \
- mock.patch(record_job_path) as import_record_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
self.env['prestashop.delivery.carrier'].import_batch(
self.backend_record,
@@ -59,7 +57,8 @@ def test_import_products_batch(self):
self.assertEqual('/api/carriers', self.parse_path(request.uri))
self.assertDictEqual(expected_query, self.parse_qs(request.uri))
- self.assertEqual(2, import_record_mock.delay.call_count)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(2, delay_record_instance.import_record.call_count)
@assert_no_job_delayed
def test_import_carrier_record(self):
@@ -73,14 +72,11 @@ def test_import_carrier_record(self):
binding = self.env['prestashop.delivery.carrier'].search(domain)
binding.ensure_one()
- ship_product_xmlid = 'connector_ecommerce.product_product_shipping'
- ship_product = self.env.ref(ship_product_xmlid)
expected = [
ExpectedCarrier(
name='My carrier',
- partner_id=self.backend_record.company_id.partner_id,
- product_id=ship_product,
company_id=self.backend_record.company_id,
)]
self.assert_records(expected, binding)
+ self.assertEqual('My carrier', binding.product_id.name)
diff --git a/connector_prestashop/tests/test_import_inventory.py b/connector_prestashop/tests/test_import_inventory.py
index 551cd1163..f32880959 100644
--- a/connector_prestashop/tests/test_import_inventory.py
+++ b/connector_prestashop/tests/test_import_inventory.py
@@ -28,30 +28,32 @@ def setUp(self):
@assert_no_job_delayed
def test_import_inventory_delay(self):
""" Backend button delay a job to delay inventory import """
- import_job = ('openerp.addons.connector_prestashop.models'
- '.product_template.common'
- '.import_inventory')
- with mock.patch(import_job) as import_mock:
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path) as delay_record_mock:
self.backend_record.import_stock_qty()
- import_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
- )
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.import_inventory.assert_called_with(
+ self.backend_record)
@assert_no_job_delayed
def test_import_inventory_batch(self):
- record_job_path = ('openerp.addons.connector_prestashop.models'
- '.product_template.common.import_inventory')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_inventory_batch') as cassette,\
- mock.patch(record_job_path) as import_record_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
- self.env['prestashop.product.template'].import_inventory(self.backend_record)
+ self.env['prestashop.product.template'].import_inventory(
+ self.backend_record)
expected_query = {
'display': ['[id,id_product,id_product_attribute]'],
'limit': ['0,1000'],
}
- self.assertEqual(1, len(cassette.requests))
+ # 1 request to get 52 stocks
+ # 7 requests to check if there are stocks for product combinations
+ self.assertEqual(8, len(cassette.requests))
request = cassette.requests[0]
self.assertEqual('GET', request.method)
@@ -59,7 +61,11 @@ def test_import_inventory_batch(self):
self.parse_path(request.uri))
self.assertDictEqual(expected_query, self.parse_qs(request.uri))
- self.assertEqual(52, import_record_mock.delay.call_count)
+ # 7 product stocks are skipped because combination stocks will be
+ # imported
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(
+ 45, delay_record_instance.import_record.call_count)
@assert_no_job_delayed
def test_import_inventory_record_template(self):
@@ -82,6 +88,7 @@ def test_import_inventory_record_template(self):
'id': '1',
'id_product': '1'})
# cumulative stock of all the variants
+ template = self.env['product.template'].browse(template.id)
self.assertEqual(1799, template.qty_available)
@assert_no_job_delayed
@@ -102,4 +109,5 @@ def test_import_inventory_record_variant(self):
record={'id_product_attribute': '1',
'id': '1',
'id_product': '1'})
+ template = self.env['product.template'].browse(template.id)
self.assertEqual(299, template.qty_available)
diff --git a/connector_prestashop/tests/test_import_partner.py b/connector_prestashop/tests/test_import_partner.py
index 47e14903c..852d524a1 100644
--- a/connector_prestashop/tests/test_import_partner.py
+++ b/connector_prestashop/tests/test_import_partner.py
@@ -44,15 +44,14 @@ def setUp(self):
def test_import_partner_since(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_partners_since = from_date
- import_since_job = ('openerp.addons.connector_prestashop.models'
- '.binding.common'
- '.import_batch')
- with mock.patch(import_since_job) as import_mock:
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path) as delay_record_mock:
self.backend_record.import_customers_since()
- import_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.import_customers_since.assert_called_with(
+ backend_record=self.backend_record,
since_date='2016-09-01 00:00:00',
- priority=10,
)
@freeze_time('2016-09-13 00:00:00')
@@ -60,12 +59,12 @@ def test_import_partner_since(self):
def test_import_partner_batch(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_res_partner_from_date = from_date
- record_job_path = ('openerp.addons.connector_prestashop.models'
- '.binding.common.import_record')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_partner_batch') as cassette, \
- mock.patch(record_job_path) as import_record_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
self.env['prestashop.res.partner'].import_customers_since(
self.backend_record,
@@ -88,7 +87,8 @@ def test_import_partner_batch(self):
self.assertEqual('/api/customers', self.parse_path(request.uri))
self.assertDictEqual(expected_query, self.parse_qs(request.uri))
- self.assertEqual(5, import_record_mock.delay.call_count)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(5, delay_record_instance.import_record.call_count)
@assert_no_job_delayed
def test_import_partner_category_record(self):
@@ -120,18 +120,16 @@ def test_import_partner_record(self):
'prestashop.res.partner.category', category.id, 3
)
- batch_job_path = ('openerp.addons.connector_prestashop.models'
- '.binding.common.import_batch')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
with recorder.use_cassette('test_import_partner_record_1'), \
- mock.patch(batch_job_path) as address_batch_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
self.env['prestashop.res.partner'].import_record(
self.backend_record, 1)
- address_batch_mock.delay.assert_called_with(
- mock.ANY,
- 'prestashop.address',
- self.backend_record.id,
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.import_batch.assert_called_with(
+ backend=self.backend_record,
filters={'filter[id_customer]': '1'},
- priority=10,
)
domain = [('prestashop_id', '=', 1)]
@@ -141,7 +139,7 @@ def test_import_partner_record(self):
expected = [
ExpectedPartner(
name='John DOE',
- email='pub# # @prestashop.com',
+ email='pub@prestashop.com',
newsletter=True,
company=False,
active=True,
@@ -155,13 +153,13 @@ def test_import_partner_record(self):
@assert_no_job_delayed
def test_import_partner_address_batch(self):
- record_job_path = ('openerp.addons.connector_prestashop.binding'
- '.common.import_record')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
cassette_name = 'test_import_partner_address_batch'
with recorder.use_cassette(cassette_name) as cassette, \
- mock.patch(record_job_path) as import_record_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
self.env['prestashop.address'].import_batch(
self.backend_record,
@@ -178,7 +176,8 @@ def test_import_partner_address_batch(self):
query = self.parse_qs(cassette.requests[0].uri)
self.assertDictEqual(expected_query, query)
- self.assertEqual(2, import_record_mock.delay.call_count)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(2, delay_record_instance.import_record.call_count)
@assert_no_job_delayed
def test_import_partner_address_record(self):
@@ -193,8 +192,8 @@ def test_import_partner_address_record(self):
shop_id=self.shop.id,
)
with recorder.use_cassette('test_import_partner_address_record_1'):
- import_record(self.conn_session, 'prestashop.address',
- self.backend_record.id, 1)
+ self.env['prestashop.address'].import_record(
+ self.backend_record, 1)
domain = [('prestashop_id', '=', 1)]
address_bindings = self.env['prestashop.address'].search(domain)
diff --git a/connector_prestashop/tests/test_import_products.py b/connector_prestashop/tests/test_import_products.py
index 492e2cef9..4290d1952 100644
--- a/connector_prestashop/tests/test_import_products.py
+++ b/connector_prestashop/tests/test_import_products.py
@@ -38,62 +38,35 @@ def setUp(self):
self.shop_group = self.env['prestashop.shop.group'].search([])
self.shop = self.env['prestashop.shop'].search([])
- self.mock_delay_import_image = mock.MagicMock()
- self.patch_delay_import_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_product'
- '.common.set_product_image_variant',
- new=self.mock_delay_import_image
+ mock_delay_record = mock.MagicMock()
+ self.instance_delay_record = mock_delay_record.return_value
+ self.patch_delay_record = mock.patch(
+ 'odoo.addons.queue_job.models.base.DelayableRecordset',
+ new=mock_delay_record
)
- self.patch_delay_import_image.start()
-
- self.mock_delay_import_image = mock.MagicMock()
- self.patch_delay_import_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_image'
- '.common.import_product_image',
- new=self.mock_delay_import_image
- )
- self.patch_delay_import_image.start()
-
- self.mock_delay_set_image = mock.MagicMock()
- self.patch_delay_set_image = mock.patch(
- 'openerp.addons.connector_prestashop.models.product_product'
- '.common.set_product_image_variant',
- new=self.mock_delay_set_image
- )
- self.patch_delay_set_image.start()
+ self.patch_delay_record.start()
def tearDown(self):
super(TestImportProduct, self).tearDown()
- self.patch_delay_import_image.stop()
- self.patch_delay_set_image.stop()
+ self.patch_delay_record.stop()
@freeze_time('2016-09-13 00:00:00')
@assert_no_job_delayed
def test_import_products(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_products_since = from_date
- import_job = ('openerp.addons.connector_prestashop.models'
- '.binding.common'
- '.import_record')
- with mock.patch(import_job) as import_mock:
- self.backend_record.import_products()
- import_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
- from_date,
- priority=10,
- )
+ self.backend_record.import_products()
+ self.instance_delay_record.import_products.assert_called_with(
+ self.backend_record, from_date)
@freeze_time('2016-09-13 00:00:00')
@assert_no_job_delayed
def test_import_products_batch(self):
from_date = '2016-09-01 00:00:00'
self.backend_record.import_products_since = from_date
- record_job_path = ('openerp.addons.connector_prestashop.models'
- '.binding.common.import_record')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
- with recorder.use_cassette('test_import_product_batch') as cassette, \
- mock.patch(record_job_path) as import_record_mock:
+ with recorder.use_cassette('test_import_product_batch') as cassette:
self.env['prestashop.product.template'].import_products(
self.backend_record,
@@ -116,7 +89,8 @@ def test_import_products_batch(self):
self.assertEqual('/api/products', self.parse_path(request.uri))
self.assertDictEqual(expected_query, self.parse_qs(request.uri))
- self.assertEqual(18, import_record_mock.delay.call_count)
+ self.assertEqual(
+ 18, self.instance_delay_record.import_record.call_count)
@assert_no_job_delayed
def test_import_product_record_category(self):
diff --git a/connector_prestashop/tests/test_import_sale.py b/connector_prestashop/tests/test_import_sale.py
index 6c6cb9371..2020a3e52 100644
--- a/connector_prestashop/tests/test_import_sale.py
+++ b/connector_prestashop/tests/test_import_sale.py
@@ -39,15 +39,14 @@ def setUp(self):
def test_import_sales(self):
from_date = '2016-12-01 00:00:00'
self.backend_record.import_orders_since = from_date
- import_job = ('openerp.addons.connector_prestashop.models'
- '.binding.common'
- '.import_bacth')
- with mock.patch(import_job) as import_mock:
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
+ with mock.patch(delay_record_path) as delay_record_mock:
self.backend_record.import_sale_orders()
- import_mock.delay.assert_called_with(
- mock.ANY, self.backend_record.id,
+ delay_record_instance = delay_record_mock.return_value
+ delay_record_instance.import_orders_since.assert_called_with(
+ self.backend_record,
from_date,
- priority=5,
)
@freeze_time('2016-12-09 00:00:00')
@@ -55,12 +54,12 @@ def test_import_sales(self):
def test_import_sale_batch(self):
from_date = '2016-12-01 00:00:00'
self.backend_record.import_res_partner_from_date = from_date
- record_job_path = ('openerp.addons.connector_prestashop.models'
- '.binding.common.import_batch')
+ delay_record_path = ('odoo.addons.queue_job.models.base.'
+ 'DelayableRecordset')
# execute the batch job directly and replace the record import
# by a mock (individual import is tested elsewhere)
with recorder.use_cassette('test_import_sale_batch') as cassette, \
- mock.patch(record_job_path) as import_record_mock:
+ mock.patch(delay_record_path) as delay_record_mock:
self.env['prestashop.sale.order'].import_orders_since(
self.backend_record,
@@ -90,7 +89,8 @@ def test_import_sale_batch(self):
self.parse_path(request.uri))
self.assertDictEqual(expected_query, self.parse_qs(request.uri))
- self.assertEqual(5, import_record_mock.delay.call_count)
+ delay_record_instance = delay_record_mock.return_value
+ self.assertEqual(5, delay_record_instance.import_record.call_count)
@assert_no_job_delayed
def test_import_sale_record(self):
@@ -115,7 +115,6 @@ def test_import_sale_record(self):
carrier = self.env['delivery.carrier'].create({
'name': 'My carrier',
'product_id': ship_product.id,
- 'partner_id': self.env.ref('base.main_company').partner_id.id,
})
self.create_binding_no_export(
'prestashop.delivery.carrier', carrier.id, prestashop_id=2,
diff --git a/connector_prestashop/views/connector_prestashop_menu.xml b/connector_prestashop/views/connector_prestashop_menu.xml
index 5f5b001d1..0cdfff4b8 100644
--- a/connector_prestashop/views/connector_prestashop_menu.xml
+++ b/connector_prestashop/views/connector_prestashop_menu.xml
@@ -1,84 +1,84 @@
+ The licence is in the file __openerp__.py -->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prestashop Options / Attributes
- prestashop.product.combination.option
- tree,form
-
-
-
- Prestashop Options/Attribute Values
- prestashop.product.combination.option.value
- tree,form
-
-
-
- Odoo product Categories
- prestashop.product.category
- tree,form
-
-
-
-
- Prestashop Products
- prestashop.product.combination
- tree,form
-
-
- Odoo Product Templates
- prestashop.product.template
- tree,form
-
-
-
- Languages
- prestashop.res.lang
- tree,form
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Prestashop Options / Attributes
+ prestashop.product.combination.option
+ tree,form
+
+
+
+ Prestashop Options/Attribute Values
+ prestashop.product.combination.option.value
+ tree,form
+
+
+
+ Odoo product Categories
+ prestashop.product.category
+ tree,form
+
+
+
+
+ Prestashop Products
+ prestashop.product.combination
+ tree,form
+
+
+ Odoo Product Templates
+ prestashop.product.template
+ tree,form
+
+
+
+ Languages
+ prestashop.res.lang
+ tree,form
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
index a155f4e8a..bef50aab8 100644
--- a/connector_prestashop/views/prestashop_backend_view.xml
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -1,302 +1,302 @@
-
+
-
- prestashop.backend.form
- prestashop.backend
-
-
+
+
+
+
+
-
- prestashop.backend.tree
- prestashop.backend
-
-
-
-
-
-
-
+
+ prestashop.backend.tree
+ prestashop.backend
+
+
+
+
+
+
+
-
- PrestaShop Backends
- prestashop.backend
- form
- tree,form
-
+
+ PrestaShop Backends
+ prestashop.backend
+ form
+ tree,form
+
-
- prestashop.shop.group.form
- prestashop.shop.group
-
-
-
-
-
-
-
-
-
-
-
+
+ prestashop.shop.group.form
+ prestashop.shop.group
+
+
+
+
+
+
+
+
+
+
+
-
- prestashop.shop.group.tree
- prestashop.shop.group
-
-
-
-
-
-
-
+
+ prestashop.shop.group.tree
+ prestashop.shop.group
+
+
+
+
+
+
+
-
- PrestaShop Shop Groups
- prestashop.shop.group
- form
- tree,form
-
+
+ PrestaShop Shop Groups
+ prestashop.shop.group
+ form
+ tree,form
+
-
- prestashop.shop.form
- prestashop.shop
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ prestashop.shop.form
+ prestashop.shop
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- prestashop.shop.tree
- prestashop.shop
-
-
-
-
-
-
-
-
+
+ prestashop.shop.tree
+ prestashop.shop
+
+
+
+
+
+
+
+
-
- PrestaShop Shops
- prestashop.shop
- form
- tree,form
-
+
+ PrestaShop Shops
+ prestashop.shop
+ form
+ tree,form
+
From d8e54987b6d8fbe8a27d4210d9441931e9aaaaff Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Tue, 25 Sep 2018 21:16:15 +0200
Subject: [PATCH 17/99] [FIX] Travis + requirements.txt + connector_prestashop
* New versions of vcrpy has breaking changes, so we freeze it
* Adapt .travis.yml for proper runbot deployment
* Remove required on account.tax.group.company_id
---
connector_prestashop/models/account_tax_group/common.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
index 0fdd782e2..b496b09c3 100644
--- a/connector_prestashop/models/account_tax_group/common.py
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -17,7 +17,6 @@ class AccountTaxGroup(models.Model):
company_id = fields.Many2one(
comodel_name='res.company',
index=True,
- required=True,
string='Company',
)
tax_ids = fields.One2many(
From e793f2dee7aa2ae1cdfeb1201e487c72490f5075 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Tue, 25 Sep 2018 23:14:20 +0000
Subject: [PATCH 18/99] [UPD] Update connector_prestashop.pot
---
.../i18n/connector_prestashop.pot | 6026 +++++++++++++++++
1 file changed, 6026 insertions(+)
create mode 100644 connector_prestashop/i18n/connector_prestashop.pot
diff --git a/connector_prestashop/i18n/connector_prestashop.pot b/connector_prestashop/i18n/connector_prestashop.pot
new file mode 100644
index 000000000..33f43548c
--- /dev/null
+++ b/connector_prestashop/i18n/connector_prestashop.pot
@@ -0,0 +1,6026 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * connector_prestashop
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_state
+msgid " * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n"
+" * The 'Pro-forma' status is used when the invoice does not have an invoice number.\n"
+" * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n"
+" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
+" * The 'Cancelled' status is used when user cancel invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_count
+msgid "# Product Variants"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_product_count
+msgid "# Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_count
+msgid "# Purchases"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sales_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sales_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sales_count
+msgid "# Sales"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier_invoice_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier_invoice_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier_invoice_count
+msgid "# Vendor Bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_count
+msgid "# of Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_order_count
+msgid "# of Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_order_count
+msgid "# of Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_type
+msgid "A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_sale
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_sale
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_sale
+msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_purchase
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_purchase
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_purchase
+msgid "A description of the Product that you want to communicate to your vendors. This description will be copied to every Purchase Order, Receipt and Vendor Bill/Refund."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_parent_need_cancel
+msgid "A parent sales order has been canceled on the backend and needs to be canceled."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_parent_id
+msgid "A parent sales order is a sales order replaced by this one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_parent_need_cancel
+msgid "A parent sales order needs cancel"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description
+msgid "A precise description of the Product, used only for internal information purposes."
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.account.tax:0
+#: sql_constraint:prestashop.account.tax.group:0
+#: sql_constraint:prestashop.address:0
+#: sql_constraint:prestashop.binding:0
+#: sql_constraint:prestashop.binding.odoo:0
+#: sql_constraint:prestashop.delivery.carrier:0
+#: sql_constraint:prestashop.groups.pricelist:0
+#: sql_constraint:prestashop.mail.message:0
+#: sql_constraint:prestashop.product.category:0
+#: sql_constraint:prestashop.product.combination:0
+#: sql_constraint:prestashop.product.combination.option:0
+#: sql_constraint:prestashop.product.combination.option.value:0
+#: sql_constraint:prestashop.product.image:0
+#: sql_constraint:prestashop.product.supplierinfo:0
+#: sql_constraint:prestashop.product.template:0
+#: sql_constraint:prestashop.refund:0
+#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.res.currency:0
+#: sql_constraint:prestashop.res.lang:0
+#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.partner.category:0
+#: sql_constraint:prestashop.sale.order:0
+#: sql_constraint:prestashop.sale.order.line:0
+#: sql_constraint:prestashop.sale.order.line.discount:0
+#: sql_constraint:prestashop.sale.order.state:0
+#: sql_constraint:prestashop.shop:0
+#: sql_constraint:prestashop.shop.group:0
+#: sql_constraint:prestashop.supplier:0
+msgid "A record with same ID on PrestaShop already exists."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_product_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_type
+msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
+"A consumable product, on the other hand, is a product for which stock is not managed.\n"
+"A service is a non-material product you provide.\n"
+"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Accept order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_account_id
+msgid "Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_payable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_payable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_payable_id
+msgid "Account Payable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_receivable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_receivable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_receivable_id
+msgid "Account Receivable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.prestashop_binding_tax_group_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_tax_group_tree
+msgid "Account Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_account_id
+msgid "Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_refund_account_id
+msgid "Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Accounting"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date
+msgid "Accounting Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_integration_level
+msgid "Action while validating Delivery Orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_debug
+msgid "Activate PrestaShop's webservice debug mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_bank_account_required
+msgid "Activate this option if this payment method requires you to know the bank account number of your customer or supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_always_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_active
+msgid "Active"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_active_ext
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_active
+msgid "Active in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_purchase_id
+msgid "Add Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_comment
+msgid "Additional Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_type
+msgid "Address Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_address_format
+msgid "Address format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_include_base_amount
+msgid "Affect Base of Subsequent Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_all_qty_delivered
+msgid "All quantities delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_amount
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_amount
+msgid "Amount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual
+msgid "Amount Due"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual_company_signed
+msgid "Amount Due in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual_signed
+msgid "Amount Due in Invoice Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_amount
+msgid "Amount of the order to benefit from a free shipping, expressed in the company currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.delivery.carrier:0
+msgid "An ERP record with same ID already exists on PrestaShop with the same id_reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.account.tax.group:0
+#: sql_constraint:prestashop.address:0
+#: sql_constraint:prestashop.binding.odoo:0
+#: sql_constraint:prestashop.delivery.carrier:0
+#: sql_constraint:prestashop.groups.pricelist:0
+#: sql_constraint:prestashop.mail.message:0
+#: sql_constraint:prestashop.product.category:0
+#: sql_constraint:prestashop.product.combination:0
+#: sql_constraint:prestashop.product.combination.option:0
+#: sql_constraint:prestashop.product.supplierinfo:0
+#: sql_constraint:prestashop.product.template:0
+#: sql_constraint:prestashop.refund:0
+#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.res.currency:0
+#: sql_constraint:prestashop.res.lang:0
+#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.partner.category:0
+#: sql_constraint:prestashop.sale.order:0
+#: sql_constraint:prestashop.sale.order.line:0
+#: sql_constraint:prestashop.sale.order.line.discount:0
+#: sql_constraint:prestashop.sale.order.state:0
+#: sql_constraint:prestashop.supplier:0
+msgid "An ERP record with same ID already exists on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_project_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_related_project_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_analytic_tag_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_analytic_tag_ids
+msgid "Analytic Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_no_auto_thread
+msgid "Answers do not go in the original document discussion thread. This has an impact on the generated message-id."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_sequence
+msgid "Assigns the priority to the list of product vendor."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_attachment_id
+msgid "Attachment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_attachment_ids
+msgid "Attachments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_attachment_ids
+msgid "Attachments are linked to a document through model / res_id and to the message through this field."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_attribute_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_odoo_id
+msgid "Attribute"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_price_extra
+msgid "Attribute Price Extra"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_price_ids
+msgid "Attribute Prices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_attribute_value_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_attribute_value_ids
+msgid "Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_author_id
+msgid "Author"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_id
+msgid "Author of the message. If not set, email_from may hold an email address that did not match any partner."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_author_avatar
+msgid "Author's avatar"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_workflow_process_id
+msgid "Automatic Workflow"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_available
+msgid "Available"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,quantity_field:0
+msgid "Available Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_available_for_order
+msgid "Available for Order Taking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_immediately_usable_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_immediately_usable_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_immediately_usable_qty
+#: selection:prestashop.backend,quantity_field:0
+msgid "Available to promise"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.account_tax_group_connector_prestashop_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "Backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_backend
+msgid "Backends"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_bank_account_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_bank_account_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_bank_account_count
+msgid "Bank"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_bank_id
+msgid "Bank Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_partner_bank_id
+msgid "Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Refund, otherwise a Partner bank account number."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_bank_account_required
+msgid "Bank Account Required"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_bank_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_bank_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_bank_ids
+msgid "Banks"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_barcode
+#: selection:prestashop.backend,matching_product_ch:0
+msgid "Barcode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_lst_price
+msgid "Base price to compute the customer price. Sometimes called the catalog price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image
+msgid "Big-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+msgid "Binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_birthday
+msgid "Birthday"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_bounce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_bounce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_bounce
+msgid "Bounce"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "By clicking on the buttons,\n"
+" you will initiate the\n"
+" synchronizations\n"
+" with PrestaShop.\n"
+" Note that the import or exports\n"
+" won't be done directly,\n"
+" they will create 'Jobs'\n"
+" executed as soon\n"
+" as possible."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_delivered_updateable
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_delivered_updateable
+msgid "Can Edit Delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_ok
+msgid "Can be Purchased"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_rental
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_rental
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_rental
+msgid "Can be Rent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_ok
+msgid "Can be Sold"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_canceled_in_backend
+msgid "Canceled in backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_cancellation_resolved
+msgid "Cancellation from the backend resolved"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_delivery_carrier
+msgid "Carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_carrier
+msgid "Carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_route_from_categ_ids
+msgid "Category Routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_type
+msgid "Category Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_channel_ids
+msgid "Channels"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Check Connection"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_is_company
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_is_company
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_is_company
+msgid "Check if the contact is a company, otherwise it is a person"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_customer
+msgid "Check this box if this contact is a customer."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_supplier
+msgid "Check this box if this contact is a vendor. If it's not checked, purchase people will not see it when encoding a purchase order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_employee
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_employee
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_employee
+msgid "Check this box if this contact is an Employee."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_price_include
+msgid "Check this if the price you use on the product and invoices includes this tax."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_create_variant
+msgid "Check this if you want to create multiple variants for this attribute."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_stock_location_prestashop_synchronized
+msgid "Check this option to synchronize this location with PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_child_id
+msgid "Child Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_child_ids
+msgid "Child Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_child_ids
+msgid "Child Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_children_tax_ids
+msgid "Children Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_city
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_city
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_city
+msgid "City"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Color"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_color
+msgid "Color Index"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_combinations_ids
+msgid "Combinations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_comments
+msgid "Comments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_commercial_partner_id
+msgid "Commercial Entity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_ref_company_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_ref_company_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_ref_company_ids
+msgid "Companies that refers to partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_company_id
+msgid "Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_company_currency_id
+msgid "Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_name
+msgid "Company Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_commercial_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_commercial_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_commercial_company_name
+msgid "Company Name Entity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_type
+msgid "Company Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contact_address
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contact_address
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contact_address
+msgid "Complete Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_quantity
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_quantity
+msgid "Computed Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_confirmation_date
+msgid "Confirmation Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "Connector"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_child_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_child_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_child_ids
+msgid "Contacts"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_body
+msgid "Contents"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contracts_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contracts_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contracts_count
+msgid "Contracts"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_method
+msgid "Control Purchase Bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_standard_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_standard_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_standard_price
+msgid "Cost"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_wholesale_price
+msgid "Cost Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_cost_method
+msgid "Cost method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_standard_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_standard_price
+msgid "Cost of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_standard_price
+msgid "Cost of the product, in the default unit of measure of the product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_cost_method
+msgid "Costing Method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_payment_token_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_payment_token_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_payment_token_count
+msgid "Count Payment Token"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_bounce
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_bounce
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_bounce
+msgid "Counter of the number of bounced emails for this contact"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_country_ids
+msgid "Countries"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_country
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_country_id
+msgid "Country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_phone_code
+msgid "Country Calling Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_code
+msgid "Country Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_country_group_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_country_group_ids
+msgid "Country Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_name
+msgid "Country Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_variant
+msgid "Create variant"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date_add
+msgid "Created At (on PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_date_add
+msgid "Created at (in PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_create_date
+msgid "Created on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_credit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_credit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_credit_limit
+msgid "Credit Limit"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_currency
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_name
+msgid "Currency Code (ISO 4217)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_symbol
+msgid "Currency sign, to be used when printing amounts."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rate
+msgid "Current Rate"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_qty_available
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_qty_available
+msgid "Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_starred
+msgid "Current user has a starred notification linked to this message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_order_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_order_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_id
+msgid "Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_delay
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_stock_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_stock_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_stock_customer
+msgid "Customer Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_customer_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_customer_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_customer_payment_mode_id
+msgid "Customer Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_payment_term_id
+msgid "Customer Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_partner_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_partner_ref
+msgid "Customer Ref"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_client_order_ref
+msgid "Customer Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_taxes_id
+msgid "Customer Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_date
+msgid "Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_date_format
+msgid "Date Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_last_post
+msgid "Date of the last message posted on the record."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_confirmation_date
+msgid "Date on which the sale order is confirmed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_debug
+msgid "Debug"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_decimal_point
+msgid "Decimal Separator"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_decimal_places
+msgid "Decimal places"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_default_on
+msgid "Default On"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_uom_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_uom_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_uom_id
+msgid "Default Unit of Measure used for all stock operation."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_uom_po_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_uom_po_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_uom_po_id
+msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Default prestashop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_default_shop_id
+msgid "Default shop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_default_shop_id
+msgid "Default shop id"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_default_url
+msgid "Default url"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_trust
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_trust
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_trust
+msgid "Degree of trust you have in this debtor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_delivered
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_delivered
+msgid "Delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_delivery_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_delivery_count
+msgid "Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_shipping_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_shipping_id
+msgid "Delivery Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_customer_lead
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_customer_lead
+msgid "Delivery Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_delivery_carrier_id
+msgid "Delivery Method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_delivery_count
+msgid "Delivery Orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_id
+msgid "Delivery Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_partner_shipping_id
+msgid "Delivery address for current invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_partner_shipping_id
+msgid "Delivery address for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_odoo_id
+msgid "Delivery carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Delivery method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_route_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_route_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_route_ids
+msgid "Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_html
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_name
+msgid "Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_picking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_picking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_picking
+msgid "Description on Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+msgid "Descriptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_value_sequence
+msgid "Determine the display order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_position
+msgid "Determines where the currency symbol should be placed after or before the amount."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_type_tax_use
+msgid "Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_direction
+msgid "Direction"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_discount
+msgid "Discount (%)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_discount_product_id
+msgid "Discount Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_discount_policy
+msgid "Discount policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_show_price
+msgid "Display Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date_due
+msgid "Due Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,help:connector_prestashop.action_prestashop_sale_order_state_form
+msgid "Each state can be linked between PrestaShop and Odoo.\n"
+" When a sale order state change, the connector will update the sale order in PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_partner_share
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_partner_share
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_partner_share
+msgid "Either customer (no user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_email
+msgid "Email"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_notify_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_notify_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_notify_email
+msgid "Email Messages and Notifications"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_email_from
+msgid "Email address of the sender. This field is set when no matching partner is found and replaces the author_id field in the chatter."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_employee
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_employee
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_employee
+msgid "Employee"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_purchase_id
+msgid "Encoding help. When selected, the associated purchase order lines are added to the vendor bill. Several PO can be selected."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_date_end
+msgid "End Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_date_end
+msgid "End date for this vendor price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prod_environment
+msgid "Environment"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:148
+#: code:addons/connector_prestashop/models/product_template/importer.py:157
+#, python-format
+msgid "Error! Multiple products found with combinations reference %s. Maybe consider to update you datas"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:166
+#, python-format
+msgid "Error! Multiple templates are found with combinations reference. Maybe consider to change matching option"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_delivery_price
+msgid "Estimated Delivery Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_exception_ids
+msgid "Exceptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_expense_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_expense_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_expense_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_expense_id
+msgid "Expense Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_validity_date
+msgid "Expiration Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Export in background"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "Export quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Export stock quantities"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Export tracking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_export_tracking
+msgid "Export tracking numbers to PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_values
+msgid "External Attribute Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_attribute
+msgid "External Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_categories
+msgid "External Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_languauges
+msgid "External Languages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_objects
+msgid "External Objects"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_product_templates
+msgid "External Product Templates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_products
+msgid "External Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_categ_ids
+msgid "Extra categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/auto_matching_importer.py:43
+#, python-format
+msgid "Failed to query %s via PS webservice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_starred_partner_ids
+msgid "Favorited By"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_fax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_fax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_fax
+msgid "Fax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_extension
+msgid "File extension"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_filename
+msgid "Filename"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_carrier_id
+msgid "Fill this field if you plan to invoice the shipping based on picking."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_fiscal_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_fiscal_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_position_id
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_fixed_price
+msgid "Fixed Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_removal_strategy_id
+msgid "Force Removal Strategy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_virtual_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_virtual_available
+msgid "Forecast Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,quantity_field:0
+msgid "Forecast quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_virtual_available
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_virtual_available
+msgid "Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_virtual_available
+msgid "Forecasted Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_email_formatted
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_email_formatted
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_email_formatted
+msgid "Format email address \"Name \""
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_email_formatted
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_email_formatted
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_email_formatted
+msgid "Formatted Email"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_free_if_more_than
+msgid "Free if Order total is more than"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_link_rewrite
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_link_rewrite
+msgid "Friendly URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_email_from
+msgid "From"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_main
+msgid "Full-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_packaging_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_packaging_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_packaging_ids
+msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sequence
+msgid "Gives the sequence order when displaying a product list"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_hs_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_hs_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_hs_code
+msgid "HS Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_html
+msgid "HTML description from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_has_checkpoint
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_has_checkpoint
+msgid "Has Checkpoint"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_need_cancel
+msgid "Has been canceled on the backend, need to be canceled."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_has_outstanding
+msgid "Has outstanding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_has_unreconciled_entries
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_has_unreconciled_entries
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_has_unreconciled_entries
+msgid "Has unreconciled entries"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,help:connector_prestashop.action_prestashop_sale_order_state_form
+msgid "Here are the sale order states mapped with e-commerce."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_id
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6784
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_id
+msgid "ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_id
+msgid "ID on PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_im_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_im_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_iso_code
+msgid "ISO code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_id_attribute_group
+msgid "Id attribute group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Id ref."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_unread
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_needaction
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_always_available
+msgid "If checked, this product is considered always available"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_opt_out
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_opt_out
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_opt_out
+msgid "If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. Filter 'Available for Mass Mailing' allows users to filter the partners when performing mass mailing."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_valuation
+msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'. The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_valuation
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_valuation
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_valuation
+msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_team_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_team_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_team_id
+msgid "If set, sale team used notably for sales and assignations related to this partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_include_base_amount
+msgid "If set, taxes which are computed after this one will be computed based on the price tax included."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_analytic
+msgid "If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_out_of_stock
+msgid "If stock shortage"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_free_if_more_than
+msgid "If the order is more expensive than a certain amount, the customer can benefit from a free shipping"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_lang
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_lang
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_lang
+msgid "If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_importable_order_state_ids
+msgid "If valued only orders matching these states will be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_payment_term_id
+msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date_due
+msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_ignore_exception
+msgid "Ignore Exceptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image
+msgid "Image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image
+msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_medium
+msgid "Image of the product variant (Medium-sized image of product template if false)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_small
+msgid "Image of the product variant (Small-sized image of product template if false)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_path
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_path
+msgid "Image path"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_url
+msgid "Image remote URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_file_db_store
+msgid "Image stored in database"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_name
+msgid "Image title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_orders_since
+msgid "Import Orders since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_products_since
+msgid "Import Products since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_refunds_since
+msgid "Import Refunds since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_suppliers_since
+msgid "Import Suppliers since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import customer groups and customers since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import in background"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_image/importer.py:85
+#, python-format
+msgid "Import of image id `%s` failed. Error: `%s`"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_image/importer.py:93
+#, python-format
+msgid "Import of image id `%s` of PrestaShop product with id `%s` failed. Error: `%s`"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:134
+#, python-format
+msgid "Import of the order with PS ID=%s canceled because its state is not importable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_partners_since
+msgid "Import partners since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import payment modes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import product categories and products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import refunds"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import sale orders since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import stock quantities"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import suppliers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_importable_order_state_ids
+msgid "Importable sale order states"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Imports"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_id_reference
+msgid "In PrestaShop, carriers can be copied with the same 'Reference ID' (only the last copied carrier will be synchronized with the ERP)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_analytic
+msgid "Include in Analytic Cost"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_price_include
+msgid "Included in Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_income_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_income_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_income_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_income_id
+msgid "Income Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_incoming_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_incoming_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_incoming_qty
+msgid "Incoming"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_incoterms_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_incoterm
+msgid "Incoterms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_incoterms_id
+msgid "Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+msgid "Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_supplierinfo
+msgid "Information about a product vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_parent_id
+msgid "Initial thread message."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_integration_level
+msgid "Integration Level"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_ref
+msgid "Internal Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_barcode
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_barcode
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_barcode
+msgid "International Article Number used for product identification."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_incoterm
+msgid "International Commercial Terms are a series of predefined commercial terms used in international transactions."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_inventory
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_inventory
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_inventory
+msgid "Inventory Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_location
+msgid "Inventory Locations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_valuation
+msgid "Inventory Valuation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_invoice
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_warn
+msgid "Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_invoice_id
+msgid "Invoice Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date_invoice
+msgid "Invoice Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_invoice_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_invoice_lines
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_invoice_lines
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_shipping_on_delivery
+msgid "Invoice Shipping on Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_invoice_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_invoice_status
+msgid "Invoice Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_partner_invoice_id
+msgid "Invoice address for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_refund_invoice_id
+msgid "Invoice for which this invoice is the refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_invoiced
+msgid "Invoiced"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_ids
+msgid "Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_invoice_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_invoice_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_invoice_policy
+msgid "Invoicing Policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_is_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_is_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_is_company
+msgid "Is a Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_customer
+msgid "Is a Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_is_delivery
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_is_delivery
+msgid "Is a Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier
+msgid "Is a Vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_reconciled
+msgid "It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_sent
+msgid "It indicates that the invoice has been sent."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_function
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_function
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_function
+msgid "Job Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_move_id
+msgid "Journal Entry"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_move_name
+msgid "Journal Entry Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_journal_item_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_journal_item_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_journal_item_count
+msgid "Journal Items"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_fixed_price
+msgid "Keep empty if the pricing depends on the advanced pricing per destination"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date_invoice
+msgid "Keep empty to use the current date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date
+msgid "Keep empty to use the invoice date."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_description
+msgid "Label on Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_lang
+msgid "Language"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_res_langs
+#: model:ir.model,name:connector_prestashop.model_res_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_language_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Languages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_last_post
+msgid "Last Message Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_quantity
+msgid "Last computed quantity to send on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_quantity
+msgid "Last computed quantity to send to PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Last synchro"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_last_time_entries_checked
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_last_time_entries_checked
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_last_time_entries_checked
+msgid "Last time the invoices & payments matching was performed for this partner. It is set either if there's not at least an unreconciled debit and an unreconciled credit or if you click the \"Done\" button."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_last_time_entries_checked
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_last_time_entries_checked
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_last_time_entries_checked
+msgid "Latest Invoices & Payments Matching Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_layout_category_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_layout_category_sequence
+msgid "Layout Sequence"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_delay
+msgid "Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_left
+msgid "Left Parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_left
+msgid "Left parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_attribute_line_ids
+msgid "Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_move_id
+msgid "Link to the automatically generated Journal Items."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_code
+msgid "Locale Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_location
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_location_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_location_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_location_id
+msgid "Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_stock_location_id
+msgid "Location used to import stock quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Locked"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_packaging_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_packaging_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_packaging_ids
+msgid "Logistical Units"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Main Configuration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_main_exception_id
+msgid "Main Exception"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_id
+msgid "Main Supplier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_id
+msgid "Main Supplier who has highest priority in Supplier List."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_main_template_id
+msgid "Main Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_track_service
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_track_service
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_track_service
+msgid "Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
+"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
+"Create a task and track hours: Create a task on the sale order validation and track the work hours."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_validity_date
+msgid "Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_margin
+msgid "Margin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_product_template
+msgid "Match product template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_customer
+msgid "Matching Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_product_ch
+msgid "Matching Field for product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Matching option for Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Matching option for partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_medium
+msgid "Medium-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_medium
+msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_medium
+msgid "Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_medium
+msgid "Medium-sized image. It is automatically resized as a 128 x 128 px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_mail_message
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_odoo_id
+msgid "Message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_record_name
+msgid "Message Record Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_warn_msg
+msgid "Message for Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_warn_msg
+msgid "Message for Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_line_warn_msg
+msgid "Message for Purchase Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_warn_msg
+msgid "Message for Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_line_warn_msg
+msgid "Message for Sales Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_picking_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_picking_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_picking_warn_msg
+msgid "Message for Stock Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_message_type
+msgid "Message type: email for email message, notification for system message, comment for other messages such as user replies"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_message_id
+msgid "Message unique identifier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_message_id
+msgid "Message-Id"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_description
+msgid "Meta description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_keywords
+msgid "Meta keywords"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_title
+msgid "Meta title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_min_qty
+msgid "Minimal Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_orderpoint_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_orderpoint_ids
+msgid "Minimum Stock Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mobile
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_mobile
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_mobile
+msgid "Mobile"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_name
+msgid "Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_record_name
+msgid "Name get of the related document."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_name_ext
+msgid "Name in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_needaction
+msgid "Need Action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_need_cancel
+msgid "Need to be canceled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_newsletter
+msgid "Newsletter"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_no_export
+msgid "No export to PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/prestashop_backend/common.py:396
+#, python-format
+msgid "No internal location found to compute the product quantity."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/importer.py:469
+#, python-format
+msgid "No language could be found for the Prestashop lang with id \"%s\". Run \"Synchronize base data\" again."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/importer.py:448
+#, python-format
+msgid "No language mapping defined. Run \"Synchronize base data\"."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_no_auto_thread
+msgid "No threading for answers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_comment
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_comment
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_comment
+msgid "Notes"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:305
+#: code:addons/connector_prestashop/components/exporter.py:312
+#, python-format
+msgid "Nothing to export."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_notification_ids
+msgid "Notifications"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_number
+msgid "Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_customer_lead
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_discount_customer_lead
+msgid "Number of days between the order confirmation and the shipping of the products to the customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_odoo_id
+msgid "Odoo Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_product_templates
+msgid "Odoo Product Templates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_name
+msgid "Odoo State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_openerp_state_ids
+msgid "Odoo States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_odoo_id
+msgid "Odoo binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_categories
+msgid "Odoo product Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_purchase_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_purchase_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_purchase_method
+msgid "On ordered quantities: control bills based on ordered quantities.\n"
+"On received quantities: control bills based on received quantity."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Once imported,\n"
+" some types of records,\n"
+" like the products\n"
+" or categories,\n"
+" need a manual review.\n"
+" You will find the list\n"
+" of the\n"
+" new records to review\n"
+" in the menu 'Connectors > Checkpoint'."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_opt_out
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_opt_out
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_opt_out
+msgid "Opt-Out"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_tag_ids
+msgid "Optional tags you may want to assign for custom reporting"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Options"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_date_order
+msgid "Order Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_order_line
+msgid "Order Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_name
+msgid "Order Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_state
+msgid "Order Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_invoice_policy
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_invoice_policy
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_invoice_policy
+msgid "Ordered Quantity: Invoice based on the quantity the customer ordered.\n"
+"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reference
+msgid "Original reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_outgoing_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_outgoing_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_outgoing_qty
+msgid "Outgoing"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_mail_server_id
+msgid "Outgoing mail server"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_verbose
+msgid "Output requests details in the logs"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_outstanding_credits_debits_widget
+msgid "Outstanding credits debits widget"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_id
+msgid "Owner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_model
+msgid "Owner model"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_packaging
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_packaging
+msgid "Packaging"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reconciled
+msgid "Paid/Reconciled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_id
+msgid "Parent Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_parent_id
+msgid "Parent Message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_parent_id
+msgid "Parent Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_category/importer.py:93
+#, python-format
+msgid "Parent category for `%s` cannot be imported. Error: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_parent_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_parent_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_parent_name
+msgid "Parent name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_partner
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_odoo_id
+msgid "Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_odoo_id
+msgid "Partner Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_partner_category
+msgid "Partner Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_partner_ids
+msgid "Partners"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_needaction_partner_ids
+msgid "Partners with Need Action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_debit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_debit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_debit_limit
+msgid "Payable Limit"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_payment_mode_id
+msgid "Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_move_line_ids
+msgid "Payment Move Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reference_type
+msgid "Payment Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_payment_term_id
+msgid "Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_payment_token_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_payment_token_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_payment_token_ids
+msgid "Payment Tokens"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_ids
+msgid "Payments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payments_widget
+msgid "Payments widget"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_phone
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_phone
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_phone
+msgid "Phone"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_picking_ids
+msgid "Picking associated to this sale"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/res_partner/importer.py:213
+#, python-format
+msgid "Please, check the VAT number: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_notify_email
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_notify_email
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_notify_email
+msgid "Policy to receive emails for new messages pushed to your personal Inbox:\n"
+"- Never: no emails are sent\n"
+"- All Messages: for every notification you receive in your Inbox"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_position
+msgid "Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_potential_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_potential_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_potential_qty
+#: selection:prestashop.backend,quantity_field:0
+msgid "Potential"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_root
+#: model:ir.ui.view,arch_db:connector_prestashop.view_order_connector_prestashop_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_partner_category_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_stock_form
+msgid "PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.account_tax_group_connector_prestashop_tree_view
+msgid "PrestaShop Account Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_address_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_address_tree
+msgid "PrestaShop Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_address_bind_ids
+msgid "PrestaShop Address Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_backend_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_tree
+msgid "PrestaShop Backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_backend
+msgid "PrestaShop Backend Configuration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_backend
+msgid "PrestaShop Backends"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.image_prestashop_binding_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.prestashop_binding_tax_group_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_prestashop_binding_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_order_connector_prestashop_form
+msgid "PrestaShop Binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_binding
+msgid "PrestaShop Binding (abstract)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_binding_odoo
+msgid "PrestaShop Binding with Odoo binding (abstract)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_invoice_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_base_multi_image_image_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_compose_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_mail_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_attribute_value_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_template_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_currency_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_lang_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_line_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_stock_warehouse_prestashop_bind_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_template_common_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_partner_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "PrestaShop Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_attribute_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_combinations_bind_ids
+msgid "PrestaShop Bindings (combinations)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_delivery_carrier
+msgid "PrestaShop Carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_carrier
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "PrestaShop Carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_template_prestashop_default_category_id
+msgid "PrestaShop Default Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_delivery_number
+msgid "PrestaShop Delivery Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_discount_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_discount_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_line_prestashop_discount_bind_ids
+msgid "PrestaShop Discount Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_discount_line_ids
+msgid "PrestaShop Discount Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_group_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_group_ids
+msgid "PrestaShop Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_prestashop_id
+msgid "PrestaShop ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_location_prestashop_inherited_form
+msgid "PrestaShop Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_invoice_number
+msgid "PrestaShop Invoice Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_order_line_ids
+msgid "PrestaShop Order Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_partner_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_tree
+msgid "PrestaShop Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_tree
+msgid "PrestaShop Partner Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_position
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_position
+msgid "PrestaShop Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_tree_view
+msgid "PrestaShop Product Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_order_id
+msgid "PrestaShop Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_shop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_shop_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_tree
+msgid "PrestaShop Shop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_shop_group
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_shop_group_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_group_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_group_tree
+msgid "PrestaShop Shop Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_shop_group
+msgid "PrestaShop Shop Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_shop
+msgid "PrestaShop Shops"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_prestashop_state_id
+msgid "PrestaShop State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_vat_number
+msgid "PrestaShop VAT"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:82
+#, python-format
+msgid "PrestaShop amount: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_supplierinfo_prestashop_bind_ids
+msgid "PrestaShop bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_default_category_id
+msgid "PrestaShop default category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_supplier_bind_ids
+msgid "PrestaShop supplier bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_prestashop_groups_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_pricelist_prestashop_groups_bind_ids
+msgid "PrestaShop user groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_attributes
+msgid "Prestashop Options / Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_values
+msgid "Prestashop Options/Attribute Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_products
+msgid "Prestashop Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_form
+msgid "Prestashop Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_price
+msgid "Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_creditor_price_difference_categ
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_creditor_price_difference
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_value_price_extra
+msgid "Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_impact_price
+msgid "Price Impact"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce
+msgid "Price Reduce"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce_taxexcl
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce_taxexcl
+msgid "Price Reduce Tax excl"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce_taxinc
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce_taxinc
+msgid "Price Reduce Tax inc"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_item_ids
+msgid "Pricelist Items"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_name
+msgid "Pricelist Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_pricelist_id
+msgid "Pricelist for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_pricelist_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_pricelist_item_ids
+msgid "Pricelist item ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_pricelist_id
+msgid "Pricelist used in sales orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price_rule_ids
+msgid "Pricing Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_categ_id
+msgid "Pricing/Primary Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+msgid "Primary Data"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_procurement_group_id
+msgid "Procurement Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_procurement
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_procurement
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_procurement
+msgid "Procurement Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_procurement_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_procurement_ids
+msgid "Procurements"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_product
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_product_id
+msgid "Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_attribute
+msgid "Product Attribute"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_attribute_line_ids
+msgid "Product Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_category
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_odoo_id
+msgid "Product Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_template
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_tmpl_id
+msgid "Product Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_type
+msgid "Product Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_odoo_id
+msgid "Product image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_id
+msgid "Product variant"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:365
+#, python-format
+msgid "Product(s) used in the sales order could not be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_production
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_production
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_production
+msgid "Production Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_ids
+msgid "Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_delivery_type
+msgid "Provider"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_public_name
+msgid "Public Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_lst_price
+msgid "Public Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_purchase
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_purchase
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_purchase
+msgid "Purchase Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_warn
+msgid "Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_line_warn
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_uom_po_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_uom_po_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_uom_po_id
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_uom_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_uom_qty
+msgid "Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_qty_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_qty_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_qty_available
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_quantity_field
+msgid "Quantity field"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_incoming_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_incoming_qty
+msgid "Quantity of products that are planned to arrive.\n"
+"In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_outgoing_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_outgoing_qty
+msgid "Quantity of products that are planned to leave.\n"
+"In a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_potential_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_potential_qty
+msgid "Quantity of this Product that could be produced using the materials already at hand."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_potential_qty
+msgid "Quantity of this Product that could be produced using the materials already at hand. If the product has several variants, this will be the biggest quantity that can be made for a any single variant."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_quant
+msgid "Quants"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Quotation"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Quotation Sent"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Radio"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rate_ids
+msgid "Rates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_expense_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_expense_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_expense_policy
+msgid "Re-Invoice Expenses"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reception_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reception_count
+msgid "Receipt"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_partner_ids
+msgid "Recipients"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/deleter.py:21
+#, python-format
+msgid "Record %s deleted on PrestaShop on resource %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:320
+#, python-format
+msgid "Record exported with ID %s on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:318
+#, python-format
+msgid "Record on PrestaShop have not been created"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:288
+#, python-format
+msgid "Record to export does no longer exist."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,matching_product_ch:0
+msgid "Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_id_reference
+msgid "Reference ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_origin
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_origin
+msgid "Reference of the document that produced this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_name
+msgid "Reference/Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_ref_id
+msgid "Referenced Owner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_refund_journal_id
+msgid "Refund Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Refuse order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_parent_id
+msgid "Related Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_res_id
+msgid "Related Document ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_model
+msgid "Related Document Model"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual_company_signed
+msgid "Remaining amount due in the currency of the company."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual_signed
+msgid "Remaining amount due in the currency of the invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual
+msgid "Remaining amount due."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_nbr_reordering_rules
+msgid "Reordering Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reordering_max_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reordering_max_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reordering_max_qty
+msgid "Reordering max qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reordering_min_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reordering_min_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reordering_min_qty
+msgid "Reordering min qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_reply_to
+msgid "Reply email address. Setting the reply_to bypasses the automatic thread creation."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_reply_to
+msgid "Reply-To"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Reset To draft Connection"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_tree
+msgid "Resync"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_right
+msgid "Right Parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_right
+msgid "Right parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rounding
+msgid "Rounding Factor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_route_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_route_id
+msgid "Route"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_route_ids
+msgid "Routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_rule_group
+msgid "Rule group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_sale
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_sale
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_sale
+msgid "Sale Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_odoo_id
+msgid "Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_odoo_id
+msgid "Sale Order State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_sale_order_state_form
+#: model:ir.ui.menu,name:connector_prestashop.sale_order_state_tree_menu
+msgid "Sale Order States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_odoo_id
+msgid "Sale Order line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_list_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_lst_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_list_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_lst_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_list_price
+msgid "Sale Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_product_pricelist
+msgid "Sale Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_workflow_process_id
+msgid "Sale Workflow Process"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_tree
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_tree
+msgid "Sale order State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Sales"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_warn
+#: selection:sale.order.state.list,name:0
+msgid "Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_line
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_line_warn
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_sale_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_team_id
+msgid "Sales Team"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_sale_team_id
+msgid "Sales Team assigned to the imported sales orders."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_salesman_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_salesman_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_user_id
+msgid "Salesperson"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_layout_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_layout_category_id
+msgid "Section"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Select"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_categ_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_categ_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_categ_id
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_customer_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_customer_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_customer_payment_mode_id
+msgid "Select the default payment mode for this customer."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_supplier_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_supplier_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_supplier_payment_mode_id
+msgid "Select the default payment mode for this supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_sale_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_sale_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_sale_warn
+msgid "Selecting the \"Warning\" option will notify user with the message, Selecting \"Blocking Message\" will throw an exception with the message and block the flow. The Message has to be written in the next field."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_self
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_self
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_self
+msgid "Self"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_ids
+msgid "Seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_sent
+msgid "Sent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_grouping
+msgid "Separator Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_removal_strategy_id
+msgid "Set a specific removal strategy that will be used regardless of the source location for this product category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_tax_adjustment
+msgid "Set this field to true if this tax can be used in the tax adjustment wizard, used to manually fill some data in the tax declaration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_prod_environment
+msgid "Set to True if your credentials are certified for production."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_partner_share
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_partner_share
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_partner_share
+msgid "Share Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_picking_policy
+msgid "Shipping Policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_shipping_product_id
+msgid "Shipping Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_shop_ids
+msgid "Shops"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_short_html
+msgid "Short Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_on_sale
+msgid "Show on sale icon"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_show_technical
+msgid "Show technical"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_type
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_valid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_valid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_valid
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_url
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_url
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_url
+msgid "Signup URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_expiration
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_expiration
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_expiration
+msgid "Signup expiration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_token
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_token
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_token
+msgid "Signup token"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_small
+msgid "Small-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_small
+msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_avatar
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_small
+msgid "Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_small
+msgid "Small-sized image. It is automatically resized as a 64 x 64 px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_quantity_field
+msgid "Some of this options may need some additionnal modules you'll have to install by yourself from https://github.com/OCA/stock-logistics-warehouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_origin
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_origin
+msgid "Source Document"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_product_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_ok
+msgid "Specify if the product can be selected in a sales order line."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_cost_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_cost_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_cost_method
+msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
+" Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
+" Real Price: The cost price displayed is the price of the last outgoing product (will be use in case of inventory loss for example)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_cost_method
+msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
+"Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
+"Real Price: The cost price displayed is the price of the last outgoing product (will be used in case of inventory loss for example)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_hs_code
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_hs_code
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_hs_code
+msgid "Standardized code for international shipping and goods declaration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_starred
+msgid "Starred"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_date_start
+msgid "Start Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_date_start
+msgid "Start date for this vendor price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_state_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "State name..."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_state_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_state_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_form
+msgid "States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state
+msgid "Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Stock"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_input
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_account_input_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_account_input
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_account_input
+msgid "Stock Input Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_journal
+msgid "Stock Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_stock_location_id
+msgid "Stock Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_output
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_account_output_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_account_output
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_account_output
+msgid "Stock Output Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_picking_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_picking_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_picking_warn
+msgid "Stock Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_valuation_account_id
+msgid "Stock Valuation Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_immediately_usable_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_immediately_usable_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_immediately_usable_qty
+msgid "Stock for this Product that can be safely proposed for sale to Customers.\n"
+"The definition of this value can be configured to suit your needs"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_stock_move_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_stock_move_ids
+msgid "Stock move ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_stock_quant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_stock_quant_ids
+msgid "Stock quant ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_storage
+msgid "Storage"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_shop
+msgid "Stores"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_street
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_street
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_street
+msgid "Street"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_street2
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_street2
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_street2
+msgid "Street2"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_subject
+msgid "Subject"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_subtotal
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_subtotal
+msgid "Subtotal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_subtype_id
+msgid "Subtype"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_purchase_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_purchase_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_purchase_currency_id
+msgid "Supplier Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_delay
+msgid "Supplier Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_qty
+msgid "Supplier Min Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier_payment_mode_id
+msgid "Supplier Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_odoo_id
+msgid "Supplier info"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_symbol
+msgid "Symbol"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_position
+msgid "Symbol Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_stock_location_prestashop_synchronized
+msgid "Sync with PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchonize datas like language, country, currency, tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchonize shop and shop groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchronize Base Data"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchronize Metadata"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_vat
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_vat
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_vat
+msgid "TIN"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_name
+msgid "Tag Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tag_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_category_id
+msgid "Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_tax
+msgid "Tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_account_id
+msgid "Tax Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_refund_account_id
+msgid "Tax Account on Refunds"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_amount_type
+msgid "Tax Computation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_tax_group_id
+msgid "Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_tax_group_form
+#: model:ir.ui.menu,name:connector_prestashop.menu_action_tax_group_form
+msgid "Tax Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_vat
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_vat
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_vat
+msgid "Tax Identification Number. Fill it if the company is subjected to taxes. Used by the some of the legal statements."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_tax_line_ids
+msgid "Tax Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_name
+msgid "Tax Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_type_tax_use
+msgid "Tax Scope"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tax_adjustment
+msgid "Tax adjustment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_tax_group_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_tax_group_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_tax_group_id
+msgid "Tax groups are used with some external system like Prestashop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_tax_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_tax_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_tax_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_tax_id
+msgid "Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_move_name
+msgid "Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_pricelist_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_pricelist_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_pricelist_id
+msgid "Technical field. Used for searching on pricelists, not stored in database."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_stock_move_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_stock_quant_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_stock_move_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_stock_quant_ids
+msgid "Technical: used to compute quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_odoo_id
+msgid "Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_note
+msgid "Terms and conditions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_code
+msgid "The ISO country code in two chars. \n"
+"You can use this field for quick search."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_grouping
+msgid "The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount
+msgid "The amount computed in Odoo doesn't match with the amount in PrestaShop.\n"
+"\n"
+"Cause:\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"\n"
+"Resolution:\n"
+"Check your taxes and fiscal positions configuration and correct them if necessary."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_project_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_related_project_id
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_delay
+msgid "The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_commercial_partner_id
+msgid "The commercial entity that will be used on Journal Entries for this invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:126
+#, python-format
+msgid "The configuration is missing for sale order state with PS ID=%s.\n"
+"\n"
+"Resolution:\n"
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Synchronize base data'."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:83
+#, python-format
+msgid "The configuration is missing for the Payment Mode '%s'.\n"
+"\n"
+"Resolution:\n"
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Import payment modes', or:\n"
+"\n"
+"- Go to 'Invoicing > Configuration > Management > Payment Modes'\n"
+"- Create a new Payment Mode with name '%s'\n"
+"-Eventually link the Payment Method to an existing Workflow Process or create a new one."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:529
+#, python-format
+msgid "The default category could not be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_position_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_position_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_position_id
+msgid "The fiscal position will determine taxes and accounts used for the partner."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_name
+msgid "The full name of the country."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_user_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_user_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_user_id
+msgid "The internal user that is in charge of communicating with this contact if any."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_min_qty
+msgid "The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_shop_name
+msgid "The name of the method on the backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_name
+msgid "The name that will be used on account move lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_product_count
+msgid "The number of products under this category (Does not consider the children categories)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_account_id
+msgid "The partner account used for this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_has_unreconciled_entries
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_has_unreconciled_entries
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_has_unreconciled_entries
+msgid "The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_reference
+msgid "The partner reference of this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_tz
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_tz
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_tz
+msgid "The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_price
+msgid "The price to purchase a product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_rate
+msgid "The rate of the currency to the currency of rate 1."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:35
+#, python-format
+msgid "The refund for order %s has a different amount in PrestaShop and in Odoo."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:60
+#, python-format
+msgid "The refund journal must be configured on the PrestaShop Backend."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_lst_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_lst_price
+msgid "The sale price is managed from the product template. Click on the 'Variant Prices' button to set the extra attribute prices."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_matching_customer
+msgid "The selected fields will be matched to the ref field of the partner. Please adapt your datas consequently."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_sequence
+msgid "The sequence field is used to define order in which the tax lines are applied."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount_tax
+msgid "The tax amount computed in Odoo doesn't match with the tax amount in PrestaShop.\n"
+"\n"
+"Cause:\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"\n"
+"Resolution:\n"
+"Check your taxes and fiscal positions configuration and correct them if necessary."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_tz
+msgid "The timezone of the backend. Used to synchronize the sale order date."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_volume
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_volume
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_volume
+msgid "The volume in m3."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_weight
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_weight
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_weight
+msgid "The weight of the contents in Kg, not including any packaging, etc."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_iso_code
+msgid "This ISO code is the name of po files to use for translations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_expense_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_expense_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_expense_id
+msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_income_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_income_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_income_id
+msgid "This account will be used for invoices instead of the default one to value sales for the current product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_expense_categ_id
+msgid "This account will be used for invoices to value expenses."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_income_categ_id
+msgid "This account will be used for invoices to value sales."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_payable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_payable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_payable_id
+msgid "This account will be used instead of the default one as the payable account for the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_receivable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_receivable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_receivable_id
+msgid "This account will be used instead of the default one as the receivable account for the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_creditor_price_difference_categ
+msgid "This account will be used to value price difference between purchase price and accounting cost."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_creditor_price_difference
+msgid "This account will be used to value price difference between purchase price and cost price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_uom
+msgid "This comes from the product form."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_purchase_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_purchase_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_purchase_currency_id
+msgid "This currency will be used, instead of the default one, for purchases from the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_delivery_carrier_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_delivery_carrier_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_delivery_carrier_id
+msgid "This delivery method will be used when invoicing from picking."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image
+msgid "This field holds the image used as avatar for this contact, limited to 1024x1024px"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_variant
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_variant
+msgid "This field holds the image used as image for the product variant, limited to 1024x1024px."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image
+msgid "This field holds the image used as image for the product, limited to 1024x1024px."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_partner_mixin_default_category_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_default_category_id
+msgid "This field is synchronized with the field 'Default customer group' in PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_code
+msgid "This field is used to set/get locales for user"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_qty
+msgid "This is minimum quantity to purchase from Main Supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_delay
+msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_price_extra
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_price_extra
+msgid "This is the sum of the extra price of all attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_supplier_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_supplier_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_supplier_payment_term_id
+msgid "This payment term will be used instead of the default one for purchase orders and vendor bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_payment_term_id
+msgid "This payment term will be used instead of the default one for sale orders and customer invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_margin
+msgid "This percentage will be added to the shipping price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_product_pricelist
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_product_pricelist
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_product_pricelist
+msgid "This pricelist will be used, instead of the default one, for sales to the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_customer
+msgid "This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_supplier
+msgid "This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_production
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_production
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_production
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_procurement
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_procurement
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_procurement
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_inventory
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_inventory
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_inventory
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_code
+msgid "This vendor's product code will be used when printing a request for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_name
+msgid "This vendor's product name will be used when printing a request for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_thousands_sep
+msgid "Thousands Separator"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_time_format
+msgid "Time Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_tz
+msgid "Timezone"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_tz_offset
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_tz_offset
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_tz_offset
+msgid "Timezone offset"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_title
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_title
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_title
+msgid "Title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tmpl_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tmpl_seller_ids
+msgid "Tmpl seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_to_invoice
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_to_invoice
+msgid "To Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+msgid "To show PrestaShop binding go to:"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_total
+msgid "Total"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,name:connector_prestashop.excep_order_wrong_total_amount
+msgid "Total Amount differs from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_total_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_total_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_total_invoiced
+msgid "Total Invoiced"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_debit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_debit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_debit
+msgid "Total Payable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_credit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_credit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_credit
+msgid "Total Receivable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,name:connector_prestashop.excep_order_wrong_total_amount_tax
+msgid "Total Tax Amount differs from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_amount
+msgid "Total amount in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_amount_total_company_signed
+msgid "Total amount in the currency of the company, negative for credit notes."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_amount_total_signed
+msgid "Total amount in the currency of the invoice, negative for credit notes."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_credit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_credit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_credit
+msgid "Total amount this customer owes you."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_debit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_debit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_debit
+msgid "Total amount you have to pay to this vendor."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total_company_signed
+msgid "Total in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total_signed
+msgid "Total in Invoice Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_total_route_ids
+msgid "Total routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_shipping_tax_excluded
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_shipping_tax_included
+msgid "Total shipping in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_amount_tax
+msgid "Total tax in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_track_service
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_track_service
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_track_service
+msgid "Track Service"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_tracking_value_ids
+msgid "Tracked values are stored in a separate model. This field allow to reconstruct the tracking and to generate statistics on the model."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tracking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tracking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_tracking
+msgid "Tracking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_tracking_value_ids
+msgid "Tracking values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_translatable
+msgid "Translatable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_message_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_group_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_type
+msgid "Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/prestashop_shop_group/importer.py:27
+#, python-format
+msgid "Undefined"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_unit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_unit
+msgid "Unit Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_uom
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_uom
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_untaxed
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_untaxed
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_untaxed_signed
+msgid "Untaxed Amount in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date_upd
+msgid "Updated At (on PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_date_upd
+msgid "Updated at (in PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_taxes_included
+msgid "Use tax included prices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_type
+msgid "Used to select automatically the right address according to the context in sales and purchases documents."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_user_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_user_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_user_ids
+msgid "Users"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_currency_id
+msgid "Utility field to express amount currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_valuation
+msgid "Valuation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_name
+msgid "Value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_ids
+msgid "Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_variant
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_variant
+msgid "Variant Image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price_extra
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_price_extra
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_variant_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_variant_seller_ids
+msgid "Variant seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_product_ids
+msgid "Variants"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_name
+msgid "Vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_stock_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_stock_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_stock_supplier
+msgid "Vendor Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_supplier_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_supplier_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_supplier_payment_term_id
+msgid "Vendor Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_code
+msgid "Vendor Product Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_name
+msgid "Vendor Product Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reference
+msgid "Vendor Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_supplier_taxes_id
+msgid "Vendor Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_uom
+msgid "Vendor Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_name
+msgid "Vendor of this product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_seller_ids
+msgid "Vendors"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_verbose
+msgid "Verbose"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_version
+msgid "Version"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_volume
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_volume
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_volume
+msgid "Volume"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_odoo_id
+msgid "WareHouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_warehouse
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_warehouse_id
+msgid "Warehouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_warehouse_id
+msgid "Warehouse used to compute the stock quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_warranty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_warranty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_warranty
+msgid "Warranty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_webservice_key
+msgid "Webservice key"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_website
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_website
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_website
+msgid "Website"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_website
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_website
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_website
+msgid "Website of Partner or Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_shop_group
+msgid "Websites"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_weight
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_weight
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_weight
+msgid "Weight"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_input_categ_id
+msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_input
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_input
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_input
+msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_output_categ_id
+msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_output
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_output
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_output
+msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_journal
+msgid "When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_valuation_account_id
+msgid "When real-time inventory valuation is enabled on a product, this account will hold the current value of the products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_id
+msgid "When this field is filled in, the vendor data will onlyapply to the variant."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_address_format
+msgid "You can state here the usual format to use for the addresses belonging to this country.\n"
+"\n"
+"You can use the python-style string patern with all the field of the address (for example, use '%(street)s' to display the field 'street') plus\n"
+" \n"
+"%(state_name)s: the name of the state\n"
+" \n"
+"%(state_code)s: the code of the state\n"
+" \n"
+"%(country_name)s: the name of the country\n"
+" \n"
+"%(country_code)s: the code of the country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_webservice_key
+msgid "You have to put it in 'username' of the PrestaShop Webservice api path invite"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_zip
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_zip
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_zip
+msgid "Zip"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_zip_from
+msgid "Zip From"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_zip_to
+msgid "Zip To"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model___not_exist_prestashop_payment
+msgid "__not_exist_prestashop.payment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model___not_exit_prestashop_order_carrier
+msgid "__not_exit_prestashop.order_carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__import_stock_available
+msgid "_import_stock_available"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__prestashop_version_key
+msgid "_prestashop.version.key"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__prestashop_product_tag
+msgid "_prestashop_product_tag"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_tax_group
+msgid "account.tax.group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_base_multi_image_image
+msgid "base_multi_image.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_country_prestashop_bind_ids
+msgid "prestashop Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_form_view
+msgid "prestashop fields"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "prestashop product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_account_tax
+msgid "prestashop.account.tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_account_tax_group
+msgid "prestashop.account.tax.group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_address
+msgid "prestashop.address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_address_mixin
+msgid "prestashop.address.mixin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_groups_pricelist
+msgid "prestashop.groups.pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_mail_message
+msgid "prestashop.mail.message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_partner_mixin
+msgid "prestashop.partner.mixin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_category
+msgid "prestashop.product.category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination
+msgid "prestashop.product.combination"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination_option
+msgid "prestashop.product.combination.option"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination_option_value
+msgid "prestashop.product.combination.option.value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_image
+msgid "prestashop.product.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_supplierinfo
+msgid "prestashop.product.supplierinfo"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_template
+msgid "prestashop.product.template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_refund
+msgid "prestashop.refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_country
+msgid "prestashop.res.country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_currency
+msgid "prestashop.res.currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_lang
+msgid "prestashop.res.lang"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_partner
+msgid "prestashop.res.partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_partner_category
+msgid "prestashop.res.partner.category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order
+msgid "prestashop.sale.order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_line
+msgid "prestashop.sale.order.line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_line_discount
+msgid "prestashop.sale.order.line.discount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_state
+msgid "prestashop.sale.order.state"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_supplier
+msgid "prestashop.supplier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_supplier_image
+msgid "prestashop.supplier.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+msgid "product template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_attribute_value
+msgid "product.attribute.value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_form_view
+msgid "qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_state
+msgid "sale.order.state"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_state_list
+msgid "sale.order.state.list"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:41
+#, python-format
+msgid "{}API / Network Error:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:45
+#, python-format
+msgid "{}Authentication Error:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:49
+#, python-format
+msgid "{}Error during synchronization with PrestaShop:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:37
+#, python-format
+msgid "{}Network Error:\n"
+"\n"
+"{}"
+msgstr ""
+
From eb0a54068b22be830ac0f73888f199d80235540a Mon Sep 17 00:00:00 2001
From: "@PlanetaTIC" <@PlanetaTIC>
Date: Fri, 30 Nov 2018 09:12:34 +0100
Subject: [PATCH 19/99] [FIX] connector_prestashop: Fix resync
---
connector_prestashop/models/binding/common.py | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index 7be1e10ed..19f401098 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -3,7 +3,6 @@
from odoo import models, fields, api
from odoo.addons.queue_job.job import job, related_action
-from ...components.importer import import_record
from odoo.addons.connector.exception import RetryableJobError
@@ -80,10 +79,9 @@ def export_delete_record(self, backend, external_id):
# TODO: Research
@api.multi
def resync(self):
- func = import_record
+ func = self.import_record
if self.env.context.get('connector_delay'):
- func = import_record.delay
+ func = self.import_record.delay
for record in self:
- func(self.env, self._name, record.backend_id.id,
- record.prestashop_id)
+ func(record.backend_id, record.prestashop_id)
return True
From cc579378cc27a19baf5f467c919cff492ce8fcb9 Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Wed, 5 Dec 2018 18:24:52 +0000
Subject: [PATCH 20/99] [UPD] Update connector_prestashop.pot
---
connector_prestashop/i18n/connector_prestashop.pot | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/connector_prestashop/i18n/connector_prestashop.pot b/connector_prestashop/i18n/connector_prestashop.pot
index 33f43548c..eb423ae47 100644
--- a/connector_prestashop/i18n/connector_prestashop.pot
+++ b/connector_prestashop/i18n/connector_prestashop.pot
@@ -1824,7 +1824,7 @@ msgstr ""
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_id
-#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6784
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6787
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_id
From f14073cef87e53f67e1ba79cd72b97b61c1b4227 Mon Sep 17 00:00:00 2001
From: Alexandre Fayolle
Date: Tue, 11 Dec 2018 19:51:04 +0000
Subject: [PATCH 21/99] Added translation using Weblate (French)
---
connector_prestashop/i18n/fr.po | 6026 +++++++++++++++++++++++++++++++
1 file changed, 6026 insertions(+)
create mode 100644 connector_prestashop/i18n/fr.po
diff --git a/connector_prestashop/i18n/fr.po b/connector_prestashop/i18n/fr.po
new file mode 100644
index 000000000..16bd9ef0c
--- /dev/null
+++ b/connector_prestashop/i18n/fr.po
@@ -0,0 +1,6026 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * connector_prestashop
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_state
+msgid " * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n"
+" * The 'Pro-forma' status is used when the invoice does not have an invoice number.\n"
+" * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n"
+" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
+" * The 'Cancelled' status is used when user cancel invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_count
+msgid "# Product Variants"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_product_count
+msgid "# Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_count
+msgid "# Purchases"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sales_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sales_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sales_count
+msgid "# Sales"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier_invoice_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier_invoice_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier_invoice_count
+msgid "# Vendor Bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_count
+msgid "# of Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_order_count
+msgid "# of Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_order_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_order_count
+msgid "# of Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_type
+msgid "A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_sale
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_sale
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_sale
+msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_purchase
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_purchase
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_purchase
+msgid "A description of the Product that you want to communicate to your vendors. This description will be copied to every Purchase Order, Receipt and Vendor Bill/Refund."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_parent_need_cancel
+msgid "A parent sales order has been canceled on the backend and needs to be canceled."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_parent_id
+msgid "A parent sales order is a sales order replaced by this one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_parent_need_cancel
+msgid "A parent sales order needs cancel"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description
+msgid "A precise description of the Product, used only for internal information purposes."
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.account.tax:0
+#: sql_constraint:prestashop.account.tax.group:0
+#: sql_constraint:prestashop.address:0
+#: sql_constraint:prestashop.binding:0
+#: sql_constraint:prestashop.binding.odoo:0
+#: sql_constraint:prestashop.delivery.carrier:0
+#: sql_constraint:prestashop.groups.pricelist:0
+#: sql_constraint:prestashop.mail.message:0
+#: sql_constraint:prestashop.product.category:0
+#: sql_constraint:prestashop.product.combination:0
+#: sql_constraint:prestashop.product.combination.option:0
+#: sql_constraint:prestashop.product.combination.option.value:0
+#: sql_constraint:prestashop.product.image:0
+#: sql_constraint:prestashop.product.supplierinfo:0
+#: sql_constraint:prestashop.product.template:0
+#: sql_constraint:prestashop.refund:0
+#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.res.currency:0
+#: sql_constraint:prestashop.res.lang:0
+#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.partner.category:0
+#: sql_constraint:prestashop.sale.order:0
+#: sql_constraint:prestashop.sale.order.line:0
+#: sql_constraint:prestashop.sale.order.line.discount:0
+#: sql_constraint:prestashop.sale.order.state:0
+#: sql_constraint:prestashop.shop:0
+#: sql_constraint:prestashop.shop.group:0
+#: sql_constraint:prestashop.supplier:0
+msgid "A record with same ID on PrestaShop already exists."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_product_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_type
+msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
+"A consumable product, on the other hand, is a product for which stock is not managed.\n"
+"A service is a non-material product you provide.\n"
+"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Accept order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_account_id
+msgid "Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_payable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_payable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_payable_id
+msgid "Account Payable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_receivable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_receivable_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_receivable_id
+msgid "Account Receivable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.prestashop_binding_tax_group_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_tax_group_tree
+msgid "Account Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_account_id
+msgid "Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_refund_account_id
+msgid "Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Accounting"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date
+msgid "Accounting Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_needaction
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_integration_level
+msgid "Action while validating Delivery Orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_debug
+msgid "Activate PrestaShop's webservice debug mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_bank_account_required
+msgid "Activate this option if this payment method requires you to know the bank account number of your customer or supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_always_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_active
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_active
+msgid "Active"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_active_ext
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_active
+msgid "Active in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_purchase_id
+msgid "Add Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_comment
+msgid "Additional Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_type
+msgid "Address Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_address_format
+msgid "Address format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_include_base_amount
+msgid "Affect Base of Subsequent Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_all_qty_delivered
+msgid "All quantities delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_amount
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_amount
+msgid "Amount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual
+msgid "Amount Due"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual_company_signed
+msgid "Amount Due in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_residual_signed
+msgid "Amount Due in Invoice Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_amount
+msgid "Amount of the order to benefit from a free shipping, expressed in the company currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.delivery.carrier:0
+msgid "An ERP record with same ID already exists on PrestaShop with the same id_reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: sql_constraint:prestashop.account.tax.group:0
+#: sql_constraint:prestashop.address:0
+#: sql_constraint:prestashop.binding.odoo:0
+#: sql_constraint:prestashop.delivery.carrier:0
+#: sql_constraint:prestashop.groups.pricelist:0
+#: sql_constraint:prestashop.mail.message:0
+#: sql_constraint:prestashop.product.category:0
+#: sql_constraint:prestashop.product.combination:0
+#: sql_constraint:prestashop.product.combination.option:0
+#: sql_constraint:prestashop.product.supplierinfo:0
+#: sql_constraint:prestashop.product.template:0
+#: sql_constraint:prestashop.refund:0
+#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.res.currency:0
+#: sql_constraint:prestashop.res.lang:0
+#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.partner.category:0
+#: sql_constraint:prestashop.sale.order:0
+#: sql_constraint:prestashop.sale.order.line:0
+#: sql_constraint:prestashop.sale.order.line.discount:0
+#: sql_constraint:prestashop.sale.order.state:0
+#: sql_constraint:prestashop.supplier:0
+msgid "An ERP record with same ID already exists on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_project_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_related_project_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_analytic_tag_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_analytic_tag_ids
+msgid "Analytic Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_no_auto_thread
+msgid "Answers do not go in the original document discussion thread. This has an impact on the generated message-id."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_sequence
+msgid "Assigns the priority to the list of product vendor."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_attachment_id
+msgid "Attachment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_attachment_ids
+msgid "Attachments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_attachment_ids
+msgid "Attachments are linked to a document through model / res_id and to the message through this field."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_attribute_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_odoo_id
+msgid "Attribute"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_price_extra
+msgid "Attribute Price Extra"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_price_ids
+msgid "Attribute Prices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_attribute_value_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_attribute_value_ids
+msgid "Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_author_id
+msgid "Author"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_id
+msgid "Author of the message. If not set, email_from may hold an email address that did not match any partner."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_author_avatar
+msgid "Author's avatar"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_workflow_process_id
+msgid "Automatic Workflow"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_available
+msgid "Available"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,quantity_field:0
+msgid "Available Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_available_for_order
+msgid "Available for Order Taking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_immediately_usable_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_immediately_usable_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_immediately_usable_qty
+#: selection:prestashop.backend,quantity_field:0
+msgid "Available to promise"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.account_tax_group_connector_prestashop_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "Backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_backend
+msgid "Backends"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_bank_account_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_bank_account_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_bank_account_count
+msgid "Bank"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_bank_id
+msgid "Bank Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_partner_bank_id
+msgid "Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Refund, otherwise a Partner bank account number."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_bank_account_required
+msgid "Bank Account Required"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_bank_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_bank_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_bank_ids
+msgid "Banks"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_barcode
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_barcode
+#: selection:prestashop.backend,matching_product_ch:0
+msgid "Barcode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_list_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_lst_price
+msgid "Base price to compute the customer price. Sometimes called the catalog price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image
+msgid "Big-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+msgid "Binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_birthday
+msgid "Birthday"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_bounce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_bounce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_bounce
+msgid "Bounce"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "By clicking on the buttons,\n"
+" you will initiate the\n"
+" synchronizations\n"
+" with PrestaShop.\n"
+" Note that the import or exports\n"
+" won't be done directly,\n"
+" they will create 'Jobs'\n"
+" executed as soon\n"
+" as possible."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_delivered_updateable
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_delivered_updateable
+msgid "Can Edit Delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_ok
+msgid "Can be Purchased"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_rental
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_rental
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_rental
+msgid "Can be Rent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_ok
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_ok
+msgid "Can be Sold"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_canceled_in_backend
+msgid "Canceled in backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_cancellation_resolved
+msgid "Cancellation from the backend resolved"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_delivery_carrier
+msgid "Carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_carrier
+msgid "Carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_route_from_categ_ids
+msgid "Category Routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_type
+msgid "Category Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_channel_ids
+msgid "Channels"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Check Connection"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_is_company
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_is_company
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_is_company
+msgid "Check if the contact is a company, otherwise it is a person"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_customer
+msgid "Check this box if this contact is a customer."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_supplier
+msgid "Check this box if this contact is a vendor. If it's not checked, purchase people will not see it when encoding a purchase order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_employee
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_employee
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_employee
+msgid "Check this box if this contact is an Employee."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_price_include
+msgid "Check this if the price you use on the product and invoices includes this tax."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_create_variant
+msgid "Check this if you want to create multiple variants for this attribute."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_stock_location_prestashop_synchronized
+msgid "Check this option to synchronize this location with PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_child_id
+msgid "Child Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_child_ids
+msgid "Child Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_child_ids
+msgid "Child Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_children_tax_ids
+msgid "Children Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_city
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_city
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_city
+msgid "City"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Color"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_color
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_color
+msgid "Color Index"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_combinations_ids
+msgid "Combinations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_comments
+msgid "Comments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_commercial_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_commercial_partner_id
+msgid "Commercial Entity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_ref_company_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_ref_company_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_ref_company_ids
+msgid "Companies that refers to partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_company_id
+msgid "Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_company_currency_id
+msgid "Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_name
+msgid "Company Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_commercial_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_commercial_company_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_commercial_company_name
+msgid "Company Name Entity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_company_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_company_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_company_type
+msgid "Company Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contact_address
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contact_address
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contact_address
+msgid "Complete Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_quantity
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_quantity
+msgid "Computed Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_confirmation_date
+msgid "Confirmation Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "Connector"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_child_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_child_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_child_ids
+msgid "Contacts"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_body
+msgid "Contents"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_contracts_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_contracts_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contract_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_contracts_count
+msgid "Contracts"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_method
+msgid "Control Purchase Bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_standard_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_standard_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_standard_price
+msgid "Cost"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_wholesale_price
+msgid "Cost Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_cost_method
+msgid "Cost method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_standard_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_standard_price
+msgid "Cost of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_standard_price
+msgid "Cost of the product, in the default unit of measure of the product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_cost_method
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_cost_method
+msgid "Costing Method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_payment_token_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_payment_token_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_payment_token_count
+msgid "Count Payment Token"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_bounce
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_bounce
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_bounce
+msgid "Counter of the number of bounced emails for this contact"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_country_ids
+msgid "Countries"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_country
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_country_id
+msgid "Country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_phone_code
+msgid "Country Calling Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_code
+msgid "Country Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_country_group_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_country_group_ids
+msgid "Country Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_name
+msgid "Country Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_variant
+msgid "Create variant"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_date_add
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date_add
+msgid "Created At (on PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_date_add
+msgid "Created at (in PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_create_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_create_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_create_date
+msgid "Created on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_credit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_credit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_credit_limit
+msgid "Credit Limit"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_currency
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_name
+msgid "Currency Code (ISO 4217)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_symbol
+msgid "Currency sign, to be used when printing amounts."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rate
+msgid "Current Rate"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_qty_available
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_qty_available
+msgid "Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_starred
+msgid "Current user has a starred notification linked to this message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_order_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_order_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_id
+msgid "Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_delay
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_stock_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_stock_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_stock_customer
+msgid "Customer Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_customer_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_customer_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_customer_payment_mode_id
+msgid "Customer Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_payment_term_id
+msgid "Customer Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_partner_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_partner_ref
+msgid "Customer Ref"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_client_order_ref
+msgid "Customer Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_taxes_id
+msgid "Customer Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_date
+msgid "Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_date_format
+msgid "Date Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_last_post
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_last_post
+msgid "Date of the last message posted on the record."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_confirmation_date
+msgid "Date on which the sale order is confirmed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_debug
+msgid "Debug"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_decimal_point
+msgid "Decimal Separator"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_decimal_places
+msgid "Decimal places"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_default_on
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_default_on
+msgid "Default On"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_uom_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_uom_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_uom_id
+msgid "Default Unit of Measure used for all stock operation."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_uom_po_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_uom_po_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_uom_po_id
+msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Default prestashop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_default_shop_id
+msgid "Default shop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_default_shop_id
+msgid "Default shop id"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_default_url
+msgid "Default url"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_trust
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_trust
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_trust
+msgid "Degree of trust you have in this debtor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_delivered
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_delivered
+msgid "Delivered"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_delivery_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_delivery_count
+msgid "Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_shipping_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_shipping_id
+msgid "Delivery Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_customer_lead
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_customer_lead
+msgid "Delivery Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_delivery_carrier_id
+msgid "Delivery Method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_delivery_count
+msgid "Delivery Orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_id
+msgid "Delivery Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_partner_shipping_id
+msgid "Delivery address for current invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_partner_shipping_id
+msgid "Delivery address for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_odoo_id
+msgid "Delivery carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Delivery method"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_route_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_route_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_route_ids
+msgid "Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_html
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_name
+msgid "Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_picking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_picking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_picking
+msgid "Description on Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+msgid "Descriptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_value_sequence
+msgid "Determine the display order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_position
+msgid "Determines where the currency symbol should be placed after or before the amount."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_type_tax_use
+msgid "Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_direction
+msgid "Direction"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_discount
+msgid "Discount (%)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_discount_product_id
+msgid "Discount Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_discount_policy
+msgid "Discount policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_display_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_show_price
+msgid "Display Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date_due
+msgid "Due Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,help:connector_prestashop.action_prestashop_sale_order_state_form
+msgid "Each state can be linked between PrestaShop and Odoo.\n"
+" When a sale order state change, the connector will update the sale order in PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_partner_share
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_partner_share
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_partner_share
+msgid "Either customer (no user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_email
+msgid "Email"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_notify_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_notify_email
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_notify_email
+msgid "Email Messages and Notifications"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_email_from
+msgid "Email address of the sender. This field is set when no matching partner is found and replaces the author_id field in the chatter."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_employee
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_employee
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_employee
+msgid "Employee"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_purchase_id
+msgid "Encoding help. When selected, the associated purchase order lines are added to the vendor bill. Several PO can be selected."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_date_end
+msgid "End Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_date_end
+msgid "End date for this vendor price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prod_environment
+msgid "Environment"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:148
+#: code:addons/connector_prestashop/models/product_template/importer.py:157
+#, python-format
+msgid "Error! Multiple products found with combinations reference %s. Maybe consider to update you datas"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:166
+#, python-format
+msgid "Error! Multiple templates are found with combinations reference. Maybe consider to change matching option"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_delivery_price
+msgid "Estimated Delivery Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_exception_ids
+msgid "Exceptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_expense_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_expense_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_expense_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_expense_id
+msgid "Expense Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_validity_date
+msgid "Expiration Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Export in background"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "Export quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Export stock quantities"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Export tracking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_export_tracking
+msgid "Export tracking numbers to PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_values
+msgid "External Attribute Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_attribute
+msgid "External Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_categories
+msgid "External Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_languauges
+msgid "External Languages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_objects
+msgid "External Objects"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_product_templates
+msgid "External Product Templates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_external_products
+msgid "External Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_categ_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_categ_ids
+msgid "Extra categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/auto_matching_importer.py:43
+#, python-format
+msgid "Failed to query %s via PS webservice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_starred_partner_ids
+msgid "Favorited By"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_fax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_fax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_fax
+msgid "Fax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_extension
+msgid "File extension"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_filename
+msgid "Filename"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_carrier_id
+msgid "Fill this field if you plan to invoice the shipping based on picking."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_account_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_fiscal_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_account_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_fiscal_position_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_account_position_id
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_fixed_price
+msgid "Fixed Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_follower_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_channel_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_partner_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_removal_strategy_id
+msgid "Force Removal Strategy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_virtual_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_virtual_available
+msgid "Forecast Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,quantity_field:0
+msgid "Forecast quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_virtual_available
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_virtual_available
+msgid "Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_virtual_available
+msgid "Forecasted Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_email_formatted
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_email_formatted
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_email_formatted
+msgid "Format email address \"Name \""
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_email_formatted
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_email_formatted
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_email_formatted
+msgid "Formatted Email"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_free_if_more_than
+msgid "Free if Order total is more than"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_link_rewrite
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_link_rewrite
+msgid "Friendly URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_email_from
+msgid "From"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_main
+msgid "Full-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_packaging_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_packaging_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_packaging_ids
+msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sequence
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sequence
+msgid "Gives the sequence order when displaying a product list"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_hs_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_hs_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_hs_code
+msgid "HS Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_description
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_html
+msgid "HTML description from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_has_checkpoint
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_has_checkpoint
+msgid "Has Checkpoint"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_need_cancel
+msgid "Has been canceled on the backend, need to be canceled."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_has_outstanding
+msgid "Has outstanding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_has_unreconciled_entries
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_has_unreconciled_entries
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_has_unreconciled_entries
+msgid "Has unreconciled entries"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,help:connector_prestashop.action_prestashop_sale_order_state_form
+msgid "Here are the sale order states mapped with e-commerce."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_id
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_id
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6787
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_id
+msgid "ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_prestashop_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_id
+msgid "ID on PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_im_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_im_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_iso_code
+msgid "ISO code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_id_attribute_group
+msgid "Id attribute group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Id ref."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_unread
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_unread
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_needaction
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_always_available
+msgid "If checked, this product is considered always available"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_opt_out
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_opt_out
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_opt_out
+msgid "If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. Filter 'Available for Mass Mailing' allows users to filter the partners when performing mass mailing."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_valuation
+msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'. The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_valuation
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_valuation
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_valuation
+msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_team_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_team_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_team_id
+msgid "If set, sale team used notably for sales and assignations related to this partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_include_base_amount
+msgid "If set, taxes which are computed after this one will be computed based on the price tax included."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_analytic
+msgid "If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_out_of_stock
+msgid "If stock shortage"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_free_if_more_than
+msgid "If the order is more expensive than a certain amount, the customer can benefit from a free shipping"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_lang
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_lang
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_lang
+msgid "If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_importable_order_state_ids
+msgid "If valued only orders matching these states will be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_payment_term_id
+msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date_due
+msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_ignore_exception
+msgid "Ignore Exceptions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image
+msgid "Image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image
+msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_medium
+msgid "Image of the product variant (Medium-sized image of product template if false)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_small
+msgid "Image of the product variant (Small-sized image of product template if false)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_path
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_path
+msgid "Image path"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_url
+msgid "Image remote URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_file_db_store
+msgid "Image stored in database"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_name
+msgid "Image title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_orders_since
+msgid "Import Orders since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_products_since
+msgid "Import Products since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_refunds_since
+msgid "Import Refunds since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_suppliers_since
+msgid "Import Suppliers since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import customer groups and customers since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import in background"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_image/importer.py:85
+#, python-format
+msgid "Import of image id `%s` failed. Error: `%s`"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_image/importer.py:93
+#, python-format
+msgid "Import of image id `%s` of PrestaShop product with id `%s` failed. Error: `%s`"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:134
+#, python-format
+msgid "Import of the order with PS ID=%s canceled because its state is not importable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_import_partners_since
+msgid "Import partners since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import payment modes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import product categories and products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import refunds"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import sale orders since"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import stock quantities"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Import suppliers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_importable_order_state_ids
+msgid "Importable sale order states"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Imports"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_id_reference
+msgid "In PrestaShop, carriers can be copied with the same 'Reference ID' (only the last copied carrier will be synchronized with the ERP)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_analytic
+msgid "Include in Analytic Cost"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_price_include
+msgid "Included in Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_income_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_income_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_income_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_income_id
+msgid "Income Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_incoming_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_incoming_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_incoming_qty
+msgid "Incoming"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_incoterms_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_incoterm
+msgid "Incoterms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_incoterms_id
+msgid "Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+msgid "Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_supplierinfo
+msgid "Information about a product vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_parent_id
+msgid "Initial thread message."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_integration_level
+msgid "Integration Level"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_default_code
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_ref
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_ref
+msgid "Internal Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_barcode
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_barcode
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_barcode
+msgid "International Article Number used for product identification."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_incoterm
+msgid "International Commercial Terms are a series of predefined commercial terms used in international transactions."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_inventory
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_inventory
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_inventory
+msgid "Inventory Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_location
+msgid "Inventory Locations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_valuation
+msgid "Inventory Valuation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_invoice
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_warn
+msgid "Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_partner_invoice_id
+msgid "Invoice Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_date_invoice
+msgid "Invoice Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_invoice_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_invoice_lines
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_invoice_lines
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_shipping_on_delivery
+msgid "Invoice Shipping on Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_invoice_status
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_invoice_status
+msgid "Invoice Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_partner_invoice_id
+msgid "Invoice address for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_refund_invoice_id
+msgid "Invoice for which this invoice is the refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_invoiced
+msgid "Invoiced"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_invoice_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_ids
+msgid "Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_invoice_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_invoice_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_invoice_policy
+msgid "Invoicing Policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_is_follower
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_is_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_is_company
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_is_company
+msgid "Is a Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_customer
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_customer
+msgid "Is a Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_is_delivery
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_is_delivery
+msgid "Is a Delivery"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier
+msgid "Is a Vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_reconciled
+msgid "It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_sent
+msgid "It indicates that the invoice has been sent."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_function
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_function
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_function
+msgid "Job Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_move_id
+msgid "Journal Entry"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_move_name
+msgid "Journal Entry Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_journal_item_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_journal_item_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_issued_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_journal_item_count
+msgid "Journal Items"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_fixed_price
+msgid "Keep empty if the pricing depends on the advanced pricing per destination"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date_invoice
+msgid "Keep empty to use the current date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date
+msgid "Keep empty to use the invoice date."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_description
+msgid "Label on Invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_lang
+msgid "Language"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_res_langs
+#: model:ir.model,name:connector_prestashop.model_res_lang
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_language_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Languages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_last_post
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_last_post
+msgid "Last Message Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state___last_update
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list___last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_write_uid
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exist_prestashop_payment_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field___not_exit_prestashop_order_carrier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__import_stock_available_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_product_tag_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field__prestashop_version_key_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_write_date
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_quantity
+msgid "Last computed quantity to send on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_quantity
+msgid "Last computed quantity to send to PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "Last synchro"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_last_time_entries_checked
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_last_time_entries_checked
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_last_time_entries_checked
+msgid "Last time the invoices & payments matching was performed for this partner. It is set either if there's not at least an unreconciled debit and an unreconciled credit or if you click the \"Done\" button."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_last_time_entries_checked
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_last_time_entries_checked
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_last_time_entries_checked
+msgid "Latest Invoices & Payments Matching Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_layout_category_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_layout_category_sequence
+msgid "Layout Sequence"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_delay
+msgid "Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_left
+msgid "Left Parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_left
+msgid "Left parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_attribute_line_ids
+msgid "Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_move_id
+msgid "Link to the automatically generated Journal Items."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_code
+msgid "Locale Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_location
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_location_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_location_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_location_id
+msgid "Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_stock_location_id
+msgid "Location used to import stock quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Locked"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_packaging_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_packaging_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_packaging_ids
+msgid "Logistical Units"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Main Configuration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_main_exception_id
+msgid "Main Exception"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_id
+msgid "Main Supplier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_id
+msgid "Main Supplier who has highest priority in Supplier List."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_main_template_id
+msgid "Main Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_track_service
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_track_service
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_track_service
+msgid "Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
+"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
+"Create a task and track hours: Create a task on the sale order validation and track the work hours."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_validity_date
+msgid "Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_margin
+msgid "Margin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_product_template
+msgid "Match product template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_customer
+msgid "Matching Customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_matching_product_ch
+msgid "Matching Field for product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Matching option for Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Matching option for partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image_medium
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_medium
+msgid "Medium-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_medium
+msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_medium
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_medium
+msgid "Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_medium
+msgid "Medium-sized image. It is automatically resized as a 128 x 128 px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or kanban views."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_mail_message
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_odoo_id
+msgid "Message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_record_name
+msgid "Message Record Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_invoice_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_invoice_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_invoice_warn_msg
+msgid "Message for Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_warn_msg
+msgid "Message for Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_line_warn_msg
+msgid "Message for Purchase Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_warn_msg
+msgid "Message for Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_line_warn_msg
+msgid "Message for Sales Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_picking_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_picking_warn_msg
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_picking_warn_msg
+msgid "Message for Stock Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_message_type
+msgid "Message type: email for email message, notification for system message, comment for other messages such as user replies"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_message_id
+msgid "Message unique identifier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_message_id
+msgid "Message-Id"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_description
+msgid "Meta description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_keywords
+msgid "Meta keywords"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_meta_title
+msgid "Meta title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_min_qty
+msgid "Minimal Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_orderpoint_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_orderpoint_ids
+msgid "Minimum Stock Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mobile
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_mobile
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_mobile
+msgid "Mobile"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_name
+msgid "Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_record_name
+msgid "Name get of the related document."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_name_ext
+msgid "Name in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_needaction
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_needaction
+msgid "Need Action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_need_cancel
+msgid "Need to be canceled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_newsletter
+msgid "Newsletter"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_no_export
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_no_export
+msgid "No export to PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/prestashop_backend/common.py:396
+#, python-format
+msgid "No internal location found to compute the product quantity."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/importer.py:469
+#, python-format
+msgid "No language could be found for the Prestashop lang with id \"%s\". Run \"Synchronize base data\" again."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/importer.py:448
+#, python-format
+msgid "No language mapping defined. Run \"Synchronize base data\"."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_no_auto_thread
+msgid "No threading for answers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_comment
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_comment
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_comment
+msgid "Notes"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:305
+#: code:addons/connector_prestashop/components/exporter.py:312
+#, python-format
+msgid "Nothing to export."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_notification_ids
+msgid "Notifications"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_number
+msgid "Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_needaction_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_customer_lead
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_discount_customer_lead
+msgid "Number of days between the order confirmation and the shipping of the products to the customer"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_needaction_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_message_unread_counter
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_odoo_id
+msgid "Odoo Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_product_templates
+msgid "Odoo Product Templates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_name
+msgid "Odoo State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_openerp_state_ids
+msgid "Odoo States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_odoo_id
+msgid "Odoo binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_categories
+msgid "Odoo product Categories"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_purchase_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_purchase_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_purchase_method
+msgid "On ordered quantities: control bills based on ordered quantities.\n"
+"On received quantities: control bills based on received quantity."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Once imported,\n"
+" some types of records,\n"
+" like the products\n"
+" or categories,\n"
+" need a manual review.\n"
+" You will find the list\n"
+" of the\n"
+" new records to review\n"
+" in the menu 'Connectors > Checkpoint'."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_opt_out
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_opt_out
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_opt_out
+msgid "Opt-Out"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_tag_ids
+msgid "Optional tags you may want to assign for custom reporting"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Options"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_date_order
+msgid "Order Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_order_line
+msgid "Order Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_name
+msgid "Order Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_state
+msgid "Order Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_invoice_policy
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_invoice_policy
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_invoice_policy
+msgid "Ordered Quantity: Invoice based on the quantity the customer ordered.\n"
+"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reference
+msgid "Original reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_outgoing_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_outgoing_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_outgoing_qty
+msgid "Outgoing"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_mail_server_id
+msgid "Outgoing mail server"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_verbose
+msgid "Output requests details in the logs"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_outstanding_credits_debits_widget
+msgid "Outstanding credits debits widget"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_id
+msgid "Owner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_model
+msgid "Owner model"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_packaging
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_packaging
+msgid "Packaging"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reconciled
+msgid "Paid/Reconciled"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_id
+msgid "Parent Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_parent_id
+msgid "Parent Message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_parent_id
+msgid "Parent Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_category/importer.py:93
+#, python-format
+msgid "Parent category for `%s` cannot be imported. Error: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_parent_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_parent_name
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_parent_name
+msgid "Parent name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_partner
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_partner_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_odoo_id
+msgid "Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_odoo_id
+msgid "Partner Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_res_partner_category
+msgid "Partner Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_partner_ids
+msgid "Partners"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_needaction_partner_ids
+msgid "Partners with Need Action"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_debit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_debit_limit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_debit_limit
+msgid "Payable Limit"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_payment_mode_id
+msgid "Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_move_line_ids
+msgid "Payment Move Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reference_type
+msgid "Payment Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_payment_term_id
+msgid "Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_payment_token_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_payment_token_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_payment_token_ids
+msgid "Payment Tokens"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payment_ids
+msgid "Payments"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_payments_widget
+msgid "Payments widget"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_phone
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_phone
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_phone
+msgid "Phone"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_picking_ids
+msgid "Picking associated to this sale"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/res_partner/importer.py:213
+#, python-format
+msgid "Please, check the VAT number: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_notify_email
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_notify_email
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_notify_email
+msgid "Policy to receive emails for new messages pushed to your personal Inbox:\n"
+"- Never: no emails are sent\n"
+"- All Messages: for every notification you receive in your Inbox"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_position
+msgid "Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_potential_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_potential_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_potential_qty
+#: selection:prestashop.backend,quantity_field:0
+msgid "Potential"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_root
+#: model:ir.ui.view,arch_db:connector_prestashop.view_order_connector_prestashop_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_partner_category_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_stock_form
+msgid "PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.account_tax_group_connector_prestashop_tree_view
+msgid "PrestaShop Account Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_address_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_address_tree
+msgid "PrestaShop Address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_address_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_address_bind_ids
+msgid "PrestaShop Address Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_binding_odoo_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_backend_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_backend_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_tree
+msgid "PrestaShop Backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_backend
+msgid "PrestaShop Backend Configuration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_backend
+msgid "PrestaShop Backends"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.image_prestashop_binding_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.prestashop_binding_tax_group_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_prestashop_binding_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_order_connector_prestashop_form
+msgid "PrestaShop Binding"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_binding
+msgid "PrestaShop Binding (abstract)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_binding_odoo
+msgid "PrestaShop Binding with Odoo binding (abstract)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_invoice_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_base_multi_image_image_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_compose_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_mail_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_mail_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_attribute_value_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_template_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_currency_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_lang_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_category_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_line_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_stock_warehouse_prestashop_bind_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_template_common_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_partner_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "PrestaShop Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_combinations_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_attribute_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_combinations_bind_ids
+msgid "PrestaShop Bindings (combinations)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_delivery_carrier
+msgid "PrestaShop Carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_carrier
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_tree
+msgid "PrestaShop Carriers"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_prestashop_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_template_prestashop_default_category_id
+msgid "PrestaShop Default Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_delivery_number
+msgid "PrestaShop Delivery Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_discount_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_discount_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_line_prestashop_discount_bind_ids
+msgid "PrestaShop Discount Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_discount_line_ids
+msgid "PrestaShop Discount Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_group_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_group_ids
+msgid "PrestaShop Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_prestashop_id
+msgid "PrestaShop ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_location_prestashop_inherited_form
+msgid "PrestaShop Information"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_invoice_number
+msgid "PrestaShop Invoice Number"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_prestashop_order_line_ids
+msgid "PrestaShop Order Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_partner_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_tree
+msgid "PrestaShop Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_partner_category_tree
+msgid "PrestaShop Partner Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_prestashop_position
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_prestashop_position
+msgid "PrestaShop Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_tree_view
+msgid "PrestaShop Product Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_prestashop_order_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_prestashop_order_id
+msgid "PrestaShop Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_shop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_shop_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_delivery_carrier_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_tree
+msgid "PrestaShop Shop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_shop_group
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_shop_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_shop_group_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_group_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_shop_group_tree
+msgid "PrestaShop Shop Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_shop_group
+msgid "PrestaShop Shop Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_shop
+msgid "PrestaShop Shops"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_sale_order_state_list_prestashop_state_id
+msgid "PrestaShop State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_vat_number
+msgid "PrestaShop VAT"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:82
+#, python-format
+msgid "PrestaShop amount: %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_supplierinfo_prestashop_bind_ids
+msgid "PrestaShop bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_default_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_default_category_id
+msgid "PrestaShop default category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_partner_prestashop_supplier_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_users_prestashop_supplier_bind_ids
+msgid "PrestaShop supplier bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_prestashop_groups_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_pricelist_prestashop_groups_bind_ids
+msgid "PrestaShop user groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_attributes
+msgid "Prestashop Options / Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_values
+msgid "Prestashop Options/Attribute Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_products
+msgid "Prestashop Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_form
+msgid "Prestashop Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_price
+msgid "Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_account_creditor_price_difference_categ
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_account_creditor_price_difference
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_value_price_extra
+msgid "Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_delivery_carrier_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_impact_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_product_product_impact_price
+msgid "Price Impact"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce
+msgid "Price Reduce"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce_taxexcl
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce_taxexcl
+msgid "Price Reduce Tax excl"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_reduce_taxinc
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_reduce_taxinc
+msgid "Price Reduce Tax inc"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_pricelist_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_item_ids
+msgid "Pricelist Items"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_name
+msgid "Pricelist Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_pricelist_id
+msgid "Pricelist for current sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_pricelist_item_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_pricelist_item_ids
+msgid "Pricelist item ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_pricelist_id
+msgid "Pricelist used in sales orders"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price_rule_ids
+msgid "Pricing Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_categ_id
+msgid "Pricing/Primary Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_category_connector_prestashop_form_view
+msgid "Primary Data"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_procurement_group_id
+msgid "Procurement Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_procurement
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_procurement
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_procurement
+msgid "Procurement Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_procurement_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_procurement_ids
+msgid "Procurements"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_product
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_product_id
+msgid "Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_attribute
+msgid "Product Attribute"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_attribute_line_ids
+msgid "Product Attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_category
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_odoo_id
+msgid "Product Category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_template
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_tmpl_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_tmpl_id
+msgid "Product Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_type
+msgid "Product Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_odoo_id
+msgid "Product image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_id
+msgid "Product variant"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:365
+#, python-format
+msgid "Product(s) used in the sales order could not be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_production
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_production
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_production
+msgid "Production Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_product_variant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_product_variant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_product_variant_ids
+msgid "Products"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_delivery_type
+msgid "Provider"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_public_name
+msgid "Public Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_lst_price
+msgid "Public Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_purchase
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_purchase
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_purchase
+msgid "Purchase Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_purchase_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_purchase_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_purchase_warn
+msgid "Purchase Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_purchase_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_purchase_line_warn
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_uom_po_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_uom_po_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_uom_po_id
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_uom_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_uom_qty
+msgid "Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_qty_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_qty_available
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_qty_available
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_quantity_field
+msgid "Quantity field"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_incoming_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_incoming_qty
+msgid "Quantity of products that are planned to arrive.\n"
+"In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_outgoing_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_outgoing_qty
+msgid "Quantity of products that are planned to leave.\n"
+"In a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_potential_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_potential_qty
+msgid "Quantity of this Product that could be produced using the materials already at hand."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_potential_qty
+msgid "Quantity of this Product that could be produced using the materials already at hand. If the product has several variants, this will be the biggest quantity that can be made for a any single variant."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_quant
+msgid "Quants"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Quotation"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:sale.order.state.list,name:0
+msgid "Quotation Sent"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Radio"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rate_ids
+msgid "Rates"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_expense_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_expense_policy
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_expense_policy
+msgid "Re-Invoice Expenses"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reception_count
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reception_count
+msgid "Receipt"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_partner_ids
+msgid "Recipients"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/deleter.py:21
+#, python-format
+msgid "Record %s deleted on PrestaShop on resource %s"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:320
+#, python-format
+msgid "Record exported with ID %s on PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:318
+#, python-format
+msgid "Record on PrestaShop have not been created"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/exporter.py:288
+#, python-format
+msgid "Record to export does no longer exist."
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.backend,matching_product_ch:0
+msgid "Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_id_reference
+msgid "Reference ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_origin
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_origin
+msgid "Reference of the document that produced this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_name
+msgid "Reference/Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_owner_ref_id
+msgid "Referenced Owner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_refund_journal_id
+msgid "Refund Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.template,out_of_stock:0
+msgid "Refuse order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_parent_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_parent_id
+msgid "Related Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_res_id
+msgid "Related Document ID"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_model
+msgid "Related Document Model"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual_company_signed
+msgid "Remaining amount due in the currency of the company."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual_signed
+msgid "Remaining amount due in the currency of the invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_residual
+msgid "Remaining amount due."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_nbr_reordering_rules
+msgid "Reordering Rules"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reordering_max_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reordering_max_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reordering_max_qty
+msgid "Reordering max qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_reordering_min_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_reordering_min_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_reordering_min_qty
+msgid "Reordering min qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_reply_to
+msgid "Reply email address. Setting the reply_to bypasses the automatic thread creation."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_reply_to
+msgid "Reply-To"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Reset To draft Connection"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_res_partner_tree
+msgid "Resync"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_parent_right
+msgid "Right Parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_parent_right
+msgid "Right parent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_rounding
+msgid "Rounding Factor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_route_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_route_id
+msgid "Route"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_route_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_route_ids
+msgid "Routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_rule_group
+msgid "Rule group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_description_sale
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_description_sale
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_sale
+msgid "Sale Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_odoo_id
+msgid "Sale Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state_odoo_id
+msgid "Sale Order State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_prestashop_sale_order_state_form
+#: model:ir.ui.menu,name:connector_prestashop.sale_order_state_tree_menu
+msgid "Sale Order States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_odoo_id
+msgid "Sale Order line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_list_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_lst_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_list_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_lst_price
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_list_price
+msgid "Sale Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_product_pricelist
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_product_pricelist
+msgid "Sale Pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_workflow_process_id
+msgid "Sale Workflow Process"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_tree
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_tree
+msgid "Sale order State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Sales"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_sale_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_sale_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_order_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_sale_warn
+#: selection:sale.order.state.list,name:0
+msgid "Sales Order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_line
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sale_line_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sale_line_warn
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_sale_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_team_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_team_id
+msgid "Sales Team"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_sale_team_id
+msgid "Sales Team assigned to the imported sales orders."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_salesman_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_salesman_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_user_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_user_id
+msgid "Salesperson"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_layout_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_layout_category_id
+msgid "Section"
+msgstr ""
+
+#. module: connector_prestashop
+#: selection:prestashop.product.combination.option,group_type:0
+msgid "Select"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_categ_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_categ_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_categ_id
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_customer_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_customer_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_customer_payment_mode_id
+msgid "Select the default payment mode for this customer."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_supplier_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_supplier_payment_mode_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_supplier_payment_mode_id
+msgid "Select the default payment mode for this supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_sale_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_purchase_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_line_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_sale_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_invoice_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_picking_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_purchase_warn
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_sale_warn
+msgid "Selecting the \"Warning\" option will notify user with the message, Selecting \"Blocking Message\" will throw an exception with the message and block the flow. The Message has to be written in the next field."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_self
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_self
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_self
+msgid "Self"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_ids
+msgid "Seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_sent
+msgid "Sent"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_grouping
+msgid "Separator Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_groups_pricelist_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_sequence
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_removal_strategy_id
+msgid "Set a specific removal strategy that will be used regardless of the source location for this product category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_tax_adjustment
+msgid "Set this field to true if this tax can be used in the tax adjustment wizard, used to manually fill some data in the tax declaration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_prod_environment
+msgid "Set to True if your credentials are certified for production."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_partner_share
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_partner_share
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_partner_share
+msgid "Share Partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_picking_policy
+msgid "Shipping Policy"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_shipping_product_id
+msgid "Shipping Product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_group_shop_ids
+msgid "Shops"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_description_short_html
+msgid "Short Description"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_on_sale
+msgid "Show on sale icon"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_show_technical
+msgid "Show technical"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_type
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_valid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_valid
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_valid
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_url
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_url
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_url
+msgid "Signup URL"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_expiration
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_expiration
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_expiration
+msgid "Signup expiration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_signup_token
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_signup_token
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_signup_token
+msgid "Signup token"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_image_small
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_image_small
+msgid "Small-sized image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_small
+msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_avatar
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_small
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_small
+msgid "Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_small
+msgid "Small-sized image. It is automatically resized as a 64 x 64 px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_quantity_field
+msgid "Some of this options may need some additionnal modules you'll have to install by yourself from https://github.com/OCA/stock-logistics-warehouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_origin
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_origin
+msgid "Source Document"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_product_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_ok
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_ok
+msgid "Specify if the product can be selected in a sales order line."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_cost_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_cost_method
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_cost_method
+msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
+" Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
+" Real Price: The cost price displayed is the price of the last outgoing product (will be use in case of inventory loss for example)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_cost_method
+msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
+"Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
+"Real Price: The cost price displayed is the price of the last outgoing product (will be used in case of inventory loss for example)."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_hs_code
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_hs_code
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_hs_code
+msgid "Standardized code for international shipping and goods declaration"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_starred
+msgid "Starred"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_date_start
+msgid "Start Date"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_date_start
+msgid "Start date for this vendor price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_state_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_state_id
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "State"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_sale_order_state_form
+msgid "State name..."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_state_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_state_ids
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_sale_order_state_form
+msgid "States"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_state
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_state
+msgid "Status"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Stock"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_input
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_account_input_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_account_input
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_account_input
+msgid "Stock Input Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_journal
+msgid "Stock Journal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_stock_location_id
+msgid "Stock Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_output
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_account_output_categ_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_property_stock_account_output
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_property_stock_account_output
+msgid "Stock Output Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_picking_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_picking_warn
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_picking_warn
+msgid "Stock Picking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_property_stock_valuation_account_id
+msgid "Stock Valuation Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_immediately_usable_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_immediately_usable_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_immediately_usable_qty
+msgid "Stock for this Product that can be safely proposed for sale to Customers.\n"
+"The definition of this value can be configured to suit your needs"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_stock_move_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_stock_move_ids
+msgid "Stock move ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_stock_quant_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_stock_quant_ids
+msgid "Stock quant ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_image_storage
+msgid "Storage"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_shop
+msgid "Stores"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_street
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_street
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_street
+msgid "Street"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_street2
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_street2
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_street2
+msgid "Street2"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_subject
+msgid "Subject"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_subtotal
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_subtotal
+msgid "Subtotal"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_subtype_id
+msgid "Subtype"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_purchase_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_purchase_currency_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_purchase_currency_id
+msgid "Supplier Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_delay
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_delay
+msgid "Supplier Lead Time"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_seller_qty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_seller_qty
+msgid "Supplier Min Quantity"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_supplier_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_supplier_payment_mode_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_supplier_payment_mode_id
+msgid "Supplier Payment Mode"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_odoo_id
+msgid "Supplier info"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_symbol
+msgid "Symbol"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_position
+msgid "Symbol Position"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_stock_location_prestashop_synchronized
+msgid "Sync with PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchonize datas like language, country, currency, tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchonize shop and shop groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchronize Base Data"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
+msgid "Synchronize Metadata"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_vat
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_vat
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_vat
+msgid "TIN"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_name
+msgid "Tag Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tag_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_category_id
+msgid "Tags"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_tax
+msgid "Tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_account_id
+msgid "Tax Account"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_refund_account_id
+msgid "Tax Account on Refunds"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_amount_type
+msgid "Tax Computation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_odoo_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tax_group_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_tax_group_id
+msgid "Tax Group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.actions.act_window,name:connector_prestashop.action_tax_group_form
+#: model:ir.ui.menu,name:connector_prestashop.menu_action_tax_group_form
+msgid "Tax Groups"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_vat
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_vat
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_vat
+msgid "Tax Identification Number. Fill it if the company is subjected to taxes. Used by the some of the legal statements."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_tax_line_ids
+msgid "Tax Lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_name
+msgid "Tax Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_type_tax_use
+msgid "Tax Scope"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_tax_adjustment
+msgid "Tax adjustment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_tax_group_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_tax_group_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_tax_group_id
+msgid "Tax groups are used with some external system like Prestashop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_group_tax_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_group_tax_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_tax_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_tax
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_tax_id
+msgid "Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_move_name
+msgid "Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_pricelist_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_pricelist_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_pricelist_id
+msgid "Technical field. Used for searching on pricelists, not stored in database."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_stock_move_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_stock_quant_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_stock_move_ids
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_stock_quant_ids
+msgid "Technical: used to compute quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_odoo_id
+msgid "Template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_note
+msgid "Terms and conditions"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_code
+msgid "The ISO country code in two chars. \n"
+"You can use this field for quick search."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_grouping
+msgid "The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount
+msgid "The amount computed in Odoo doesn't match with the amount in PrestaShop.\n"
+"\n"
+"Cause:\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"\n"
+"Resolution:\n"
+"Check your taxes and fiscal positions configuration and correct them if necessary."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_project_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_related_project_id
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_delay
+msgid "The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_commercial_partner_id
+msgid "The commercial entity that will be used on Journal Entries for this invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:126
+#, python-format
+msgid "The configuration is missing for sale order state with PS ID=%s.\n"
+"\n"
+"Resolution:\n"
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Synchronize base data'."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/sale_order/importer.py:83
+#, python-format
+msgid "The configuration is missing for the Payment Mode '%s'.\n"
+"\n"
+"Resolution:\n"
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Import payment modes', or:\n"
+"\n"
+"- Go to 'Invoicing > Configuration > Management > Payment Modes'\n"
+"- Create a new Payment Mode with name '%s'\n"
+"-Eventually link the Payment Method to an existing Workflow Process or create a new one."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/product_template/importer.py:529
+#, python-format
+msgid "The default category could not be imported."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_position_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_position_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_position_id
+msgid "The fiscal position will determine taxes and accounts used for the partner."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_name
+msgid "The full name of the country."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_user_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_user_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_user_id
+msgid "The internal user that is in charge of communicating with this contact if any."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_min_qty
+msgid "The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_shop_name
+msgid "The name of the method on the backend"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_name
+msgid "The name that will be used on account move lines"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_product_count
+msgid "The number of products under this category (Does not consider the children categories)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_account_id
+msgid "The partner account used for this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_has_unreconciled_entries
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_has_unreconciled_entries
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_has_unreconciled_entries
+msgid "The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_reference
+msgid "The partner reference of this invoice."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_tz
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_tz
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_tz
+msgid "The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_price
+msgid "The price to purchase a product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_rate
+msgid "The rate of the currency to the currency of rate 1."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:35
+#, python-format
+msgid "The refund for order %s has a different amount in PrestaShop and in Odoo."
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/account_invoice/importer.py:60
+#, python-format
+msgid "The refund journal must be configured on the PrestaShop Backend."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_lst_price
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_lst_price
+msgid "The sale price is managed from the product template. Click on the 'Variant Prices' button to set the extra attribute prices."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_matching_customer
+msgid "The selected fields will be matched to the ref field of the partner. Please adapt your datas consequently."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_sequence
+msgid "The sequence field is used to define order in which the tax lines are applied."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount_tax
+msgid "The tax amount computed in Odoo doesn't match with the tax amount in PrestaShop.\n"
+"\n"
+"Cause:\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"\n"
+"Resolution:\n"
+"Check your taxes and fiscal positions configuration and correct them if necessary."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_tz
+msgid "The timezone of the backend. Used to synchronize the sale order date."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_volume
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_volume
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_volume
+msgid "The volume in m3."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_weight
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_weight
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_weight
+msgid "The weight of the contents in Kg, not including any packaging, etc."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_iso_code
+msgid "This ISO code is the name of po files to use for translations"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_expense_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_expense_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_expense_id
+msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_income_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_income_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_income_id
+msgid "This account will be used for invoices instead of the default one to value sales for the current product."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_expense_categ_id
+msgid "This account will be used for invoices to value expenses."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_income_categ_id
+msgid "This account will be used for invoices to value sales."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_payable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_payable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_payable_id
+msgid "This account will be used instead of the default one as the payable account for the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_receivable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_receivable_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_receivable_id
+msgid "This account will be used instead of the default one as the receivable account for the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_creditor_price_difference_categ
+msgid "This account will be used to value price difference between purchase price and accounting cost."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_creditor_price_difference
+msgid "This account will be used to value price difference between purchase price and cost price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_uom
+msgid "This comes from the product form."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_purchase_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_purchase_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_purchase_currency_id
+msgid "This currency will be used, instead of the default one, for purchases from the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_delivery_carrier_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_delivery_carrier_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_delivery_carrier_id
+msgid "This delivery method will be used when invoicing from picking."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image
+msgid "This field holds the image used as avatar for this contact, limited to 1024x1024px"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_variant
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_variant
+msgid "This field holds the image used as image for the product variant, limited to 1024x1024px."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image
+msgid "This field holds the image used as image for the product, limited to 1024x1024px."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_partner_mixin_default_category_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_default_category_id
+msgid "This field is synchronized with the field 'Default customer group' in PrestaShop."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_code
+msgid "This field is used to set/get locales for user"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_qty
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_qty
+msgid "This is minimum quantity to purchase from Main Supplier."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_delay
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_delay
+msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_price_extra
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_price_extra
+msgid "This is the sum of the extra price of all attributes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_supplier_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_supplier_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_supplier_payment_term_id
+msgid "This payment term will be used instead of the default one for purchase orders and vendor bills"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_payment_term_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_payment_term_id
+msgid "This payment term will be used instead of the default one for sale orders and customer invoices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_margin
+msgid "This percentage will be added to the shipping price."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_product_pricelist
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_product_pricelist
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_product_pricelist
+msgid "This pricelist will be used, instead of the default one, for sales to the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_customer
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_customer
+msgid "This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_supplier
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_supplier
+msgid "This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_production
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_production
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_production
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_procurement
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_procurement
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_procurement
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_inventory
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_inventory
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_inventory
+msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_code
+msgid "This vendor's product code will be used when printing a request for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_name
+msgid "This vendor's product name will be used when printing a request for quotation. Keep empty to use the internal one."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_thousands_sep
+msgid "Thousands Separator"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_time_format
+msgid "Time Format"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_tz
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_tz
+msgid "Timezone"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_tz_offset
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_tz_offset
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_tz_offset
+msgid "Timezone offset"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_title
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_title
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_title
+msgid "Title"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tmpl_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tmpl_seller_ids
+msgid "Tmpl seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_qty_to_invoice
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_qty_to_invoice
+msgid "To Invoice"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+msgid "To show PrestaShop binding go to:"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_total
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_total
+msgid "Total"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,name:connector_prestashop.excep_order_wrong_total_amount
+msgid "Total Amount differs from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_total_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_total_invoiced
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_total_invoiced
+msgid "Total Invoiced"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_debit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_debit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_debit
+msgid "Total Payable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_credit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_credit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_credit
+msgid "Total Receivable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:exception.rule,name:connector_prestashop.excep_order_wrong_total_amount_tax
+msgid "Total Tax Amount differs from PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_amount
+msgid "Total amount in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_amount_total_company_signed
+msgid "Total amount in the currency of the company, negative for credit notes."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_amount_total_signed
+msgid "Total amount in the currency of the invoice, negative for credit notes."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_credit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_credit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_credit
+msgid "Total amount this customer owes you."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_debit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_debit
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_debit
+msgid "Total amount you have to pay to this vendor."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total_company_signed
+msgid "Total in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_total_signed
+msgid "Total in Invoice Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_total_route_ids
+msgid "Total routes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_shipping_tax_excluded
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_shipping_tax_included
+msgid "Total shipping in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_total_amount_tax
+msgid "Total tax in PrestaShop"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_track_service
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_track_service
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_track_service
+msgid "Track Service"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_tracking_value_ids
+msgid "Tracked values are stored in a separate model. This field allow to reconstruct the tracking and to generate statistics on the model."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_tracking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_tracking
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_tracking
+msgid "Tracking"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_tracking_value_ids
+msgid "Tracking values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_translatable
+msgid "Translatable"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_mail_message_message_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_group_type
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_type
+msgid "Type"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/models/prestashop_shop_group/importer.py:27
+#, python-format
+msgid "Undefined"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_price_unit
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_price_unit
+msgid "Unit Price"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_uom_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_product_uom
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_product_uom
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_unread
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_message_unread_counter
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_untaxed
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_amount_untaxed
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_amount_untaxed_signed
+msgid "Untaxed Amount in Company Currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_mixin_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_partner_mixin_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_category_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_date_upd
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_date_upd
+msgid "Updated At (on PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_date_upd
+msgid "Updated at (in PrestaShop)"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_taxes_included
+msgid "Use tax included prices"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_type
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_type
+msgid "Used to select automatically the right address according to the context in sales and purchases documents."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_user_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_user_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_user_ids
+msgid "Users"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_currency_id
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_currency_id
+msgid "Utility field to express amount currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_valuation
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_valuation
+msgid "Valuation"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_name
+msgid "Value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_ids
+msgid "Values"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_image_variant
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_image_variant
+msgid "Variant Image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_price_extra
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_price_extra
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_variant_seller_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_variant_seller_ids
+msgid "Variant seller ids"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_option_value_product_ids
+msgid "Variants"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_name
+msgid "Vendor"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_stock_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_stock_supplier
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_stock_supplier
+msgid "Vendor Location"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_property_supplier_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_property_supplier_payment_term_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_property_supplier_payment_term_id
+msgid "Vendor Payment Terms"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_code
+msgid "Vendor Product Code"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_name
+msgid "Vendor Product Name"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_refund_reference
+msgid "Vendor Reference"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_supplier_taxes_id
+msgid "Vendor Taxes"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_supplierinfo_product_uom
+msgid "Vendor Unit of Measure"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_name
+msgid "Vendor of this product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_seller_ids
+msgid "Vendors"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_verbose
+msgid "Verbose"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_version
+msgid "Version"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_volume
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_volume
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_volume
+msgid "Volume"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_shop_odoo_id
+msgid "WareHouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_stock_warehouse
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_warehouse_id
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_warehouse_id
+msgid "Warehouse"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_warehouse_id
+msgid "Warehouse used to compute the stock quantities."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_warranty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_warranty
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_warranty
+msgid "Warranty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_backend_webservice_key
+msgid "Webservice key"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_website
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_website
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_website
+msgid "Website"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_website
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_website
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_website
+msgid "Website of Partner or Company"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.menu,name:connector_prestashop.menu_prestashop_shop_group
+msgid "Websites"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_weight
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_combination_weight
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_product_template_weight
+msgid "Weight"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_input_categ_id
+msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_input
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_input
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_input
+msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_output_categ_id
+msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_output
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_output
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_output
+msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_journal
+msgid "When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_valuation_account_id
+msgid "When real-time inventory valuation is enabled on a product, this account will hold the current value of the products."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_id
+msgid "When this field is filled in, the vendor data will onlyapply to the variant."
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_address_format
+msgid "You can state here the usual format to use for the addresses belonging to this country.\n"
+"\n"
+"You can use the python-style string patern with all the field of the address (for example, use '%(street)s' to display the field 'street') plus\n"
+" \n"
+"%(state_name)s: the name of the state\n"
+" \n"
+"%(state_code)s: the code of the state\n"
+" \n"
+"%(country_name)s: the name of the country\n"
+" \n"
+"%(country_code)s: the code of the country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_webservice_key
+msgid "You have to put it in 'username' of the PrestaShop Webservice api path invite"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_address_zip
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_zip
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_supplier_zip
+msgid "Zip"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_zip_from
+msgid "Zip From"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_delivery_carrier_zip_to
+msgid "Zip To"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model___not_exist_prestashop_payment
+msgid "__not_exist_prestashop.payment"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model___not_exit_prestashop_order_carrier
+msgid "__not_exit_prestashop.order_carrier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__import_stock_available
+msgid "_import_stock_available"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__prestashop_version_key
+msgid "_prestashop.version.key"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model__prestashop_product_tag
+msgid "_prestashop_product_tag"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_account_tax_group
+msgid "account.tax.group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_base_multi_image_image
+msgid "base_multi_image.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model.fields,field_description:connector_prestashop.field_account_tax_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_account_tax_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_prestashop_bind_ids
+#: model:ir.model.fields,field_description:connector_prestashop.field_res_country_prestashop_bind_ids
+msgid "prestashop Bindings"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_form_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_form_view
+msgid "prestashop fields"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.combination_connector_presta_tree_view
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_tree_view
+msgid "prestashop product"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_account_tax
+msgid "prestashop.account.tax"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_account_tax_group
+msgid "prestashop.account.tax.group"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_address
+msgid "prestashop.address"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_address_mixin
+msgid "prestashop.address.mixin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_groups_pricelist
+msgid "prestashop.groups.pricelist"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_mail_message
+msgid "prestashop.mail.message"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_partner_mixin
+msgid "prestashop.partner.mixin"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_category
+msgid "prestashop.product.category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination
+msgid "prestashop.product.combination"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination_option
+msgid "prestashop.product.combination.option"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_combination_option_value
+msgid "prestashop.product.combination.option.value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_image
+msgid "prestashop.product.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_supplierinfo
+msgid "prestashop.product.supplierinfo"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_product_template
+msgid "prestashop.product.template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_refund
+msgid "prestashop.refund"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_country
+msgid "prestashop.res.country"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_currency
+msgid "prestashop.res.currency"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_lang
+msgid "prestashop.res.lang"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_partner
+msgid "prestashop.res.partner"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_res_partner_category
+msgid "prestashop.res.partner.category"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order
+msgid "prestashop.sale.order"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_line
+msgid "prestashop.sale.order.line"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_line_discount
+msgid "prestashop.sale.order.line.discount"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_sale_order_state
+msgid "prestashop.sale.order.state"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_supplier
+msgid "prestashop.supplier"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_prestashop_supplier_image
+msgid "prestashop.supplier.image"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_normal_form_view
+msgid "product template"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_product_attribute_value
+msgid "product.attribute.value"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.ui.view,arch_db:connector_prestashop.product_connector_presta_form_view
+msgid "qty"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_state
+msgid "sale.order.state"
+msgstr ""
+
+#. module: connector_prestashop
+#: model:ir.model,name:connector_prestashop.model_sale_order_state_list
+msgid "sale.order.state.list"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:41
+#, python-format
+msgid "{}API / Network Error:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:45
+#, python-format
+msgid "{}Authentication Error:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:49
+#, python-format
+msgid "{}Error during synchronization with PrestaShop:\n"
+"\n"
+"{}"
+msgstr ""
+
+#. module: connector_prestashop
+#: code:addons/connector_prestashop/components/backend_adapter.py:37
+#, python-format
+msgid "{}Network Error:\n"
+"\n"
+"{}"
+msgstr ""
From 3e3b463c39d3457297bd10f9a5edfd3cc4c3c5ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Francisco=20Fern=C3=A1ndez?=
Date: Wed, 16 Jan 2019 09:52:55 +0100
Subject: [PATCH 22/99] [10.0] [FIX] connector_prestashop: Fix export stock
test failing randomly (#106)
---
connector_prestashop/models/product_template/common.py | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index a5939ba19..ca5866808 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -35,6 +35,14 @@ class ProductTemplate(models.Model):
ondelete='restrict'
)
+ # TODO remove when https://github.com/odoo/odoo/pull/30024 is merged
+ @api.depends(
+ 'product_variant_ids',
+ 'product_variant_ids.stock_quant_ids',
+ )
+ def _compute_quantities(self):
+ return super(ProductTemplate, self)._compute_quantities()
+
@api.multi
def update_prestashop_quantities(self):
for template in self:
From 7a188acf2150cc41a073115cfcd41188cd59fdbd Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Wed, 16 Jan 2019 09:18:48 +0000
Subject: [PATCH 23/99] [UPD] Update connector_prestashop.pot
---
connector_prestashop/i18n/connector_prestashop.pot | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/connector_prestashop/i18n/connector_prestashop.pot b/connector_prestashop/i18n/connector_prestashop.pot
index eb423ae47..b5e8a1d26 100644
--- a/connector_prestashop/i18n/connector_prestashop.pot
+++ b/connector_prestashop/i18n/connector_prestashop.pot
@@ -1824,7 +1824,7 @@ msgstr ""
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_id
-#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6787
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6789
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_id
From 8835d61fade2c236de6b692cda24503696aae0d2 Mon Sep 17 00:00:00 2001
From: OCA Transbot
Date: Sun, 27 Jan 2019 10:35:42 +0000
Subject: [PATCH 24/99] Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: connector-prestashop-10.0/connector-prestashop-10.0-connector_prestashop
Translate-URL: https://translation.odoo-community.org/projects/connector-prestashop-10-0/connector-prestashop-10-0-connector_prestashop/
---
connector_prestashop/i18n/fr.po | 719 +++++++++++++++++++++++---------
1 file changed, 527 insertions(+), 192 deletions(-)
diff --git a/connector_prestashop/i18n/fr.po b/connector_prestashop/i18n/fr.po
index 16bd9ef0c..a05365264 100644
--- a/connector_prestashop/i18n/fr.po
+++ b/connector_prestashop/i18n/fr.po
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * connector_prestashop
+# * connector_prestashop
#
msgid ""
msgstr ""
@@ -16,10 +16,15 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_state
-msgid " * The 'Draft' status is used when a user is encoding a new and unconfirmed Invoice.\n"
-" * The 'Pro-forma' status is used when the invoice does not have an invoice number.\n"
-" * The 'Open' status is used when user creates invoice, an invoice number is generated. It stays in the open status till the user pays the invoice.\n"
-" * The 'Paid' status is set automatically when the invoice is paid. Its related journal entries may or may not be reconciled.\n"
+msgid ""
+" * The 'Draft' status is used when a user is encoding a new and unconfirmed "
+"Invoice.\n"
+" * The 'Pro-forma' status is used when the invoice does not have an invoice "
+"number.\n"
+" * The 'Open' status is used when user creates invoice, an invoice number is "
+"generated. It stays in the open status till the user pays the invoice.\n"
+" * The 'Paid' status is set automatically when the invoice is paid. Its "
+"related journal entries may or may not be reconciled.\n"
" * The 'Cancelled' status is used when user cancel invoice."
msgstr ""
@@ -77,26 +82,36 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_type
-msgid "A category of the view type is a virtual category that can be used as the parent of another category to create a hierarchical structure."
+msgid ""
+"A category of the view type is a virtual category that can be used as the "
+"parent of another category to create a hierarchical structure."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_sale
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_sale
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_sale
-msgid "A description of the Product that you want to communicate to your customers. This description will be copied to every Sale Order, Delivery Order and Customer Invoice/Refund"
+msgid ""
+"A description of the Product that you want to communicate to your customers. "
+"This description will be copied to every Sale Order, Delivery Order and "
+"Customer Invoice/Refund"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description_purchase
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description_purchase
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description_purchase
-msgid "A description of the Product that you want to communicate to your vendors. This description will be copied to every Purchase Order, Receipt and Vendor Bill/Refund."
+msgid ""
+"A description of the Product that you want to communicate to your vendors. "
+"This description will be copied to every Purchase Order, Receipt and Vendor "
+"Bill/Refund."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_parent_need_cancel
-msgid "A parent sales order has been canceled on the backend and needs to be canceled."
+msgid ""
+"A parent sales order has been canceled on the backend and needs to be "
+"canceled."
msgstr ""
#. module: connector_prestashop
@@ -113,14 +128,15 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_description
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_description
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_description
-msgid "A precise description of the Product, used only for internal information purposes."
+msgid ""
+"A precise description of the Product, used only for internal information "
+"purposes."
msgstr ""
#. module: connector_prestashop
#: sql_constraint:prestashop.account.tax:0
#: sql_constraint:prestashop.account.tax.group:0
-#: sql_constraint:prestashop.address:0
-#: sql_constraint:prestashop.binding:0
+#: sql_constraint:prestashop.address:0 sql_constraint:prestashop.binding:0
#: sql_constraint:prestashop.binding.odoo:0
#: sql_constraint:prestashop.delivery.carrier:0
#: sql_constraint:prestashop.groups.pricelist:0
@@ -132,18 +148,15 @@ msgstr ""
#: sql_constraint:prestashop.product.image:0
#: sql_constraint:prestashop.product.supplierinfo:0
#: sql_constraint:prestashop.product.template:0
-#: sql_constraint:prestashop.refund:0
-#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.refund:0 sql_constraint:prestashop.res.country:0
#: sql_constraint:prestashop.res.currency:0
-#: sql_constraint:prestashop.res.lang:0
-#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.lang:0 sql_constraint:prestashop.res.partner:0
#: sql_constraint:prestashop.res.partner.category:0
#: sql_constraint:prestashop.sale.order:0
#: sql_constraint:prestashop.sale.order.line:0
#: sql_constraint:prestashop.sale.order.line.discount:0
#: sql_constraint:prestashop.sale.order.state:0
-#: sql_constraint:prestashop.shop:0
-#: sql_constraint:prestashop.shop.group:0
+#: sql_constraint:prestashop.shop:0 sql_constraint:prestashop.shop.group:0
#: sql_constraint:prestashop.supplier:0
msgid "A record with same ID on PrestaShop already exists."
msgstr ""
@@ -153,10 +166,16 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_type
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_type
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_type
-msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
-"A consumable product, on the other hand, is a product for which stock is not managed.\n"
+msgid ""
+"A stockable product is a product for which you manage stock. The \"Inventory"
+"\" app has to be installed.\n"
+"A consumable product, on the other hand, is a product for which stock is not "
+"managed.\n"
"A service is a non-material product you provide.\n"
-"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
+"A digital content is a non-material product you sell online. The files "
+"attached to the products are the one that are sold on the e-commerce such as "
+"e-books, music, pictures,... The \"Digital Product\" module has to be "
+"installed."
msgstr ""
#. module: connector_prestashop
@@ -191,12 +210,16 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_account_id
-msgid "Account that will be set on invoice tax lines for invoices. Leave empty to use the expense account."
+msgid ""
+"Account that will be set on invoice tax lines for invoices. Leave empty to "
+"use the expense account."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_refund_account_id
-msgid "Account that will be set on invoice tax lines for refunds. Leave empty to use the expense account."
+msgid ""
+"Account that will be set on invoice tax lines for refunds. Leave empty to "
+"use the expense account."
msgstr ""
#. module: connector_prestashop
@@ -233,7 +256,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_bank_account_required
-msgid "Activate this option if this payment method requires you to know the bank account number of your customer or supplier."
+msgid ""
+"Activate this option if this payment method requires you to know the bank "
+"account number of your customer or supplier."
msgstr ""
#. module: connector_prestashop
@@ -330,18 +355,21 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_amount
-msgid "Amount of the order to benefit from a free shipping, expressed in the company currency"
+msgid ""
+"Amount of the order to benefit from a free shipping, expressed in the "
+"company currency"
msgstr ""
#. module: connector_prestashop
#: sql_constraint:prestashop.delivery.carrier:0
-msgid "An ERP record with same ID already exists on PrestaShop with the same id_reference"
+msgid ""
+"An ERP record with same ID already exists on PrestaShop with the same "
+"id_reference"
msgstr ""
#. module: connector_prestashop
#: sql_constraint:prestashop.account.tax.group:0
-#: sql_constraint:prestashop.address:0
-#: sql_constraint:prestashop.binding.odoo:0
+#: sql_constraint:prestashop.address:0 sql_constraint:prestashop.binding.odoo:0
#: sql_constraint:prestashop.delivery.carrier:0
#: sql_constraint:prestashop.groups.pricelist:0
#: sql_constraint:prestashop.mail.message:0
@@ -350,11 +378,9 @@ msgstr ""
#: sql_constraint:prestashop.product.combination.option:0
#: sql_constraint:prestashop.product.supplierinfo:0
#: sql_constraint:prestashop.product.template:0
-#: sql_constraint:prestashop.refund:0
-#: sql_constraint:prestashop.res.country:0
+#: sql_constraint:prestashop.refund:0 sql_constraint:prestashop.res.country:0
#: sql_constraint:prestashop.res.currency:0
-#: sql_constraint:prestashop.res.lang:0
-#: sql_constraint:prestashop.res.partner:0
+#: sql_constraint:prestashop.res.lang:0 sql_constraint:prestashop.res.partner:0
#: sql_constraint:prestashop.res.partner.category:0
#: sql_constraint:prestashop.sale.order:0
#: sql_constraint:prestashop.sale.order.line:0
@@ -378,7 +404,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_no_auto_thread
-msgid "Answers do not go in the original document discussion thread. This has an impact on the generated message-id."
+msgid ""
+"Answers do not go in the original document discussion thread. This has an "
+"impact on the generated message-id."
msgstr ""
#. module: connector_prestashop
@@ -398,7 +426,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_attachment_ids
-msgid "Attachments are linked to a document through model / res_id and to the message through this field."
+msgid ""
+"Attachments are linked to a document through model / res_id and to the "
+"message through this field."
msgstr ""
#. module: connector_prestashop
@@ -431,7 +461,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_id
-msgid "Author of the message. If not set, email_from may hold an email address that did not match any partner."
+msgid ""
+"Author of the message. If not set, email_from may hold an email address that "
+"did not match any partner."
msgstr ""
#. module: connector_prestashop
@@ -495,7 +527,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_partner_bank_id
-msgid "Bank Account Number to which the invoice will be paid. A Company bank account if this is a Customer Invoice or Vendor Refund, otherwise a Partner bank account number."
+msgid ""
+"Bank Account Number to which the invoice will be paid. A Company bank "
+"account if this is a Customer Invoice or Vendor Refund, otherwise a Partner "
+"bank account number."
msgstr ""
#. module: connector_prestashop
@@ -526,7 +561,8 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_list_price
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_list_price
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_lst_price
-msgid "Base price to compute the customer price. Sometimes called the catalog price."
+msgid ""
+"Base price to compute the customer price. Sometimes called the catalog price."
msgstr ""
#. module: connector_prestashop
@@ -554,7 +590,8 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
-msgid "By clicking on the buttons,\n"
+msgid ""
+"By clicking on the buttons,\n"
" you will initiate the\n"
" synchronizations\n"
" with PrestaShop.\n"
@@ -661,7 +698,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_supplier
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_supplier
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_supplier
-msgid "Check this box if this contact is a vendor. If it's not checked, purchase people will not see it when encoding a purchase order."
+msgid ""
+"Check this box if this contact is a vendor. If it's not checked, purchase "
+"people will not see it when encoding a purchase order."
msgstr ""
#. module: connector_prestashop
@@ -673,7 +712,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_price_include
-msgid "Check this if the price you use on the product and invoices includes this tax."
+msgid ""
+"Check this if the price you use on the product and invoices includes this "
+"tax."
msgstr ""
#. module: connector_prestashop
@@ -879,7 +920,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_standard_price
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_standard_price
-msgid "Cost of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. Expressed in the default unit of measure of the product."
+msgid ""
+"Cost of the product template used for standard stock valuation in accounting "
+"and used as a base price on purchase orders. Expressed in the default unit "
+"of measure of the product."
msgstr ""
#. module: connector_prestashop
@@ -1087,11 +1131,16 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_qty_available
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_qty_available
-msgid "Current quantity of products.\n"
-"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n"
-"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
-"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n"
-"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgid ""
+"Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"stored in the Stock Location of the Warehouse of this Shop, or any of its "
+"children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' "
+"type."
msgstr ""
#. module: connector_prestashop
@@ -1217,7 +1266,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_uom_po_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_uom_po_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_uom_po_id
-msgid "Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."
+msgid ""
+"Default Unit of Measure used for purchase orders. It must be in the same "
+"category than the default unit of measure."
msgstr ""
#. module: connector_prestashop
@@ -1315,7 +1366,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_route_ids
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_route_ids
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_route_ids
-msgid "Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."
+msgid ""
+"Depending on the modules installed, this will allow you to define the route "
+"of the product: whether it will be bought, manufactured, MTO/MTS,..."
msgstr ""
#. module: connector_prestashop
@@ -1350,12 +1403,16 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_currency_position
-msgid "Determines where the currency symbol should be placed after or before the amount."
+msgid ""
+"Determines where the currency symbol should be placed after or before the "
+"amount."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_type_tax_use
-msgid "Determines where the tax is selectable. Note : 'None' means a tax can't be used by itself, however it can still be used in a group."
+msgid ""
+"Determines where the tax is selectable. Note : 'None' means a tax can't be "
+"used by itself, however it can still be used in a group."
msgstr ""
#. module: connector_prestashop
@@ -1434,15 +1491,20 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.actions.act_window,help:connector_prestashop.action_prestashop_sale_order_state_form
-msgid "Each state can be linked between PrestaShop and Odoo.\n"
-" When a sale order state change, the connector will update the sale order in PrestaShop."
+msgid ""
+"Each state can be linked between PrestaShop and Odoo.\n"
+" When a sale order state change, the connector will update the "
+"sale order in PrestaShop."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_partner_share
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_partner_share
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_partner_share
-msgid "Either customer (no user), either shared user. Indicated the current partner is a customer without access or with a limited access created for sharing data."
+msgid ""
+"Either customer (no user), either shared user. Indicated the current partner "
+"is a customer without access or with a limited access created for sharing "
+"data."
msgstr ""
#. module: connector_prestashop
@@ -1461,7 +1523,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_email_from
-msgid "Email address of the sender. This field is set when no matching partner is found and replaces the author_id field in the chatter."
+msgid ""
+"Email address of the sender. This field is set when no matching partner is "
+"found and replaces the author_id field in the chatter."
msgstr ""
#. module: connector_prestashop
@@ -1473,7 +1537,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_purchase_id
-msgid "Encoding help. When selected, the associated purchase order lines are added to the vendor bill. Several PO can be selected."
+msgid ""
+"Encoding help. When selected, the associated purchase order lines are added "
+"to the vendor bill. Several PO can be selected."
msgstr ""
#. module: connector_prestashop
@@ -1495,13 +1561,17 @@ msgstr ""
#: code:addons/connector_prestashop/models/product_template/importer.py:148
#: code:addons/connector_prestashop/models/product_template/importer.py:157
#, python-format
-msgid "Error! Multiple products found with combinations reference %s. Maybe consider to update you datas"
+msgid ""
+"Error! Multiple products found with combinations reference %s. Maybe "
+"consider to update you datas"
msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/product_template/importer.py:166
#, python-format
-msgid "Error! Multiple templates are found with combinations reference. Maybe consider to change matching option"
+msgid ""
+"Error! Multiple templates are found with combinations reference. Maybe "
+"consider to change matching option"
msgstr ""
#. module: connector_prestashop
@@ -1697,10 +1767,14 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_virtual_available
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_virtual_available
-msgid "Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
-"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
-"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
-"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in "
+"this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' "
+"type."
msgstr ""
#. module: connector_prestashop
@@ -1747,7 +1821,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_packaging_ids
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_packaging_ids
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_packaging_ids
-msgid "Gives the different ways to package the same product. This has no impact on the picking order and is mainly used if you use the EDI module."
+msgid ""
+"Gives the different ways to package the same product. This has no impact on "
+"the picking order and is mainly used if you use the EDI module."
msgstr ""
#. module: connector_prestashop
@@ -1825,7 +1901,7 @@ msgstr ""
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_country_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_currency_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_lang_id
-#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6787
+#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_category_id_6789
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_res_partner_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_id
#: model:ir.model.fields,field_description:connector_prestashop.field_prestashop_sale_order_line_discount_id
@@ -1927,36 +2003,57 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_opt_out
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_opt_out
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_opt_out
-msgid "If opt-out is checked, this contact has refused to receive emails for mass mailing and marketing campaign. Filter 'Available for Mass Mailing' allows users to filter the partners when performing mass mailing."
+msgid ""
+"If opt-out is checked, this contact has refused to receive emails for mass "
+"mailing and marketing campaign. Filter 'Available for Mass Mailing' allows "
+"users to filter the partners when performing mass mailing."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_valuation
-msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'. The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgid ""
+"If perpetual valuation is enabled for a product, the system will "
+"automatically create journal entries corresponding to stock moves, with "
+"product price as specified by the 'Costing Method'. The inventory variation "
+"account set on the product category will represent the current inventory "
+"value, and the stock input and stock output account will hold the "
+"counterpart moves for incoming and outgoing products."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_valuation
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_valuation
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_valuation
-msgid "If perpetual valuation is enabled for a product, the system will automatically create journal entries corresponding to stock moves, with product price as specified by the 'Costing Method'The inventory variation account set on the product category will represent the current inventory value, and the stock input and stock output account will hold the counterpart moves for incoming and outgoing products."
+msgid ""
+"If perpetual valuation is enabled for a product, the system will "
+"automatically create journal entries corresponding to stock moves, with "
+"product price as specified by the 'Costing Method'The inventory variation "
+"account set on the product category will represent the current inventory "
+"value, and the stock input and stock output account will hold the "
+"counterpart moves for incoming and outgoing products."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_team_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_team_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_team_id
-msgid "If set, sale team used notably for sales and assignations related to this partner"
+msgid ""
+"If set, sale team used notably for sales and assignations related to this "
+"partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_include_base_amount
-msgid "If set, taxes which are computed after this one will be computed based on the price tax included."
+msgid ""
+"If set, taxes which are computed after this one will be computed based on "
+"the price tax included."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_analytic
-msgid "If set, the amount computed by this tax will be assigned to the same analytic account as the invoice line (if any)"
+msgid ""
+"If set, the amount computed by this tax will be assigned to the same "
+"analytic account as the invoice line (if any)"
msgstr ""
#. module: connector_prestashop
@@ -1966,14 +2063,18 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_free_if_more_than
-msgid "If the order is more expensive than a certain amount, the customer can benefit from a free shipping"
+msgid ""
+"If the order is more expensive than a certain amount, the customer can "
+"benefit from a free shipping"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_lang
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_lang
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_lang
-msgid "If the selected language is loaded in the system, all documents related to this contact will be printed in this language. If not, it will be English."
+msgid ""
+"If the selected language is loaded in the system, all documents related to "
+"this contact will be printed in this language. If not, it will be English."
msgstr ""
#. module: connector_prestashop
@@ -1983,12 +2084,21 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_payment_term_id
-msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. If you keep the payment term and the due date empty, it means direct payment. The payment term may compute several due dates, for example 50% now, 50% in one month."
+msgid ""
+"If you use payment terms, the due date will be computed automatically at the "
+"generation of accounting entries. If you keep the payment term and the due "
+"date empty, it means direct payment. The payment term may compute several "
+"due dates, for example 50% now, 50% in one month."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_date_due
-msgid "If you use payment terms, the due date will be computed automatically at the generation of accounting entries. The payment term may compute several due dates, for example 50% now and 50% in one month, but if you want to force a due date, make sure that the payment term is not set on the invoice. If you keep the payment term and the due date empty, it means direct payment."
+msgid ""
+"If you use payment terms, the due date will be computed automatically at the "
+"generation of accounting entries. The payment term may compute several due "
+"dates, for example 50% now and 50% in one month, but if you want to force a "
+"due date, make sure that the payment term is not set on the invoice. If you "
+"keep the payment term and the due date empty, it means direct payment."
msgstr ""
#. module: connector_prestashop
@@ -2008,19 +2118,26 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image
-msgid "Image of the product variant (Big-sized image of product template if false). It is automatically resized as a 1024x1024px image, with aspect ratio preserved."
+msgid ""
+"Image of the product variant (Big-sized image of product template if false). "
+"It is automatically resized as a 1024x1024px image, with aspect ratio "
+"preserved."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_medium
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_medium
-msgid "Image of the product variant (Medium-sized image of product template if false)."
+msgid ""
+"Image of the product variant (Medium-sized image of product template if "
+"false)."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_small
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_small
-msgid "Image of the product variant (Small-sized image of product template if false)."
+msgid ""
+"Image of the product variant (Small-sized image of product template if "
+"false)."
msgstr ""
#. module: connector_prestashop
@@ -2088,13 +2205,17 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/product_image/importer.py:93
#, python-format
-msgid "Import of image id `%s` of PrestaShop product with id `%s` failed. Error: `%s`"
+msgid ""
+"Import of image id `%s` of PrestaShop product with id `%s` failed. Error: `"
+"%s`"
msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/sale_order/importer.py:134
#, python-format
-msgid "Import of the order with PS ID=%s canceled because its state is not importable"
+msgid ""
+"Import of the order with PS ID=%s canceled because its state is not "
+"importable"
msgstr ""
#. module: connector_prestashop
@@ -2144,7 +2265,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_id_reference
-msgid "In PrestaShop, carriers can be copied with the same 'Reference ID' (only the last copied carrier will be synchronized with the ERP)"
+msgid ""
+"In PrestaShop, carriers can be copied with the same 'Reference ID' (only the "
+"last copied carrier will be synchronized with the ERP)"
msgstr ""
#. module: connector_prestashop
@@ -2180,7 +2303,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_incoterms_id
-msgid "Incoterms are series of sales terms. They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."
+msgid ""
+"Incoterms are series of sales terms. They are used to divide transaction "
+"costs and responsibilities between buyer and seller and reflect state-of-the-"
+"art transportation practices."
msgstr ""
#. module: connector_prestashop
@@ -2224,7 +2350,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_incoterm
-msgid "International Commercial Terms are a series of predefined commercial terms used in international transactions."
+msgid ""
+"International Commercial Terms are a series of predefined commercial terms "
+"used in international transactions."
msgstr ""
#. module: connector_prestashop
@@ -2357,7 +2485,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_reconciled
-msgid "It indicates that the invoice has been paid and the journal entry of the invoice has been reconciled with one or several journal entries of payment."
+msgid ""
+"It indicates that the invoice has been paid and the journal entry of the "
+"invoice has been reconciled with one or several journal entries of payment."
msgstr ""
#. module: connector_prestashop
@@ -2399,7 +2529,8 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_fixed_price
-msgid "Keep empty if the pricing depends on the advanced pricing per destination"
+msgid ""
+"Keep empty if the pricing depends on the advanced pricing per destination"
msgstr ""
#. module: connector_prestashop
@@ -2585,7 +2716,10 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_last_time_entries_checked
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_last_time_entries_checked
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_last_time_entries_checked
-msgid "Last time the invoices & payments matching was performed for this partner. It is set either if there's not at least an unreconciled debit and an unreconciled credit or if you click the \"Done\" button."
+msgid ""
+"Last time the invoices & payments matching was performed for this partner. "
+"It is set either if there's not at least an unreconciled debit and an "
+"unreconciled credit or if you click the \"Done\" button."
msgstr ""
#. module: connector_prestashop
@@ -2603,7 +2737,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_delay
-msgid "Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."
+msgid ""
+"Lead time in days between the confirmation of the purchase order and the "
+"receipt of the products in your warehouse. Used by the scheduler for "
+"automatic computation of the purchase order planning."
msgstr ""
#. module: connector_prestashop
@@ -2687,14 +2824,21 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_track_service
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_track_service
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_track_service
-msgid "Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
-"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
-"Create a task and track hours: Create a task on the sale order validation and track the work hours."
+msgid ""
+"Manually set quantities on order: Invoice based on the manually entered "
+"quantity, without creating an analytic account.\n"
+"Timesheets on contract: Invoice based on the tracked hours on the related "
+"timesheet.\n"
+"Create a task and track hours: Create a task on the sale order validation "
+"and track the work hours."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_validity_date
-msgid "Manually set the expiration date of your quotation (offer), or it will set the date automatically based on the template if online quotation is installed."
+msgid ""
+"Manually set the expiration date of your quotation (offer), or it will set "
+"the date automatically based on the template if online quotation is "
+"installed."
msgstr ""
#. module: connector_prestashop
@@ -2740,19 +2884,28 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_medium
-msgid "Medium-sized image of the product. It is automatically resized as a 128x128px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or some kanban views."
+msgid ""
+"Medium-sized image of the product. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved, only when the image exceeds "
+"one of those sizes. Use this field in form views or some kanban views."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image_medium
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_medium
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_medium
-msgid "Medium-sized image of this contact. It is automatically resized as a 128x128px image, with aspect ratio preserved. Use this field in form views or some kanban views."
+msgid ""
+"Medium-sized image of this contact. It is automatically resized as a "
+"128x128px image, with aspect ratio preserved. Use this field in form views "
+"or some kanban views."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_medium
-msgid "Medium-sized image. It is automatically resized as a 128 x 128 px image, with aspect ratio preserved, only when the image exceeds one of those sizes. Use this field in form views or kanban views."
+msgid ""
+"Medium-sized image. It is automatically resized as a 128 x 128 px image, "
+"with aspect ratio preserved, only when the image exceeds one of those sizes. "
+"Use this field in form views or kanban views."
msgstr ""
#. module: connector_prestashop
@@ -2810,7 +2963,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_message_type
-msgid "Message type: email for email message, notification for system message, comment for other messages such as user replies"
+msgid ""
+"Message type: email for email message, notification for system message, "
+"comment for other messages such as user replies"
msgstr ""
#. module: connector_prestashop
@@ -2953,7 +3108,9 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/components/importer.py:469
#, python-format
-msgid "No language could be found for the Prestashop lang with id \"%s\". Run \"Synchronize base data\" again."
+msgid ""
+"No language could be found for the Prestashop lang with id \"%s\". Run "
+"\"Synchronize base data\" again."
msgstr ""
#. module: connector_prestashop
@@ -3006,7 +3163,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_customer_lead
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_sale_order_line_discount_customer_lead
-msgid "Number of days between the order confirmation and the shipping of the products to the customer"
+msgid ""
+"Number of days between the order confirmation and the shipping of the "
+"products to the customer"
msgstr ""
#. module: connector_prestashop
@@ -3067,13 +3226,15 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_purchase_method
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_purchase_method
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_purchase_method
-msgid "On ordered quantities: control bills based on ordered quantities.\n"
+msgid ""
+"On ordered quantities: control bills based on ordered quantities.\n"
"On received quantities: control bills based on received quantity."
msgstr ""
#. module: connector_prestashop
#: model:ir.ui.view,arch_db:connector_prestashop.view_prestashop_backend_form
-msgid "Once imported,\n"
+msgid ""
+"Once imported,\n"
" some types of records,\n"
" like the products\n"
" or categories,\n"
@@ -3128,8 +3289,10 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_invoice_policy
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_invoice_policy
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_invoice_policy
-msgid "Ordered Quantity: Invoice based on the quantity the customer ordered.\n"
-"Delivered Quantity: Invoiced based on the quantity the vendor delivered (time or deliveries)."
+msgid ""
+"Ordered Quantity: Invoice based on the quantity the customer ordered.\n"
+"Delivered Quantity: Invoiced based on the quantity the vendor delivered "
+"(time or deliveries)."
msgstr ""
#. module: connector_prestashop
@@ -3307,7 +3470,8 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_notify_email
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_notify_email
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_notify_email
-msgid "Policy to receive emails for new messages pushed to your personal Inbox:\n"
+msgid ""
+"Policy to receive emails for new messages pushed to your personal Inbox:\n"
"- Never: no emails are sent\n"
"- All Messages: for every notification you receive in your Inbox"
msgstr ""
@@ -3677,7 +3841,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_option_value_price_extra
-msgid "Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200."
+msgid ""
+"Price Extra: Extra price for the variant with this attribute value on sale "
+"price. eg. 200 price extra, 1000 + 200 = 1200."
msgstr ""
#. module: connector_prestashop
@@ -3924,30 +4090,43 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_incoming_qty
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_incoming_qty
-msgid "Quantity of products that are planned to arrive.\n"
-"In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\n"
-"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
-"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
+msgid ""
+"Quantity of products that are planned to arrive.\n"
+"In a context with a single Stock Location, this includes goods arriving to "
+"this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the "
+"Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with "
+"'internal' type."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_outgoing_qty
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_outgoing_qty
-msgid "Quantity of products that are planned to leave.\n"
-"In a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\n"
-"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
-"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
+msgid ""
+"Quantity of products that are planned to leave.\n"
+"In a context with a single Stock Location, this includes goods leaving this "
+"Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock "
+"Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' "
+"type."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_potential_qty
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_potential_qty
-msgid "Quantity of this Product that could be produced using the materials already at hand."
+msgid ""
+"Quantity of this Product that could be produced using the materials already "
+"at hand."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_potential_qty
-msgid "Quantity of this Product that could be produced using the materials already at hand. If the product has several variants, this will be the biggest quantity that can be made for a any single variant."
+msgid ""
+"Quantity of this Product that could be produced using the materials already "
+"at hand. If the product has several variants, this will be the biggest "
+"quantity that can be made for a any single variant."
msgstr ""
#. module: connector_prestashop
@@ -4112,7 +4291,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_reply_to
-msgid "Reply email address. Setting the reply_to bypasses the automatic thread creation."
+msgid ""
+"Reply email address. Setting the reply_to bypasses the automatic thread "
+"creation."
msgstr ""
#. module: connector_prestashop
@@ -4326,7 +4507,10 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_picking_warn
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_purchase_warn
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_sale_warn
-msgid "Selecting the \"Warning\" option will notify user with the message, Selecting \"Blocking Message\" will throw an exception with the message and block the flow. The Message has to be written in the next field."
+msgid ""
+"Selecting the \"Warning\" option will notify user with the message, "
+"Selecting \"Blocking Message\" will throw an exception with the message and "
+"block the flow. The Message has to be written in the next field."
msgstr ""
#. module: connector_prestashop
@@ -4370,12 +4554,16 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_removal_strategy_id
-msgid "Set a specific removal strategy that will be used regardless of the source location for this product category"
+msgid ""
+"Set a specific removal strategy that will be used regardless of the source "
+"location for this product category"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_tax_adjustment
-msgid "Set this field to true if this tax can be used in the tax adjustment wizard, used to manually fill some data in the tax declaration"
+msgid ""
+"Set this field to true if this tax can be used in the tax adjustment wizard, "
+"used to manually fill some data in the tax declaration"
msgstr ""
#. module: connector_prestashop
@@ -4468,7 +4656,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image_small
-msgid "Small-sized image of the product. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgid ""
+"Small-sized image of the product. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image is "
+"required."
msgstr ""
#. module: connector_prestashop
@@ -4476,17 +4667,24 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_author_avatar
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image_small
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image_small
-msgid "Small-sized image of this contact. It is automatically resized as a 64x64px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgid ""
+"Small-sized image of this contact. It is automatically resized as a 64x64px "
+"image, with aspect ratio preserved. Use this field anywhere a small image is "
+"required."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_image_image_small
-msgid "Small-sized image. It is automatically resized as a 64 x 64 px image, with aspect ratio preserved. Use this field anywhere a small image is required."
+msgid ""
+"Small-sized image. It is automatically resized as a 64 x 64 px image, with "
+"aspect ratio preserved. Use this field anywhere a small image is required."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_quantity_field
-msgid "Some of this options may need some additionnal modules you'll have to install by yourself from https://github.com/OCA/stock-logistics-warehouse"
+msgid ""
+"Some of this options may need some additionnal modules you'll have to "
+"install by yourself from https://github.com/OCA/stock-logistics-warehouse"
msgstr ""
#. module: connector_prestashop
@@ -4507,16 +4705,24 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_cost_method
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_cost_method
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_cost_method
-msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
-" Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
-" Real Price: The cost price displayed is the price of the last outgoing product (will be use in case of inventory loss for example)."
+msgid ""
+"Standard Price: The cost price is manually updated at the end of a specific "
+"period (usually once a year).\n"
+" Average Price: The cost price is recomputed at each incoming "
+"shipment and used for the product valuation.\n"
+" Real Price: The cost price displayed is the price of the "
+"last outgoing product (will be use in case of inventory loss for example)."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_cost_method
-msgid "Standard Price: The cost price is manually updated at the end of a specific period (usually once a year).\n"
-"Average Price: The cost price is recomputed at each incoming shipment and used for the product valuation.\n"
-"Real Price: The cost price displayed is the price of the last outgoing product (will be used in case of inventory loss for example)."
+msgid ""
+"Standard Price: The cost price is manually updated at the end of a specific "
+"period (usually once a year).\n"
+"Average Price: The cost price is recomputed at each incoming shipment and "
+"used for the product valuation.\n"
+"Real Price: The cost price displayed is the price of the last outgoing "
+"product (will be used in case of inventory loss for example)."
msgstr ""
#. module: connector_prestashop
@@ -4615,7 +4821,8 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_immediately_usable_qty
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_immediately_usable_qty
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_immediately_usable_qty
-msgid "Stock for this Product that can be safely proposed for sale to Customers.\n"
+msgid ""
+"Stock for this Product that can be safely proposed for sale to Customers.\n"
"The definition of this value can be configured to suit your needs"
msgstr ""
@@ -4798,7 +5005,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_vat
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_vat
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_vat
-msgid "Tax Identification Number. Fill it if the company is subjected to taxes. Used by the some of the legal statements."
+msgid ""
+"Tax Identification Number. Fill it if the company is subjected to taxes. "
+"Used by the some of the legal statements."
msgstr ""
#. module: connector_prestashop
@@ -4841,14 +5050,18 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_move_name
-msgid "Technical field holding the number given to the invoice, automatically set when the invoice is validated then stored to set the same number again if the invoice is cancelled, set to draft and re-validated."
+msgid ""
+"Technical field holding the number given to the invoice, automatically set "
+"when the invoice is validated then stored to set the same number again if "
+"the invoice is cancelled, set to draft and re-validated."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_pricelist_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_pricelist_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_pricelist_id
-msgid "Technical field. Used for searching on pricelists, not stored in database."
+msgid ""
+"Technical field. Used for searching on pricelists, not stored in database."
msgstr ""
#. module: connector_prestashop
@@ -4871,24 +5084,32 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_code
-msgid "The ISO country code in two chars. \n"
+msgid ""
+"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_lang_grouping
-msgid "The Separator Format should be like [,n] where 0 < n :starting from Unit digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be 1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as 106,500. Provided ',' as the thousand separator in each case."
+msgid ""
+"The Separator Format should be like [,n] where 0 < n :starting from Unit "
+"digit. -1 will end the separation. e.g. [3,2,-1] will represent 106500 to be "
+"1,06,500; [1,2,-1] will represent it to be 106,50,0;[3] will represent it as "
+"106,500. Provided ',' as the thousand separator in each case."
msgstr ""
#. module: connector_prestashop
#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount
-msgid "The amount computed in Odoo doesn't match with the amount in PrestaShop.\n"
+msgid ""
+"The amount computed in Odoo doesn't match with the amount in PrestaShop.\n"
"\n"
"Cause:\n"
-"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal "
+"position could have changed the final price.\n"
"\n"
"Resolution:\n"
-"Check your taxes and fiscal positions configuration and correct them if necessary."
+"Check your taxes and fiscal positions configuration and correct them if "
+"necessary."
msgstr ""
#. module: connector_prestashop
@@ -4901,34 +5122,43 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_sale_delay
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_sale_delay
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_sale_delay
-msgid "The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."
+msgid ""
+"The average delay in days between the confirmation of the customer order and "
+"the delivery of the finished products. It's the time you promise to your "
+"customers."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_refund_commercial_partner_id
-msgid "The commercial entity that will be used on Journal Entries for this invoice"
+msgid ""
+"The commercial entity that will be used on Journal Entries for this invoice"
msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/sale_order/importer.py:126
#, python-format
-msgid "The configuration is missing for sale order state with PS ID=%s.\n"
+msgid ""
+"The configuration is missing for sale order state with PS ID=%s.\n"
"\n"
"Resolution:\n"
-" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Synchronize base data'."
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button "
+"'Synchronize base data'."
msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/sale_order/importer.py:83
#, python-format
-msgid "The configuration is missing for the Payment Mode '%s'.\n"
+msgid ""
+"The configuration is missing for the Payment Mode '%s'.\n"
"\n"
"Resolution:\n"
-" - Use the automatic import in 'Connectors > PrestaShop Backends', button 'Import payment modes', or:\n"
+" - Use the automatic import in 'Connectors > PrestaShop Backends', button "
+"'Import payment modes', or:\n"
"\n"
"- Go to 'Invoicing > Configuration > Management > Payment Modes'\n"
"- Create a new Payment Mode with name '%s'\n"
-"-Eventually link the Payment Method to an existing Workflow Process or create a new one."
+"-Eventually link the Payment Method to an existing Workflow Process or "
+"create a new one."
msgstr ""
#. module: connector_prestashop
@@ -4941,7 +5171,8 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_position_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_position_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_position_id
-msgid "The fiscal position will determine taxes and accounts used for the partner."
+msgid ""
+"The fiscal position will determine taxes and accounts used for the partner."
msgstr ""
#. module: connector_prestashop
@@ -4953,12 +5184,17 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_user_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_user_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_user_id
-msgid "The internal user that is in charge of communicating with this contact if any."
+msgid ""
+"The internal user that is in charge of communicating with this contact if "
+"any."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_min_qty
-msgid "The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise."
+msgid ""
+"The minimal quantity to purchase from this vendor, expressed in the vendor "
+"Product Unit of Measure if not any, in the default unit of measure of the "
+"product otherwise."
msgstr ""
#. module: connector_prestashop
@@ -4973,7 +5209,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_product_count
-msgid "The number of products under this category (Does not consider the children categories)"
+msgid ""
+"The number of products under this category (Does not consider the children "
+"categories)"
msgstr ""
#. module: connector_prestashop
@@ -4985,7 +5223,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_has_unreconciled_entries
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_has_unreconciled_entries
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_has_unreconciled_entries
-msgid "The partner has at least one unreconciled debit and credit since last time the invoices & payments matching was performed."
+msgid ""
+"The partner has at least one unreconciled debit and credit since last time "
+"the invoices & payments matching was performed."
msgstr ""
#. module: connector_prestashop
@@ -4997,7 +5237,11 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_tz
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_tz
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_tz
-msgid "The partner's timezone, used to output proper date and time values inside printed reports. It is important to set a value for this field. You should use the same timezone that is otherwise used to pick and render date and time values: your computer's timezone."
+msgid ""
+"The partner's timezone, used to output proper date and time values inside "
+"printed reports. It is important to set a value for this field. You should "
+"use the same timezone that is otherwise used to pick and render date and "
+"time values: your computer's timezone."
msgstr ""
#. module: connector_prestashop
@@ -5013,7 +5257,8 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/models/account_invoice/importer.py:35
#, python-format
-msgid "The refund for order %s has a different amount in PrestaShop and in Odoo."
+msgid ""
+"The refund for order %s has a different amount in PrestaShop and in Odoo."
msgstr ""
#. module: connector_prestashop
@@ -5025,28 +5270,38 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_lst_price
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_lst_price
-msgid "The sale price is managed from the product template. Click on the 'Variant Prices' button to set the extra attribute prices."
+msgid ""
+"The sale price is managed from the product template. Click on the 'Variant "
+"Prices' button to set the extra attribute prices."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_matching_customer
-msgid "The selected fields will be matched to the ref field of the partner. Please adapt your datas consequently."
+msgid ""
+"The selected fields will be matched to the ref field of the partner. Please "
+"adapt your datas consequently."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_account_tax_sequence
-msgid "The sequence field is used to define order in which the tax lines are applied."
+msgid ""
+"The sequence field is used to define order in which the tax lines are "
+"applied."
msgstr ""
#. module: connector_prestashop
#: model:exception.rule,description:connector_prestashop.excep_order_wrong_total_amount_tax
-msgid "The tax amount computed in Odoo doesn't match with the tax amount in PrestaShop.\n"
+msgid ""
+"The tax amount computed in Odoo doesn't match with the tax amount in "
+"PrestaShop.\n"
"\n"
"Cause:\n"
-"The taxes are probably different between Odoo and PrestaShop. A fiscal position could have changed the final price.\n"
+"The taxes are probably different between Odoo and PrestaShop. A fiscal "
+"position could have changed the final price.\n"
"\n"
"Resolution:\n"
-"Check your taxes and fiscal positions configuration and correct them if necessary."
+"Check your taxes and fiscal positions configuration and correct them if "
+"necessary."
msgstr ""
#. module: connector_prestashop
@@ -5077,14 +5332,18 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_expense_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_expense_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_expense_id
-msgid "This account will be used for invoices instead of the default one to value expenses for the current product."
+msgid ""
+"This account will be used for invoices instead of the default one to value "
+"expenses for the current product."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_income_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_income_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_income_id
-msgid "This account will be used for invoices instead of the default one to value sales for the current product."
+msgid ""
+"This account will be used for invoices instead of the default one to value "
+"sales for the current product."
msgstr ""
#. module: connector_prestashop
@@ -5101,26 +5360,34 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_payable_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_payable_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_payable_id
-msgid "This account will be used instead of the default one as the payable account for the current partner"
+msgid ""
+"This account will be used instead of the default one as the payable account "
+"for the current partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_account_receivable_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_account_receivable_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_account_receivable_id
-msgid "This account will be used instead of the default one as the receivable account for the current partner"
+msgid ""
+"This account will be used instead of the default one as the receivable "
+"account for the current partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_account_creditor_price_difference_categ
-msgid "This account will be used to value price difference between purchase price and accounting cost."
+msgid ""
+"This account will be used to value price difference between purchase price "
+"and accounting cost."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_account_creditor_price_difference
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_account_creditor_price_difference
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_account_creditor_price_difference
-msgid "This account will be used to value price difference between purchase price and cost price."
+msgid ""
+"This account will be used to value price difference between purchase price "
+"and cost price."
msgstr ""
#. module: connector_prestashop
@@ -5132,7 +5399,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_purchase_currency_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_purchase_currency_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_purchase_currency_id
-msgid "This currency will be used, instead of the default one, for purchases from the current partner"
+msgid ""
+"This currency will be used, instead of the default one, for purchases from "
+"the current partner"
msgstr ""
#. module: connector_prestashop
@@ -5146,24 +5415,32 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_image
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_image
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_image
-msgid "This field holds the image used as avatar for this contact, limited to 1024x1024px"
+msgid ""
+"This field holds the image used as avatar for this contact, limited to "
+"1024x1024px"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_image_variant
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_image_variant
-msgid "This field holds the image used as image for the product variant, limited to 1024x1024px."
+msgid ""
+"This field holds the image used as image for the product variant, limited to "
+"1024x1024px."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_image
-msgid "This field holds the image used as image for the product, limited to 1024x1024px."
+msgid ""
+"This field holds the image used as image for the product, limited to "
+"1024x1024px."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_partner_mixin_default_category_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_default_category_id
-msgid "This field is synchronized with the field 'Default customer group' in PrestaShop."
+msgid ""
+"This field is synchronized with the field 'Default customer group' in "
+"PrestaShop."
msgstr ""
#. module: connector_prestashop
@@ -5180,7 +5457,10 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_seller_delay
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_seller_delay
-msgid "This is the average delay in days between the purchase order confirmation and the receipts for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."
+msgid ""
+"This is the average delay in days between the purchase order confirmation "
+"and the receipts for this product and for the default supplier. It is used "
+"by the scheduler to order requests based on reordering delays."
msgstr ""
#. module: connector_prestashop
@@ -5193,14 +5473,18 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_supplier_payment_term_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_supplier_payment_term_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_supplier_payment_term_id
-msgid "This payment term will be used instead of the default one for purchase orders and vendor bills"
+msgid ""
+"This payment term will be used instead of the default one for purchase "
+"orders and vendor bills"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_payment_term_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_payment_term_id
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_payment_term_id
-msgid "This payment term will be used instead of the default one for sale orders and customer invoices"
+msgid ""
+"This payment term will be used instead of the default one for sale orders "
+"and customer invoices"
msgstr ""
#. module: connector_prestashop
@@ -5212,52 +5496,68 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_product_pricelist
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_product_pricelist
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_product_pricelist
-msgid "This pricelist will be used, instead of the default one, for sales to the current partner"
+msgid ""
+"This pricelist will be used, instead of the default one, for sales to the "
+"current partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_customer
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_customer
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_customer
-msgid "This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"
+msgid ""
+"This stock location will be used, instead of the default one, as the "
+"destination location for goods you send to this partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_property_stock_supplier
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_property_stock_supplier
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_property_stock_supplier
-msgid "This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for goods you receive from the current partner"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_production
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_production
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_production
-msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated by manufacturing orders."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_procurement
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_procurement
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_procurement
-msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated by procurements."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_inventory
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_inventory
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_inventory
-msgid "This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated when you do an inventory."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_code
-msgid "This vendor's product code will be used when printing a request for quotation. Keep empty to use the internal one."
+msgid ""
+"This vendor's product code will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_name
-msgid "This vendor's product name will be used when printing a request for quotation. Keep empty to use the internal one."
+msgid ""
+"This vendor's product name will be used when printing a request for "
+"quotation. Keep empty to use the internal one."
msgstr ""
#. module: connector_prestashop
@@ -5412,7 +5712,9 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_mail_message_tracking_value_ids
-msgid "Tracked values are stored in a separate model. This field allow to reconstruct the tracking and to generate statistics on the model."
+msgid ""
+"Tracked values are stored in a separate model. This field allow to "
+"reconstruct the tracking and to generate statistics on the model."
msgstr ""
#. module: connector_prestashop
@@ -5519,7 +5821,9 @@ msgstr ""
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_address_type
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_partner_type
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_supplier_type
-msgid "Used to select automatically the right address according to the context in sales and purchases documents."
+msgid ""
+"Used to select automatically the right address according to the context in "
+"sales and purchases documents."
msgstr ""
#. module: connector_prestashop
@@ -5709,48 +6013,74 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_input_categ_id
-msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. This is the default value for all products in this category. It can also directly be set on each product"
+msgid ""
+"When doing real-time inventory valuation, counterpart journal items for all "
+"incoming stock moves will be posted in this account, unless there is a "
+"specific valuation account set on the source location. This is the default "
+"value for all products in this category. It can also directly be set on each "
+"product"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_input
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_input
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_input
-msgid "When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used."
+msgid ""
+"When doing real-time inventory valuation, counterpart journal items for all "
+"incoming stock moves will be posted in this account, unless there is a "
+"specific valuation account set on the source location. When not set on the "
+"product, the one from the product category is used."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_account_output_categ_id
-msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. This is the default value for all products in this category. It can also directly be set on each product"
+msgid ""
+"When doing real-time inventory valuation, counterpart journal items for all "
+"outgoing stock moves will be posted in this account, unless there is a "
+"specific valuation account set on the destination location. This is the "
+"default value for all products in this category. It can also directly be set "
+"on each product"
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_delivery_carrier_property_stock_account_output
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_combination_property_stock_account_output
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_template_property_stock_account_output
-msgid "When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."
+msgid ""
+"When doing real-time inventory valuation, counterpart journal items for all "
+"outgoing stock moves will be posted in this account, unless there is a "
+"specific valuation account set on the destination location. When not set on "
+"the product, the one from the product category is used."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_journal
-msgid "When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."
+msgid ""
+"When doing real-time inventory valuation, this is the Accounting Journal in "
+"which entries will be automatically posted when stock moves are processed."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_category_property_stock_valuation_account_id
-msgid "When real-time inventory valuation is enabled on a product, this account will hold the current value of the products."
+msgid ""
+"When real-time inventory valuation is enabled on a product, this account "
+"will hold the current value of the products."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_product_supplierinfo_product_id
-msgid "When this field is filled in, the vendor data will onlyapply to the variant."
+msgid ""
+"When this field is filled in, the vendor data will onlyapply to the variant."
msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_res_country_address_format
-msgid "You can state here the usual format to use for the addresses belonging to this country.\n"
+msgid ""
+"You can state here the usual format to use for the addresses belonging to "
+"this country.\n"
"\n"
-"You can use the python-style string patern with all the field of the address (for example, use '%(street)s' to display the field 'street') plus\n"
+"You can use the python-style string patern with all the field of the address "
+"(for example, use '%(street)s' to display the field 'street') plus\n"
" \n"
"%(state_name)s: the name of the state\n"
" \n"
@@ -5763,7 +6093,8 @@ msgstr ""
#. module: connector_prestashop
#: model:ir.model.fields,help:connector_prestashop.field_prestashop_backend_webservice_key
-msgid "You have to put it in 'username' of the PrestaShop Webservice api path invite"
+msgid ""
+"You have to put it in 'username' of the PrestaShop Webservice api path invite"
msgstr ""
#. module: connector_prestashop
@@ -5996,7 +6327,8 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/components/backend_adapter.py:41
#, python-format
-msgid "{}API / Network Error:\n"
+msgid ""
+"{}API / Network Error:\n"
"\n"
"{}"
msgstr ""
@@ -6004,7 +6336,8 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/components/backend_adapter.py:45
#, python-format
-msgid "{}Authentication Error:\n"
+msgid ""
+"{}Authentication Error:\n"
"\n"
"{}"
msgstr ""
@@ -6012,7 +6345,8 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/components/backend_adapter.py:49
#, python-format
-msgid "{}Error during synchronization with PrestaShop:\n"
+msgid ""
+"{}Error during synchronization with PrestaShop:\n"
"\n"
"{}"
msgstr ""
@@ -6020,7 +6354,8 @@ msgstr ""
#. module: connector_prestashop
#: code:addons/connector_prestashop/components/backend_adapter.py:37
#, python-format
-msgid "{}Network Error:\n"
+msgid ""
+"{}Network Error:\n"
"\n"
"{}"
msgstr ""
From 5cb03279171f65a276c948e37b7d879e5e14d592 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Fri, 22 Mar 2019 13:33:55 +0100
Subject: [PATCH 25/99] [FIX] connector_prestashop: Not correctly synchronized
changes
Due to commit mangling, solving conflicts taking incoming change produces some desync
that is fixed here in this extra commit, although the attribution for these changes
is not correct, but it's the only way to get the exact content.
---
connector_prestashop/components/exporter.py | 4 +-
connector_prestashop/components/mapper.py | 71 -------
.../components/version_key.py | 2 +-
connector_prestashop/models/__init__.py | 3 +-
.../models/account_invoice/common.py | 1 -
.../models/account_invoice/importer.py | 3 +-
.../models/account_tax/common.py | 9 +-
.../models/account_tax_group/common.py | 14 +-
connector_prestashop/models/binding/common.py | 26 ++-
.../models/payment/__init__.py | 2 +
connector_prestashop/models/payment/common.py | 22 ++
.../models/payment/importer.py | 30 +++
.../models/product_category/common.py | 5 -
.../models/product_image/common.py | 7 +-
.../models/product_pricelist/common.py | 16 +-
.../models/product_product/common.py | 14 +-
.../models/product_product/importer.py | 2 +-
.../models/product_supplierinfo/common.py | 5 -
.../models/product_template/importer.py | 5 +-
.../models/res_country/common.py | 13 +-
.../models/res_currency/common.py | 16 +-
.../models/res_lang/common.py | 18 +-
.../models/res_partner/importer.py | 9 +-
.../models/res_partner_category/common.py | 15 +-
.../models/sale_order_state/common.py | 16 +-
.../models/stock_warehouse/common.py | 5 +-
.../models/stock_warehouse/importer.py | 2 +-
connector_prestashop/tests/common.py | 4 +-
.../tests/test_import_backend_data.py | 4 +-
.../unit/export_synchronizer.py | 198 ------------------
connector_prestashop/views/product_view.xml | 48 ++---
31 files changed, 185 insertions(+), 404 deletions(-)
create mode 100644 connector_prestashop/models/payment/__init__.py
create mode 100644 connector_prestashop/models/payment/common.py
create mode 100644 connector_prestashop/models/payment/importer.py
delete mode 100644 connector_prestashop/unit/export_synchronizer.py
diff --git a/connector_prestashop/components/exporter.py b/connector_prestashop/components/exporter.py
index e1dec3218..65e83670d 100644
--- a/connector_prestashop/components/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -100,7 +100,7 @@ def _retry_unique_violation(self):
IntegrityError: duplicate key value violates unique
constraint "prestashop_product_template_openerp_uniq"
- DETAIL: Key (backend_id, openerp_id)=(1, 4851) already exists.
+ DETAIL: Key (backend_id, odoo_id)=(1, 4851) already exists.
In that case, we'll retry the import just later.
@@ -262,7 +262,7 @@ def _lock(self):
with :meth:`_export_dependencies`. Each level will set its own lock
on the binding record it has to export.
- Uses "NO KEY UPDATE", to avoid FK accesses
+ Uses ``NO KEY UPDATE``, to avoid FK accesses
being blocked in PSQL > 9.3.
"""
sql = ("SELECT id FROM %s WHERE ID = %%s FOR NO KEY UPDATE NOWAIT" %
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index 2eb4ae8cd..a4fe70882 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -85,74 +85,3 @@ def _convert_languages(self, records_by_language, translatable_fields):
res[to_attr] = value
return res
-
-
-@prestashop
-class MailMessageMapper(ImportMapper):
- _model_name = 'prestashop.mail.message'
-
- direct = [
- ('message', 'body'),
- ]
-
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
-
- @mapping
- def type(self, record):
- return {'type': 'comment'}
-
- @mapping
- def object_ref(self, record):
- binder = self.binder_for('prestashop.sale.order')
- order_id = binder.to_odoo(record['id_order'], unwrap=True)
- return {
- 'model': 'sale.order',
- 'res_id': order_id,
- }
-
- @mapping
- def author_id(self, record):
- if record['id_customer'] != '0':
- binder = self.binder_for('prestashop.res.partner')
- partner_id = binder.to_odoo(record['id_customer'], unwrap=True)
- return {'author_id': partner_id}
- return {}
-
-
-@prestashop
-class ProductPricelistMapper(ImportMapper):
- _model_name = 'prestashop.groups.pricelist'
-
- direct = [
- ('name', 'name'),
- ]
-
- @mapping
- def static(self, record):
- return {'active': True, 'type': 'sale'}
-
- @mapping
- def backend_id(self, record):
- return {'backend_id': self.backend_record.id}
-
- @mapping
- def company_id(self, record):
- return {'company_id': self.backend_record.company_id.id}
-
- @mapping
- @only_create
- def versions(self, record):
- item = {
- 'min_quantity': 0,
- 'sequence': 5,
- 'base': 1,
- 'price_discount': - float(record['reduction']) / 100.0,
- }
- version = {
- 'name': 'Version',
- 'active': True,
- 'items_id': [(0, 0, item)],
- }
- return {'version_id': [(0, 0, version)]}
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index 50360ac5c..3d29be2ca 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -61,7 +61,7 @@ class VersionKey1612(Component):
'order_slip': 'order_slip',
'order_slip_detail': 'order_slip_detail',
'group': 'group',
- 'order_row': 'order_rows',
+ 'order_row': 'order_row',
'tax': 'taxes',
'combinations': 'combination',
'product_features': 'product_feature',
diff --git a/connector_prestashop/models/__init__.py b/connector_prestashop/models/__init__.py
index df1c97da7..839019f1c 100644
--- a/connector_prestashop/models/__init__.py
+++ b/connector_prestashop/models/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-
+# keep this at the top!
from . import binding
from . import account_invoice
@@ -26,6 +26,5 @@
from . import res_partner_category
from . import sale_order
from . import sale_order_state
-from . import stock_warehouse
from . import stock_move
from . import stock_tracking
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
index e63164166..e9621d7a1 100644
--- a/connector_prestashop/models/account_invoice/common.py
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -33,7 +33,6 @@ def action_move_create(self):
if refund:
invoice_line.unlink()
line_replacement[invoice] = refund
- invoice.button_reset_taxes()
result = super(AccountInvoice, self).action_move_create()
# reconcile invoice with refund
for invoice, refund in line_replacement.items():
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 84a5144be..e00a9bd95 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -224,13 +224,12 @@ def partner_id(self, record):
@mapping
def account_id(self, record):
- binder = self.binder_for('prestashop.sale.order')
binder = self.binder_for('prestashop.res.partner')
partner = binder.to_internal(record['id_customer'])
partner = partner.with_context(
company_id=self.backend_record.company_id.id,
)
- return {'account_id': partner.property_account_receivable.id}
+ return {'account_id': partner.property_account_receivable_id.id}
@mapping
def company_id(self, record):
diff --git a/connector_prestashop/models/account_tax/common.py b/connector_prestashop/models/account_tax/common.py
index fe9856698..59555c87e 100644
--- a/connector_prestashop/models/account_tax/common.py
+++ b/connector_prestashop/models/account_tax/common.py
@@ -11,13 +11,14 @@ class PrestashopAccountTax(models.Model):
# because we do not want the constraint `prestashop_erp_uniq`.
# This allows us to create duplicated taxes.
_inherit = 'prestashop.binding'
- _inherits = {'account.tax': 'openerp_id'}
+ _inherits = {'account.tax': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='account.tax',
string='Tax',
required=True,
- ondelete='cascade'
+ ondelete='cascade',
+ oldname='openerp_id',
)
@@ -26,7 +27,7 @@ class AccountTax(models.Model):
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.account.tax',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='prestashop Bindings',
readonly=True,
)
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
index b496b09c3..c4766b5fd 100644
--- a/connector_prestashop/models/account_tax_group/common.py
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -10,7 +10,7 @@ class AccountTaxGroup(models.Model):
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.account.tax.group',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='PrestaShop Bindings',
readonly=True
)
@@ -28,21 +28,17 @@ class AccountTaxGroup(models.Model):
class PrestashopAccountTaxGroup(models.Model):
_name = 'prestashop.account.tax.group'
- _inherit = 'prestashop.binding'
- _inherits = {'account.tax.group': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'account.tax.group': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='account.tax.group',
string='Tax Group',
required=True,
ondelete='cascade',
+ oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class TaxGroupAdapter(Component):
_name = 'prestashop.account.tax.group.adapter'
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index 19f401098..aa084c8e1 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -11,7 +11,7 @@ class PrestashopBinding(models.AbstractModel):
_inherit = 'external.binding'
_description = 'PrestaShop Binding (abstract)'
- # 'openerp_id': openerp-side id must be declared in concrete model
+ # 'odoo_id': openerp-side id must be declared in concrete model
backend_id = fields.Many2one(
comodel_name='prestashop.backend',
string='PrestaShop Backend',
@@ -85,3 +85,27 @@ def resync(self):
for record in self:
func(record.backend_id, record.prestashop_id)
return True
+
+
+class PrestashopBindingOdoo(models.AbstractModel):
+ _name = 'prestashop.binding.odoo'
+ _inherit = 'prestashop.binding'
+ _description = 'PrestaShop Binding with Odoo binding (abstract)'
+
+ def _get_selection(self):
+ records = self.env['ir.model'].search([])
+ return [(r.model, r.name) for r in records] + [('', '')]
+
+ # 'odoo_id': odoo-side id must be re-declared in concrete model
+ # for having a many2one instead of a reference field
+ odoo_id = fields.Reference(
+ required=True,
+ ondelete='cascade',
+ string='Odoo binding',
+ selection=_get_selection,
+ )
+
+ _sql_constraints = [
+ ('prestashop_erp_uniq', 'unique(backend_id, odoo_id)',
+ 'An ERP record with same ID already exists on PrestaShop.'),
+ ]
diff --git a/connector_prestashop/models/payment/__init__.py b/connector_prestashop/models/payment/__init__.py
new file mode 100644
index 000000000..79ab5dc6b
--- /dev/null
+++ b/connector_prestashop/models/payment/__init__.py
@@ -0,0 +1,2 @@
+from . import common
+from . import importer
diff --git a/connector_prestashop/models/payment/common.py b/connector_prestashop/models/payment/common.py
new file mode 100644
index 000000000..7d51194f6
--- /dev/null
+++ b/connector_prestashop/models/payment/common.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.component.core import Component
+
+
+class PaymentMethodAdapter(Component):
+ _name = 'payment.method.adapter'
+ _inherit = 'prestashop.adapter'
+ _apply_on = 'payment.method'
+
+ _model_name = 'payment.method'
+ _prestashop_model = 'orders'
+ _export_node_name = 'order'
+
+ def search(self, filters=None):
+ api = self.connect()
+ res = api.get(self._prestashop_model, options=filters)
+ methods = res[self._prestashop_model][self._export_node_name]
+ if isinstance(methods, dict):
+ return [methods]
+ return methods
diff --git a/connector_prestashop/models/payment/importer.py b/connector_prestashop/models/payment/importer.py
new file mode 100644
index 000000000..ed18b71d7
--- /dev/null
+++ b/connector_prestashop/models/payment/importer.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo.addons.component.core import Component
+
+
+class PaymentMethodImporter(Component):
+ _name = 'payment.method.importer'
+ _inherit = 'prestashop.direct.batch.importer'
+ _apply_on = 'payment.method'
+
+ def run(self, filters=None, **kwargs):
+ if filters is None:
+ filters = {}
+ filters['display'] = '[id,payment]'
+ return super(PaymentMethodImporter, self).run(
+ filters, **kwargs
+ )
+
+ def _import_record(self, record):
+ ids = self.env['payment.method'].search([
+ ('name', '=', record['payment']),
+ ('company_id', '=', self.backend_record.company_id.id),
+ ])
+ if ids:
+ return
+ self.env['payment.method'].create({
+ 'name': record['payment'],
+ 'company_id': self.backend_record.company_id.id,
+ })
diff --git a/connector_prestashop/models/product_category/common.py b/connector_prestashop/models/product_category/common.py
index deb434db0..250892d70 100644
--- a/connector_prestashop/models/product_category/common.py
+++ b/connector_prestashop/models/product_category/common.py
@@ -46,11 +46,6 @@ class PrestashopProductCategory(models.Model):
active = fields.Boolean(string='Active', default=True)
position = fields.Integer(string='Position')
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class ProductCategoryAdapter(Component):
_name = 'prestashop.product.category.adapter'
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index 2d7803359..5486782ad 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -14,7 +14,7 @@ class ProductImage(models.Model):
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.product.image',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='PrestaShop Bindings',
)
@@ -22,13 +22,14 @@ class ProductImage(models.Model):
class PrestashopProductImage(models.Model):
_name = 'prestashop.product.image'
_inherit = 'prestashop.binding'
- _inherits = {'base_multi_image.image': 'openerp_id'}
+ _inherits = {'base_multi_image.image': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='base_multi_image.image',
required=True,
ondelete='cascade',
string='Product image',
+ oldname='openerp_id',
)
@job(default_channel='root.prestashop')
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index 513a1ea47..a8ea6582f 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -11,28 +11,24 @@ class ProductPricelist(models.Model):
prestashop_groups_bind_ids = fields.One2many(
comodel_name='prestashop.groups.pricelist',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='PrestaShop user groups',
)
class PrestashopGroupsPricelist(models.Model):
_name = 'prestashop.groups.pricelist'
- _inherit = 'prestashop.binding'
- _inherits = {'product.pricelist': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'product.pricelist': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='product.pricelist',
required=True,
ondelete='cascade',
- string='Openerp Pricelist',
+ string='Odoo Pricelist',
+ oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class PricelistAdapter(Component):
_name = 'prestashop.groups.pricelist.adapter'
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index 63ef4d0a7..c75ec37ae 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -20,7 +20,9 @@ class ProductProduct(models.Model):
)
default_on = fields.Boolean(string='Default On')
impact_price = fields.Float(
- string="Price Impact", digits=dp.get_precision('Product Price'))
+ string="Price Impact",
+ digits=dp.get_precision('Product Price')
+ )
@api.multi
def update_prestashop_qty(self):
@@ -108,7 +110,10 @@ def write(self, vals):
@api.multi
def unlink(self):
- self.write({'default_on': False})
+ self.write({
+ 'default_on': False,
+ 'active': False
+ })
res = super(ProductProduct, self).unlink()
return res
@@ -258,11 +263,6 @@ class PrestashopProductCombinationOptionValue(models.Model):
id_attribute_group = fields.Many2one(
comodel_name='prestashop.product.combination.option')
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class ProductCombinationAdapter(Component):
_name = 'prestashop.product.combination.adapter'
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index ba75dbabb..9189e4927 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -114,7 +114,7 @@ def combination_default(self, record):
@mapping
def product_tmpl_id(self, record):
template = self.get_main_template_binding(record)
- return {'product_tmpl_id': template.openerp_id.id}
+ return {'product_tmpl_id': template.odoo_id.id}
@mapping
def from_main_template(self, record):
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index 2c974fdc8..aab178977 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -74,11 +74,6 @@ class PrestashopProductSupplierinfo(models.Model):
oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class SupplierImageModel(models.TransientModel):
# In actual connector version is mandatory use a model
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 9c8fd61b4..043da64ca 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -265,7 +265,6 @@ def categ_ids(self, record):
ps_category['id'],
unwrap=True,
)
-
return {'categ_ids': [(6, 0, product_categories.ids)]}
@mapping
@@ -544,7 +543,7 @@ def attribute_line(self, binding):
attr_line_value_ids = []
for attr_line in binding.attribute_line_ids:
attr_line_value_ids.extend(attr_line.value_ids.ids)
- template_id = binding.openerp_id.id
+ template_id = binding.odoo_id.id
products = self.env['product.product'].search([
('product_tmpl_id', '=', template_id)]
)
@@ -639,7 +638,7 @@ def import_supplierinfo(self, binding):
try:
ps_supplierinfo.resync()
except PrestaShopWebServiceError:
- ps_supplierinfo.openerp_id.unlink()
+ ps_supplierinfo.odoo_id.unlink()
def _import_dependencies(self):
self._import_default_category()
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index a8402c3dd..ab273a8b2 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -9,27 +9,24 @@
class PrestashopResCountry(models.Model):
_name = 'prestashop.res.country'
- _inherit = 'prestashop.binding'
- _inherits = {'res.country': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'res.country': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='res.country',
required=True,
ondelete='cascade',
string='Country',
+ oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
class ResCountry(models.Model):
_inherit = 'res.country'
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.res.country',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
readonly=True,
string='prestashop Bindings',
)
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 484ae3adc..34734346a 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -8,29 +8,25 @@
class PrestashopResCurrency(models.Model):
_name = 'prestashop.res.currency'
- _inherit = 'prestashop.binding'
- _inherits = {'res.currency': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'res.currency': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='res.currency',
string='Currency',
required=True,
ondelete='cascade',
+ oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class ResCurrency(models.Model):
_inherit = 'res.currency'
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.res.currency',
- inverse_name='openerp_id',
- string='prestashop Bindings',
+ inverse_name='odoo_id',
+ string='PrestaShop Bindings',
readonly=True
)
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index 2381bf9d0..6a1890c1e 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -7,32 +7,28 @@
class PrestashopResLang(models.Model):
_name = 'prestashop.res.lang'
- _inherit = 'prestashop.binding'
- _inherits = {'res.lang': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'res.lang': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='res.lang',
required=True,
ondelete='cascade',
- string='Lang',
+ string='Language',
+ oldname='openerp_id',
)
active = fields.Boolean(
- string='Active in prestashop',
+ string='Active in PrestaShop',
default=False,
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class ResLang(models.Model):
_inherit = 'res.lang'
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.res.lang',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
readonly=True,
string='PrestaShop Bindings',
)
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 7fe6b42b3..da3eb1dc0 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -63,7 +63,7 @@ def groups(self, record):
partner_category_bindings |= binder.to_internal(group['id'])
result = {'group_ids': [(6, 0, partner_category_bindings.ids)],
- 'category_id': [(4, b.openerp_id.id)
+ 'category_id': [(4, b.odoo_id.id)
for b in partner_category_bindings]}
return result
@@ -81,6 +81,13 @@ def lang(self, record):
def customer(self, record):
return {'customer': True}
+ @mapping
+ def is_company(self, record):
+ # This is sad because we _have_ to have a company partner if we want to
+ # store multiple adresses... but... well... we have customers who want
+ # to be billed at home and be delivered at work... (...)...
+ return {'is_company': True}
+
@mapping
def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index 7c7eaa8b5..fe094f59f 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -11,7 +11,7 @@ class ResPartnerCategory(models.Model):
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.res.partner.category',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='PrestaShop Bindings',
readonly=True,
)
@@ -19,14 +19,15 @@ class ResPartnerCategory(models.Model):
class PrestashopResPartnerCategory(models.Model):
_name = 'prestashop.res.partner.category'
- _inherit = 'prestashop.binding'
- _inherits = {'res.partner.category': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'res.partner.category': 'odoo_id'}
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='res.partner.category',
string='Partner Category',
required=True,
ondelete='cascade',
+ oldname='openerp_id',
)
date_add = fields.Datetime(
string='Created At (on PrestaShop)',
@@ -37,13 +38,11 @@ class PrestashopResPartnerCategory(models.Model):
readonly=True,
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
# TODO add prestashop shop when the field will be available in the api.
# we have reported the bug for it
# see http://forge.prestashop.com/browse/PSCFV-8284
+ # 2016-10-13 UPDATE: the bug has been fixed since a while:
+ # check if we can drop this!
class PartnerCategoryAdapter(Component):
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 5ecab535f..8439c6a72 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -16,33 +16,29 @@ class SaleOrderState(models.Model):
)
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.sale.order.state',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
string='PrestaShop Bindings',
)
class PrestashopSaleOrderState(models.Model):
_name = 'prestashop.sale.order.state'
- _inherit = 'prestashop.binding'
- _inherits = {'sale.order.state': 'openerp_id'}
+ _inherit = 'prestashop.binding.odoo'
+ _inherits = {'sale.order.state': 'odoo_id'}
openerp_state_ids = fields.One2many(
comodel_name='sale.order.state.list',
inverse_name='prestashop_state_id',
string='Odoo States',
)
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='sale.order.state',
required=True,
ondelete='cascade',
string='Sale Order State',
+ oldname='openerp_id',
)
- _sql_constraints = [
- ('prestashop_erp_uniq', 'unique(backend_id, openerp_id)',
- 'A erp record with same ID on PrestaShop already exists.'),
- ]
-
class SaleOrderStateList(models.Model):
_name = 'sale.order.state.list'
@@ -55,7 +51,7 @@ class SaleOrderStateList(models.Model):
('done', 'Locked'),
('cancel', 'Cancelled'),
],
- string='Odoo Sales State',
+ string='Odoo State',
required=True,
)
prestashop_state_id = fields.Many2one(
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
index 6c8082079..da69d72a0 100644
--- a/connector_prestashop/models/stock_warehouse/common.py
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -10,7 +10,7 @@ class StockWarehouse(models.Model):
prestashop_bind_ids = fields.One2many(
comodel_name='prestashop.shop',
- inverse_name='openerp_id',
+ inverse_name='odoo_id',
readonly=True,
string='PrestaShop Bindings',
)
@@ -37,12 +37,13 @@ def _compute_backend_id(self):
required=True,
ondelete='cascade',
)
- openerp_id = fields.Many2one(
+ odoo_id = fields.Many2one(
comodel_name='stock.warehouse',
string='WareHouse',
required=True,
readonly=True,
ondelete='cascade',
+ oldname='openerp_id',
)
backend_id = fields.Many2one(
compute='_compute_backend_id',
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index 5341c0401..d3842b57f 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -21,7 +21,7 @@ def backend_id(self, record):
@mapping
def opener_id(self, record):
- return {'openerp_id': self.backend_record.warehouse_id.id}
+ return {'odoo_id': self.backend_record.warehouse_id.id}
class ShopImporter(Component):
diff --git a/connector_prestashop/tests/common.py b/connector_prestashop/tests/common.py
index 1c9a1566d..b44a92e70 100644
--- a/connector_prestashop/tests/common.py
+++ b/connector_prestashop/tests/common.py
@@ -229,11 +229,11 @@ def sync_basedata(self):
with recorder.use_cassette('sync_basedata'):
self.backend_record.synchronize_basedata()
- def create_binding_no_export(self, model_name, openerp_id,
+ def create_binding_no_export(self, model_name, odoo_id,
prestashop_id=None, **cols):
values = {
'backend_id': self.backend_record.id,
- 'openerp_id': openerp_id,
+ 'odoo_id': odoo_id,
'prestashop_id': prestashop_id,
}
if cols:
diff --git a/connector_prestashop/tests/test_import_backend_data.py b/connector_prestashop/tests/test_import_backend_data.py
index 555c88a9b..243787f94 100644
--- a/connector_prestashop/tests/test_import_backend_data.py
+++ b/connector_prestashop/tests/test_import_backend_data.py
@@ -12,7 +12,7 @@
'name prestashop_id backend_id')
ExpectedShop = namedtuple('ExpectedShop',
- 'name prestashop_id openerp_id shop_group_id '
+ 'name prestashop_id odoo_id shop_group_id '
'backend_id')
@@ -44,7 +44,7 @@ def test_import_metadata(self):
ExpectedShop(
name='PrestaShop',
prestashop_id=1,
- openerp_id=self.backend_record.warehouse_id,
+ odoo_id=self.backend_record.warehouse_id,
shop_group_id=shop_groups,
backend_id=self.backend_record,
),
diff --git a/connector_prestashop/unit/export_synchronizer.py b/connector_prestashop/unit/export_synchronizer.py
deleted file mode 100644
index 03bd66e48..000000000
--- a/connector_prestashop/unit/export_synchronizer.py
+++ /dev/null
@@ -1,198 +0,0 @@
-# -*- coding: utf-8 -*-
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-import logging
-from openerp import _, exceptions
-from openerp.addons.connector.queue.job import job
-from openerp.addons.connector.queue.job import related_action
-from openerp.addons.connector.unit.synchronizer import Exporter
-from .mapper import TranslationPrestashopExportMapper
-from ..connector import get_environment
-
-
-_logger = logging.getLogger(__name__)
-
-
-# Exporters for PrestaShop.
-# In addition to its export job, an exporter has to:
-# * check in PrestaShop if the record has been updated more recently than the
-# last sync date and if yes, delay an import
-# * call the ``bind`` method of the binder to update the last sync date
-
-
-class PrestashopBaseExporter(Exporter):
- """ Base exporter for PrestaShop """
-
- def __init__(self, environment):
- """
- :param environment: current environment (backend, session, ...)
- :type environment: :py:class:`connector.connector.ConnectorEnvironment`
- """
- super(PrestashopBaseExporter, self).__init__(environment)
- self.binding_id = None
- self.prestashop_id = None
-
- def _get_openerp_data(self):
- """ Return the raw OpenERP data for ``self.binding_id`` """
- return self.env[self.model._name].browse(self.binding_id)
-
- def run(self, binding_id, *args, **kwargs):
- """ Run the synchronization
-
- :param binding_id: identifier of the binding record to export
- """
- self.binding_id = binding_id
- self.erp_record = self._get_openerp_data()
-
- self.prestashop_id = self.binder.to_backend(self.binding_id)
- result = self._run(*args, **kwargs)
-
- self.binder.bind(self.prestashop_id, self.binding_id)
- return result
-
- def _run(self):
- """ Flow of the synchronization, implemented in inherited classes"""
- raise NotImplementedError
-
-
-class PrestashopExporter(PrestashopBaseExporter):
- """ A common flow for the exports to PrestaShop """
-
- def __init__(self, environment):
- """
- :param environment: current environment (backend, session, ...)
- :type environment: :py:class:`connector.connector.ConnectorEnvironment`
- """
- super(PrestashopExporter, self).__init__(environment)
- self.erp_record = None
-
- def _has_to_skip(self):
- """ Return True if the export can be skipped """
- return False
-
- def _export_dependencies(self):
- """ Export the dependencies for the record"""
- return
-
- def _map_data(self, fields=None):
- """ Convert the external record to Odoo """
- self.mapper.map_record(self.erp_record)
-
- def _validate_data(self, data):
- """ Check if the values to import are correct
-
- Pro-actively check before the ``Model.create`` or
- ``Model.update`` if some fields are missing
-
- Raise `InvalidDataError`
- """
- return
-
- def _after_export(self):
- """Create records of dependants prestashop objects"""
- return
-
- def _create(self, data):
- """ Create the PrestaShop record """
- return self.backend_adapter.create(data)
-
- def _update(self, data):
- """ Update an PrestaShop record """
- assert self.prestashop_id
- return self.backend_adapter.write(self.prestashop_id, data)
-
- def _run(self, fields=None):
- """ Flow of the synchronization, implemented in inherited classes"""
- assert self.binding_id
- assert self.erp_record
-
- # should be created with all the fields
- if not self.prestashop_id:
- fields = None
-
- if self._has_to_skip():
- return
-
- # export the missing linked resources
- self._export_dependencies()
- map_record = self.mapper.map_record(self.erp_record)
-
- if self.prestashop_id:
- record = map_record.values()
- if not record:
- return _('Nothing to export.')
- # special check on data before export
- self._validate_data(record)
- self._update(record)
- else:
- record = map_record.values(for_create=True)
- if fields is None:
- fields = {}
- record.update(fields)
- if not record:
- return _('Nothing to export.')
- # special check on data before export
- self._validate_data(record)
- self.prestashop_id = self._create(record)
- if self.prestashop_id == 0:
- raise exceptions.Warning(
- _("Record on PrestaShop have not been created"))
- self._after_export()
- message = _('Record exported with ID %s on PrestaShop.')
- return message % self.prestashop_id
-
-
-class TranslationPrestashopExporter(PrestashopExporter):
-
- @property
- def mapper(self):
- if self._mapper is None:
- self._mapper = self.connector_env.get_connector_unit(
- TranslationPrestashopExportMapper)
- return self._mapper
-
- def _map_data(self, fields=None):
- """ Convert the external record to OpenERP """
- self.mapper.convert(self.get_record_by_lang(), fields=fields)
-
- def get_record_by_lang(self, record_id):
- # get the backend's languages
- languages = self.backend_record.language_ids
- records = {}
- # for each languages:
- for language in languages:
- # get the translated record
- record = self.model.with_context(
- lang=language['code']).browse(record_id)
- # put it in the dict
- records[language['prestashop_id']] = record
- return records
-
-
-def related_action_record(session, job):
- binding_model = job.args[0]
- binding_id = job.args[1]
- record = session.env[binding_model].browse(binding_id)
- odoo_name = record.odoo_id._name
-
- action = {
- 'name': _(odoo_name),
- 'type': 'ir.actions.act_window',
- 'res_model': odoo_name,
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_id': record.odoo_id.id,
- }
- return action
-
-
-@job(default_channel='root.prestashop')
-@related_action(action=related_action_record)
-def export_record(session, model_name, binding_id, fields=None):
- """ Export a record on PrestaShop """
- # TODO: FIX PRESTASHOP do not support partial edit
- fields = None
- record = session.env[model_name].browse(binding_id)
- env = get_environment(session, model_name, record.backend_id.id)
- exporter = env.get_connector_unit(PrestashopExporter)
- return exporter.run(binding_id, fields=fields)
diff --git a/connector_prestashop/views/product_view.xml b/connector_prestashop/views/product_view.xml
index 0f6d3acd6..3945ee5e3 100644
--- a/connector_prestashop/views/product_view.xml
+++ b/connector_prestashop/views/product_view.xml
@@ -33,30 +33,30 @@
-
-
- product.product
-
-
-
- 0
-
-
-
-
To show PrestaShop binding go to:
-
-
-
-
-
-
-
+
+
+ product.product
+
+
+
+ 0
+
+
+
+
To show PrestaShop binding go to:
+
+
+
+
+
+
+
From ff4751216457f48f3f9e9fc4830cd4ceb24faf63 Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Wed, 6 Feb 2019 18:57:22 +0100
Subject: [PATCH 26/99] Migrate connector_prestashop to version 12
---
connector_prestashop/README.rst | 1 +
connector_prestashop/__init__.py | 1 -
connector_prestashop/__manifest__.py | 6 +-
connector_prestashop/backend.py | 15 ----
.../components/auto_matching_importer.py | 6 +-
.../components/backend_adapter.py | 26 +++----
connector_prestashop/components/importer.py | 17 +++--
connector_prestashop/components/mapper.py | 2 +-
connector_prestashop/data/cron.xml | 42 +++++------
.../models/account_invoice/common.py | 3 +-
.../models/account_invoice/importer.py | 17 ++---
.../models/delivery_carrier/common.py | 5 --
.../models/delivery_carrier/importer.py | 5 ++
.../models/mail_message/common.py | 4 +-
.../models/prestashop_backend/common.py | 42 ++++++++++-
.../models/product_category/importer.py | 2 +-
.../models/product_pricelist/importer.py | 2 -
.../models/product_product/common.py | 35 ++-------
.../models/product_product/importer.py | 31 +++++---
.../models/product_supplierinfo/importer.py | 9 +++
.../models/product_template/common.py | 71 +++++++++++--------
.../models/product_template/importer.py | 46 +++++++-----
.../models/res_country/importer.py | 4 ++
.../models/res_partner/importer.py | 7 --
.../models/sale_order/importer.py | 20 +++++-
.../models/stock_tracking/exporter.py | 2 +-
connector_prestashop/views/partner_view.xml | 2 +
.../views/prestashop_backend_view.xml | 30 ++++----
connector_prestashop/views/product_view.xml | 2 +-
29 files changed, 254 insertions(+), 201 deletions(-)
delete mode 100644 connector_prestashop/backend.py
diff --git a/connector_prestashop/README.rst b/connector_prestashop/README.rst
index ec6d2b594..2ff2d7bf5 100644
--- a/connector_prestashop/README.rst
+++ b/connector_prestashop/README.rst
@@ -156,6 +156,7 @@ Contributors
* Simone Orsi
* Florent THOMAS
* Francisco Fernández
+* Florian da Costa
Maintainer
----------
diff --git a/connector_prestashop/__init__.py b/connector_prestashop/__init__.py
index eefba89b7..da85f230f 100644
--- a/connector_prestashop/__init__.py
+++ b/connector_prestashop/__init__.py
@@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from . import backend
from . import connector
from . import components
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index 56fb60d36..9bdaeb526 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -15,12 +15,8 @@
"product",
"product_multi_category", # oca/product-attribute
"connector_ecommerce", # oca/connector-ecommerce
- "base_multi_image", # oca/product-attribute
+ "base_multi_image", # oca/server-tools
"purchase",
- "product_variant_supplierinfo", # oca/product-variant
- "stock_available", # stock-logistics-warehouse
- # TODO: perhaps not needed:
- # "product_variant_cost_price", # oca/product-variant
],
"external_dependencies": {
'python': [
diff --git a/connector_prestashop/backend.py b/connector_prestashop/backend.py
deleted file mode 100644
index 6317a2f1e..000000000
--- a/connector_prestashop/backend.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-import odoo.addons.connector.backend as backend
-
-
-prestashop = backend.Backend('prestashop')
-# version < 1.6.0.9
-prestashop_1_5_0_0 = backend.Backend(parent=prestashop, version='1.5')
-# version 1.6.0.9 - 1.6.0.10
-prestashop_1_6_0_9 = backend.Backend(parent=prestashop, version='1.6.0.9')
-# version >= 1.6.0.11
-prestashop_1_6_0_11 = backend.Backend(parent=prestashop, version='1.6.0.11')
-# version >= 1.6.1.2
-prestashop_1_6_1_2 = backend.Backend(parent=prestashop, version='1.6.1.2')
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index e164b073e..460aa413d 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -30,7 +30,7 @@ def run(self):
nr_ps_already_mapped = 0
nr_ps_mapped = 0
nr_ps_not_mapped = 0
- erp_model_name = self.model._inherits.iterkeys().next()
+ erp_model_name = next(iter(self.model._inherits))
erp_rec_name = self.env[erp_model_name]._rec_name
model = self.env[erp_model_name].with_context(active_test=False)
erp_ids = model.search([])
@@ -41,7 +41,7 @@ def run(self):
if not ps_ids:
raise exceptions.Warning(
_('Failed to query %s via PS webservice')
- % adapter.prestashop_model
+ % adapter._prestashop_model
)
binder = self.binder_for()
@@ -62,10 +62,10 @@ def run(self):
ps_dict = adapter.read(ps_id)
mapping_found = False
# Loop on OE IDs
+ ps_val = ps_dict[self._ps_field]
for erp_dict in erp_list_dict:
# Search for a match
erp_val = erp_dict[self._erp_field]
- ps_val = ps_dict[self._ps_field]
if self._compare_function(
ps_val, erp_val, ps_dict, erp_dict):
# it matches, so I write the external ID
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index 4d8f531bc..aa1867770 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -29,25 +29,25 @@ def api_handle_errors(message=''):
instead, they are presented as :class:`openerp.exceptions.UserError`.
"""
if message:
- message = message + u'\n\n'
+ message = message + '\n\n'
try:
yield
except NetworkRetryableError as err:
raise exceptions.UserError(
- _(u'{}Network Error:\n\n{}').format(message, err)
+ _('{}Network Error:\n\n{}').format(message, err)
)
except (HTTPError, RequestException, ConnectionError) as err:
raise exceptions.UserError(
- _(u'{}API / Network Error:\n\n{}').format(message, err)
+ _('{}API / Network Error:\n\n{}').format(message, err)
)
except PrestaShopWebServiceError as err:
raise exceptions.UserError(
- _(u'{}Authentication Error:\n\n{}').format(message, err)
+ _('{}Authentication Error:\n\n{}').format(message, err)
)
except PrestaShopWebServiceError as err:
raise exceptions.UserError(
- _(u'{}Error during synchronization with '
- 'PrestaShop:\n\n{}').format(message, unicode(err))
+ _('{}Error during synchronization with '
+ 'PrestaShop:\n\n{}').format(message, str(err))
)
@@ -116,7 +116,7 @@ def __init__(self, environment):
"""
super(PrestaShopCRUDAdapter, self).__init__(environment)
self.prestashop = PrestaShopLocation(
- self.backend_record.location.encode(),
+ self.backend_record.location,
self.backend_record.webservice_key
)
self.client = PrestaShopWebServiceDict(
@@ -183,7 +183,7 @@ def search(self, filters=None):
"""
_logger.debug(
'method search, model %s, filters %s',
- self._prestashop_model, unicode(filters))
+ self._prestashop_model, str(filters))
return self.client.search(self._prestashop_model, filters)
def read(self, id, attributes=None):
@@ -193,16 +193,16 @@ def read(self, id, attributes=None):
"""
_logger.debug(
'method read, model %s id %s, attributes %s',
- self._prestashop_model, str(id), unicode(attributes))
+ self._prestashop_model, str(id), str(attributes))
res = self.client.get(self._prestashop_model, id, options=attributes)
- first_key = res.keys()[0]
+ first_key = list(res)[0]
return res[first_key]
def create(self, attributes=None):
""" Create a record on the external system """
_logger.debug(
'method create, model %s, attributes %s',
- self._prestashop_model, unicode(attributes))
+ self._prestashop_model, str(attributes))
res = self.client.add(self._prestashop_model, {
self._export_node_name: attributes
})
@@ -216,7 +216,7 @@ def write(self, id, attributes=None):
_logger.debug(
'method write, model %s, attributes %s',
self._prestashop_model,
- unicode(attributes)
+ str(attributes)
)
res = self.client.edit(
self._prestashop_model, {self._export_node_name: attributes})
@@ -226,7 +226,7 @@ def write(self, id, attributes=None):
def delete(self, resource, ids):
_logger.debug('method delete, model %s, ids %s',
- resource, unicode(ids))
+ resource, str(ids))
# Delete a record(s) on the external system
return self.client.delete(resource, ids)
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index eed0d0d16..206d0f1d8 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -166,7 +166,7 @@ def do_in_new_connector_env(self, model_name=None):
for instance to see if another transaction already made the work.
"""
with odoo.api.Environment.manage():
- registry = odoo.modules.registry.RegistryManager.get(
+ registry = odoo.modules.registry.Registry(
self.env.cr.dbname
)
with closing(registry.cursor()) as cr:
@@ -317,6 +317,12 @@ def run(self, filters=None, **kwargs):
if 'limit' in filters:
self._run_page(filters, **kwargs)
return
+ # Without this copy, the parameter we add, like the limit may also
+ # be applied for other batch imports. For example in
+ # import_customers_since, we do to batch import in a row and the
+ # 1000 limit would applied to customers because it has been set
+ # here for the customer type.
+ filters = filters.copy()
page_number = 0
filters['limit'] = '%d,%d' % (
page_number * self.page_size, self.page_size)
@@ -395,6 +401,7 @@ class TranslatableRecordImporter(AbstractComponent):
_translatable_fields = {}
# TODO set default language on the backend
_default_language = 'en_US'
+ _mandatory_translation = True
def __init__(self, environment):
"""
@@ -449,7 +456,7 @@ def _split_per_language(self, record, fields=None):
'Run "Synchronize base data".')
)
model_name = self.model._name
- for language_id, language_code in languages.iteritems():
+ for language_id, language_code in languages.items():
split_record[language_code] = record.copy()
_fields = self._translatable_fields[model_name]
if fields:
@@ -458,7 +465,7 @@ def _split_per_language(self, record, fields=None):
for language in record[field]['language']:
current_id = language['attrs']['id']
code = languages.get(current_id)
- if not code:
+ if not code and self._mandatory_translation:
# TODO: be nicer here.
# Currently if you have a language in PS
# that is not present in odoo
@@ -470,6 +477,8 @@ def _split_per_language(self, record, fields=None):
'with id "%s". Run "Synchronize base data" again.') %
(current_id,)
)
+ elif not code:
+ continue
split_record[code][field] = language['value']
return split_record
@@ -508,7 +517,7 @@ def _import(self, binding, **kwargs):
def _after_import(self, binding):
""" Hook called at the end of the import """
- for lang_code, lang_record in self.other_langs_data.iteritems():
+ for lang_code, lang_record in self.other_langs_data.items():
map_record = self.mapper.map_record(lang_record)
binding.with_context(
lang=lang_code,
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index a4fe70882..fa3d26853 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -77,7 +77,7 @@ def _convert_languages(self, records_by_language, translatable_fields):
res = {}
for from_attr, to_attr in translatable_fields:
value = {'language': []}
- for language_id, record in records_by_language.iteritems():
+ for language_id, record in records_by_language.items():
value['language'].append({
'attrs': {'id': str(language_id)},
'value': record[from_attr] or ''
diff --git a/connector_prestashop/data/cron.xml b/connector_prestashop/data/cron.xml
index 73b6d6f1f..0bb3efe21 100644
--- a/connector_prestashop/data/cron.xml
+++ b/connector_prestashop/data/cron.xml
@@ -6,90 +6,90 @@
1
+ code
+ model._scheduler_import_sale_orders()
days
-1
-
-
-
+
PrestaShop - Export Stock Quantities
+ code
+ model._scheduler_update_product_stock_qty()
1
days
-1
-
-
-
+
PrestaShop - Import Customers and Groups
+ code
+ model._scheduler_import_customers()
1
days
-1
-
-
-
+
PrestaShop - Import Products and Categories
+ code
+ model._scheduler_import_products()
1
days
-1
-
-
-
+
PrestaShop - Import suppliers
+ code
+ model._scheduler_import_suppliers()
1
days
-1
-
-
-
+
PrestaShop - Import Carriers
+ code
+ model._scheduler_import_carriers()
1
days
-1
-
-
-
+
PrestaShop - Payment modes
+ code
+ model._scheduler_import_payment_modes()
1
days
-1
-
-
-
+
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
index e9621d7a1..a69633ea0 100644
--- a/connector_prestashop/models/account_invoice/common.py
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -92,10 +92,9 @@ def import_refunds(self, backend, since_date, **kwargs):
class RefundAdapter(Component):
_name = 'prestashop.refund.adapter'
+ _inherit = 'prestashop.adapter'
_apply_on = 'prestashop.refund'
- _model_name = 'prestashop.refund'
-
@property
def _prestashop_model(self):
return self.backend_record.get_version_ps_key('order_slip')
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index e00a9bd95..90879a960 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -45,7 +45,6 @@ class RefundMapper(Component):
_name = 'prestashop.refund.mapper'
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.refund'
- _model_name = 'prestashop.refund'
direct = [
('id', 'name'),
@@ -72,9 +71,15 @@ def from_sale_order(self, record):
fiscal_position = None
if sale_order.fiscal_position_id:
fiscal_position = sale_order.fiscal_position_id.id
+ if sale_order:
+ partner = sale_order.partner_invoice_id
+ else:
+ binder = self.binder_for('prestashop.res.partner')
+ partner = binder.to_internal(record['id_customer'], unwrap=True)
return {
'origin': sale_order['name'],
'fiscal_position_id': fiscal_position,
+ 'partner_id': partner.id,
}
@mapping
@@ -216,12 +221,6 @@ def _get_order_line(self, order_details_id):
def type(self, record):
return {'type': 'out_refund'}
- @mapping
- def partner_id(self, record):
- binder = self.binder_for('prestashop.res.partner')
- partner = binder.to_internal(record['id_customer'], unwrap=True)
- return {'partner_id': partner.id}
-
@mapping
def account_id(self, record):
binder = self.binder_for('prestashop.res.partner')
@@ -242,7 +241,5 @@ def backend_id(self, record):
class RefundBatchImporter(Component):
_name = 'prestashop.refund.batch.importer'
- _inherit = 'prestashop.batch.importer'
+ _inherit = 'prestashop.delayed.batch.importer'
_apply_on = 'prestashop.refund'
-
- _model_name = 'prestashop.refund'
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index 39dbe8d7b..b1c11e661 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -53,11 +53,6 @@ class DeliveryCarrier(models.Model):
inverse_name='odoo_id',
string='PrestaShop Bindings',
)
- company_id = fields.Many2one(
- comodel_name='res.company',
- string='Company',
- index=True,
- )
class DeliveryCarrierAdapter(Component):
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index a0aa713d3..d268d9b33 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -49,6 +49,11 @@ def odoo_id(self, record):
else:
return {}
+ @only_create
+ @mapping
+ def product_id(self, record):
+ return {'product_id': self.backend_record.shipping_product_id.id}
+
@mapping
def id_reference(self, record):
id_reference = int(str(record['id_reference']))
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
index 5d4ec9a5c..4379a164c 100644
--- a/connector_prestashop/models/mail_message/common.py
+++ b/connector_prestashop/models/mail_message/common.py
@@ -46,12 +46,12 @@ def read(self, id, attributes=None):
"""
api = self.client
res = api.get(self._prestashop_model, id, options=attributes)
- first_key = res.keys()[0]
+ first_key = list(res)[0]
message_data = res[first_key]
thread_data = api.get('customer_threads',
message_data['id_customer_thread'],
options=attributes)
- first_key = thread_data.keys()[0]
+ first_key = list(thread_data)[0]
del thread_data[first_key]['id']
del thread_data[first_key]['date_add']
message_data.update(thread_data[first_key])
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index acea29281..092685ccb 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -7,8 +7,8 @@
from odoo import models, fields, api, exceptions, _
from ...components.backend_adapter import api_handle_errors
-from odoo.addons.connector.checkpoint import checkpoint
-from odoo.addons.base.res.res_partner import _tz_get
+from odoo.addons.connector.models import checkpoint
+from odoo.addons.base.models.res_partner import _tz_get
_logger = logging.getLogger(__name__)
@@ -45,6 +45,7 @@ def _select_state(self):
('checked', 'Checked'),
('production', 'In Production')]
+ name = fields.Char(string='Name', required=True)
version = fields.Selection(
selection='select_versions',
string='Version',
@@ -88,6 +89,7 @@ def _select_state(self):
taxes_included = fields.Boolean("Use tax included prices")
import_partners_since = fields.Datetime('Import partners since')
import_orders_since = fields.Datetime('Import Orders since')
+ import_payment_mode_since = fields.Datetime('Import Payment Modes since')
import_products_since = fields.Datetime('Import Products since')
import_refunds_since = fields.Datetime('Import Refunds since')
import_suppliers_since = fields.Datetime('Import Suppliers since')
@@ -162,6 +164,32 @@ def _select_state(self):
_tz_get, 'Timezone', size=64,
help="The timezone of the backend. Used to synchronize the sale order "
"date.")
+ product_qty_field = fields.Selection(
+ selection=[
+ ('immediately_usable_qty', 'Immediately usable qty'),
+ ('qty_available', 'Qty available'),
+ ],
+ string='Product qty',
+ help='Select how you want to calculate the qty to push to PS. ',
+ default='qty_available',
+ required=True,
+ )
+
+ @api.constrains('product_qty_field')
+ def check_product_qty_field_dependencies_installed(self):
+ for backend in self:
+ # we only support stock_available_unreserved module for now.
+ # In order to support stock_available_immediately or
+ # virtual_available for example, we would need to recompute
+ # the prestashop qty at stock move level, it can't work to
+ # recompute it only at quant level, like it is done today
+ if backend.product_qty_field == 'immediately_usable_qty':
+ module = self.env['ir.module.module'].sudo().search(
+ [('name', '=', 'stock_available_unreserved')], limit=1)
+ if not module or module.state != 'installed':
+ raise exceptions.UserError(
+ _('In order to choose this option, you have to '
+ 'install the module stock_available_unreserved.'))
@api.onchange("matching_customer")
def change_matching_customer(self):
@@ -314,10 +342,18 @@ def import_sale_orders(self):
@api.multi
def import_payment_modes(self):
+ now_fmt = fields.Datetime.now()
for backend_record in self:
+ since_date = backend_record.import_payment_mode_since
+ filters = {}
+ if since_date:
+ filters = {
+ 'date': '1', 'filter[date_upd]': '>[%s]' % (since_date)
+ }
with backend_record.work_on('account.payment.mode') as work:
importer = work.component(usage='batch.importer')
- importer.run(filters={})
+ importer.run(filters=filters)
+ backend_record.import_payment_mode_since = now_fmt
return True
@api.multi
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index 72bfd14b6..ec2281c29 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -89,7 +89,7 @@ def _import_dependencies(self):
try:
self._import_dependency(record['id_parent'],
'prestashop.product.category')
- except PrestaShopWebServiceError, e:
+ except PrestaShopWebServiceError as e:
msg = _(
'Parent category for `%s` '
'cannot be imported. '
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index f0334389a..70362f4b2 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -43,8 +43,6 @@ class ProductPricelistImporter(Component):
_inherit = 'prestashop.translatable.record.importer'
_apply_on = 'prestashop.groups.pricelist'
- _usage = "Translate"
-
_translatable_fields = {
'prestashop.groups.pricelist': ['name'],
}
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index c75ec37ae..ce54239b7 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -134,7 +134,10 @@ def open_product_template(self):
class PrestashopProductCombination(models.Model):
_name = 'prestashop.product.combination'
- _inherit = 'prestashop.binding.odoo'
+ _inherit = [
+ 'prestashop.binding.odoo',
+ 'prestashop.product.qty.mixin',
+ ]
_inherits = {'product.product': 'odoo_id'}
odoo_id = fields.Many2one(
@@ -156,32 +159,6 @@ class PrestashopProductCombination(models.Model):
)
reference = fields.Char(string='Original reference')
- @api.multi
- def recompute_prestashop_qty(self):
- # group products by backend
- backends = defaultdict(set)
- for product in self:
- backends[product.backend_id].add(product.id)
-
- for backend, product_ids in backends.iteritems():
- products = self.browse(product_ids)
- products._recompute_prestashop_qty_backend(backend)
- return True
-
- @api.multi
- def _recompute_prestashop_qty_backend(self, backend):
- locations = backend._get_locations_for_stock_quantities()
- self_loc = self.with_context(location=locations.ids,
- compute_child=False)
- for product_binding in self_loc:
- new_qty = product_binding._prestashop_qty()
- if product_binding.quantity != new_qty:
- product_binding.quantity = new_qty
- return True
-
- def _prestashop_qty(self):
- return self.qty_available
-
@job(default_channel='root.prestashop')
def export_inventory(self, fields=None):
""" Export the inventory configuration and quantity of a product. """
@@ -227,10 +204,6 @@ class PrestashopProductCombinationOption(models.Model):
oldname='openerp_id',
)
prestashop_position = fields.Integer('PrestaShop Position')
- group_type = fields.Selection([
- ('color', 'Color'),
- ('radio', 'Radio'),
- ('select', 'Select')], string='Type', default='select')
public_name = fields.Char(string='Public Name', translate=True)
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 9189e4927..9ef1b207b 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -88,8 +88,9 @@ def import_supplierinfo(self, binding):
filters=filters
)
ps_product_template = binding
+ template_id = ps_product_template.product_tmpl_id.id
ps_supplierinfos = self.env['prestashop.product.supplierinfo']. \
- search([('product_tmpl_id', '=', ps_product_template.id)])
+ search([('product_tmpl_id', '=', template_id)])
for ps_supplierinfo in ps_supplierinfos:
try:
ps_supplierinfo.resync()
@@ -107,6 +108,16 @@ class ProductCombinationMapper(Component):
from_main = []
+
+ @mapping
+ def weight(self, record):
+ main_template = self.get_main_template_binding(record)
+ combination_weight = float(record.get('weight', '0.0'))
+ main_weight = float(
+ self.work.parent_presta_record.get('weight', 0.0))
+ weight = main_weight + combination_weight
+ return {'weight': weight}
+
@mapping
def combination_default(self, record):
return {'default_on': bool(int(record['default_on'] or 0))}
@@ -166,26 +177,26 @@ def main_template_id(self, record):
template_binding = self.get_main_template_binding(record)
return {'main_template_id': template_binding.id}
- def _template_code_exists(self, code):
+ def _product_code_exists(self, code):
model = self.env['product.product']
combination_binder = self.binder_for('prestashop.product.combination')
- template_ids = model.search([
+ product = model.with_context(active_test=False).search([
('default_code', '=', code),
('company_id', '=', self.backend_record.company_id.id),
], limit=1)
- return template_ids and not combination_binder.to_external(
- template_ids, wrap=True)
+ return product and not combination_binder.to_external(
+ product, wrap=True)
@mapping
def default_code(self, record):
code = record.get('reference')
if not code:
code = "%s_%s" % (record['id_product'], record['id'])
- if not self._template_code_exists(code):
+ if not self._product_code_exists(code):
return {'default_code': code}
i = 1
current_code = '%s_%s' % (code, i)
- while self._template_code_exists(current_code):
+ while self._product_code_exists(current_code):
i += 1
current_code = '%s_%s' % (code, i)
return {'default_code': current_code}
@@ -303,7 +314,9 @@ class ProductCombinationOptionMapper(Component):
_inherit = 'prestashop.import.mapper'
_apply_on = 'prestashop.product.combination.option'
- direct = []
+ direct = [
+ ('group_type', 'type'),
+ ]
@mapping
def backend_id(self, record):
@@ -312,7 +325,7 @@ def backend_id(self, record):
@only_create
@mapping
def odoo_id(self, record):
- name = self.name(record)
+ name = self.name(record).get('name')
binding = self.env['product.attribute'].search(
[('name', '=', name)],
limit=1,
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index e9a174fd5..74f645108 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -125,6 +125,15 @@ def product_tmpl_id(self, record):
def currency_id(self, record):
binder = self.binder_for('prestashop.res.currency')
currency = binder.to_internal(record['id_currency'], unwrap=True)
+ # Fallback on supplier currency
+ if not currency:
+ supplier_binder = self.binder_for('prestashop.supplier')
+ supplier = supplier_binder.to_internal(
+ record['id_supplier'], unwrap=True)
+ currency = supplier.property_purchase_currency_id
+ # fallback on company currency
+ if not currency:
+ currency = self.backend_record.company_id.currency_id
return {'currency_id': currency.id}
@mapping
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index ca5866808..5ecd4e7a9 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -55,9 +55,48 @@ def update_prestashop_quantities(self):
return True
+class ProductQtyMixin(models.AbstractModel):
+ _name = 'prestashop.product.qty.mixin'
+
+ @api.multi
+ def recompute_prestashop_qty(self):
+ # group products by backend
+ backends = defaultdict(set)
+ for product in self:
+ backends[product.backend_id].add(product.id)
+
+ for backend, product_ids in backends.items():
+ products = self.browse(product_ids)
+ products._recompute_prestashop_qty_backend(backend)
+ return True
+
+ @api.multi
+ def _recompute_prestashop_qty_backend(self, backend):
+ locations = backend._get_locations_for_stock_quantities()
+ self_loc = self.with_context(location=locations.ids,
+ compute_child=False)
+ for product_binding in self_loc:
+ new_qty = product_binding._prestashop_qty(backend)
+ if product_binding.quantity != new_qty:
+ product_binding.quantity = new_qty
+ return True
+
+ def _prestashop_qty(self, backend):
+ qty = self[backend.product_qty_field]
+ if qty < 0:
+ # make sure we never send negative qty to PS
+ # because the overall qty computed at template level
+ # is going to be wrong.
+ qty = 0.0
+ return qty
+
+
class PrestashopProductTemplate(models.Model):
_name = 'prestashop.product.template'
- _inherit = 'prestashop.binding.odoo'
+ _inherit = [
+ 'prestashop.binding.odoo',
+ 'prestashop.product.qty.mixin',
+ ]
_inherits = {'product.template': 'odoo_id'}
odoo_id = fields.Many2one(
@@ -126,34 +165,6 @@ class PrestashopProductTemplate(models.Model):
string='If stock shortage'
)
- @api.multi
- def recompute_prestashop_qty(self):
- # group products by backend
- backends = defaultdict(set)
- for product in self:
- backends[product.backend_id].add(product.id)
-
- for backend, product_ids in backends.iteritems():
- products = self.browse(product_ids)
- products._recompute_prestashop_qty_backend(backend)
- return True
-
- @api.multi
- def _recompute_prestashop_qty_backend(self, backend):
- locations = backend._get_locations_for_stock_quantities()
- self_loc = self.with_context(location=locations.ids,
- compute_child=False)
- for product in self_loc:
- if product.type == 'product':
- new_qty = product._prestashop_qty()
- if product.quantity != new_qty:
- product.quantity = new_qty
- return True
-
- @api.multi
- def _prestashop_qty(self):
- return self.qty_available
-
@job(default_channel='root.prestashop')
def import_products(self, backend, since_date=None, **kwargs):
filters = None
@@ -230,7 +241,7 @@ def export_quantity_url(self, filters, quantity, client=None):
response = client.search(self._prestashop_model, filters)
for stock_id in response:
res = client.get(self._prestashop_model, stock_id)
- first_key = res.keys()[0]
+ first_key = list(res)[0]
stock = res[first_key]
stock['quantity'] = int(quantity['quantity'])
stock['out_of_stock'] = int(quantity['out_of_stock'])
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 043da64ca..25b9c786c 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -3,14 +3,6 @@
from odoo import _, models, api
from odoo.addons.queue_job.job import job
-# from odoo.addons.connector.components.mapper import (
-# mapping,
-# only_create,
-# )
-# from ...components.importer import (
-# import_record,
-# import_batch,
-# )
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import (
mapping, external_to_m2o, only_create)
@@ -43,9 +35,7 @@ class TemplateMapper(Component):
_apply_on = 'prestashop.product.template'
direct = [
- ('weight', 'weight'),
('wholesale_price', 'wholesale_price'),
- ('wholesale_price', 'standard_price'),
(external_to_m2o('id_shop_default'), 'default_shop_id'),
('link_rewrite', 'link_rewrite'),
('reference', 'reference'),
@@ -53,6 +43,20 @@ class TemplateMapper(Component):
('on_sale', 'on_sale'),
]
+ @mapping
+ def standard_price(self, record):
+ if self.has_combinations(record):
+ return {}
+ else:
+ return {'standard_price': record.get('wholesale_price', 0.0)}
+
+ @mapping
+ def weight(self, record):
+ if self.has_combinations(record):
+ return {}
+ else:
+ return {'weight': record.get('weight', 0.0)}
+
def _apply_taxes(self, tax, price):
if self.backend_record.taxes_included == tax.price_include:
return price
@@ -187,11 +191,13 @@ def odoo_id(self, record):
def _template_code_exists(self, code):
model = self.env['product.template']
- template_ids = model.search([
+ template_binder = self.binder_for('prestashop.product.template')
+ template = model.with_context(active_test=False).search([
('default_code', '=', code),
('company_id', '=', self.backend_record.company_id.id),
], limit=1)
- return len(template_ids) > 0
+ return template and not template_binder.to_external(
+ template, wrap=True)
@mapping
def default_code(self, record):
@@ -244,8 +250,6 @@ def active(self, record):
@mapping
def sale_ok(self, record):
- # if this product has combinations, we do not want to sell this
- # product, but its combinations (so sale_ok = False in that case).
return {'sale_ok': True}
@mapping
@@ -315,9 +319,6 @@ def taxes_id(self, record):
@mapping
def type(self, record):
- # If the product has combinations, this main product is not a real
- # product. So it is set to a 'service' kind of product. Should better
- # be a 'virtual' product... but it does not exist...
# The same if the product is a virtual one in prestashop.
if record['type']['value'] and record['type']['value'] == 'virtual':
return {"type": 'service'}
@@ -519,6 +520,7 @@ def __init__(self, environment):
def _after_import(self, binding):
super(ProductTemplateImporter, self)._after_import(binding)
self.import_images(binding)
+ self.import_supplierinfo(binding)
self.import_combinations()
self.attribute_line(binding)
self.deactivate_default_product(binding)
@@ -558,7 +560,7 @@ def attribute_line(self, binding):
lambda x: (x.attribute_id.id == attribute_id and
x.id not in attr_line_value_ids))
if values:
- self.env['product.attribute.line'].create({
+ self.env['product.template.attribute.line'].create({
'attribute_id': attribute_id,
'product_tmpl_id': template_id,
'value_ids': [(6, 0, values.ids)],
@@ -569,6 +571,11 @@ def _import_combination(self, combination, **kwargs):
Can be overriden for instance to forward arguments to the importer
"""
+ # We need to pass the template presta record because we need it
+ # for combination mapper
+ self.work.parent_presta_record = self.prestashop_record
+ if not 'parent_presta_record' in self.work._propagate_kwargs:
+ self.work._propagate_kwargs.append('parent_presta_record')
self._import_dependency(combination['id'],
'prestashop.product.combination',
always=True,
@@ -632,8 +639,9 @@ def import_supplierinfo(self, binding):
filters=filters
)
ps_product_template = binding
+ template_id = ps_product_template.odoo_id.id
ps_supplierinfos = self.env['prestashop.product.supplierinfo'].\
- search([('product_tmpl_id', '=', ps_product_template.id)])
+ search([('product_tmpl_id', '=', template_id)])
for ps_supplierinfo in ps_supplierinfos:
try:
ps_supplierinfo.resync()
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index cf7ef8087..7ca8e5437 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -13,6 +13,10 @@ class CountryImporter(Component):
_ps_field = 'iso_code'
def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
+ # All code in Odoo have 2 char, it seems dangerous to cut the code
+ # before comparing and it can leads to error...
+ if len(ps_val) != 2:
+ return False
if (
erp_val and
ps_val and
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index da3eb1dc0..e8b977156 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -81,13 +81,6 @@ def lang(self, record):
def customer(self, record):
return {'customer': True}
- @mapping
- def is_company(self, record):
- # This is sad because we _have_ to have a company partner if we want to
- # store multiple adresses... but... well... we have customers who want
- # to be billed at home and be delivered at work... (...)...
- return {'is_company': True}
-
@mapping
def company_id(self, record):
return {'company_id': self.backend_record.company_id.id}
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 8a988f6e4..1e0857030 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -311,7 +311,12 @@ def _import_dependencies(self):
record['id_address_invoice'], 'prestashop.address'
)
self._import_dependency(
- record['id_address_delivery'], 'prestashop.address'
+ record['id_address_delivery'], 'prestashop.address',
+ # it is important to be sure that delivery address is updated
+ # else there is a chance to send it to an old address
+ # it is not rare that the customer changes an existing address
+ # at the same time he orders.
+ always=True
)
if record['id_carrier'] != '0':
@@ -332,6 +337,17 @@ def _import_dependencies(self):
_logger.error('PrestaShop product %s could not be imported, '
'error: %s', row['product_id'], err)
self.line_template_errors.append(row)
+ if row.get('product_attribute_id', '0') != '0':
+ try:
+ self._import_dependency(row['product_attribute_id'],
+ 'prestashop.product.combination')
+ except PrestaShopWebServiceError:
+ # we ignore it, the order line will be imported without
+ # product
+ _logger.error('PrestaShop combination %s could not be '
+ 'imported, error: %s' %
+ row['product_attribute_id'], err)
+
def _add_shipping_line(self, binding):
shipping_total = (binding.total_shipping_tax_included
@@ -379,7 +395,7 @@ def _has_to_skip(self):
# we don't let the NothingToDoJob exception let go out, because if
# we are in a cascaded import, it would stop the whole
# synchronization and set the whole job to done
- return err.message
+ return str(err)
class SaleOrderBatchImporter(Component):
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index 18bb33a1f..ba8f4e41a 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -16,7 +16,7 @@ def _get_tracking(self):
for picking in self.binding.picking_ids:
if picking.carrier_tracking_ref:
trackings.append(picking.carrier_tracking_ref)
- return ';'.join(trackings) if trackings else None
+ return ' '.join(trackings) if trackings else None
def run(self, binding, **kwargs):
""" Export the tracking number of a picking to PrestaShop """
diff --git a/connector_prestashop/views/partner_view.xml b/connector_prestashop/views/partner_view.xml
index 46726e1d1..9cfdc95a4 100644
--- a/connector_prestashop/views/partner_view.xml
+++ b/connector_prestashop/views/partner_view.xml
@@ -32,6 +32,7 @@
+
@@ -48,6 +49,7 @@
+
diff --git a/connector_prestashop/views/prestashop_backend_view.xml b/connector_prestashop/views/prestashop_backend_view.xml
index bef50aab8..5a42546f8 100644
--- a/connector_prestashop/views/prestashop_backend_view.xml
+++ b/connector_prestashop/views/prestashop_backend_view.xml
@@ -65,6 +65,7 @@
+
@@ -99,7 +100,7 @@
+ class="oe_inline" for="import_partners_since" />
@@ -109,7 +110,7 @@
+ class="oe_inline" for="import_products_since"/>
@@ -118,14 +119,19 @@
-
+
+
+
-
+
@@ -134,7 +140,8 @@
-
+
@@ -143,7 +150,8 @@
-
+
@@ -151,19 +159,19 @@
string="Import in background" />
-
+ Import carriers
-
+ Export stock quantities
-
+ Import stock quantities
@@ -191,10 +199,6 @@
-
-
-
-
diff --git a/connector_prestashop/views/product_view.xml b/connector_prestashop/views/product_view.xml
index 3945ee5e3..f7762711b 100644
--- a/connector_prestashop/views/product_view.xml
+++ b/connector_prestashop/views/product_view.xml
@@ -78,7 +78,7 @@
product.template
+ ref="product_multi_category.product_template_only_form_view_add_categids" />
Date: Wed, 6 Feb 2019 19:21:07 +0100
Subject: [PATCH 27/99] Imprve way to import and filter base data
---
.../components/auto_matching_importer.py | 3 ++-
.../models/account_tax_group/common.py | 6 ++++++
.../models/res_currency/importer.py | 1 +
connector_prestashop/models/res_lang/importer.py | 13 ++++++++++++-
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 460aa413d..42da0b740 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -18,6 +18,7 @@ class AutoMatchingImporter(Component):
_erp_field = None
_ps_field = None
_copy_fields = []
+ _filters = None
def _compare_function(ps_val, erp_val, ps_dict, erp_dict):
raise NotImplementedError
@@ -37,7 +38,7 @@ def run(self):
erp_list_dict = erp_ids.read()
adapter = self.component(usage='backend.adapter')
# Get the IDS from PS
- ps_ids = adapter.search()
+ ps_ids = adapter.search(self._filters)
if not ps_ids:
raise exceptions.Warning(
_('Failed to query %s via PS webservice')
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
index c4766b5fd..a4e7666bd 100644
--- a/connector_prestashop/models/account_tax_group/common.py
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -47,3 +47,9 @@ class TaxGroupAdapter(Component):
_model_name = 'prestashop.account.tax.group'
_prestashop_model = 'tax_rule_groups'
+
+ def search(self, filters=None):
+ if filters is None:
+ filters = {}
+ filters['filter[deleted]'] = 0
+ return super(TaxGroupAdapter, self).search(filters)
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index cae759216..b1aee6c8c 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -11,6 +11,7 @@ class ResCurrencyImporter(Component):
_erp_field = 'name'
_ps_field = 'iso_code'
+ _filters = {'filter[deleted]': '0'}
def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
if len(erp_val) == 3 and len(ps_val) == 3 and \
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index 3fb6299b9..2cf957a96 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -16,7 +16,18 @@ class LangImporter(Component):
]
def _compare_function(self, ps_val, erp_val, ps_dict, erp_dict):
- if len(erp_val) >= 2 and len(ps_val) >= 2 and \
+ if len(erp_val.split('_')) == 2 and \
+ len(ps_val.split('-')) == 2:
+ ps_val_lang, ps_val_country = ps_val.split('-')
+ erp_val_lang, erp_val_country = erp_val.split('_')
+ if len(ps_val_lang) == 2 and \
+ len(erp_val_lang) == 2 and \
+ ps_val_lang.lower() == erp_val_lang.lower() and \
+ len(ps_val_country) == 2 and \
+ len(erp_val_country) == 2 and \
+ ps_val_country.lower() == erp_val_country.lower():
+ return True
+ elif len(erp_val) >= 2 and len(ps_val) >= 2 and \
erp_val[0:2].lower() == ps_val[0:2].lower():
return True
return False
From 5d4522d3fe4fd31627132cde292b9b5feecf433f Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Wed, 6 Feb 2019 19:21:52 +0100
Subject: [PATCH 28/99] Add decorator to automatically retry job failed because
of network failures
---
.../components/backend_adapter.py | 24 ++++++++++++++++++-
.../models/product_template/common.py | 4 ++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index aa1867770..21f1b8640 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -7,7 +7,9 @@
from odoo.addons.connector.exception import NetworkRetryableError
from contextlib import contextmanager
-from requests.exceptions import HTTPError, RequestException, ConnectionError
+from requests.exceptions import (
+ HTTPError, RequestException, ConnectionError, Timeout
+)
import base64
import logging
@@ -18,6 +20,23 @@
except:
_logger.debug('Cannot import from `prestapyt`')
+def retryable_error(func):
+ """
+ Sometimes Jobs may fail because of a network error when calling
+ prestashop api. The job have very good chance to go through later
+ So we want to retry it automatically.
+ """
+ def wrapper(*args, **kwargs):
+ try:
+ return func(*args, **kwargs)
+ except (ConnectionError, Timeout, HTTPError) as err:
+ raise NetworkRetryableError(
+ 'A network error caused the failure of the job: '
+ '%s' % str(err))
+ except Exception as e:
+ raise e
+ return wrapper
+
@contextmanager
def api_handle_errors(message=''):
@@ -175,6 +194,7 @@ class GenericAdapter(AbstractComponent):
# _export_node_name_res = "manufacturer"
_export_node_name_res = ''
+ @retryable_error
def search(self, filters=None):
""" Search records according to some criterias
and returns a list of ids
@@ -186,6 +206,7 @@ def search(self, filters=None):
self._prestashop_model, str(filters))
return self.client.search(self._prestashop_model, filters)
+ @retryable_error
def read(self, id, attributes=None):
""" Returns the information of a record
@@ -230,6 +251,7 @@ def delete(self, resource, ids):
# Delete a record(s) on the external system
return self.client.delete(resource, ids)
+ @retryable_error
def head(self, id=None):
""" HEAD """
return self.client.head(self._prestashop_model, resource_id=id)
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 5ecd4e7a9..5e74d5412 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -9,6 +9,9 @@
from odoo.addons.queue_job.job import job
from odoo.addons.component.core import Component
from odoo.addons.component_event import skip_if
+from odoo.addons.connector_prestashop.components.backend_adapter import (
+ retryable_error
+)
import logging
@@ -235,6 +238,7 @@ def export_quantity(self, filters, quantity):
client = PrestaShopWebServiceDict(url, key)
self.export_quantity_url(filters, quantity, client=client)
+ @retryable_error
def export_quantity_url(self, filters, quantity, client=None):
if client is None:
client = self.client
From 004b0bf811596fd1c30f62e953f2ec47b79a29d0 Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Wed, 6 Feb 2019 19:22:44 +0100
Subject: [PATCH 29/99] Save prestashop address alias in a separated field to
not polute the partner name
---
connector_prestashop/models/res_partner/common.py | 1 +
connector_prestashop/models/res_partner/importer.py | 3 +--
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index e74335b17..21aa090f2 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -153,6 +153,7 @@ class PrestashopAddress(models.Model):
readonly=True,
)
vat_number = fields.Char('PrestaShop VAT')
+ alias = fields.Char('Prestashop Alias')
class PartnerAdapter(Component):
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index e8b977156..374e21bf5 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -131,6 +131,7 @@ class AddressImportMapper(Component):
('postcode', 'zip'),
('date_add', 'date_add'),
('date_upd', 'date_upd'),
+ ('alias', 'alias'),
(external_to_m2o('id_customer'), 'prestashop_partner_id'),
]
@@ -147,8 +148,6 @@ def parent_id(self, record):
@mapping
def name(self, record):
parts = [record['firstname'], record['lastname']]
- if record['alias']:
- parts.append('(%s)' % record['alias'])
name = ' '.join(p.strip() for p in parts if p.strip())
return {'name': name}
From 70e853835cdf345f29fa567cf0223c95cf9a00e8 Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Wed, 6 Feb 2019 19:24:10 +0100
Subject: [PATCH 30/99] Add margin when importing order to avoid missing one
once in a while
---
connector_prestashop/models/sale_order/common.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 929e9614c..87d174459 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -5,6 +5,7 @@
from odoo import models, fields, api
from odoo.addons.queue_job.job import job, related_action
from odoo.addons.component.core import Component
+from datetime import timedelta
import logging
_logger = logging.getLogger(__name__)
@@ -78,7 +79,10 @@ def import_orders_since(self, backend, since_date=None, **kwargs):
filters = {'date': '1', 'filter[date_add]': '>[%s]' % since_date}
self.env['prestashop.mail.message'].import_batch(backend, filters)
- backend.import_orders_since = now_fmt
+ # substract a 10 second margin to avoid to miss an order if it is
+ # created in prestashop at the exact same time odoo is checking.
+ next_check_datetime = now_fmt - timedelta(seconds=10)
+ backend.import_orders_since = next_check_datetime
return True
@job(default_channel='root.prestashop')
From da03940316df1a7f6403552dc085c021bcf21a99 Mon Sep 17 00:00:00 2001
From: Florian da Costa
Date: Wed, 6 Feb 2019 19:33:35 +0100
Subject: [PATCH 31/99] Fix tests and pep8
---
connector_prestashop/__init__.py | 1 -
connector_prestashop/__manifest__.py | 1 -
connector_prestashop/components/__init__.py | 1 -
.../components/auto_matching_importer.py | 1 -
.../components/backend_adapter.py | 4 +-
connector_prestashop/components/binder.py | 1 -
connector_prestashop/components/core.py | 1 -
connector_prestashop/components/deleter.py | 1 -
connector_prestashop/components/exception.py | 1 -
connector_prestashop/components/exporter.py | 1 -
connector_prestashop/components/importer.py | 3 +-
connector_prestashop/components/listener.py | 1 -
connector_prestashop/components/mapper.py | 3 +-
.../components/version_key.py | 1 -
connector_prestashop/connector.py | 1 -
connector_prestashop/models/__init__.py | 2 -
.../models/account_invoice/__init__.py | 2 -
.../models/account_invoice/common.py | 1 -
.../models/account_invoice/importer.py | 1 -
.../models/account_payment_mode/__init__.py | 2 -
.../models/account_payment_mode/common.py | 1 -
.../models/account_payment_mode/importer.py | 1 -
.../models/account_tax/__init__.py | 4 +-
.../models/account_tax/common.py | 1 -
.../models/account_tax/importer.py | 1 -
.../models/account_tax_group/__init__.py | 2 -
.../models/account_tax_group/common.py | 1 -
.../models/account_tax_group/importer.py | 1 -
.../models/binding/__init__.py | 1 -
connector_prestashop/models/binding/common.py | 1 -
.../models/delivery_carrier/__init__.py | 2 -
.../models/delivery_carrier/common.py | 1 -
.../models/delivery_carrier/exporter.py | 1 -
.../models/delivery_carrier/importer.py | 1 -
.../models/mail_message/__init__.py | 2 -
.../models/mail_message/common.py | 1 -
.../models/mail_message/importer.py | 1 -
connector_prestashop/models/payment/common.py | 1 -
.../models/payment/importer.py | 1 -
.../models/prestashop_backend/__init__.py | 2 -
.../models/prestashop_backend/common.py | 9 +-
.../models/prestashop_backend/importer.py | 1 -
.../models/prestashop_shop_group/__init__.py | 2 -
.../models/prestashop_shop_group/common.py | 1 -
.../models/prestashop_shop_group/importer.py | 1 -
.../models/product_category/__init__.py | 2 -
.../models/product_category/common.py | 1 -
.../models/product_category/importer.py | 1 -
.../models/product_image/__init__.py | 2 -
.../models/product_image/common.py | 1 -
.../models/product_image/deleter.py | 1 -
.../models/product_image/importer.py | 1 -
.../models/product_pricelist/__init__.py | 2 -
.../models/product_pricelist/common.py | 1 -
.../models/product_pricelist/importer.py | 1 -
.../models/product_product/__init__.py | 2 -
.../models/product_product/common.py | 3 -
.../models/product_product/deleter.py | 1 -
.../models/product_product/exporter.py | 1 -
.../models/product_product/importer.py | 6 +-
.../models/product_supplierinfo/__init__.py | 2 -
.../models/product_supplierinfo/common.py | 1 -
.../models/product_supplierinfo/importer.py | 1 -
.../models/product_template/__init__.py | 2 -
.../models/product_template/common.py | 1 -
.../models/product_template/exporter.py | 1 -
.../models/product_template/importer.py | 3 +-
.../models/queue_job/__init__.py | 2 -
.../models/queue_job/common.py | 1 -
.../models/res_country/__init__.py | 2 -
.../models/res_country/common.py | 1 -
.../models/res_country/importer.py | 1 -
.../models/res_currency/__init__.py | 2 -
.../models/res_currency/common.py | 1 -
.../models/res_currency/importer.py | 1 -
.../models/res_lang/__init__.py | 2 -
.../models/res_lang/common.py | 1 -
.../models/res_lang/importer.py | 1 -
.../models/res_partner/__init__.py | 2 -
.../models/res_partner/common.py | 1 -
.../models/res_partner/importer.py | 1 -
.../models/res_partner_category/__init__.py | 2 -
.../models/res_partner_category/common.py | 1 -
.../models/res_partner_category/importer.py | 1 -
.../models/sale_order/__init__.py | 2 -
.../models/sale_order/common.py | 1 -
.../models/sale_order/importer.py | 6 +-
.../models/sale_order_state/__init__.py | 2 -
.../models/sale_order_state/common.py | 1 -
.../models/sale_order_state/exporter.py | 1 -
.../models/sale_order_state/importer.py | 1 -
.../models/stock_move/__init__.py | 2 -
.../models/stock_move/common.py | 1 -
.../models/stock_tracking/__init__.py | 2 -
.../models/stock_tracking/common.py | 1 -
.../models/stock_tracking/exporter.py | 1 -
.../models/stock_warehouse/__init__.py | 2 -
.../models/stock_warehouse/common.py | 1 -
.../models/stock_warehouse/importer.py | 1 -
connector_prestashop/tests/__init__.py | 2 -
connector_prestashop/tests/common.py | 11 +-
.../cassettes/test_import_basedata.yaml | 11474 ++++++++--------
...test_import_product_template_record_1.yaml | 4289 +++---
.../cassettes/test_import_sale_batch.yaml | 74 +-
.../cassettes/test_import_sale_record_5.yaml | 275 +-
connector_prestashop/tests/test_auth.py | 1 -
.../tests/test_export_stock_qty.py | 2 +-
.../tests/test_export_stock_qty_job.py | 1 -
.../tests/test_export_tracking.py | 17 +-
.../tests/test_import_backend_data.py | 1 -
.../tests/test_import_carrier.py | 3 +-
.../tests/test_import_inventory.py | 1 -
.../tests/test_import_partner.py | 11 +-
.../tests/test_import_products.py | 4 +-
.../tests/test_import_sale.py | 21 +-
115 files changed, 8069 insertions(+), 8274 deletions(-)
diff --git a/connector_prestashop/__init__.py b/connector_prestashop/__init__.py
index da85f230f..cf27f9bc8 100644
--- a/connector_prestashop/__init__.py
+++ b/connector_prestashop/__init__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import connector
diff --git a/connector_prestashop/__manifest__.py b/connector_prestashop/__manifest__.py
index 9bdaeb526..cd1508eac 100644
--- a/connector_prestashop/__manifest__.py
+++ b/connector_prestashop/__manifest__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# Copyright 2011-2013 Camptocamp
# Copyright 2011-2013 Akretion
# Copyright 2015 AvanzOSC
diff --git a/connector_prestashop/components/__init__.py b/connector_prestashop/components/__init__.py
index 5ffaedbf5..f26a168be 100644
--- a/connector_prestashop/components/__init__.py
+++ b/connector_prestashop/components/__init__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# ConnectorUnit needs to be registered
diff --git a/connector_prestashop/components/auto_matching_importer.py b/connector_prestashop/components/auto_matching_importer.py
index 42da0b740..a50622b45 100644
--- a/connector_prestashop/components/auto_matching_importer.py
+++ b/connector_prestashop/components/auto_matching_importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
diff --git a/connector_prestashop/components/backend_adapter.py b/connector_prestashop/components/backend_adapter.py
index 21f1b8640..339eb61c4 100644
--- a/connector_prestashop/components/backend_adapter.py
+++ b/connector_prestashop/components/backend_adapter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import AbstractComponent
@@ -20,6 +19,7 @@
except:
_logger.debug('Cannot import from `prestapyt`')
+
def retryable_error(func):
"""
Sometimes Jobs may fail because of a network error when calling
@@ -29,7 +29,7 @@ def retryable_error(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
- except (ConnectionError, Timeout, HTTPError) as err:
+ except (ConnectionError, Timeout, HTTPError) as err:
raise NetworkRetryableError(
'A network error caused the failure of the job: '
'%s' % str(err))
diff --git a/connector_prestashop/components/binder.py b/connector_prestashop/components/binder.py
index 4913f11b9..c9888e901 100644
--- a/connector_prestashop/components/binder.py
+++ b/connector_prestashop/components/binder.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# © 2017 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
diff --git a/connector_prestashop/components/core.py b/connector_prestashop/components/core.py
index 30a843938..f5a1e1a2e 100644
--- a/connector_prestashop/components/core.py
+++ b/connector_prestashop/components/core.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# © 2017 Sergio Teruel
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/components/deleter.py b/connector_prestashop/components/deleter.py
index 25e39b992..3b799733d 100644
--- a/connector_prestashop/components/deleter.py
+++ b/connector_prestashop/components/deleter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tools.translate import _
diff --git a/connector_prestashop/components/exception.py b/connector_prestashop/components/exception.py
index b099dc3b9..f140db2f7 100644
--- a/connector_prestashop/components/exception.py
+++ b/connector_prestashop/components/exception.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.connector.exception import RetryableJobError
diff --git a/connector_prestashop/components/exporter.py b/connector_prestashop/components/exporter.py
index 65e83670d..f4b68e779 100644
--- a/connector_prestashop/components/exporter.py
+++ b/connector_prestashop/components/exporter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
diff --git a/connector_prestashop/components/importer.py b/connector_prestashop/components/importer.py
index 206d0f1d8..aca1d7d4a 100644
--- a/connector_prestashop/components/importer.py
+++ b/connector_prestashop/components/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
@@ -385,7 +384,7 @@ def _import_record(self, external_id, **kwargs):
description=description,
channel=channel,
identity_key=identity_key
- ).import_record(
+ ).import_record(
backend=self.backend_record,
prestashop_id=external_id,
**kwargs)
diff --git a/connector_prestashop/components/listener.py b/connector_prestashop/components/listener.py
index 972025578..135ec03bc 100644
--- a/connector_prestashop/components/listener.py
+++ b/connector_prestashop/components/listener.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# Copyright 2013-2017 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
diff --git a/connector_prestashop/components/mapper.py b/connector_prestashop/components/mapper.py
index fa3d26853..bb24bf013 100644
--- a/connector_prestashop/components/mapper.py
+++ b/connector_prestashop/components/mapper.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import AbstractComponent
@@ -24,7 +23,7 @@ def _map_direct(self, record, from_attr, to_attr):
res = super(PrestashopExportMapper, self)._map_direct(record,
from_attr,
to_attr) or ''
- if isinstance(from_attr, basestring):
+ if isinstance(from_attr, str):
column = self.model.fields_get()[from_attr]
if column['type'] == 'boolean':
return res and 1 or 0
diff --git a/connector_prestashop/components/version_key.py b/connector_prestashop/components/version_key.py
index 3d29be2ca..e5ad35ea3 100644
--- a/connector_prestashop/components/version_key.py
+++ b/connector_prestashop/components/version_key.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# Copyright 2016 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/connector.py b/connector_prestashop/connector.py
index 0c65664a1..f50fc1ad3 100644
--- a/connector_prestashop/connector.py
+++ b/connector_prestashop/connector.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
diff --git a/connector_prestashop/models/__init__.py b/connector_prestashop/models/__init__.py
index 839019f1c..f1030ae40 100644
--- a/connector_prestashop/models/__init__.py
+++ b/connector_prestashop/models/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
# keep this at the top!
from . import binding
diff --git a/connector_prestashop/models/account_invoice/__init__.py b/connector_prestashop/models/account_invoice/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/account_invoice/__init__.py
+++ b/connector_prestashop/models/account_invoice/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/account_invoice/common.py b/connector_prestashop/models/account_invoice/common.py
index a69633ea0..f0143dc51 100644
--- a/connector_prestashop/models/account_invoice/common.py
+++ b/connector_prestashop/models/account_invoice/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
diff --git a/connector_prestashop/models/account_invoice/importer.py b/connector_prestashop/models/account_invoice/importer.py
index 90879a960..ddf4f681c 100644
--- a/connector_prestashop/models/account_invoice/importer.py
+++ b/connector_prestashop/models/account_invoice/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _
diff --git a/connector_prestashop/models/account_payment_mode/__init__.py b/connector_prestashop/models/account_payment_mode/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/account_payment_mode/__init__.py
+++ b/connector_prestashop/models/account_payment_mode/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/account_payment_mode/common.py b/connector_prestashop/models/account_payment_mode/common.py
index db7ef4701..3db80395c 100644
--- a/connector_prestashop/models/account_payment_mode/common.py
+++ b/connector_prestashop/models/account_payment_mode/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/account_payment_mode/importer.py b/connector_prestashop/models/account_payment_mode/importer.py
index c56b148d5..76c2fc9b5 100644
--- a/connector_prestashop/models/account_payment_mode/importer.py
+++ b/connector_prestashop/models/account_payment_mode/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/account_tax/__init__.py b/connector_prestashop/models/account_tax/__init__.py
index 5c10a1d51..a8dca1feb 100644
--- a/connector_prestashop/models/account_tax/__init__.py
+++ b/connector_prestashop/models/account_tax/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
-from . import common
+from . import common
from . import importer
diff --git a/connector_prestashop/models/account_tax/common.py b/connector_prestashop/models/account_tax/common.py
index 59555c87e..786a89cb7 100644
--- a/connector_prestashop/models/account_tax/common.py
+++ b/connector_prestashop/models/account_tax/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
diff --git a/connector_prestashop/models/account_tax/importer.py b/connector_prestashop/models/account_tax/importer.py
index ce003a711..bcecb6539 100644
--- a/connector_prestashop/models/account_tax/importer.py
+++ b/connector_prestashop/models/account_tax/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/account_tax_group/__init__.py b/connector_prestashop/models/account_tax_group/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/account_tax_group/__init__.py
+++ b/connector_prestashop/models/account_tax_group/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/account_tax_group/common.py b/connector_prestashop/models/account_tax_group/common.py
index a4e7666bd..3fda6c1c5 100644
--- a/connector_prestashop/models/account_tax_group/common.py
+++ b/connector_prestashop/models/account_tax_group/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
diff --git a/connector_prestashop/models/account_tax_group/importer.py b/connector_prestashop/models/account_tax_group/importer.py
index d35089c54..65a83ad59 100644
--- a/connector_prestashop/models/account_tax_group/importer.py
+++ b/connector_prestashop/models/account_tax_group/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.components.mapper import (
diff --git a/connector_prestashop/models/binding/__init__.py b/connector_prestashop/models/binding/__init__.py
index ef553a8fb..28cecea5b 100644
--- a/connector_prestashop/models/binding/__init__.py
+++ b/connector_prestashop/models/binding/__init__.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from . import common
diff --git a/connector_prestashop/models/binding/common.py b/connector_prestashop/models/binding/common.py
index aa084c8e1..d86fe7517 100644
--- a/connector_prestashop/models/binding/common.py
+++ b/connector_prestashop/models/binding/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields, api
diff --git a/connector_prestashop/models/delivery_carrier/__init__.py b/connector_prestashop/models/delivery_carrier/__init__.py
index 05691dc17..bd1738e32 100644
--- a/connector_prestashop/models/delivery_carrier/__init__.py
+++ b/connector_prestashop/models/delivery_carrier/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import exporter
from . import importer
diff --git a/connector_prestashop/models/delivery_carrier/common.py b/connector_prestashop/models/delivery_carrier/common.py
index b1c11e661..a0f0beff6 100644
--- a/connector_prestashop/models/delivery_carrier/common.py
+++ b/connector_prestashop/models/delivery_carrier/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
diff --git a/connector_prestashop/models/delivery_carrier/exporter.py b/connector_prestashop/models/delivery_carrier/exporter.py
index 2977e4d65..d9d1f13de 100644
--- a/connector_prestashop/models/delivery_carrier/exporter.py
+++ b/connector_prestashop/models/delivery_carrier/exporter.py
@@ -1,2 +1 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
diff --git a/connector_prestashop/models/delivery_carrier/importer.py b/connector_prestashop/models/delivery_carrier/importer.py
index d268d9b33..9ad47c82c 100644
--- a/connector_prestashop/models/delivery_carrier/importer.py
+++ b/connector_prestashop/models/delivery_carrier/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import logging
diff --git a/connector_prestashop/models/mail_message/__init__.py b/connector_prestashop/models/mail_message/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/mail_message/__init__.py
+++ b/connector_prestashop/models/mail_message/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/mail_message/common.py b/connector_prestashop/models/mail_message/common.py
index 4379a164c..f4cabaa97 100644
--- a/connector_prestashop/models/mail_message/common.py
+++ b/connector_prestashop/models/mail_message/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
diff --git a/connector_prestashop/models/mail_message/importer.py b/connector_prestashop/models/mail_message/importer.py
index 4f0114f7a..71be49702 100644
--- a/connector_prestashop/models/mail_message/importer.py
+++ b/connector_prestashop/models/mail_message/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.components.mapper import mapping
diff --git a/connector_prestashop/models/payment/common.py b/connector_prestashop/models/payment/common.py
index 7d51194f6..b12b03eda 100644
--- a/connector_prestashop/models/payment/common.py
+++ b/connector_prestashop/models/payment/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/payment/importer.py b/connector_prestashop/models/payment/importer.py
index ed18b71d7..2143ddd3b 100644
--- a/connector_prestashop/models/payment/importer.py
+++ b/connector_prestashop/models/payment/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/prestashop_backend/__init__.py b/connector_prestashop/models/prestashop_backend/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/prestashop_backend/__init__.py
+++ b/connector_prestashop/models/prestashop_backend/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/prestashop_backend/common.py b/connector_prestashop/models/prestashop_backend/common.py
index 092685ccb..d53ba478d 100644
--- a/connector_prestashop/models/prestashop_backend/common.py
+++ b/connector_prestashop/models/prestashop_backend/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
@@ -297,8 +296,8 @@ def import_customers_since(self):
for backend_record in self:
since_date = backend_record.import_partners_since
self.env['prestashop.res.partner'].with_delay(
- ).import_customers_since(
- backend_record=backend_record, since_date=since_date)
+ ).import_customers_since(
+ backend_record=backend_record, since_date=since_date)
return True
@api.multi
@@ -306,7 +305,7 @@ def import_products(self):
for backend_record in self:
since_date = backend_record.import_products_since
self.env['prestashop.product.template'].with_delay(
- ).import_products(backend_record, since_date)
+ ).import_products(backend_record, since_date)
return True
@api.multi
@@ -337,7 +336,7 @@ def import_sale_orders(self):
for backend_record in self:
since_date = backend_record.import_orders_since
backend_record.env['prestashop.sale.order'].with_delay(
- ).import_orders_since(backend_record, since_date)
+ ).import_orders_since(backend_record, since_date)
return True
@api.multi
diff --git a/connector_prestashop/models/prestashop_backend/importer.py b/connector_prestashop/models/prestashop_backend/importer.py
index d95df85a5..3dc9c912a 100644
--- a/connector_prestashop/models/prestashop_backend/importer.py
+++ b/connector_prestashop/models/prestashop_backend/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/prestashop_shop_group/__init__.py b/connector_prestashop/models/prestashop_shop_group/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/prestashop_shop_group/__init__.py
+++ b/connector_prestashop/models/prestashop_shop_group/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/prestashop_shop_group/common.py b/connector_prestashop/models/prestashop_shop_group/common.py
index 0fb5c2913..5bfd68f9e 100644
--- a/connector_prestashop/models/prestashop_shop_group/common.py
+++ b/connector_prestashop/models/prestashop_shop_group/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/prestashop_shop_group/importer.py b/connector_prestashop/models/prestashop_shop_group/importer.py
index 6135091c6..b477c9b13 100644
--- a/connector_prestashop/models/prestashop_shop_group/importer.py
+++ b/connector_prestashop/models/prestashop_shop_group/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
diff --git a/connector_prestashop/models/product_category/__init__.py b/connector_prestashop/models/product_category/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/product_category/__init__.py
+++ b/connector_prestashop/models/product_category/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/product_category/common.py b/connector_prestashop/models/product_category/common.py
index 250892d70..6bfff42b8 100644
--- a/connector_prestashop/models/product_category/common.py
+++ b/connector_prestashop/models/product_category/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
diff --git a/connector_prestashop/models/product_category/importer.py b/connector_prestashop/models/product_category/importer.py
index ec2281c29..673ef90d4 100644
--- a/connector_prestashop/models/product_category/importer.py
+++ b/connector_prestashop/models/product_category/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _
diff --git a/connector_prestashop/models/product_image/__init__.py b/connector_prestashop/models/product_image/__init__.py
index c210a2460..89787aac5 100644
--- a/connector_prestashop/models/product_image/__init__.py
+++ b/connector_prestashop/models/product_image/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
# from . import deleter
diff --git a/connector_prestashop/models/product_image/common.py b/connector_prestashop/models/product_image/common.py
index 5486782ad..eb549e1fb 100644
--- a/connector_prestashop/models/product_image/common.py
+++ b/connector_prestashop/models/product_image/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import base64
diff --git a/connector_prestashop/models/product_image/deleter.py b/connector_prestashop/models/product_image/deleter.py
index ee195342f..97993ff41 100644
--- a/connector_prestashop/models/product_image/deleter.py
+++ b/connector_prestashop/models/product_image/deleter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/product_image/importer.py b/connector_prestashop/models/product_image/importer.py
index 1ad679674..6905965e9 100644
--- a/connector_prestashop/models/product_image/importer.py
+++ b/connector_prestashop/models/product_image/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/models/product_pricelist/__init__.py b/connector_prestashop/models/product_pricelist/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/product_pricelist/__init__.py
+++ b/connector_prestashop/models/product_pricelist/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/product_pricelist/common.py b/connector_prestashop/models/product_pricelist/common.py
index a8ea6582f..5f3e8111e 100644
--- a/connector_prestashop/models/product_pricelist/common.py
+++ b/connector_prestashop/models/product_pricelist/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
diff --git a/connector_prestashop/models/product_pricelist/importer.py b/connector_prestashop/models/product_pricelist/importer.py
index 70362f4b2..86080d7d2 100644
--- a/connector_prestashop/models/product_pricelist/importer.py
+++ b/connector_prestashop/models/product_pricelist/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/product_product/__init__.py b/connector_prestashop/models/product_product/__init__.py
index b76444be0..39ff3b5c9 100644
--- a/connector_prestashop/models/product_product/__init__.py
+++ b/connector_prestashop/models/product_product/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import deleter
from . import exporter
diff --git a/connector_prestashop/models/product_product/common.py b/connector_prestashop/models/product_product/common.py
index ce54239b7..ce2e2a4f9 100644
--- a/connector_prestashop/models/product_product/common.py
+++ b/connector_prestashop/models/product_product/common.py
@@ -1,8 +1,5 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from collections import defaultdict
-
from odoo import api, fields, models
from odoo.addons import decimal_precision as dp
diff --git a/connector_prestashop/models/product_product/deleter.py b/connector_prestashop/models/product_product/deleter.py
index 56830b969..192340415 100644
--- a/connector_prestashop/models/product_product/deleter.py
+++ b/connector_prestashop/models/product_product/deleter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/models/product_product/exporter.py b/connector_prestashop/models/product_product/exporter.py
index 831dbfc1f..e32ea64e5 100644
--- a/connector_prestashop/models/product_product/exporter.py
+++ b/connector_prestashop/models/product_product/exporter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/product_product/importer.py b/connector_prestashop/models/product_product/importer.py
index 9ef1b207b..8bdf9c384 100644
--- a/connector_prestashop/models/product_product/importer.py
+++ b/connector_prestashop/models/product_product/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models
@@ -108,10 +107,8 @@ class ProductCombinationMapper(Component):
from_main = []
-
@mapping
def weight(self, record):
- main_template = self.get_main_template_binding(record)
combination_weight = float(record.get('weight', '0.0'))
main_weight = float(
self.work.parent_presta_record.get('weight', 0.0))
@@ -266,7 +263,6 @@ def odoo_id(self, record):
# ], limit=1)
# if product:
# return {'odoo_id': product.id}
-
""" Will bind the product to an existing one with the same code """
if self.backend_record.matching_product_template:
code = record.get(self.backend_record.matching_product_ch)
@@ -275,7 +271,7 @@ def odoo_id(self, record):
product = self.env['product.product'].search(
[('default_code', '=', code)], limit=1)
if product:
- return {'odoo_id': product.id}
+ return {'odoo_id': product.id}
if self.backend_record.matching_product_ch == 'barcode':
if code:
product = self.env['product.product'].search(
diff --git a/connector_prestashop/models/product_supplierinfo/__init__.py b/connector_prestashop/models/product_supplierinfo/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/product_supplierinfo/__init__.py
+++ b/connector_prestashop/models/product_supplierinfo/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/product_supplierinfo/common.py b/connector_prestashop/models/product_supplierinfo/common.py
index aab178977..833ccc227 100644
--- a/connector_prestashop/models/product_supplierinfo/common.py
+++ b/connector_prestashop/models/product_supplierinfo/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
diff --git a/connector_prestashop/models/product_supplierinfo/importer.py b/connector_prestashop/models/product_supplierinfo/importer.py
index 74f645108..7448c7567 100644
--- a/connector_prestashop/models/product_supplierinfo/importer.py
+++ b/connector_prestashop/models/product_supplierinfo/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.queue_job.exception import FailedJobError
diff --git a/connector_prestashop/models/product_template/__init__.py b/connector_prestashop/models/product_template/__init__.py
index 05691dc17..bd1738e32 100644
--- a/connector_prestashop/models/product_template/__init__.py
+++ b/connector_prestashop/models/product_template/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import exporter
from . import importer
diff --git a/connector_prestashop/models/product_template/common.py b/connector_prestashop/models/product_template/common.py
index 5e74d5412..99325bd4f 100644
--- a/connector_prestashop/models/product_template/common.py
+++ b/connector_prestashop/models/product_template/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from collections import defaultdict
diff --git a/connector_prestashop/models/product_template/exporter.py b/connector_prestashop/models/product_template/exporter.py
index 201effdf1..dfb8e1f23 100644
--- a/connector_prestashop/models/product_template/exporter.py
+++ b/connector_prestashop/models/product_template/exporter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/product_template/importer.py b/connector_prestashop/models/product_template/importer.py
index 25b9c786c..aa888a390 100644
--- a/connector_prestashop/models/product_template/importer.py
+++ b/connector_prestashop/models/product_template/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _, models, api
@@ -574,7 +573,7 @@ def _import_combination(self, combination, **kwargs):
# We need to pass the template presta record because we need it
# for combination mapper
self.work.parent_presta_record = self.prestashop_record
- if not 'parent_presta_record' in self.work._propagate_kwargs:
+ if 'parent_presta_record' not in self.work._propagate_kwargs:
self.work._propagate_kwargs.append('parent_presta_record')
self._import_dependency(combination['id'],
'prestashop.product.combination',
diff --git a/connector_prestashop/models/queue_job/__init__.py b/connector_prestashop/models/queue_job/__init__.py
index aa9c3f5d9..e4193cf05 100644
--- a/connector_prestashop/models/queue_job/__init__.py
+++ b/connector_prestashop/models/queue_job/__init__.py
@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-
from . import common
diff --git a/connector_prestashop/models/queue_job/common.py b/connector_prestashop/models/queue_job/common.py
index 94741c231..aedc51126 100644
--- a/connector_prestashop/models/queue_job/common.py
+++ b/connector_prestashop/models/queue_job/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, models
diff --git a/connector_prestashop/models/res_country/__init__.py b/connector_prestashop/models/res_country/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/res_country/__init__.py
+++ b/connector_prestashop/models/res_country/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/res_country/common.py b/connector_prestashop/models/res_country/common.py
index ab273a8b2..04279bb6f 100644
--- a/connector_prestashop/models/res_country/common.py
+++ b/connector_prestashop/models/res_country/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/models/res_country/importer.py b/connector_prestashop/models/res_country/importer.py
index 7ca8e5437..e99030861 100644
--- a/connector_prestashop/models/res_country/importer.py
+++ b/connector_prestashop/models/res_country/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/res_currency/__init__.py b/connector_prestashop/models/res_currency/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/res_currency/__init__.py
+++ b/connector_prestashop/models/res_currency/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/res_currency/common.py b/connector_prestashop/models/res_currency/common.py
index 34734346a..b2c0069ad 100644
--- a/connector_prestashop/models/res_currency/common.py
+++ b/connector_prestashop/models/res_currency/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
diff --git a/connector_prestashop/models/res_currency/importer.py b/connector_prestashop/models/res_currency/importer.py
index b1aee6c8c..1a5ceb360 100644
--- a/connector_prestashop/models/res_currency/importer.py
+++ b/connector_prestashop/models/res_currency/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/res_lang/__init__.py b/connector_prestashop/models/res_lang/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/res_lang/__init__.py
+++ b/connector_prestashop/models/res_lang/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/res_lang/common.py b/connector_prestashop/models/res_lang/common.py
index 6a1890c1e..9b7f5c2ff 100644
--- a/connector_prestashop/models/res_lang/common.py
+++ b/connector_prestashop/models/res_lang/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields
diff --git a/connector_prestashop/models/res_lang/importer.py b/connector_prestashop/models/res_lang/importer.py
index 2cf957a96..0c781287d 100644
--- a/connector_prestashop/models/res_lang/importer.py
+++ b/connector_prestashop/models/res_lang/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/res_partner/__init__.py b/connector_prestashop/models/res_partner/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/res_partner/__init__.py
+++ b/connector_prestashop/models/res_partner/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/res_partner/common.py b/connector_prestashop/models/res_partner/common.py
index 21aa090f2..21973dd21 100644
--- a/connector_prestashop/models/res_partner/common.py
+++ b/connector_prestashop/models/res_partner/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import models, fields
diff --git a/connector_prestashop/models/res_partner/importer.py b/connector_prestashop/models/res_partner/importer.py
index 374e21bf5..144fd60d4 100644
--- a/connector_prestashop/models/res_partner/importer.py
+++ b/connector_prestashop/models/res_partner/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import re
diff --git a/connector_prestashop/models/res_partner_category/__init__.py b/connector_prestashop/models/res_partner_category/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/res_partner_category/__init__.py
+++ b/connector_prestashop/models/res_partner_category/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/res_partner_category/common.py b/connector_prestashop/models/res_partner_category/common.py
index fe094f59f..cce7adc26 100644
--- a/connector_prestashop/models/res_partner_category/common.py
+++ b/connector_prestashop/models/res_partner_category/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models
diff --git a/connector_prestashop/models/res_partner_category/importer.py b/connector_prestashop/models/res_partner_category/importer.py
index 233fbffee..ebd564d2b 100644
--- a/connector_prestashop/models/res_partner_category/importer.py
+++ b/connector_prestashop/models/res_partner_category/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.components.mapper import mapping
diff --git a/connector_prestashop/models/sale_order/__init__.py b/connector_prestashop/models/sale_order/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/sale_order/__init__.py
+++ b/connector_prestashop/models/sale_order/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/sale_order/common.py b/connector_prestashop/models/sale_order/common.py
index 87d174459..c688aa642 100644
--- a/connector_prestashop/models/sale_order/common.py
+++ b/connector_prestashop/models/sale_order/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import openerp.addons.decimal_precision as dp
diff --git a/connector_prestashop/models/sale_order/importer.py b/connector_prestashop/models/sale_order/importer.py
index 1e0857030..6e143948f 100644
--- a/connector_prestashop/models/sale_order/importer.py
+++ b/connector_prestashop/models/sale_order/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
import pytz
from odoo import _, fields
@@ -340,15 +339,14 @@ def _import_dependencies(self):
if row.get('product_attribute_id', '0') != '0':
try:
self._import_dependency(row['product_attribute_id'],
- 'prestashop.product.combination')
- except PrestaShopWebServiceError:
+ 'prestashop.product.combination')
+ except PrestaShopWebServiceError as err:
# we ignore it, the order line will be imported without
# product
_logger.error('PrestaShop combination %s could not be '
'imported, error: %s' %
row['product_attribute_id'], err)
-
def _add_shipping_line(self, binding):
shipping_total = (binding.total_shipping_tax_included
if self.backend_record.taxes_included
diff --git a/connector_prestashop/models/sale_order_state/__init__.py b/connector_prestashop/models/sale_order_state/__init__.py
index 05691dc17..bd1738e32 100644
--- a/connector_prestashop/models/sale_order_state/__init__.py
+++ b/connector_prestashop/models/sale_order_state/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import exporter
from . import importer
diff --git a/connector_prestashop/models/sale_order_state/common.py b/connector_prestashop/models/sale_order_state/common.py
index 8439c6a72..8d0e1eef4 100644
--- a/connector_prestashop/models/sale_order_state/common.py
+++ b/connector_prestashop/models/sale_order_state/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import models, fields
diff --git a/connector_prestashop/models/sale_order_state/exporter.py b/connector_prestashop/models/sale_order_state/exporter.py
index f9b47565f..06fc1afd6 100644
--- a/connector_prestashop/models/sale_order_state/exporter.py
+++ b/connector_prestashop/models/sale_order_state/exporter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
diff --git a/connector_prestashop/models/sale_order_state/importer.py b/connector_prestashop/models/sale_order_state/importer.py
index 1f30bd331..40ac02811 100644
--- a/connector_prestashop/models/sale_order_state/importer.py
+++ b/connector_prestashop/models/sale_order_state/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.connector.components.mapper import mapping
diff --git a/connector_prestashop/models/stock_move/__init__.py b/connector_prestashop/models/stock_move/__init__.py
index aa9c3f5d9..e4193cf05 100644
--- a/connector_prestashop/models/stock_move/__init__.py
+++ b/connector_prestashop/models/stock_move/__init__.py
@@ -1,3 +1 @@
-# -*- coding: utf-8 -*-
-
from . import common
diff --git a/connector_prestashop/models/stock_move/common.py b/connector_prestashop/models/stock_move/common.py
index e1fc5a233..631c7d6f9 100644
--- a/connector_prestashop/models/stock_move/common.py
+++ b/connector_prestashop/models/stock_move/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
diff --git a/connector_prestashop/models/stock_tracking/__init__.py b/connector_prestashop/models/stock_tracking/__init__.py
index 25fd124e2..2db3f18cd 100644
--- a/connector_prestashop/models/stock_tracking/__init__.py
+++ b/connector_prestashop/models/stock_tracking/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import exporter
diff --git a/connector_prestashop/models/stock_tracking/common.py b/connector_prestashop/models/stock_tracking/common.py
index 1e1555fad..060376e0f 100644
--- a/connector_prestashop/models/stock_tracking/common.py
+++ b/connector_prestashop/models/stock_tracking/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/stock_tracking/exporter.py b/connector_prestashop/models/stock_tracking/exporter.py
index ba8f4e41a..acc19e001 100644
--- a/connector_prestashop/models/stock_tracking/exporter.py
+++ b/connector_prestashop/models/stock_tracking/exporter.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/models/stock_warehouse/__init__.py b/connector_prestashop/models/stock_warehouse/__init__.py
index 5c10a1d51..79ab5dc6b 100644
--- a/connector_prestashop/models/stock_warehouse/__init__.py
+++ b/connector_prestashop/models/stock_warehouse/__init__.py
@@ -1,4 +1,2 @@
-# -*- coding: utf-8 -*-
-
from . import common
from . import importer
diff --git a/connector_prestashop/models/stock_warehouse/common.py b/connector_prestashop/models/stock_warehouse/common.py
index da69d72a0..a57b1d5f4 100644
--- a/connector_prestashop/models/stock_warehouse/common.py
+++ b/connector_prestashop/models/stock_warehouse/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import api, fields, models
diff --git a/connector_prestashop/models/stock_warehouse/importer.py b/connector_prestashop/models/stock_warehouse/importer.py
index d3842b57f..4552bc5c6 100644
--- a/connector_prestashop/models/stock_warehouse/importer.py
+++ b/connector_prestashop/models/stock_warehouse/importer.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo.addons.component.core import Component
diff --git a/connector_prestashop/tests/__init__.py b/connector_prestashop/tests/__init__.py
index 99fd87223..285b4b933 100644
--- a/connector_prestashop/tests/__init__.py
+++ b/connector_prestashop/tests/__init__.py
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from . import test_auth
from . import test_export_stock_qty
from . import test_export_stock_qty_job
diff --git a/connector_prestashop/tests/common.py b/connector_prestashop/tests/common.py
index b44a92e70..8d9fa51a7 100644
--- a/connector_prestashop/tests/common.py
+++ b/connector_prestashop/tests/common.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
# © 2016 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
@@ -12,7 +11,7 @@
from vcr import VCR
import logging
-import urlparse
+from urllib import parse
_logger = logging.getLogger(__name__)
try:
from prestapyt.xml2dict import xml2dict
@@ -173,7 +172,7 @@ def get_record_field(record, field):
equals = []
for expected in expected_records:
for record in records:
- for field, expected_value in expected._asdict().iteritems():
+ for field, expected_value in expected._asdict().items():
record_value = get_record_field(record, field)
if not record_value == expected_value:
break
@@ -202,7 +201,7 @@ def get_record_field(record, field):
u' - {}({})'.format(
model_name,
u', '.join(u'%s: %s' % (field.replace('__', '.'), v) for
- field, v in expected._asdict().iteritems())
+ field, v in expected._asdict().items())
)
)
for record in records:
@@ -244,11 +243,11 @@ def create_binding_no_export(self, model_name, odoo_id,
@staticmethod
def parse_path(url):
- return urlparse.urlparse(url).path
+ return parse.urlparse(url).path
@staticmethod
def parse_qs(url):
- return urlparse.parse_qs(urlparse.urlparse(url).query)
+ return parse.parse_qs(parse.urlparse(url).query)
def configure_taxes(self):
company = self.env.ref('base.main_company')
diff --git a/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml b/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
index f6cd223fd..52edf3c14 100644
--- a/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
+++ b/connector_prestashop/tests/fixtures/cassettes/test_import_basedata.yaml
@@ -5,17 +5,17 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/languages
+ uri: http://172.30.0.5/api/languages
response:
- body: {string: !!python/unicode '
+ body: {string: '
-
+
@@ -23,20 +23,20 @@ interactions:
'}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [103629e73d5f57aa06920ccf7cf8777f5382db20]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=100']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Set-Cookie: ['PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D;
+ expires=Tue, 19-Feb-2019 00:10:11 GMT; Max-Age=1728000; path=/; httponly']
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['200']
- content-sha1: [f84639e268b14e09245ab3038c41a5e49cb52969]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=100']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078;
- expires=Mon, 03-Oct-2016 10:46:11 GMT; Max-Age=1728000; path=/; httponly']
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -44,31 +44,31 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/languages/1
+ uri: http://172.30.0.5/api/languages/1
response:
- body: {string: !!python/unicode "\n\
- \n\n\t\
- \n\t \n\t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\t \n\
\t \n\t \n\
\t \n\t \n\
\t \n \n\
\n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [4d78168ff0dc408b2ae4a522f1d900b0441d2b65]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=99']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['469']
- content-sha1: [4d78168ff0dc408b2ae4a522f1d900b0441d2b65]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=99']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -76,503 +76,503 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries
+ uri: http://172.30.0.5/api/countries
response:
- body: {string: !!python/unicode '
+ body: {string: '
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -580,18 +580,18 @@ interactions:
'}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a6dfa9e4a6cbdcdef494afbe4a7cdb6c35aaa848]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.003']
+ Keep-Alive: ['timeout=5, max=100']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['16754']
- content-sha1: [ac973b2d404b69ecd3e58a42eb87e4cbbc76645f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.004']
- keep-alive: ['timeout=5, max=100']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -599,35 +599,35 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/1
+ uri: http://172.30.0.5/api/countries/1
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
- \n \n"}
- headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\"> \n\
+ \n \n"}
+ headers:
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [492756e3b560a50564da8ae0b158c09e019c1a1f]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=99']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Set-Cookie: ['PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D;
+ expires=Tue, 19-Feb-2019 00:10:11 GMT; Max-Age=1728000; path=/; httponly']
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [03e1b0e369a51eb465a063fd74fd615971b9a076]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=99']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- set-cookie: ['PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078;
- expires=Mon, 03-Oct-2016 10:46:11 GMT; Max-Age=1728000; path=/; httponly']
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -635,34 +635,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/2
+ uri: http://172.30.0.5/api/countries/2
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [08e21ad888a5e0044900574b35858bf74c9b8028]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=98']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [7f6b0e14b0907aac6b1b20376d3fd18352ac3a81]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=98']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -670,34 +670,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/3
+ uri: http://172.30.0.5/api/countries/3
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2fb63d51b25132e32710ea83bb8f0e5388c2c255]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=97']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [7a0cefe0f834d056ac9876413b9c30b3d9e213a9]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=97']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -705,34 +705,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/6
+ uri: http://172.30.0.5/api/countries/6
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [d4017a768785990d932364d38cd882cb61dd43c7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=96']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['768']
- content-sha1: [92f465da040c11abe5ec320ac0b1a2529cb53f34]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=96']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -740,34 +740,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/7
+ uri: http://172.30.0.5/api/countries/7
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [36ecf35495ebc3d32ad81b04be7c82c15c13d4a1]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=95']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [8f1cd3b34139513b6c66cbed74c62dec012fec14]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=95']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -775,34 +775,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/8
+ uri: http://172.30.0.5/api/countries/8
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2c14447db817e661412521a24bd9585320d37d29]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=94']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [5cd1a1b256cd2dff5263a546679694f77b87123c]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=94']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -810,34 +810,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/9
+ uri: http://172.30.0.5/api/countries/9
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763571']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2ae89cb0e56474528e8d72594d1185e174ba8407]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=93']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [e2230c6eae46961a0c9e64fb9e8679a75295aa96]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=93']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -845,34 +845,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/10
+ uri: http://172.30.0.5/api/countries/10
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a3ee3d824e35cc958199fc9cb900653ba6770598]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=92']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [5c5a1b6950d8a26ee03044d0d7041c695f2db3ae]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:11 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=92']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -880,34 +880,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/12
+ uri: http://172.30.0.5/api/countries/12
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2d2e7d4b9502a1259c083575f5181d87ba9f67e7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=91']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [1b070c466b5e407cd1ca7197788008c83729293f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=91']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -915,34 +915,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/13
+ uri: http://172.30.0.5/api/countries/13
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807011']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8a8a98da3284ef185e59c95d1efbf86aa9e2ae4c]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:11 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=90']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['777']
- content-sha1: [e73968c65ae8422897428cb1cc257fdbb2950811]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=90']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -950,34 +950,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/14
+ uri: http://172.30.0.5/api/countries/14
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [3200b7efb246c9d09b3746246411d05544755145]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=89']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [9879c4f7a81745c7ee3105c67efb311008b47747]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=89']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -985,34 +985,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/15
+ uri: http://172.30.0.5/api/countries/15
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [bc8a142da511930b3eed9f065954c9379e06a307]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=88']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['776']
- content-sha1: [96a388538f831e0367149b9bbaee188daf5c1163]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=88']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1020,34 +1020,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/16
+ uri: http://172.30.0.5/api/countries/16
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [162f73db85e6a9404af691c7299fda19a892f410]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=87']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['780']
- content-sha1: [21064399f52edf615c929ebe7015f4789b6c0688]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=87']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1055,34 +1055,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/17
+ uri: http://172.30.0.5/api/countries/17
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [83a027924556b0ef5b856a7b834ac5102ff4e1d8]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=86']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['761']
- content-sha1: [1375540edbd8aac83aef05e4e78ecf3e985526ed]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=86']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1090,34 +1090,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/18
+ uri: http://172.30.0.5/api/countries/18
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c7085c32bb9aaeb77710597c75ed5c5cdd83f9e0]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=85']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [9e2b99824b631ef2d5cb615541b2e51fe48b0261]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=85']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1125,34 +1125,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/20
+ uri: http://172.30.0.5/api/countries/20
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8b0c613daa153ed5c6cc93f40488351f0840adf7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=84']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [ef257f1e3f70deba1bc382e649e6074aaa73ec7e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=84']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1160,34 +1160,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/26
+ uri: http://172.30.0.5/api/countries/26
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [ac7bd517a3436b3e1bacbbc99f1fb756f21560b2]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=83']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [c02664cc410f80d6eb63a2b36e2904631fd61997]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=83']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1195,34 +1195,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/36
+ uri: http://172.30.0.5/api/countries/36
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a7c4b34c2ef69db6f66494b2b74198f40e1a4234]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=82']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [817aaa40928f2a35569e436c406fd34e0112c9d3]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=82']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1230,34 +1230,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/37
+ uri: http://172.30.0.5/api/countries/37
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [d2ad9c1e8559256443a773d9bd473e38c33a1efb]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=81']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [2f4d2aabdd85d7d22026738c6f76eb00cf275bcc]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=81']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1265,34 +1265,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/76
+ uri: http://172.30.0.5/api/countries/76
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e1dfdc6a72c55028f09a17da07001b4b75d240c0]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=80']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [5c781b825a9b175bd2f2a3bc42f850a64be9d3fb]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=80']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1300,34 +1300,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/86
+ uri: http://172.30.0.5/api/countries/86
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c3182f27818a74506f2548eb84afa310f29ad6ea]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=79']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [320104fc193282bb8330f94a28df1405cedb84b0]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=79']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1335,34 +1335,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/125
+ uri: http://172.30.0.5/api/countries/125
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c2ede0c5941f676e19363e7bdd68d4db04273ca1]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=78']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [e4da31409db0893c3adedc61b59f839002a59851]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=78']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1370,34 +1370,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/130
+ uri: http://172.30.0.5/api/countries/130
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c6f8fb7ebeff8d33a3f4b11dcc32f7c6718032d6]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=77']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['778']
- content-sha1: [6fdd0f54a91fa3a8b97f83f3608537e180ef7c05]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=77']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1405,34 +1405,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/131
+ uri: http://172.30.0.5/api/countries/131
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [01584bb1ac8b5f5b373510f51727e422d5b5e963]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=76']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [2f248e4b4e78ffd321f96eb9e179b79ba0928157]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=76']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1440,34 +1440,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/139
+ uri: http://172.30.0.5/api/countries/139
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [09d2d249def3485500802b399729fdc6a83449d2]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=75']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [d3cce56b83928e22b18396627cc0dccf97aafdb5]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=75']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1475,34 +1475,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/143
+ uri: http://172.30.0.5/api/countries/143
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [6bc8d166fe79ab4c0f0b3d73e2035e1edd376f42]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=74']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [beb478356f0c961949ea04a9b6e4dab505c01991]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=74']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1510,34 +1510,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/193
+ uri: http://172.30.0.5/api/countries/193
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [408709658bc7539fc54b309cb2e6b7feea09391d]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=73']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [461b550200920bd0dd957f6f235e0da3e40b19a2]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=73']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1545,34 +1545,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/216
+ uri: http://172.30.0.5/api/countries/216
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e240459391620d42172ac04a22be53f35ffefacc]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=72']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [b4372bb40ae0baece99e938b2e2ec9435efd91bd]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=72']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1580,34 +1580,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/233
+ uri: http://172.30.0.5/api/countries/233
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [05a437a9a6243e6099a0ea85fced7ceb3e0e19c0]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=71']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [70db1e9fedfaa4a35a99acd2293c03d97d819f89]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=71']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1615,34 +1615,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/236
+ uri: http://172.30.0.5/api/countries/236
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [4d2e990b0d438d4d6d0f3d74bb54733b99b857e0]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=70']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [bdca3c2b6b07c5237499af0cb69eebad3f8724c8]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=70']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1650,34 +1650,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/4
+ uri: http://172.30.0.5/api/countries/4
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [bcdd41dede3ea9ca73a693aa59cf49a21b48823b]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=69']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [4c8eb7fd917ecae99e72df225357c20ee7aea373]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=69']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1685,34 +1685,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/21
+ uri: http://172.30.0.5/api/countries/21
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [5041da19e4d112ceb347c02d3cff56bd82148d52]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=68']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['776']
- content-sha1: [3c6371899c7a8be8ba20485069bcfad2d5f63a79]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=68']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1720,34 +1720,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/39
+ uri: http://172.30.0.5/api/countries/39
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [5450877027df0d54b501565b341b8697e5c6a80c]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=67']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['760']
- content-sha1: [b5d6185f23a2761c3bad6f244ff3c98cdf51c9a2]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=67']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1755,34 +1755,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/43
+ uri: http://172.30.0.5/api/countries/43
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [897736382a4e607d8255b3f57a7fe7e659605db4]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=66']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['765']
- content-sha1: [a438f032d8d3dfe9e00d18fe293d3b506540e299]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=66']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1790,34 +1790,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/48
+ uri: http://172.30.0.5/api/countries/48
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [788b11c01b0a2a72602163e6f291671a78857120]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=65']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['753']
- content-sha1: [5b164aabec26a9598feadf22e74a95e8b32c265d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=65']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1825,34 +1825,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/51
+ uri: http://172.30.0.5/api/countries/51
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [22aafea4c97c92e00910f87559ad47a27d38abf8]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=64']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [bf37860368b23fdf23de008e8b02aa0605aa650f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=64']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1860,34 +1860,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/55
+ uri: http://172.30.0.5/api/countries/55
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [ba7d9c639d3287d890f793993da0edee5d799a99]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=63']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['753']
- content-sha1: [367056b8f39af55b67bb038f9c39f154c2e3efc9]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=63']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1895,34 +1895,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/145
+ uri: http://172.30.0.5/api/countries/145
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c525c09a0c81d7d23fa31af2b512d7968f5970fd]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=62']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [31dcd59c256c566ed03bd92b4bacdf09623240c5]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=62']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1930,34 +1930,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/223
+ uri: http://172.30.0.5/api/countries/223
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [92541e46eea39ed375d3d2030bc8633fdb96946c]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=61']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['788']
- content-sha1: [ca3c742003b33a23f8f932b2d8d9bae78ecad5b2]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.004']
- keep-alive: ['timeout=5, max=61']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -1965,34 +1965,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/224
+ uri: http://172.30.0.5/api/countries/224
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [fca6bc74ee6c2f6cb4842f984d6f49c63ab3a36b]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=60']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['768']
- content-sha1: [b83b7795826cb9fa34a2d29c1f950d5753205b63]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=60']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2000,34 +2000,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/5
+ uri: http://172.30.0.5/api/countries/5
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
- \t \n\t \n\
+ body: {string: "\n\n\n\t \n\t \n\t\
+ \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c39804d1192d34c97607c3eeb2eb9ab109ce0fb3]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=59']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [793d783d68aee54fe025c29127172ca19097d21e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=59']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2035,34 +2035,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/11
+ uri: http://172.30.0.5/api/countries/11
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [159b8a17b0148f6e8c0e893f21b28b2fdd5d4fa0]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=58']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [f012819413681c4fea60e71683769198e8866d53]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=58']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2070,34 +2070,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/22
+ uri: http://172.30.0.5/api/countries/22
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [bd7f2ba298c511c74e75448455750a596f8cf1b8]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=57']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [c3dc9c058d23351b1a45f7556b09a4ab43c4f5bf]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=57']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2105,34 +2105,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/25
+ uri: http://172.30.0.5/api/countries/25
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [4903885bf066fb564302cdc96fffaac3917e2e32]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=56']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [2b459db1bac2e19133c334feadfc628ec4bce07c]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=56']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2140,34 +2140,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/28
+ uri: http://172.30.0.5/api/countries/28
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
- \t \n\t \n\
+ \t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
- content-length: ['777']
- content-sha1: [7203b3368b31c4392234d76c8ec78c6527ac1a22]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=55']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2415fc7a0a5233830a0f80f98a99fcdd87ce39c7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=55']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
+ content-length: ['775']
status: {code: 200, message: OK}
- request:
body: null
@@ -2175,34 +2175,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/29
+ uri: http://172.30.0.5/api/countries/29
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [2c0b5183c14f0dba3d84561171669631c9b0badd]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=54']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [1f58b353c660eec73db6bca8cb9aed70d6595e9f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=54']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2210,34 +2210,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/45
+ uri: http://172.30.0.5/api/countries/45
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763572']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a569cc3eea79ab41dffc5dd207443087056b6595]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=53']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [99963ef6ab012b590ee9fe5008f40d82879f3660]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:12 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=53']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2245,34 +2245,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/47
+ uri: http://172.30.0.5/api/countries/47
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8b9d0b0d127826fb41cc88b7a8ac47f8c5b11c25]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=52']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [a74aad53978174617e9ef91b75da663bdd955d32]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=52']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2280,34 +2280,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/49
+ uri: http://172.30.0.5/api/countries/49
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e0fe2f5f98dac25c3f8a17000456013710eaf113]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=51']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [fc63437c4cd1068c37756af545554fe3fe9055a3]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=51']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2315,34 +2315,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/50
+ uri: http://172.30.0.5/api/countries/50
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [55ef8fd9f98f36fd2178fe6074a81a5460318319]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=50']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [8f344e49fb7a45691c6d9e780865811085bf1825]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=50']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2350,34 +2350,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/56
+ uri: http://172.30.0.5/api/countries/56
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e59b637e6d27bf8a0fd153f5b6f31bb7f1696eec]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=49']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [41da9138bf110605cff0882d075c6a94d895da11]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=49']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2385,34 +2385,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/59
+ uri: http://172.30.0.5/api/countries/59
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [43b2a007bdb86b9e7e9529ee82498c37ae2437a6]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=48']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [266ab55c169a4a95a7c71092bdce36d22a2d45dd]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=48']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2420,34 +2420,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/61
+ uri: http://172.30.0.5/api/countries/61
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [9f25f75c252e5a58259d9792f19597b6a03a394e]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=47']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['762']
- content-sha1: [de55e1f7898306725a48d3c98219c34623d12742]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=47']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2455,34 +2455,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/63
+ uri: http://172.30.0.5/api/countries/63
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a13323f02120f44dad066246d38691c54503b948]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=46']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [0bc97be17a72305b99f395a02b395df63707f268]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=46']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2490,34 +2490,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/80
+ uri: http://172.30.0.5/api/countries/80
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c3801349520ac88f5f1ff0ea9140ff2d81fc94cf]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=45']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['758']
- content-sha1: [0b726c6b6ada5e7a803b91f18f7a318b20532649]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=45']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2525,34 +2525,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/93
+ uri: http://172.30.0.5/api/countries/93
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [b557b2a5f4e2d1fd77ba664bdeb8c4c21de0d6d2]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=44']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['771']
- content-sha1: [0cb207f15087f6e7b54f8af6db7e6e108d6188ad]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=44']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2560,34 +2560,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/110
+ uri: http://172.30.0.5/api/countries/110
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\t \n\
- \t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [30b13b6cc2c7efec1b285d3f990bd70db5a5eccb]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=43']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [7d3e5d0d3ac4a8275a01403b299d2c7ea85d8c3f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=43']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2595,34 +2595,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/111
+ uri: http://172.30.0.5/api/countries/111
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [08a5e00f7e364c4dcbe00d6b1159a76bd1c26e5a]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=42']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [f6e578dbc6e9d7b57ec8b7ac5c771ced24f2725d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=42']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2630,34 +2630,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/112
+ uri: http://172.30.0.5/api/countries/112
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c17176bfd7be99c9e609f390a8790def54b32c6f]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=41']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [e2a5a49ede6b46b0f16f6cd07f3e976379f4a52f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=41']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2665,34 +2665,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/113
+ uri: http://172.30.0.5/api/countries/113
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807012']
+ Connection: [Keep-Alive]
+ Content-Sha1: [f8439ece50b58ddb0ffd56e2704776cee9fa8521]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=40']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [425ec686ad9faedd4deabc03553956276652b35b]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=40']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2700,34 +2700,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/117
+ uri: http://172.30.0.5/api/countries/117
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8329dbe1440e8eeaa038d3394f802e039629e68c]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:12 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=39']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [e10ff4ebeddb8b92868f26012f05c40e5c8b6b4b]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=39']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2735,34 +2735,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/118
+ uri: http://172.30.0.5/api/countries/118
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8540c7afa5a88e4ebcfa9a5f6ad79f4f9d8e92cc]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=38']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [c7d11e84907f2a82c65ace902cce27bebb97adc1]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=38']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2770,34 +2770,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/121
+ uri: http://172.30.0.5/api/countries/121
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a5667367c7c04c04a146941d08007fde8a4bbc22]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=37']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [2aa1e6ab8d376da6e141ae9ad26af132aeee39dd]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=37']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2805,34 +2805,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/122
+ uri: http://172.30.0.5/api/countries/122
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [bed6dc69c5097fbe2a7cbc206f3853daa31eb029]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=36']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [f688e77e90cf217f010dc53a08415baaf9e1a733]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=36']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2840,34 +2840,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/123
+ uri: http://172.30.0.5/api/countries/123
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [f3de47f612aa7a5ebd2ab0cfbdf1de25318e3cb8]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=35']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['759']
- content-sha1: [8e1dd6747cc99fd1f04d54217052a520cc2c9fdc]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=35']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2875,34 +2875,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/124
+ uri: http://172.30.0.5/api/countries/124
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [300172de25cecc0bf4e2a3aa0f8192473dd139ef]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=34']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['753']
- content-sha1: [b3ede33590da4b65452b523de2e4c98e2c18226c]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=34']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2910,34 +2910,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/126
+ uri: http://172.30.0.5/api/countries/126
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [05d120ebd72d2ca942d6108c1390c22be38bc0f4]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=33']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [fbf2da658616290b7b0416bdafdbb4b7d6914261]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=33']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2945,34 +2945,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/132
+ uri: http://172.30.0.5/api/countries/132
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [59f05df66523df11f785a16b5e78ecef31737101]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=32']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [c0c88f29191247f0700af83b6689b0e428df746d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=32']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -2980,34 +2980,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/136
+ uri: http://172.30.0.5/api/countries/136
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [18f104a9982f968c4e959db0f7adfce52c7893c7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=31']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [f3cae4188916eb80baa9abd1f3d5ca820b63ed79]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=31']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3015,34 +3015,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/137
+ uri: http://172.30.0.5/api/countries/137
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [647cf40dcc82da6457f9584738f2a5a0c8d8dba7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=30']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['757']
- content-sha1: [41ff353a3300b2a194759ca09898968886909d45]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=30']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3050,34 +3050,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/149
+ uri: http://172.30.0.5/api/countries/149
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [6a981a85bd652164d402089b4419a6dec24439fd]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=29']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['757']
- content-sha1: [455086ac653417c0a862717946210c836827771d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=29']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3085,34 +3085,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/156
+ uri: http://172.30.0.5/api/countries/156
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [5c1f350f242327e0c30a0759ef1e8717df6f252a]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=28']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [6bc5a030261209aeb12158d6cd6846585272f69a]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=28']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3120,34 +3120,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/164
+ uri: http://172.30.0.5/api/countries/164
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [4a47ededb4cd045ff53e26b0800dd07a0595e4de]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.003']
+ Keep-Alive: ['timeout=5, max=27']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['753']
- content-sha1: [4b1184807a80d0b32b62b12c330290aa88432bd1]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=27']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3155,34 +3155,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/165
+ uri: http://172.30.0.5/api/countries/165
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [eeb8e02784f8d3683c74ade6356b44fd18756c0f]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=26']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [99c043a43384d5defe02ac8719a0dab9583745a8]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=26']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3190,34 +3190,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/167
+ uri: http://172.30.0.5/api/countries/167
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [db25369462016247e8cee4fc030f9b7140bcf241]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=25']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [c77e9f4174796c63f60eba940e433000f1343223]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=25']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3225,34 +3225,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/172
+ uri: http://172.30.0.5/api/countries/172
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [38a23c341ba401b5e04312bec2e6b617be1fd9a7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=24']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [93db21c1d12c1bd49a27bf23336db1cfab74277d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=24']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3260,34 +3260,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/175
+ uri: http://172.30.0.5/api/countries/175
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [764c03411769cba67f5cfa06eb16fa9e77c15443]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=23']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [1ce44d72464d486bc2861108e8d2c1136434d66e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=23']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3295,34 +3295,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/188
+ uri: http://172.30.0.5/api/countries/188
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [08f25de63b7b1bdfab2637f9b7fb0b2dabc40a4e]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=22']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['761']
- content-sha1: [d32f6bf57258d2b92f4b08aab02c7eafce14db9e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=22']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3330,34 +3330,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/197
+ uri: http://172.30.0.5/api/countries/197
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [bb27ae766c6922b22136e63ffe8235d7500b9b71]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=21']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [e5667f8054736786b2b5d259239dea384071aeab]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=21']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3365,34 +3365,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/202
+ uri: http://172.30.0.5/api/countries/202
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [9b73294b52faf1d4debaa94ef1b7369ac8946d14]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=20']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [bf9f16f3dda63758cd231d4444c04d84360be9e0]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=20']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3400,34 +3400,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/203
+ uri: http://172.30.0.5/api/countries/203
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [d35784a9e101a972b890020557ad18f0ff42bea6]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=19']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [bc019f46739f9c4c82f7e0d0b93059406a282bca]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=19']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3435,34 +3435,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/204
+ uri: http://172.30.0.5/api/countries/204
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a6b5999c7c01ae8d1e89648c6b18fcdabd013183]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=18']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['759']
- content-sha1: [b9571731471fc335d3cde9419e018aa02962e6d3]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=18']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3470,34 +3470,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/206
+ uri: http://172.30.0.5/api/countries/206
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [4e9b79980c6db915ffdfe2623a28fa262f0fa723]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=17']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [5a119d2a5d22be96b30138dd380e002a31b618ea]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=17']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3505,34 +3505,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/212
+ uri: http://172.30.0.5/api/countries/212
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e5f609999ef933ea9b115a32065abff34c2cde2d]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=16']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['761']
- content-sha1: [b7d87c6d56de997cdffc4757e240822de66f578a]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=16']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3540,34 +3540,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/217
+ uri: http://172.30.0.5/api/countries/217
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [f2906653d07bf7bfcf22398b0c0fd6853c5e1310]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=15']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['769']
- content-sha1: [d8348cd2130c7f3322c9b27190e7c0caa36715be]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=15']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3575,34 +3575,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/219
+ uri: http://172.30.0.5/api/countries/219
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763573']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [6d0a1bea299c222d48ddea6d9c8ca95babe9aeb5]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=14']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['759']
- content-sha1: [d356c4168b9c64d300e8b01046b146c9f744c6a4]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:13 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=14']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3610,34 +3610,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/222
+ uri: http://172.30.0.5/api/countries/222
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e064cb52f92f5ce27073d8706c9836a485d2cfb2]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=13']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['773']
- content-sha1: [2f2faf15fec90a51d5a98526afdaa721faf7d6e0]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=13']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3645,34 +3645,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/227
+ uri: http://172.30.0.5/api/countries/227
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e255cf49bbcdd88a05f2ddfeb49bc3849371519a]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=12']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [1de804019ef77cde5d48950abc690b3bcef3d88e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=12']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3680,34 +3680,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/231
+ uri: http://172.30.0.5/api/countries/231
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
- \t \n\t \n\
+ \t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
- content-length: ['759']
- content-sha1: [ac125162958e2a195d524d3e1034d59bf08bd034]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=11']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [30073f81cf936ba417b1e20b18bc04a5ca8278bf]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=11']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
+ content-length: ['775']
status: {code: 200, message: OK}
- request:
body: null
@@ -3715,34 +3715,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/238
+ uri: http://172.30.0.5/api/countries/238
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8901dc23e3ec4a26006d8f2f9abbbbd7eb38d275]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=10']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['763']
- content-sha1: [3c5f653c11ab9f8a7b8dd1448ad50fc54b03762a]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=10']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3750,34 +3750,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/239
+ uri: http://172.30.0.5/api/countries/239
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a3200023e0cb17eeaf536e97dc9704b82e03ae2c]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=9']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['770']
- content-sha1: [8edce613533f65a4a6c34bbbc0cbbbe80a39f9d9]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=9']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3785,34 +3785,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/30
+ uri: http://172.30.0.5/api/countries/30
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [316df3818fb1815c99c2e31019c4df93e76d801b]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=8']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['775']
- content-sha1: [6c48004e8b573923606336dd4ee8ab54a1af3a3e]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=8']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3820,34 +3820,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/31
+ uri: http://172.30.0.5/api/countries/31
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [58cdb785c09de2a1762a9c4d2848951532232ec6]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=7']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [e8c183019d059ee50cf53019d90b9062be73280f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=7']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3855,34 +3855,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/32
+ uri: http://172.30.0.5/api/countries/32
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [260a63c39d67cd2bbe9442d62d12b641de70de73]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=6']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['759']
- content-sha1: [390f216388841dfc113f4f03db9436dd610e6fcf]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=6']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3890,34 +3890,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/33
+ uri: http://172.30.0.5/api/countries/33
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [3de6feeca9578bc98f93be54af84e1618ce7f751]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=5']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['752']
- content-sha1: [b8da064031c8f2f3e4486f18e2a20e064b31a685]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=5']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3925,34 +3925,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/35
+ uri: http://172.30.0.5/api/countries/35
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [f022bd6060a364a056c320ebe3de6a0e6e1089df]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=4']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['757']
- content-sha1: [7a9d731d49d5ee5d529d273aaeb032d7e593661f]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=4']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3960,34 +3960,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/38
+ uri: http://172.30.0.5/api/countries/38
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [b699a2153a823c3605a64a1a47394b429222b511]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=3']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [04b9058e9f54179f74d24acc01f26f91235b2267]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=3']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -3995,34 +3995,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/41
+ uri: http://172.30.0.5/api/countries/41
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [51f8469456b2c479f1ca5f4cfec24961ba1e3a02]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=2']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['754']
- content-sha1: [e1e6915cd8aeccfbafb7625eb48a4efd3173e9e4]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=2']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4030,34 +4030,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/54
+ uri: http://172.30.0.5/api/countries/54
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [1a6dd45151b04ecb30fd8c17dc493a30877cc103]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=1']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['753']
- content-sha1: [5ef18f114f75bb46cd2e0578a179dc6246c3e6d5]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=1']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4065,33 +4065,33 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/57
+ uri: http://172.30.0.5/api/countries/57
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [close]
+ Access-Time: ['1548807013']
+ Connection: [close]
+ Content-Sha1: [000cd42b41cf78b638ec885746b3a82198a0627e]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [84d53afdd5fc5482d08d05ee8ded8c6ec7ac801d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4099,34 +4099,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/60
+ uri: http://172.30.0.5/api/countries/60
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [0482135e4e16f396db55bc7936e5f6096d3b30ef]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=100']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['760']
- content-sha1: [fe31f86b4687197dcf7e8af7f174fa8fe826ce83]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=100']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4134,34 +4134,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/62
+ uri: http://172.30.0.5/api/countries/62
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [8c4b3ed98495d764771bd528013abd21985eb536]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=99']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [c66a0b8017bd256ee80a454dc1620a0b9f69ada7]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=99']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4169,34 +4169,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/64
+ uri: http://172.30.0.5/api/countries/64
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c3a921227b4796bccca3553b3caca0a714b99237]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=98']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [96c090f949e80d679758313c2d7c5338360db8eb]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=98']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4204,34 +4204,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/65
+ uri: http://172.30.0.5/api/countries/65
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [1be2d46ee1bfc161b225a7f4ad6ef9d862f86db7]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=97']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['774']
- content-sha1: [8e9c2bc8b819d627b479c9c9be9f0e793c41f17d]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=97']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4239,34 +4239,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/66
+ uri: http://172.30.0.5/api/countries/66
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [fc008299a5fc83fd95364a89b4e27065fc4d3b5b]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=96']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['772']
- content-sha1: [c9bd9584bfca6cecbbd0042c907619f9ea333b66]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=96']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4274,34 +4274,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/67
+ uri: http://172.30.0.5/api/countries/67
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [c6fcf97be4ea5f66ca8c02808be0c3fb015b3938]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=95']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['752']
- content-sha1: [02a2e11aad3227831be535b33173505f8ad2c0ec]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.004']
- keep-alive: ['timeout=5, max=95']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4309,34 +4309,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/70
+ uri: http://172.30.0.5/api/countries/70
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [3c1041b56a5caa1f5a6e44a6d3a2823db84f3f82]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=94']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [0fe6625f9218d89b39c843cfa8a73b4b73da16b1]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=94']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4344,34 +4344,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/71
+ uri: http://172.30.0.5/api/countries/71
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807013']
+ Connection: [Keep-Alive]
+ Content-Sha1: [238ce6982c3bfc2f5f760b4b162449e08a5a4868]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:13 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=93']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['768']
- content-sha1: [72a2ff60f208024c8ea986a24c204bc78bf4cb55]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=93']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4379,34 +4379,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/72
+ uri: http://172.30.0.5/api/countries/72
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807014']
+ Connection: [Keep-Alive]
+ Content-Sha1: [a3e8ba4eb1834075172c5d856aa1c7daa6978c4e]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:14 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=92']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['763']
- content-sha1: [2605937c68410979ea0154b998d6d74adb13cca0]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=92']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4414,34 +4414,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/77
+ uri: http://172.30.0.5/api/countries/77
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807014']
+ Connection: [Keep-Alive]
+ Content-Sha1: [565c42f8e46fa7c0ab4f65a4f9040954b9074fdd]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:14 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=91']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['756']
- content-sha1: [3e6aba67517d6bdfa651f11df1c3f72344c4d9bc]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.003']
- keep-alive: ['timeout=5, max=91']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4449,34 +4449,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/82
+ uri: http://172.30.0.5/api/countries/82
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
- \t \n\t \n\
+ \t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
- content-length: ['752']
- content-sha1: [f1943933a13deec1c3ceb74875b191f91a1d5aa4]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=90']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
+ Access-Time: ['1548807014']
+ Connection: [Keep-Alive]
+ Content-Sha1: [7ae851bafe90d0e83a8fb0de38e32816c92de6f3]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:14 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=90']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
+ content-length: ['769']
status: {code: 200, message: OK}
- request:
body: null
@@ -4484,34 +4484,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/84
+ uri: http://172.30.0.5/api/countries/84
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n \n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807014']
+ Connection: [Keep-Alive]
+ Content-Sha1: [9ab4e0e63371d94584983fa3cca894de3b323d90]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:14 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=89']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['765']
- content-sha1: [2a1a9af36651f6bad9e06db8791d2dc4397106bf]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=89']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4519,34 +4519,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/85
+ uri: http://172.30.0.5/api/countries/85
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t \n\t\
+ \n\
\t \n\t \n\
\t \n\t \n\t\
\n\t \n\
\t \n\t \n\
\t \n\t \n\
+ \ id=\"1\" xlink:href=\"http://172.30.0.5/api/languages/1\">\n\
\n \n"}
headers:
- access-time: ['1473763574']
- connection: [Keep-Alive]
+ Access-Time: ['1548807014']
+ Connection: [Keep-Alive]
+ Content-Sha1: [e18c6d8dfa0271fa79feda2f6a6c89e29a539617]
+ Content-Type: [text/xml;charset=utf-8]
+ Date: ['Wed, 30 Jan 2019 00:10:14 GMT']
+ Execution-Time: ['0.002']
+ Keep-Alive: ['timeout=5, max=88']
+ PSWS-Version: [1.6.1.23]
+ Server: [Apache/2.4.25 (Debian)]
+ Vary: [Accept-Encoding]
+ X-Powered-By: [PrestaShop Webservice]
content-length: ['755']
- content-sha1: [6d1a8f4500b5bca7b8663b00cefdad1dabefc7a3]
- content-type: [text/xml;charset=utf-8]
- date: ['Tue, 13 Sep 2016 10:46:14 GMT']
- execution-time: ['0.002']
- keep-alive: ['timeout=5, max=88']
- psws-version: [1.6.1.6]
- server: [Apache/2.4.10 (Debian)]
- vary: [Accept-Encoding]
- x-powered-by: [PrestaShop Webservice]
status: {code: 200, message: OK}
- request:
body: null
@@ -4554,34 +4554,34 @@ interactions:
Accept: ['*/*']
Accept-Encoding: ['gzip, deflate']
Connection: [keep-alive]
- Cookie: [PrestaShop-5d8d433970511c3f73f62801a1af4b33=1FIe2YdPik06ZunxEubtkZcN91QeAaPITR8VwDx9iwuaPleiE5gYiGXgXDEjtwf7IhDj4QPHCM2HJ6HrCDQpz5Z62QwG4krJzkNhLULxyPU%3D000078]
- User-Agent: [python-requests/2.4.3 CPython/2.7.9 Linux/4.4.0-36-generic]
+ Cookie: [PrestaShop-daf117f818c8eeecfa2bccccdd849a8c=c14ad55ef50df5767d950908569fa488e1146ffb152492aee562f90fed3c0079%3AKBV2aH54UES0ZSMGBNILzEBohXr0UVGSbUVuUL3lDlYlc5RSkNAYL6T95ED%2BNPzF9FBYeh5fjPBhrsuqA7XsZPAJCOFyJd%2FTmayuazPFsKI%3D]
+ User-Agent: [python-requests/2.20.0]
method: GET
- uri: http://172.24.0.3/api/countries/87
+ uri: http://172.30.0.5/api/countries/87
response:
- body: {string: !!python/unicode "\n\
- \n\n\t \n\
- \t \n\
+ body: {string: "\n\n\n\t