From a3e83c306a1bec06f55a9345e181bc0ffff130ab Mon Sep 17 00:00:00 2001 From: Serhii Chvaliuk Date: Tue, 15 Nov 2022 08:39:25 +0200 Subject: [PATCH] Source Prestashop: Migrate connector from Alpha (Python) to Beta (YAML) (#18927) Signed-off-by: Sergey Chvalyuk --- .../resources/seed/source_definitions.yaml | 6 +- .../src/main/resources/seed/source_specs.yaml | 25 +- .../connectors/source-prestashop/Dockerfile | 2 +- .../acceptance-test-config.yml | 46 +- .../integration_tests/abnormal_state.json | 255 +++++++++ .../integration_tests/acceptance.py | 7 +- .../integration_tests/catalog.json | 92 --- .../integration_tests/dump.sql.gz | Bin 117593 -> 117590 bytes .../integration_tests/expected_records.txt | 56 ++ .../integration_tests/future_state.json | 71 --- .../connectors/source-prestashop/main.py | 4 +- .../connectors/source-prestashop/setup.py | 2 +- .../source_prestashop/__init__.py | 26 +- .../source_prestashop/prestashop.yaml | 541 ++++++++++++++++++ .../source_prestashop/source.py | 187 ++---- .../source_prestashop/spec.json | 20 - .../source_prestashop/spec.yaml | 30 + docs/integrations/sources/presta-shop.md | 105 ++-- 18 files changed, 1050 insertions(+), 425 deletions(-) create mode 100644 airbyte-integrations/connectors/source-prestashop/integration_tests/abnormal_state.json delete mode 100644 airbyte-integrations/connectors/source-prestashop/integration_tests/catalog.json create mode 100644 airbyte-integrations/connectors/source-prestashop/integration_tests/expected_records.txt delete mode 100644 airbyte-integrations/connectors/source-prestashop/integration_tests/future_state.json create mode 100644 airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml delete mode 100644 airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.json create mode 100644 airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.yaml diff --git a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml index 20ffa1817673..90965a272b90 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -1182,14 +1182,14 @@ documentationUrl: https://docs.airbyte.com/integrations/sources/postmarkapp sourceType: api releaseStage: alpha -- name: Prestashop +- name: PrestaShop sourceDefinitionId: d60a46d4-709f-4092-a6b7-2457f7d455f5 dockerRepository: airbyte/source-prestashop - dockerImageTag: 0.2.0 + dockerImageTag: 0.3.0 documentationUrl: https://docs.airbyte.com/integrations/sources/presta-shop icon: prestashop.svg sourceType: api - releaseStage: alpha + releaseStage: beta - name: Primetric sourceDefinitionId: f636c3c6-4077-45ac-b109-19fc62a283c1 dockerRepository: airbyte/source-primetric diff --git a/airbyte-config/init/src/main/resources/seed/source_specs.yaml b/airbyte-config/init/src/main/resources/seed/source_specs.yaml index 0ab3010507a6..615c08ccf32a 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -11273,25 +11273,38 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-prestashop:0.2.0" +- dockerImage: "airbyte/source-prestashop:0.3.0" spec: - documentationUrl: "https://docsurl.com" + documentationUrl: "https://docs.airbyte.com/integrations/sources/presta-shop" connectionSpecification: $schema: "http://json-schema.org/draft-07/schema#" title: "PrestaShop Spec" type: "object" required: - - "url" - "access_key" + - "url" + - "start_date" properties: - url: - type: "string" - description: "Shop URL without trailing slash (domain name or IP address)" access_key: type: "string" + title: "Access Key" description: "Your PrestaShop access key. See the docs for info on how to obtain this." + order: 0 airbyte_secret: true + url: + type: "string" + title: "Shop URL" + description: "Shop URL without trailing slash." + order: 1 + start_date: + type: "string" + title: "Start date" + description: "The Start date in the format YYYY-MM-DD." + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + examples: + - "2022-01-01" + order: 2 supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] diff --git a/airbyte-integrations/connectors/source-prestashop/Dockerfile b/airbyte-integrations/connectors/source-prestashop/Dockerfile index 4059ce343928..7c96e805671c 100644 --- a/airbyte-integrations/connectors/source-prestashop/Dockerfile +++ b/airbyte-integrations/connectors/source-prestashop/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.0 +LABEL io.airbyte.version=0.3.0 LABEL io.airbyte.name=airbyte/source-prestashop diff --git a/airbyte-integrations/connectors/source-prestashop/acceptance-test-config.yml b/airbyte-integrations/connectors/source-prestashop/acceptance-test-config.yml index b6a4efe2fbf5..bb4b0f42d7ab 100644 --- a/airbyte-integrations/connectors/source-prestashop/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-prestashop/acceptance-test-config.yml @@ -1,25 +1,39 @@ # See [Source Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/source-acceptance-tests-reference) # for more information about how to configure these tests connector_image: airbyte/source-prestashop:dev -tests: +acceptance_tests: spec: - - spec_path: "source_prestashop/spec.json" - # unfortunately timeout plugin takes into account setup code as well (docker setup) - timeout_seconds: 300 + tests: + - spec_path: "source_prestashop/spec.yaml" + # unfortunately timeout plugin takes into account setup code as well (docker setup) + timeout_seconds: 300 + backward_compatibility_tests_config: + disable_for_version: "0.2.0" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" basic_read: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + expect_records: + path: "integration_tests/expected_records.txt" + extra_fields: no + exact_order: no + extra_records: yes incremental: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - future_state_path: "integration_tests/future_state.json" + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-prestashop/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-prestashop/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..b86e0ee4b536 --- /dev/null +++ b/airbyte-integrations/connectors/source-prestashop/integration_tests/abnormal_state.json @@ -0,0 +1,255 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "addresses" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "cart_rules" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "carts" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "categories" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "configurations" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "customer_messages" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "customers" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "customer_threads" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "groups" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "manufacturers" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "messages" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "order_carriers" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "order_histories" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "order_invoices" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "order_payments" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "orders" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "order_slip" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "products" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "stock_movement_reasons" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "stock_movements" + }, + "stream_state": { + "date_add": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "stores" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "suppliers" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { + "name": "tax_rule_groups" + }, + "stream_state": { + "date_upd": "2121-06-16 14:13:26" + } + } + } +] diff --git a/airbyte-integrations/connectors/source-prestashop/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-prestashop/integration_tests/acceptance.py index 1410925e0bc1..2290f4a170fc 100644 --- a/airbyte-integrations/connectors/source-prestashop/integration_tests/acceptance.py +++ b/airbyte-integrations/connectors/source-prestashop/integration_tests/acceptance.py @@ -21,7 +21,12 @@ def create_config_fixture(): secrets_path.mkdir(exist_ok=True) config_filename = str(secrets_path / "config.json") - config = {"url": "http://localhost:8080", "access_key": "59662QEPFNCJ3KFL3VCT5VNQ4NHVUF4Y", "_allow_http": True} + config = { + "url": "http://localhost:8080", + "_allow_http": True, + "access_key": "59662QEPFNCJ3KFL3VCT5VNQ4NHVUF4Y", + "start_date": "2021-05-25", + } with open(config_filename, "w+") as fp: json.dump(obj=config, fp=fp) diff --git a/airbyte-integrations/connectors/source-prestashop/integration_tests/catalog.json b/airbyte-integrations/connectors/source-prestashop/integration_tests/catalog.json deleted file mode 100644 index a4b450674fb9..000000000000 --- a/airbyte-integrations/connectors/source-prestashop/integration_tests/catalog.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "addresses", - "json_schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "id": { - "type": "integer" - }, - "id_customer": { - "type": ["null", "string"] - }, - "id_manufacturer": { - "type": ["null", "string"] - }, - "id_supplier": { - "type": ["null", "string"] - }, - "id_warehouse": { - "type": ["null", "string"] - }, - "id_country": { - "type": "string" - }, - "id_state": { - "type": ["null", "string"] - }, - "alias": { - "type": "string" - }, - "company": { - "type": ["null", "string"] - }, - "lastname": { - "type": "string" - }, - "firstname": { - "type": "string" - }, - "vat_number": { - "type": ["null", "string"] - }, - "address1": { - "type": "string" - }, - "address2": { - "type": ["null", "string"] - }, - "postcode": { - "type": ["null", "string"] - }, - "city": { - "type": "string" - }, - "other": { - "type": ["null", "string"] - }, - "phone": { - "type": ["null", "string"] - }, - "phone_mobile": { - "type": ["null", "string"] - }, - "dni": { - "type": ["null", "string"] - }, - "deleted": { - "type": "string" - }, - "date_add": { - "type": "string", - "format": "date-time" - }, - "date_upd": { - "type": "string", - "format": "date-time" - } - } - }, - "supported_sync_modes": ["incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["date_upd"] - }, - "sync_mode": "incremental", - "cursor_field": ["date_upd"], - "destination_sync_mode": "append" - } - ] -} diff --git a/airbyte-integrations/connectors/source-prestashop/integration_tests/dump.sql.gz b/airbyte-integrations/connectors/source-prestashop/integration_tests/dump.sql.gz index 7347898371adae95b7dd8387a84c0a76a3789346..5a0fbd79b7a28c6e930b60237465a89c18ab6d68 100644 GIT binary patch delta 55943 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 and returns

Your pack shipment

Packages are generally dispatched within 2 days after receipt of payment and are shipped via UPS with tracking and drop-off without signature. If you prefer delivery by UPS Extra with required signature, an additional cost will be applied, so please contact us before choosing this method. Whichever shipment choice you make, we will provide you with a link to track your package online.

Shipping fees include handling and packing fees as well as postage costs. Handling fees are fixed, whereas transport fees vary according to total weight of the shipment. We advise you to group your items in one order. We cannot group two distinct orders placed separately, and shipping fees will apply to each of them. Your package will be dispatched at your own risk, but special care is taken to protect fragile objects.

Boxes are amply sized and your items are well-protected.

"}, "emitted_at": 1667903103655} +{"stream": "countries", "data": {"id": 1, "id_zone": "1", "id_currency": "0", "call_prefix": "49", "iso_code": "DE", "active": "0", "contains_states": "0", "need_identification_number": "0", "need_zip_code": "1", "zip_code_format": "NNNNN", "display_tax_label": "1", "name": "Germany"}, "emitted_at": 1667903103703} +{"stream": "currencies", "data": {"id": 1, "names": "US Dollar", "name": "US Dollar", "symbol": "$", "iso_code": "USD", "numeric_iso_code": "840", "precision": "2", "conversion_rate": "1.000000", "deleted": "0", "active": "1", "unofficial": "0", "modified": "0", "pattern": ""}, "emitted_at": 1667903103948} +{"stream": "customer_messages", "data": {"id": 1, "id_employee": "1", "id_customer_thread": "1", "ip_address": "100.1.1.0", "message": "Hello, how are you? It is me Eugene.", "file_name": null, "user_agent": "SOme user Agent2", "private": "0", "date_add": "2020-07-25 02:42:14", "date_upd": "2021-07-02 02:42:22", "read": "1"}, "emitted_at": 1667903103972} +{"stream": "customer_threads", "data": {"id": 1, "id_lang": "1", "id_shop": "1", "id_customer": "1", "id_order": "1", "id_product": "1", "id_contact": "1", "email": "some@mail.com", "token": null, "status": "open", "date_add": "2021-02-25 02:39:00", "date_upd": "2021-06-25 02:39:07", "associations": {"customer_messages": [{"id": "1"}, {"id": "2"}]}}, "emitted_at": 1667903104001} +{"stream": "customers", "data": {"id": 1, "id_default_group": "3", "id_lang": "1", "newsletter_date_add": "0000-00-00 00:00:00", "ip_registration_newsletter": "", "last_passwd_gen": "2021-07-23 17:18:07", "secure_key": "490f551646c7f55281a5be6e9d70f121", "deleted": "0", "passwd": "prestashop", "lastname": "Anonymous", "firstname": "Anonymous", "email": "anonymous@psgdpr.com", "id_gender": "1", "birthday": "0000-00-00", "newsletter": "0", "optin": "1", "website": "", "company": "", "siret": "", "ape": "", "outstanding_allow_amount": "0.000000", "show_public_prices": "0", "id_risk": "0", "max_payment_days": "0", "active": "0", "note": "", "is_guest": "0", "id_shop": "1", "id_shop_group": "1", "date_add": "2021-07-23 23:18:07", "date_upd": "2021-07-23 23:18:07", "reset_password_token": "", "reset_password_validity": "2025-01-01 10:30:00", "associations": {"groups": [{"id": "3"}]}}, "emitted_at": 1667903104030} +{"stream": "deliveries", "data": {"id": 1, "id_carrier": "2", "id_range_price": "0", "id_range_weight": "1", "id_zone": "1", "id_shop": "", "id_shop_group": "", "price": "5.000000"}, "emitted_at": 1667903104066} +{"stream": "employees", "data": {"id": 1, "id_lang": "1", "last_passwd_gen": "2021-07-23 17:17:28", "stats_date_from": "2021-06-23", "stats_date_to": "2021-07-23", "stats_compare_from": "2021-06-23", "stats_compare_to": "2021-07-23", "passwd": "$2y$10$BOkpSr6te9uvu97I05XI3u8hMMowukHd0PWNTR6qjTcA/YOlYc2ja", "lastname": "Kulak", "firstname": "Eugene", "email": "integration-test@airbyte.io", "active": "1", "id_profile": "1", "bo_color": null, "default_tab": "1", "bo_theme": "default", "bo_css": "theme.css", "bo_width": "0", "bo_menu": "1", "stats_compare_option": "1", "preselect_date_range": null, "id_last_order": "0", "id_last_customer_message": "0", "id_last_customer": "0", "reset_password_token": null, "reset_password_validity": "2025-01-01 10:30:00"}, "emitted_at": 1667903104106} +{"stream": "groups", "data": {"id": 1, "reduction": "0.00", "price_display_method": "1", "show_prices": "1", "date_add": "2021-07-23 23:17:27", "date_upd": "2021-07-23 23:17:28", "name": "Visitor"}, "emitted_at": 1667903104146} +{"stream": "guests", "data": {"id": 2, "id_customer": "0", "id_operating_system": "0", "id_web_browser": "0", "javascript": "0", "screen_resolution_x": "0", "screen_resolution_y": "0", "screen_color": "0", "sun_java": "0", "adobe_flash": "0", "adobe_director": "0", "apple_quicktime": "0", "real_player": "0", "windows_media": "0", "accept_language": "", "mobile_theme": "0"}, "emitted_at": 1667903104191} +{"stream": "image_types", "data": {"id": 1, "name": "cart_default", "width": "125", "height": "125", "categories": "0", "products": "1", "manufacturers": "0", "suppliers": "0", "stores": "0"}, "emitted_at": 1667903104232} +{"stream": "languages", "data": {"id": 1, "name": "English (English)", "iso_code": "en", "locale": "en-US", "language_code": "en-us", "active": "1", "is_rtl": "0", "date_format_lite": "m/d/Y", "date_format_full": "m/d/Y H:i:s"}, "emitted_at": 1667903104272} +{"stream": "manufacturers", "data": {"id": 1, "active": "1", "link_rewrite": "studio-design", "name": "Studio Design", "date_add": "2021-07-23 23:18:41", "date_upd": "2021-07-23 23:18:41", "description": "

Studio Design offers a range of items from ready-to-wear collections to contemporary objects. The brand has been presenting new ideas and trends since its creation in 2012.

", "short_description": "", "meta_title": "", "meta_description": "", "meta_keywords": "", "associations": {"addresses": [{"id": "4"}]}}, "emitted_at": 1667903104313} +{"stream": "messages", "data": {"id": 1, "id_cart": "1", "id_order": "1", "id_customer": "2", "id_employee": "1", "message": "This message is about order ", "private": "1", "date_add": "2021-06-25 04:20:13"}, "emitted_at": 1667903104358} +{"stream": "order_carriers", "data": {"id": 1, "id_order": "1", "id_carrier": "2", "id_order_invoice": "0", "weight": "0.000000", "shipping_cost_tax_excl": "2.000000", "shipping_cost_tax_incl": "2.000000", "tracking_number": "", "date_add": "2021-07-23 23:18:42"}, "emitted_at": 1667903104401} +{"stream": "order_details", "data": {"id": 1, "id_order": "1", "product_id": "1", "product_attribute_id": "1", "product_quantity_reinjected": "0", "group_reduction": "0.00", "discount_quantity_applied": "0", "download_hash": "", "download_deadline": "0000-00-00 00:00:00", "id_order_invoice": "0", "id_warehouse": "0", "id_shop": "1", "id_customization": "0", "product_name": "Hummingbird printed t-shirt - Color : White, Size : S", "product_quantity": "1", "product_quantity_in_stock": "1", "product_quantity_return": "0", "product_quantity_refunded": "0", "product_price": "23.900000", "reduction_percent": "0.00", "reduction_amount": "0.000000", "reduction_amount_tax_incl": "0.000000", "reduction_amount_tax_excl": "0.000000", "product_quantity_discount": "0.000000", "product_ean13": "", "product_isbn": "", "product_upc": "", "product_mpn": "", "product_reference": "demo_1", "product_supplier_reference": "", "product_weight": "0.000000", "tax_computation_method": "0", "id_tax_rules_group": "0", "ecotax": "0.000000", "ecotax_tax_rate": "0.000", "download_nb": "0", "unit_price_tax_incl": "23.900000", "unit_price_tax_excl": "23.900000", "total_price_tax_incl": "23.900000", "total_price_tax_excl": "23.900000", "total_shipping_price_tax_excl": "0.000000", "total_shipping_price_tax_incl": "0.000000", "purchase_supplier_price": "0.000000", "original_product_price": "23.900000", "original_wholesale_price": "0.000000", "total_refunded_tax_excl": "0.000000", "total_refunded_tax_incl": "0.000000"}, "emitted_at": 1667903104450} +{"stream": "order_histories", "data": {"id": 1, "id_employee": "0", "id_order_state": "1", "id_order": "1", "date_add": "2021-07-23 23:18:42"}, "emitted_at": 1667903104490} +{"stream": "order_invoices", "data": {"id": 1, "id_order": "1", "number": "1000", "delivery_number": "1", "delivery_date": "2021-08-25 03:08:28", "total_discount_tax_excl": "23.000000", "total_discount_tax_incl": "25.000000", "total_paid_tax_excl": "11.000000", "total_paid_tax_incl": "33.000000", "total_products": "1.000000", "total_products_wt": "0.000000", "total_shipping_tax_excl": "0.000000", "total_shipping_tax_incl": "0.000000", "shipping_tax_computation_method": "1", "total_wrapping_tax_excl": "0.000000", "total_wrapping_tax_incl": "0.000000", "shop_address": "Test address", "note": "some note", "date_add": "2021-05-25 03:09:23"}, "emitted_at": 1667903104525} +{"stream": "order_payments", "data": {"id": 1, "order_reference": "1000", "id_currency": "1", "amount": "30.000000", "payment_method": "1", "conversion_rate": "1.000000", "transaction_id": "1", "card_number": "12343243432434", "card_brand": "Visa", "card_expiration": "10-22", "card_holder": "Customer", "date_add": "2021-07-09 04:22:37"}, "emitted_at": 1667903104553} +{"stream": "order_slip", "data": {"id": 1, "id_customer": "1", "id_order": "1", "conversion_rate": "1.000000", "total_products_tax_excl": "30.000000", "total_products_tax_incl": "20.000000", "total_shipping_tax_excl": "11.000000", "total_shipping_tax_incl": "12.000000", "amount": "10.000000", "shipping_cost": "0", "shipping_cost_amount": "15.000000", "partial": "1", "date_add": "2021-05-25 04:25:48", "date_upd": "2021-06-25 04:25:53", "order_slip_type": "0"}, "emitted_at": 1667903104580} +{"stream": "order_states", "data": {"id": 2, "unremovable": "1", "delivery": "0", "hidden": "0", "send_email": "1", "module_name": "", "invoice": "1", "color": "#3498D8", "logable": "1", "shipped": "0", "paid": "1", "pdf_delivery": "0", "pdf_invoice": "1", "deleted": "0", "name": "Payment accepted", "template": "payment"}, "emitted_at": 1667903104608} +{"stream": "orders", "data": {"id": 1, "id_address_delivery": "5", "id_address_invoice": "5", "id_cart": "1", "id_currency": "1", "id_lang": "1", "id_customer": "2", "id_carrier": "2", "current_state": "6", "module": "ps_checkpayment", "invoice_number": "0", "invoice_date": "0000-00-00 00:00:00", "delivery_number": "0", "delivery_date": "0000-00-00 00:00:00", "valid": "0", "date_add": "2021-07-23 23:18:42", "date_upd": "2021-07-23 23:18:42", "shipping_number": "", "id_shop_group": "1", "id_shop": "1", "secure_key": "b44a6d9efd7a0076a0fbce6b15eaf3b1", "payment": "Payment by check", "recyclable": "0", "gift": "0", "gift_message": "", "mobile_theme": "0", "total_discounts": "0.000000", "total_discounts_tax_incl": "0.000000", "total_discounts_tax_excl": "0.000000", "total_paid": "61.800000", "total_paid_tax_incl": "61.800000", "total_paid_tax_excl": "61.800000", "total_paid_real": "0.000000", "total_products": "59.800000", "total_products_wt": "59.800000", "total_shipping": "2.000000", "total_shipping_tax_incl": "2.000000", "total_shipping_tax_excl": "2.000000", "carrier_tax_rate": "0.000", "total_wrapping": "0.000000", "total_wrapping_tax_incl": "0.000000", "total_wrapping_tax_excl": "0.000000", "round_mode": "0", "round_type": "0", "conversion_rate": "1.000000", "reference": "XKBKNABJK", "associations": {"order_rows": [{"id": "1", "product_id": "1", "product_attribute_id": "1", "product_quantity": "1", "product_name": "Hummingbird printed t-shirt - Color : White, Size : S", "product_reference": "demo_1", "product_ean13": "", "product_isbn": "", "product_upc": "", "product_price": "23.900000", "id_customization": "0", "unit_price_tax_incl": "23.900000", "unit_price_tax_excl": "23.900000"}, {"id": "2", "product_id": "2", "product_attribute_id": "9", "product_quantity": "1", "product_name": "Hummingbird printed sweater - Color : White, Size : S", "product_reference": "demo_3", "product_ean13": "", "product_isbn": "", "product_upc": "", "product_price": "35.900000", "id_customization": "0", "unit_price_tax_incl": "35.900000", "unit_price_tax_excl": "35.900000"}]}}, "emitted_at": 1667903104644} +{"stream": "price_ranges", "data": {"id": 1, "id_carrier": "2", "delimiter1": "0.000000", "delimiter2": "10000.000000"}, "emitted_at": 1667903104689} +{"stream": "product_customization_fields", "data": {"id": 1, "id_product": "19", "type": "1", "required": "1", "is_module": "0", "is_deleted": "0", "name": "Type your text here"}, "emitted_at": 1667903104729} +{"stream": "product_feature_values", "data": {"id": 1, "id_feature": "1", "custom": "0", "value": "Polyester"}, "emitted_at": 1667903104770} +{"stream": "product_features", "data": {"id": 1, "position": "0", "name": "Composition"}, "emitted_at": 1667903104811} +{"stream": "product_option_values", "data": {"id": 1, "id_attribute_group": "1", "color": "", "position": "0", "name": "S"}, "emitted_at": 1667903104852} +{"stream": "product_options", "data": {"id": 1, "is_color_group": "0", "group_type": "select", "position": "0", "name": "Size", "public_name": "Size", "associations": {"product_option_values": [{"id": "1"}, {"id": "2"}, {"id": "3"}, {"id": "4"}]}}, "emitted_at": 1667903104883} +{"stream": "product_suppliers", "data": {"id": 1, "id_product": "19", "id_product_attribute": "0", "id_supplier": "1", "id_currency": "1", "product_supplier_reference": "", "product_supplier_price_te": "0.000000"}, "emitted_at": 1667903104920} +{"stream": "products", "data": {"id": 1, "id_manufacturer": "1", "id_supplier": "0", "id_category_default": "4", "new": null, "cache_default_attribute": "1", "id_default_image": "1", "id_default_combination": "1", "id_tax_rules_group": "9", "position_in_category": "1", "manufacturer_name": "Studio Design", "quantity": "0", "type": "simple", "id_shop_default": "1", "reference": "demo_1", "supplier_reference": "", "location": "", "width": "0.000000", "height": "0.000000", "depth": "0.000000", "weight": "0.300000", "quantity_discount": "0", "ean13": "", "isbn": "", "upc": "", "mpn": "", "cache_is_pack": "0", "cache_has_attachments": "0", "is_virtual": "0", "state": "1", "additional_delivery_times": "1", "delivery_in_stock": "", "delivery_out_stock": "", "on_sale": "0", "online_only": "0", "ecotax": "0.000000", "minimal_quantity": "1", "low_stock_threshold": null, "low_stock_alert": "0", "price": "23.900000", "wholesale_price": "0.000000", "unity": "", "unit_price_ratio": "0.000000", "additional_shipping_cost": "0.000000", "customizable": "0", "text_fields": "0", "uploadable_files": "0", "active": "1", "redirect_type": "301-category", "id_type_redirected": "0", "available_for_order": "1", "available_date": "0000-00-00", "show_condition": "0", "condition": "new", "show_price": "1", "indexed": "1", "visibility": "both", "advanced_stock_management": "0", "date_add": "2021-07-23 23:18:42", "date_upd": "2021-07-23 23:18:42", "pack_stock_type": "3", "meta_description": "", "meta_keywords": "", "meta_title": "", "link_rewrite": "hummingbird-printed-t-shirt", "name": "Hummingbird printed t-shirt", "description": "

Symbol of lightness and delicacy, the hummingbird evokes curiosity and joy. Studio Design' PolyFaune collection features classic products with colorful patterns, inspired by the traditional japanese origamis. To wear with a chino or jeans. The sublimation textile printing process provides an exceptional color rendering and a color, guaranteed overtime.

", "description_short": "

Regular fit, round neckline, short sleeves. Made of extra long staple pima cotton.

\r\n

", "available_now": "", "available_later": "", "associations": {"categories": [{"id": "2"}, {"id": "3"}, {"id": "4"}], "images": [{"id": "1"}, {"id": "2"}], "combinations": [{"id": "1"}, {"id": "2"}, {"id": "3"}, {"id": "4"}, {"id": "5"}, {"id": "6"}, {"id": "7"}, {"id": "8"}], "product_option_values": [{"id": "1"}, {"id": "8"}, {"id": "11"}, {"id": "2"}, {"id": "3"}, {"id": "4"}], "product_features": [{"id": "1", "id_feature_value": "4"}, {"id": "2", "id_feature_value": "8"}], "stock_availables": [{"id": "1", "id_product_attribute": "0"}, {"id": "20", "id_product_attribute": "1"}, {"id": "21", "id_product_attribute": "2"}, {"id": "22", "id_product_attribute": "3"}, {"id": "23", "id_product_attribute": "4"}, {"id": "24", "id_product_attribute": "5"}, {"id": "25", "id_product_attribute": "6"}, {"id": "26", "id_product_attribute": "7"}, {"id": "27", "id_product_attribute": "8"}]}}, "emitted_at": 1667903105015} +{"stream": "shop_groups", "data": {"id": 1, "name": "Default", "share_customer": "0", "share_order": "0", "share_stock": "0", "active": "1", "deleted": "0"}, "emitted_at": 1667903105082} +{"stream": "shop_urls", "data": {"id": 1, "id_shop": "1", "active": "1", "main": "1", "domain": "localhost:8080", "domain_ssl": "localhost:8080", "physical_uri": "/", "virtual_uri": ""}, "emitted_at": 1667903105120} +{"stream": "shops", "data": {"id": 1, "id_shop_group": "1", "id_category": "2", "active": "1", "deleted": "0", "name": "Airbyte", "theme_name": "classic"}, "emitted_at": 1667903105158} +{"stream": "specific_price_rules", "data": {"id": 2, "id_shop": "1", "id_country": "0", "id_currency": "0", "id_group": "0", "name": "Test price rule 2", "from_quantity": "1", "price": "-1.000000", "reduction": "1.000000", "reduction_tax": "0", "reduction_type": "amount", "from": "0000-00-00 00:00:00", "to": "0000-00-00 00:00:00"}, "emitted_at": 1667903105199} +{"stream": "specific_prices", "data": {"id": 1, "id_shop_group": "0", "id_shop": "0", "id_cart": "0", "id_product": "1", "id_product_attribute": "0", "id_currency": "0", "id_country": "0", "id_group": "0", "id_customer": "0", "id_specific_price_rule": "0", "price": "-1.000000", "from_quantity": "1", "reduction": "0.200000", "reduction_tax": "1", "reduction_type": "percentage", "from": "0000-00-00 00:00:00", "to": "0000-00-00 00:00:00"}, "emitted_at": 1667903105241} +{"stream": "states", "data": {"id": 89, "id_zone": "2", "id_country": "4", "iso_code": "ON", "name": "Ontario", "active": "1"}, "emitted_at": 1667903105781} +{"stream": "stock_availables", "data": {"id": 1, "id_product": "1", "id_product_attribute": "0", "id_shop": "1", "id_shop_group": "0", "quantity": "2958", "depends_on_stock": "0", "out_of_stock": "2", "location": ""}, "emitted_at": 1667903106787} +{"stream": "stock_movement_reasons", "data": {"id": 1, "sign": "1", "deleted": "0", "date_add": "2021-07-23 23:17:27", "date_upd": "2021-07-23 23:17:27", "name": "Increase"}, "emitted_at": 1667903106900} +{"stream": "stock_movements", "data": {"id": 1, "id_product": "", "id_product_attribute": "", "id_warehouse": "", "id_currency": "", "management_type": null, "id_employee": "1", "id_stock": "20", "id_stock_mvt_reason": "11", "id_order": "", "id_supply_order": "", "product_name": false, "ean13": null, "upc": null, "reference": null, "mpn": null, "physical_quantity": "500", "sign": "1", "last_wa": "0.000000", "current_wa": "0.000000", "price_te": "0.000000", "date_add": "2021-07-24 20:28:51"}, "emitted_at": 1667903107797} +{"stream": "stores", "data": {"id": 1, "id_country": "21", "id_state": "12", "hours": " [[\"09:00AM - 07:00PM\"],[\"09:00AM - 07:00PM\"],[\"09:00AM - 07:00PM\"],[\"09:00AM - 07:00PM\"],[\"09:00AM - 07:00PM\"],[\"10:00AM - 04:00PM\"],[\"10:00AM - 04:00PM\"]]", "postcode": "33135", "city": "Miami", "latitude": "25.76500500", "longitude": "-80.24379700", "phone": "", "fax": "", "email": "", "active": "1", "date_add": "2021-07-23 23:18:43", "date_upd": "2021-07-23 23:18:43", "name": "Dade County", "address1": "3030 SW 8th St Miami", "address2": "", "note": ""}, "emitted_at": 1667903107872} +{"stream": "suppliers", "data": {"id": 1, "link_rewrite": "some-cool-supplier", "name": "Some cool supplier", "active": "1", "date_add": "2021-07-24 20:26:22", "date_upd": "2021-07-24 20:26:22", "description": "

This is a reach text.

\n

bold colored

\n

italic

\n

underscored

\n

strikeout

\n
\n

test quotes

\n

another line

\n
\n

HEADER 1

\n

header 2

", "meta_title": "", "meta_description": "", "meta_keywords": "Tag1, Tag2, Tag3, Tag4, Tag4, Tag5, Tag6, Tag7, Tag8, Tag9, Tag10, Tag11"}, "emitted_at": 1667903107922} +{"stream": "tags", "data": {"id": 1, "id_lang": "1", "name": "Crazy"}, "emitted_at": 1667903107957} +{"stream": "tax_rule_groups", "data": {"id": 1, "name": "US-AL Rate (4%)", "active": "1", "deleted": "0", "date_add": "2021-07-23 23:17:28", "date_upd": "2021-07-23 23:17:28"}, "emitted_at": 1667903108794} +{"stream": "tax_rules", "data": {"id": 1, "id_tax_rules_group": "1", "id_state": "4", "id_country": "21", "zipcode_from": "0", "zipcode_to": "0", "id_tax": "1", "behavior": "1", "description": ""}, "emitted_at": 1667903108948} +{"stream": "taxes", "data": {"id": 1, "rate": "4.000", "active": "1", "deleted": "0", "name": "Sales-taxes US-AL 4%"}, "emitted_at": 1667903109059} +{"stream": "translated_configurations", "data": {"id": 38, "value": "#IN", "date_add": "2021-07-25 20:30:30", "date_upd": null, "name": "PS_INVOICE_PREFIX", "id_shop_group": "", "id_shop": ""}, "emitted_at": 1667903109162} +{"stream": "weight_ranges", "data": {"id": 1, "id_carrier": "2", "delimiter1": "0.000000", "delimiter2": "10000.000000"}, "emitted_at": 1667903109211} +{"stream": "zones", "data": {"id": 1, "name": "Europe", "active": "1"}, "emitted_at": 1667903109268} diff --git a/airbyte-integrations/connectors/source-prestashop/integration_tests/future_state.json b/airbyte-integrations/connectors/source-prestashop/integration_tests/future_state.json deleted file mode 100644 index 436fc6fde395..000000000000 --- a/airbyte-integrations/connectors/source-prestashop/integration_tests/future_state.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "addresses": { - "date_upd": "2121-06-16 14:13:26" - }, - "cart_rules": { - "date_upd": "2121-06-16 14:13:26" - }, - "carts": { - "date_upd": "2121-06-16 14:13:26" - }, - "categories": { - "date_upd": "2121-06-16 14:13:26" - }, - "customer_messages": { - "date_upd": "2121-06-16 14:13:26" - }, - "customer_threads": { - "date_upd": "2121-06-16 14:13:26" - }, - "groups": { - "date_upd": "2121-06-16 14:13:26" - }, - "customers": { - "date_upd": "2121-06-16 14:13:26" - }, - "configurations": { - "date_upd": "2121-06-16 14:13:26" - }, - "manufacturers": { - "date_upd": "2121-06-16 14:13:26" - }, - "messages": { - "date_add": "2121-06-16 14:13:26" - }, - "order_carriers": { - "date_add": "2121-06-16 14:13:26" - }, - "order_histories": { - "date_add": "2121-06-16 14:13:26" - }, - "order_invoices": { - "date_add": "2121-06-16 14:13:26" - }, - "order_payments": { - "date_add": "2121-06-16 14:13:26" - }, - "order_slip": { - "date_upd": "2121-06-16 14:13:26" - }, - "orders": { - "date_upd": "2121-06-16 14:13:26" - }, - "products": { - "date_upd": "2121-06-16 14:13:26" - }, - "stock_movement_reasons": { - "date_upd": "2121-06-16 14:13:26" - }, - "stock_movements": { - "date_add": "2121-06-16 14:13:26" - }, - "stores": { - "date_upd": "2121-06-16 14:13:26" - }, - "suppliers": { - "date_upd": "2121-06-16 14:13:26" - }, - "tax_rule_groups": { - "date_upd": "2121-06-16 14:13:26" - } -} diff --git a/airbyte-integrations/connectors/source-prestashop/main.py b/airbyte-integrations/connectors/source-prestashop/main.py index 09ab0e9706e8..ff1dbd5a8190 100644 --- a/airbyte-integrations/connectors/source-prestashop/main.py +++ b/airbyte-integrations/connectors/source-prestashop/main.py @@ -6,8 +6,8 @@ import sys from airbyte_cdk.entrypoint import launch -from source_prestashop import SourcePrestaShop +from source_prestashop import SourcePrestashop if __name__ == "__main__": - source = SourcePrestaShop() + source = SourcePrestashop() launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-prestashop/setup.py b/airbyte-integrations/connectors/source-prestashop/setup.py index 933ed04edaac..d84be3b868b9 100644 --- a/airbyte-integrations/connectors/source-prestashop/setup.py +++ b/airbyte-integrations/connectors/source-prestashop/setup.py @@ -21,7 +21,7 @@ author_email="contact@airbyte.io", packages=find_packages(), install_requires=MAIN_REQUIREMENTS, - package_data={"": ["*.json", "schemas/*.json", "schemas/shared/*.json"]}, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, extras_require={ "tests": TEST_REQUIREMENTS, }, diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/__init__.py b/airbyte-integrations/connectors/source-prestashop/source_prestashop/__init__.py index c78c76823e68..4809f5c8e4e6 100644 --- a/airbyte-integrations/connectors/source-prestashop/source_prestashop/__init__.py +++ b/airbyte-integrations/connectors/source-prestashop/source_prestashop/__init__.py @@ -1,28 +1,8 @@ # -# MIT License -# -# Copyright (c) 2020 Airbyte -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -from .source import SourcePrestaShop +from .source import SourcePrestashop -__all__ = ["SourcePrestaShop"] +__all__ = ["SourcePrestashop"] diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml b/airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml new file mode 100644 index 000000000000..9b743fea3b85 --- /dev/null +++ b/airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml @@ -0,0 +1,541 @@ +version: "0.3.0" + +definitions: + selector: + extractor: + field_pointer: ["{{ options['data_key'] }}"] + requester: + url_base: "{{ config['url'] }}/api/" + http_method: "GET" + authenticator: + type: BasicHttpAuthenticator + username: "{{ config['access_key'] }}" + request_options_provider: + request_headers: + Output-Format: JSON + request_parameters: + display: full + limit: "'{{ next_page_token['next_page_token'] or '0' }},50'" + retriever: + record_selector: + $ref: "*ref(definitions.selector)" + paginator: + type: DefaultPaginator + url_base: "*ref(definitions.requester.url_base)" + pagination_strategy: + type: "OffsetIncrement" + page_size: 50 + requester: + $ref: "*ref(definitions.requester)" + base_stream: + retriever: + $ref: "*ref(definitions.retriever)" + base_incremental_stream: + $ref: "*ref(definitions.base_stream)" + stream_cursor_field: "date_upd" + checkpoint_interval: 500 + retriever: + $ref: "*ref(definitions.retriever)" + stream_slicer: + type: "DatetimeStreamSlicer" + start_datetime: + datetime: "{{ config['start_date'] }}" + datetime_format: "%Y-%m-%d" + end_datetime: + datetime: "{{ now_utc() }}" + datetime_format: "%Y-%m-%d %H:%M:%S.%f+00:00" + step: "1y" + datetime_format: "%Y-%m-%d %H:%M:%S" + requester: + $ref: "*ref(definitions.requester)" + request_options_provider: + request_headers: + $ref: "*ref(definitions.requester.request_options_provider.request_headers)" + request_parameters: + $ref: "*ref(definitions.requester.request_options_provider.request_parameters)" + date: "1" + sort: "[{{ options['cursor_field'] }}_ASC,{{ options['primary_key'] }}_ASC]" + "filter[{{ options['cursor_field'] }}]": "[{{ stream_slice['start_time'] }},{{ stream_slice['end_time'] }}]" + addresses_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "addresses" + path: "/addresses" + data_key: "addresses" + primary_key: "id" + cursor_field: "date_upd" + carriers_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "carriers" + path: "/carriers" + data_key: "carriers" + primary_key: "id" + cart_rules_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "cart_rules" + path: "/cart_rules" + data_key: "cart_rules" + primary_key: "id" + cursor_field: "date_upd" + carts_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "carts" + path: "/carts" + data_key: "carts" + primary_key: "id" + cursor_field: "date_upd" + categories_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "categories" + path: "/categories" + data_key: "categories" + primary_key: "id" + cursor_field: "date_upd" + combinations_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "combinations" + path: "/combinations" + data_key: "combinations" + primary_key: "id" + configurations_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "configurations" + path: "/configurations" + data_key: "configurations" + primary_key: "id" + cursor_field: "date_upd" + contacts_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "contacts" + path: "/contacts" + data_key: "contacts" + primary_key: "id" + content_management_system_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "content_management_system" + path: "/content_management_system" + data_key: "content_management_system" + primary_key: "id" + countries_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "countries" + path: "/countries" + data_key: "countries" + primary_key: "id" + currencies_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "currencies" + path: "/currencies" + data_key: "currencies" + primary_key: "id" + customer_messages_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "customer_messages" + path: "/customer_messages" + data_key: "customer_messages" + primary_key: "id" + cursor_field: "date_upd" + customers_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "customers" + path: "/customers" + data_key: "customers" + primary_key: "id" + cursor_field: "date_upd" + customer_threads_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "customer_threads" + path: "/customer_threads" + data_key: "customer_threads" + primary_key: "id" + cursor_field: "date_upd" + deliveries_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "deliveries" + path: "/deliveries" + data_key: "deliveries" + primary_key: "id" + employees_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "employees" + path: "/employees" + data_key: "employees" + primary_key: "id" + groups_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "groups" + path: "/groups" + data_key: "groups" + primary_key: "id" + cursor_field: "date_upd" + guests_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "guests" + path: "/guests" + data_key: "guests" + primary_key: "id" + image_types_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "image_types" + path: "/image_types" + data_key: "image_types" + primary_key: "id" + languages_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "languages" + path: "/languages" + data_key: "languages" + primary_key: "id" + manufacturers_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "manufacturers" + path: "/manufacturers" + data_key: "manufacturers" + primary_key: "id" + cursor_field: "date_upd" + messages_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "messages" + path: "/messages" + data_key: "messages" + primary_key: "id" + cursor_field: "date_add" + order_carriers_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "order_carriers" + path: "/order_carriers" + data_key: "order_carriers" + primary_key: "id" + cursor_field: "date_add" + order_details_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "order_details" + path: "/order_details" + data_key: "order_details" + primary_key: "id" + order_histories_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "order_histories" + path: "/order_histories" + data_key: "order_histories" + primary_key: "id" + cursor_field: "date_add" + order_invoices_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "order_invoices" + path: "/order_invoices" + data_key: "order_invoices" + primary_key: "id" + cursor_field: "date_add" + order_payments_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "order_payments" + path: "/order_payments" + data_key: "order_payments" + primary_key: "id" + cursor_field: "date_add" + orders_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "orders" + path: "/orders" + data_key: "orders" + primary_key: "id" + cursor_field: "date_upd" + order_slip_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "order_slip" + path: "/order_slip" + data_key: "order_slips" + primary_key: "id" + cursor_field: "date_upd" + order_states_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "order_states" + path: "/order_states" + data_key: "order_states" + primary_key: "id" + price_ranges_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "price_ranges" + path: "/price_ranges" + data_key: "price_ranges" + primary_key: "id" + product_customization_fields_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_customization_fields" + path: "/product_customization_fields" + data_key: "customization_fields" + primary_key: "id" + product_features_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_features" + path: "/product_features" + data_key: "product_features" + primary_key: "id" + product_feature_values_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_feature_values" + path: "/product_feature_values" + data_key: "product_feature_values" + primary_key: "id" + product_options_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_options" + path: "/product_options" + data_key: "product_options" + primary_key: "id" + product_option_values_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_option_values" + path: "/product_option_values" + data_key: "product_option_values" + primary_key: "id" + products_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "products" + path: "/products" + data_key: "products" + primary_key: "id" + cursor_field: "date_upd" + product_suppliers_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "product_suppliers" + path: "/product_suppliers" + data_key: "product_suppliers" + primary_key: "id" + shop_groups_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "shop_groups" + path: "/shop_groups" + data_key: "shop_groups" + primary_key: "id" + shops_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "shops" + path: "/shops" + data_key: "shops" + primary_key: "id" + shop_urls_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "shop_urls" + path: "/shop_urls" + data_key: "shop_urls" + primary_key: "id" + specific_price_rules_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "specific_price_rules" + path: "/specific_price_rules" + data_key: "specific_price_rules" + primary_key: "id" + specific_prices_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "specific_prices" + path: "/specific_prices" + data_key: "specific_prices" + primary_key: "id" + states_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "states" + path: "/states" + data_key: "states" + primary_key: "id" + stock_availables_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "stock_availables" + path: "/stock_availables" + data_key: "stock_availables" + primary_key: "id" + stock_movement_reasons_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "stock_movement_reasons" + path: "/stock_movement_reasons" + data_key: "stock_movement_reasons" + primary_key: "id" + cursor_field: "date_upd" + stock_movements_stream: + $ref: "*ref(definitions.base_incremental_stream)" + stream_cursor_field: "date_add" + $options: + name: "stock_movements" + path: "/stock_movements" + data_key: "stock_mvts" + primary_key: "id" + cursor_field: "date_add" + stores_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "stores" + path: "/stores" + data_key: "stores" + primary_key: "id" + cursor_field: "date_upd" + suppliers_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "suppliers" + path: "/suppliers" + data_key: "suppliers" + primary_key: "id" + cursor_field: "date_upd" + tags_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "tags" + path: "/tags" + data_key: "tags" + primary_key: "id" + taxes_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "taxes" + path: "/taxes" + data_key: "taxes" + primary_key: "id" + tax_rule_groups_stream: + $ref: "*ref(definitions.base_incremental_stream)" + $options: + name: "tax_rule_groups" + path: "/tax_rule_groups" + data_key: "tax_rule_groups" + primary_key: "id" + cursor_field: "date_upd" + tax_rules_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "tax_rules" + path: "/tax_rules" + data_key: "tax_rules" + primary_key: "id" + translated_configurations_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "translated_configurations" + path: "/translated_configurations" + data_key: "translated_configurations" + primary_key: "id" + weight_ranges_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "weight_ranges" + path: "/weight_ranges" + data_key: "weight_ranges" + primary_key: "id" + zones_stream: + $ref: "*ref(definitions.base_stream)" + $options: + name: "zones" + path: "/zones" + data_key: "zones" + primary_key: "id" + +streams: + - "*ref(definitions.addresses_stream)" + - "*ref(definitions.carriers_stream)" + - "*ref(definitions.cart_rules_stream)" + - "*ref(definitions.carts_stream)" + - "*ref(definitions.categories_stream)" + - "*ref(definitions.combinations_stream)" + - "*ref(definitions.configurations_stream)" + - "*ref(definitions.contacts_stream)" + - "*ref(definitions.content_management_system_stream)" + - "*ref(definitions.countries_stream)" + - "*ref(definitions.currencies_stream)" + - "*ref(definitions.customer_messages_stream)" + - "*ref(definitions.customers_stream)" + - "*ref(definitions.customer_threads_stream)" + - "*ref(definitions.deliveries_stream)" + - "*ref(definitions.employees_stream)" + - "*ref(definitions.groups_stream)" + - "*ref(definitions.guests_stream)" + - "*ref(definitions.image_types_stream)" + - "*ref(definitions.languages_stream)" + - "*ref(definitions.manufacturers_stream)" + - "*ref(definitions.messages_stream)" + - "*ref(definitions.order_carriers_stream)" + - "*ref(definitions.order_details_stream)" + - "*ref(definitions.order_histories_stream)" + - "*ref(definitions.order_invoices_stream)" + - "*ref(definitions.order_payments_stream)" + - "*ref(definitions.orders_stream)" + - "*ref(definitions.order_slip_stream)" + - "*ref(definitions.order_states_stream)" + - "*ref(definitions.price_ranges_stream)" + - "*ref(definitions.product_customization_fields_stream)" + - "*ref(definitions.product_features_stream)" + - "*ref(definitions.product_feature_values_stream)" + - "*ref(definitions.product_options_stream)" + - "*ref(definitions.product_option_values_stream)" + - "*ref(definitions.products_stream)" + - "*ref(definitions.product_suppliers_stream)" + - "*ref(definitions.shop_groups_stream)" + - "*ref(definitions.shops_stream)" + - "*ref(definitions.shop_urls_stream)" + - "*ref(definitions.specific_price_rules_stream)" + - "*ref(definitions.specific_prices_stream)" + - "*ref(definitions.states_stream)" + - "*ref(definitions.stock_availables_stream)" + - "*ref(definitions.stock_movement_reasons_stream)" + - "*ref(definitions.stock_movements_stream)" + - "*ref(definitions.stores_stream)" + - "*ref(definitions.suppliers_stream)" + - "*ref(definitions.tags_stream)" + - "*ref(definitions.taxes_stream)" + - "*ref(definitions.tax_rule_groups_stream)" + - "*ref(definitions.tax_rules_stream)" + - "*ref(definitions.translated_configurations_stream)" + - "*ref(definitions.weight_ranges_stream)" + - "*ref(definitions.zones_stream)" + +check: + stream_names: + - "shops" diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py b/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py index 9be6af3ed7ae..1054b393c01a 100644 --- a/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py +++ b/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py @@ -2,155 +2,60 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -import re -from base64 import b64encode -from typing import Any, List, Mapping, Tuple -from airbyte_cdk.models import SyncMode -from airbyte_cdk.sources import AbstractSource -from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. -from .streams import ( - Addresses, - Carriers, - CartRules, - Carts, - Categories, - Combinations, - Configurations, - Contacts, - ContentManagementSystem, - Countries, - Currencies, - CustomerMessages, - Customers, - CustomerThreads, - Deliveries, - Employees, - Groups, - Guests, - ImageTypes, - Languages, - Manufacturers, - Messages, - OrderCarriers, - OrderDetails, - OrderHistories, - OrderInvoices, - OrderPayments, - Orders, - OrderSlip, - OrderStates, - PriceRanges, - ProductCustomizationFields, - ProductFeatures, - ProductFeatureValues, - ProductOptions, - ProductOptionValues, - Products, - ProductSuppliers, - ShopGroups, - Shops, - ShopUrls, - SpecificPriceRules, - SpecificPrices, - States, - StockAvailables, - StockMovementReasons, - StockMovements, - Stores, - Suppliers, - Tags, - Taxes, - TaxRuleGroups, - TaxRules, - TranslatedConfigurations, - WeightRanges, - Zones, +WARNING: Do not modify this file. +""" + +import logging +from typing import Any, Iterator, List, Mapping, MutableMapping, Union + +from airbyte_cdk.models import ( + AirbyteCatalog, + AirbyteConnectionStatus, + AirbyteMessage, + AirbyteStateMessage, + ConfiguredAirbyteCatalog, + Status, ) +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + + +class ConfigException(Exception): + pass -class SourcePrestaShop(AbstractSource): +# Declarative Source +class SourcePrestashop(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "prestashop.yaml"}) + def _validate_and_transform(self, config: Mapping[str, Any]): if not config.get("_allow_http"): - if re.match(r"^http://", config["url"], re.I): - raise Exception(f"Invalid url: {config['url']}, only https scheme is allowed") + if not config["url"].lower().startswith("https://"): + raise ConfigException(f"Invalid url: {config['url']}, only https scheme is allowed") return config - @staticmethod - def get_authenticator(config: Mapping[str, Any]): - token = b64encode(bytes(config["access_key"] + ":", "utf-8")).decode("ascii") - authenticator = TokenAuthenticator(token, auth_method="Basic") - return authenticator - - def check_connection(self, logger, config) -> Tuple[bool, any]: + def discover(self, logger: logging.Logger, config: Mapping[str, Any]) -> AirbyteCatalog: config = self._validate_and_transform(config) - authenticator = self.get_authenticator(config) - shops = Shops(authenticator=authenticator, url=config["url"]).read_records(sync_mode=SyncMode.full_refresh) - next(shops) - return True, None - - def streams(self, config: Mapping[str, Any]) -> List[Stream]: + return super().discover(logger, config) + + def check(self, logger: logging.Logger, config: Mapping[str, Any]) -> AirbyteConnectionStatus: + try: + config = self._validate_and_transform(config) + except ConfigException as e: + return AirbyteConnectionStatus(status=Status.FAILED, message=str(e)) + return super().check(logger, config) + + def read( + self, + logger: logging.Logger, + config: Mapping[str, Any], + catalog: ConfiguredAirbyteCatalog, + state: Union[List[AirbyteStateMessage], MutableMapping[str, Any]] = None, + ) -> Iterator[AirbyteMessage]: config = self._validate_and_transform(config) - authenticator = self.get_authenticator(config) - stream_classes = [ - Addresses, - Carriers, - CartRules, - Carts, - Categories, - Combinations, - Configurations, - Contacts, - ContentManagementSystem, - Countries, - Currencies, - CustomerMessages, - CustomerThreads, - Customers, - Deliveries, - Employees, - Groups, - Guests, - ImageTypes, - Languages, - Manufacturers, - Messages, - OrderCarriers, - OrderDetails, - OrderHistories, - OrderInvoices, - OrderPayments, - OrderSlip, - OrderStates, - Orders, - PriceRanges, - ProductCustomizationFields, - ProductFeatureValues, - ProductFeatures, - ProductOptionValues, - ProductOptions, - ProductSuppliers, - Products, - ShopGroups, - ShopUrls, - Shops, - SpecificPriceRules, - SpecificPrices, - States, - StockAvailables, - StockMovementReasons, - StockMovements, - Stores, - Suppliers, - Tags, - TaxRuleGroups, - TaxRules, - Taxes, - TranslatedConfigurations, - WeightRanges, - Zones, - ] - - return [cls(authenticator=authenticator, url=config["url"]) for cls in stream_classes] + return super().read(logger, config, catalog, state) diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.json b/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.json deleted file mode 100644 index 96fd0815e416..000000000000 --- a/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PrestaShop Spec", - "type": "object", - "required": ["url", "access_key"], - "properties": { - "url": { - "type": "string", - "description": "Shop URL without trailing slash (domain name or IP address)" - }, - "access_key": { - "type": "string", - "description": "Your PrestaShop access key. See the docs for info on how to obtain this.", - "airbyte_secret": true - } - } - } -} diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.yaml b/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.yaml new file mode 100644 index 000000000000..7ab2cf505c00 --- /dev/null +++ b/airbyte-integrations/connectors/source-prestashop/source_prestashop/spec.yaml @@ -0,0 +1,30 @@ +documentationUrl: https://docs.airbyte.com/integrations/sources/presta-shop +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: PrestaShop Spec + type: object + required: + - access_key + - url + - start_date + properties: + access_key: + type: string + title: Access Key + description: Your PrestaShop access key. See the docs for info on how to obtain this. + order: 0 + airbyte_secret: true + url: + type: string + title: Shop URL + description: Shop URL without trailing slash. + order: 1 + start_date: + type: string + title: Start date + description: start_date + description: The Start date in the format YYYY-MM-DD. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + examples: + - "2022-01-01" + order: 2 diff --git a/docs/integrations/sources/presta-shop.md b/docs/integrations/sources/presta-shop.md index 90d9c3d647bb..8c44c8299a2a 100644 --- a/docs/integrations/sources/presta-shop.md +++ b/docs/integrations/sources/presta-shop.md @@ -1,50 +1,59 @@ # PrestaShop +This page contains the setup guide and reference information for the PrestaShop source connector. -## Overview +## Prerequisites +* Access Key +* Shop URL +* Start date -The PrestaShop source supports both Full Refresh and Incremental syncs. You can choose if this connector will copy only the new or updated data, or all rows in the tables and columns you set up for replication, every time a sync is run. +## Setup guide +### Step 1: Set up PrestaShop -### Output schema +1. By default, the webservice feature is disabled on PrestaShop and needs to be [switched on](https://devdocs.prestashop.com/1.7/webservice/tutorials/creating-access/#enable-the-webservice). +2. To get access to the PrestaShop API you need to create an access key, please follow the instructions in this [documentation](https://devdocs.prestashop-project.org/1.7/webservice/tutorials/creating-access/#create-an-access-key). -This Source is capable of syncing the following core Streams: +### Step 2: Set up the PrestaShop connector in Airbyte +**For Airbyte Cloud:** + +1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. +2. In the left navigation bar, click **Sources**. In the top-right corner, click **+ new source**. +3. On the source setup page, select **PrestaShop** from the Source type dropdown and enter a name for this connector. +4. Enter the **Access Key** that you obtained. +5. Enter the **Shop URL** without trailing slash, for example, https://my.prestashop.com, only HTTPS urls are supported. +6. Enter **Start date** in YYYY-MM-DD format. The data added on and after this date will be replicated. + +## Supported sync modes + +The PrestaShop source connector supports the following [ sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): + +* [Full Refresh - Overwrite](https://docs.airbyte.com/understanding-airbyte/glossary#full-refresh-sync) +* [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) +* [Incremental - Append](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) +* [Incremental - Deduped History](https://docs.airbyte.com/understanding-airbyte/connections/incremental-deduped-history) + +## Supported Streams + +This connector outputs the following full refresh streams: -* [Addresses](https://devdocs.prestashop.com/1.7/webservice/resources/addresses/) * [Carriers](https://devdocs.prestashop.com/1.7/webservice/resources/carriers/) -* [Cart Rules](https://devdocs.prestashop.com/1.7/webservice/resources/cart_rules/) -* [Carts](https://devdocs.prestashop.com/1.7/webservice/resources/carts/) -* [Categories](https://devdocs.prestashop.com/1.7/webservice/resources/categories/) * [Combinations](https://devdocs.prestashop.com/1.7/webservice/resources/combinations/) -* [Configurations](https://devdocs.prestashop.com/1.7/webservice/resources/configurations/) * [Contacts](https://devdocs.prestashop.com/1.7/webservice/resources/contacts/) * [Content Management System](https://devdocs.prestashop.com/1.7/webservice/resources/content_management_system/) * [Countries](https://devdocs.prestashop.com/1.7/webservice/resources/countries/) * [Currencies](https://devdocs.prestashop.com/1.7/webservice/resources/currencies/) -* [Customer Messages](https://devdocs.prestashop.com/1.7/webservice/resources/customer_messages/) -* [Customer Threads](https://devdocs.prestashop.com/1.7/webservice/resources/customer_threads/) -* [Customers](https://devdocs.prestashop.com/1.7/webservice/resources/customers/) * [Deliveries](https://devdocs.prestashop.com/1.7/webservice/resources/deliveries/) * [Employees](https://devdocs.prestashop.com/1.7/webservice/resources/employees/) -* [Groups](https://devdocs.prestashop.com/1.7/webservice/resources/groups/) * [Guests](https://devdocs.prestashop.com/1.7/webservice/resources/guests/) * [Image Types](https://devdocs.prestashop.com/1.7/webservice/resources/image_types/) * [Languages](https://devdocs.prestashop.com/1.7/webservice/resources/languages/) -* [Manufacturers](https://devdocs.prestashop.com/1.7/webservice/resources/manufacturers/) -* [Messages](https://devdocs.prestashop.com/1.7/webservice/resources/messages/) -* [Order Carriers](https://devdocs.prestashop.com/1.7/webservice/resources/order_carriers/) * [Order Details](https://devdocs.prestashop.com/1.7/webservice/resources/order_details/) -* [Order Histories](https://devdocs.prestashop.com/1.7/webservice/resources/order_histories/) -* [Order Invoices](https://devdocs.prestashop.com/1.7/webservice/resources/order_invoices/) -* [Order Payments](https://devdocs.prestashop.com/1.7/webservice/resources/order_payments/) -* [Order Slip](https://devdocs.prestashop.com/1.7/webservice/resources/order_slip/) * [Order States](https://devdocs.prestashop.com/1.7/webservice/resources/order_states/) -* [Orders](https://devdocs.prestashop.com/1.7/webservice/resources/orders/) * [Price Ranges](https://devdocs.prestashop.com/1.7/webservice/resources/price_ranges/) * [Product Customization Fields](https://devdocs.prestashop.com/1.7/webservice/resources/product_customization_fields/) * [Product Feature Values](https://devdocs.prestashop.com/1.7/webservice/resources/product_feature_values/) * [Product Features](https://devdocs.prestashop.com/1.7/webservice/resources/product_features/) * [Product Option Values](https://devdocs.prestashop.com/1.7/webservice/resources/product_option_values/) * [Product Suppliers](https://devdocs.prestashop.com/1.7/webservice/resources/product_suppliers/) -* [Products](https://devdocs.prestashop.com/1.7/webservice/resources/products/) * [ShopGroups](https://devdocs.prestashop.com/1.7/webservice/resources/shop_groups/) * [ShopUrls](https://devdocs.prestashop.com/1.7/webservice/resources/shop_urls/) * [Shops](https://devdocs.prestashop.com/1.7/webservice/resources/shops/) @@ -52,45 +61,45 @@ This Source is capable of syncing the following core Streams: * [Specific Prices](https://devdocs.prestashop.com/1.7/webservice/resources/specific_prices/) * [States](https://devdocs.prestashop.com/1.7/webservice/resources/states/) * [Stock Availables](https://devdocs.prestashop.com/1.7/webservice/resources/stock_availables/) -* [Stock Movement Reasons](https://devdocs.prestashop.com/1.7/webservice/resources/stock_movement_reasons/) -* [Stock Movements](https://devdocs.prestashop.com/1.7/webservice/resources/stock_movements/) -* [Stores](https://devdocs.prestashop.com/1.7/webservice/resources/stores/) -* [Suppliers](https://devdocs.prestashop.com/1.7/webservice/resources/suppliers/) * [Tags](https://devdocs.prestashop.com/1.7/webservice/resources/tags/) -* [Tax Rule Groups](https://devdocs.prestashop.com/1.7/webservice/resources/tax_rule_groups/) * [Tax Rules](https://devdocs.prestashop.com/1.7/webservice/resources/tax_rules/) * [Taxes](https://devdocs.prestashop.com/1.7/webservice/resources/taxes/) * [Translated Configurations](https://devdocs.prestashop.com/1.7/webservice/resources/translated_configurations/) * [Weight Ranges](https://devdocs.prestashop.com/1.7/webservice/resources/weight_ranges/) * [Zones](https://devdocs.prestashop.com/1.7/webservice/resources/zones/) -If there are more endpoints you'd like Airbyte to support, please [create an issue.](https://github.com/airbytehq/airbyte/issues/new/choose) - -### Features - -| Feature | Supported? | | -| :--- | :--- | :--- | -| Full Refresh Sync | Yes | | -| Incremental Sync | Yes | Addresses, Cart Rules, Carts, Categories, Customer Messages, Customer Threads, Customers, Manufacturers, Messages, Order Carriers, Order Histories, Order Invoices, Order Payments, Order Slip, Orders, Products, Stock Movement Reasons, Stock Movements, Stores, Suppliers, Tax Rule Groups | -| Replicate Incremental Deletes | Coming soon | | -| SSL connection | Yes | | -| Namespaces | No | | - -## Getting started - -PrestaShop enables merchants to give third-party tools access to their shop’s database through a CRUD API, otherwise called a [web service](https://devdocs.prestashop.com/1.7/webservice/). +This connector outputs the following incremental streams: -By default, the webservice feature is disabled on PrestaShop and needs to be [switched on](https://devdocs.prestashop.com/1.7/webservice/tutorials/creating-access/#enable-the-webservice) before the first use. - -### Requirements +* [Addresses](https://devdocs.prestashop.com/1.7/webservice/resources/addresses/) +* [Cart Rules](https://devdocs.prestashop.com/1.7/webservice/resources/cart_rules/) +* [Carts](https://devdocs.prestashop.com/1.7/webservice/resources/carts/) +* [Categories](https://devdocs.prestashop.com/1.7/webservice/resources/categories/) +* [Configurations](https://devdocs.prestashop.com/1.7/webservice/resources/configurations/) +* [Customer Messages](https://devdocs.prestashop.com/1.7/webservice/resources/customer_messages/) +* [Customer Threads](https://devdocs.prestashop.com/1.7/webservice/resources/customer_threads/) +* [Customers](https://devdocs.prestashop.com/1.7/webservice/resources/customers/) +* [Groups](https://devdocs.prestashop.com/1.7/webservice/resources/groups/) +* [Manufacturers](https://devdocs.prestashop.com/1.7/webservice/resources/manufacturers/) +* [Messages](https://devdocs.prestashop.com/1.7/webservice/resources/messages/) +* [Order Carriers](https://devdocs.prestashop.com/1.7/webservice/resources/order_carriers/) +* [Order Histories](https://devdocs.prestashop.com/1.7/webservice/resources/order_histories/) +* [Order Invoices](https://devdocs.prestashop.com/1.7/webservice/resources/order_invoices/) +* [Order Payments](https://devdocs.prestashop.com/1.7/webservice/resources/order_payments/) +* [Order Slip](https://devdocs.prestashop.com/1.7/webservice/resources/order_slip/) +* [Orders](https://devdocs.prestashop.com/1.7/webservice/resources/orders/) +* [Products](https://devdocs.prestashop.com/1.7/webservice/resources/products/) +* [Stock Movement Reasons](https://devdocs.prestashop.com/1.7/webservice/resources/stock_movement_reasons/) +* [Stock Movements](https://devdocs.prestashop.com/1.7/webservice/resources/stock_movements/) +* [Stores](https://devdocs.prestashop.com/1.7/webservice/resources/stores/) +* [Suppliers](https://devdocs.prestashop.com/1.7/webservice/resources/suppliers/) +* [Tax Rule Groups](https://devdocs.prestashop.com/1.7/webservice/resources/tax_rule_groups/) -* PrestaShop [access key](https://devdocs.prestashop.com/1.7/webservice/tutorials/creating-access/#create-an-access-key) -* PrestaShop url +If there are more endpoints you'd like Airbyte to support, please [create an issue.](https://github.com/airbytehq/airbyte/issues/new/choose) ## CHANGELOG | Version | Date | Pull Request | Subject | | :--- | :--- | :--- | :--- | +| 0.3.0 | 2022-11-08 | [\#18927](https://github.com/airbytehq/airbyte/pull/18927) | Migrate connector from Alpha (Python) to Beta (YAML) | | 0.2.0 | 2022-10-31 | [\#18599](https://github.com/airbytehq/airbyte/pull/18599) | Only https scheme is allowed | | 0.1.0 | 2021-07-02 | [\#4465](https://github.com/airbytehq/airbyte/pull/4465) | Initial implementation | -