From f5094041bebb80cd6602a98829c19a7515276ed3 Mon Sep 17 00:00:00 2001 From: Baz Date: Mon, 26 Feb 2024 18:05:36 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Source=20Shopify:=20Migrate=20fr?= =?UTF-8?q?om=20=20`REST`=20>=20`GraphQL=20BULK=20Operations`=20where=20po?= =?UTF-8?q?ssible,=20fixed=20`STATE`=20collisions=20for=20`sub-streams`=20?= =?UTF-8?q?(#32345)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connectors/source-shopify/README.md | 2 +- .../source-shopify/acceptance-test-config.yml | 41 +- .../integration_tests/abnormal_state.json | 16 +- .../integration_tests/expected_records.jsonl | 176 +- ...ed_records_transactions_with_user_id.jsonl | 96 + .../integration_tests/state.json | 6 +- .../connectors/source-shopify/metadata.yaml | 31 +- .../connectors/source-shopify/poetry.lock | 22 +- .../connectors/source-shopify/pyproject.toml | 3 +- .../source-shopify/source_shopify/auth.py | 1 - .../schemas/customer_address.json | 4 + .../source_shopify/schemas/customers.json | 3 + .../schemas/discount_codes.json | 9 + .../schemas/fulfillment_orders.json | 34 +- .../source_shopify/schemas/fulfillments.json | 227 + .../source_shopify/schemas/order_refunds.json | 91 +- .../source_shopify/schemas/orders.json | 224 + .../source_shopify/schemas/products.json | 9 + .../source_shopify/schemas/transactions.json | 64 +- .../source-shopify/source_shopify/scopes.py | 157 + .../shopify_graphql/bulk/exceptions.py | 40 + .../shopify_graphql/bulk/job.py | 262 + .../shopify_graphql/bulk/query.py | 1484 +++ .../shopify_graphql/bulk/record.py | 154 + .../shopify_graphql/bulk/tools.py | 83 + .../{ => shopify_graphql}/graphql.py | 5 +- .../schema.py} | 10330 +++++++++++----- .../source-shopify/source_shopify/source.py | 1065 +- .../source-shopify/source_shopify/spec.json | 12 + .../source_shopify/streams/base_streams.py | 722 ++ .../source_shopify/streams/streams.py | 388 + .../source_shopify/transform.py | 3 + .../source-shopify/source_shopify/utils.py | 119 +- .../source-shopify/unit_tests/conftest.py | 800 ++ .../unit_tests/graphql_bulk/test_job.py | 265 + .../unit_tests/graphql_bulk/test_query.py | 209 + .../unit_tests/graphql_bulk/test_record.py | 198 + .../unit_tests/graphql_bulk/test_tools.py | 54 + .../unit_tests/test_cached_stream_state.py | 2 +- .../unit_tests/test_deleted_events_stream.py | 25 +- .../unit_tests/test_graphql_products.py | 2 +- .../source-shopify/unit_tests/test_source.py | 95 +- .../source-shopify/unit_tests/unit_test.py | 67 +- .../sources/shopify-migrations.md | 38 + docs/integrations/sources/shopify.md | 73 +- 45 files changed, 13306 insertions(+), 4405 deletions(-) create mode 100644 airbyte-integrations/connectors/source-shopify/integration_tests/expected_records_transactions_with_user_id.jsonl create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/scopes.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/exceptions.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/job.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/query.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/record.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/tools.py rename airbyte-integrations/connectors/source-shopify/source_shopify/{ => shopify_graphql}/graphql.py (97%) rename airbyte-integrations/connectors/source-shopify/source_shopify/{shopify_schema.py => shopify_graphql/schema.py} (78%) create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/streams/base_streams.py create mode 100644 airbyte-integrations/connectors/source-shopify/source_shopify/streams/streams.py create mode 100644 airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_job.py create mode 100644 airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_query.py create mode 100644 airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_record.py create mode 100644 airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_tools.py diff --git a/airbyte-integrations/connectors/source-shopify/README.md b/airbyte-integrations/connectors/source-shopify/README.md index 86eeb80672b5..2162414e3611 100644 --- a/airbyte-integrations/connectors/source-shopify/README.md +++ b/airbyte-integrations/connectors/source-shopify/README.md @@ -30,7 +30,7 @@ See `sample_files/sample_config.json` for a sample config file. poetry run source-shopify spec poetry run source-shopify check --config secrets/config.json poetry run source-shopify discover --config secrets/config.json -poetry run source-shopify read --config secrets/config.json --catalog sample_files/configured_catalog.json +poetry run source-shopify read --config secrets/config.json --catalog integration_tests/configured_catalog.json ``` ### Running unit tests diff --git a/airbyte-integrations/connectors/source-shopify/acceptance-test-config.yml b/airbyte-integrations/connectors/source-shopify/acceptance-test-config.yml index bb0b185cfeda..c38d1f41afaa 100644 --- a/airbyte-integrations/connectors/source-shopify/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-shopify/acceptance-test-config.yml @@ -24,8 +24,47 @@ acceptance_tests: discovery: tests: - config_path: "secrets/config.json" + backward_compatibility_tests_config: + # The cursor field for `fulfillments` stream has changed from `id` to `updated_at` + disable_for_version: "1.1.8" basic_read: tests: + - config_path: "secrets/config_transactions_with_user_id.json" + timeout_seconds: 4800 + expect_records: + path: "integration_tests/expected_records_transactions_with_user_id.jsonl" + empty_streams: + - name: abandoned_checkouts + bypass_reason: The stream holds data up to 1 month then records are removed by Shopify. + - name: balance_transactions + bypass_reason: The stream requires real purchases to fill in the data. + - name: customer_saved_search + bypass_reason: The stream is not available for our sandbox. + - name: disputes + bypass_reason: The stream requires real purchases to fill in the data. + ignored_fields: + products: + - name: variants/*/updated_at + bypass_reason: Value can change as the account data is not frozen + - name: image/src + bypass_reason: May contain dynamically changed URL params + - name: image/updated_at + bypass_reason: Value can change as the account data is not frozen + - name: images/*/src + bypass_reason: May contain dynamically changed URL params + - name: images/*/updated_at + bypass_reason: Value can change as the account data is not frozen + products_graph_ql: + - name: onlineStorePreviewUrl + bypass_reason: Autogenerated floating URL values + product_variants: + - name: updated_at + bypass_reason: Value can change as the account data is not frozen + product_images: + - name: src + bypass_reason: May contain dynamically changed URL params + - name: updated_at + bypass_reason: Value can change as the account data is not frozen - config_path: "secrets/config.json" timeout_seconds: 4800 expect_records: @@ -68,7 +107,7 @@ acceptance_tests: configured_catalog_path: "integration_tests/configured_catalog.json" future_state: future_state_path: "integration_tests/abnormal_state.json" - timeout_seconds: 14400 + timeout_seconds: 7200 full_refresh: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-shopify/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-shopify/integration_tests/abnormal_state.json index 29376d5432ca..00af9172d88d 100644 --- a/airbyte-integrations/connectors/source-shopify/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-shopify/integration_tests/abnormal_state.json @@ -158,6 +158,17 @@ } } }, + { + "type": "STREAM", + "stream": { + "stream_state": { + "created_at": "2027-07-11T13:07:45-07:00" + }, + "stream_descriptor": { + "name": "transactions_graphql" + } + } + }, { "type": "STREAM", "stream": { @@ -253,7 +264,7 @@ "deleted_at": "2027-07-11T13:07:45-07:00" } }, - "id": 99999999999999 + "updated_at": "2027-07-11T13:07:45-07:00" }, "stream_descriptor": { "name": "fulfillment_orders" @@ -449,7 +460,8 @@ "deleted": { "deleted_at": "2027-07-11T13:07:45-07:00" } - } + }, + "updated_at": "2027-07-11T13:07:45-07:00" }, "stream_descriptor": { "name": "product_variants" diff --git a/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records.jsonl index 22205205125d..d43ad7bf0369 100644 --- a/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records.jsonl @@ -1,80 +1,96 @@ -{"stream": "articles", "data": {"id": 558137508029, "title": "My new Article title", "created_at": "2022-10-07T16:09:02-07:00", "body_html": "

I like articles

\n

Yea, I like posting them through REST.

", "blog_id": 80417685693, "author": "John Smith", "user_id": null, "published_at": "2011-03-24T08:45:47-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "summary_html": null, "template_suffix": null, "handle": "my-new-article-title", "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558137508029", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194671409} -{"stream": "articles", "data": {"id": 558627979453, "title": "Test Blog Post", "created_at": "2023-04-14T03:19:02-07:00", "body_html": "Test Blog Post 1", "blog_id": 80417685693, "author": "Airbyte Airbyte", "user_id": "74861019325", "published_at": null, "updated_at": "2023-04-14T03:19:18-07:00", "summary_html": "", "template_suffix": "", "handle": "test-blog-post", "tags": "Has Been Tagged", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558627979453", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194671410} -{"stream": "articles", "data": {"id": 558999371965, "deleted_at": "2023-09-05T13:50:04-07:00", "updated_at": "2023-09-05T13:50:04-07:00", "deleted_message": "Online Store deleted an article: Test Article 1.", "deleted_description": "Online Store deleted an article: Test Article 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194671993} -{"stream": "blogs", "data": {"id": 80417685693, "handle": "news", "title": "News", "updated_at": "2023-09-05T14:02:00-07:00", "commentable": "no", "feedburner": null, "feedburner_location": null, "created_at": "2021-06-22T18:00:25-07:00", "template_suffix": null, "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/80417685693", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194674015} -{"stream": "blogs", "data": {"id": 85733114045, "deleted_at": "2023-09-06T03:30:22-07:00", "updated_at": "2023-09-06T03:30:22-07:00", "deleted_message": "Online Store deleted a blog: Test Blog 1.", "deleted_description": "Online Store deleted a blog: Test Blog 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194674556} -{"stream": "collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T07:06:59-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-06-22T18:00:25-07:00", "sort_order": "best-selling", "template_suffix": "", "products_count": 1, "collection_type": "custom", "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194676559} -{"stream": "collects", "data": {"id": 29427031703741, "collection_id": 270889287869, "product_id": 6796220989629, "created_at": "2021-07-19T07:01:36-07:00", "updated_at": "2022-03-06T14:12:21-08:00", "position": 2, "sort_value": "0000000002", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194677532} -{"stream": "custom_collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T07:06:59-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-06-22T18:00:25-07:00", "sort_order": "best-selling", "template_suffix": "", "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194678538} -{"stream": "custom_collections", "data": {"id": 294253822141, "deleted_at": "2023-09-06T03:34:39-07:00", "updated_at": "2023-09-06T03:34:39-07:00", "deleted_message": "Airbyte Airbyte deleted a collection.", "deleted_description": "Airbyte Airbyte deleted a collection.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194679372} -{"stream": "customers", "data": {"id": 6569096478909, "email": "test@test.com", "accepts_marketing": true, "created_at": "2023-04-13T02:30:04-07:00", "updated_at": "2023-04-24T06:53:48-07:00", "first_name": "New Test", "last_name": "Customer", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": "updated_mon_24.04.2023", "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": "+380639379992", "addresses": [{"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}], "accepts_marketing_updated_at": "2023-04-13T02:30:04-07:00", "marketing_opt_in_level": "single_opt_in", "tax_exemptions": "[]", "email_marketing_consent": {"state": "subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": "2023-04-13T02:30:04-07:00"}, "sms_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null, "consent_collected_from": "SHOPIFY"}, "admin_graphql_api_id": "gid://shopify/Customer/6569096478909", "default_address": {"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194680438} -{"stream": "customers", "data": {"id": 6676027932861, "email": "marcos@airbyte.io", "accepts_marketing": false, "created_at": "2023-07-11T13:07:45-07:00", "updated_at": "2023-07-11T13:07:45-07:00", "first_name": "MArcos", "last_name": "Millnitz", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": null, "addresses": [{"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}], "accepts_marketing_updated_at": "2023-07-11T13:07:45-07:00", "marketing_opt_in_level": null, "tax_exemptions": "[]", "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "admin_graphql_api_id": "gid://shopify/Customer/6676027932861", "default_address": {"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194680439} -{"stream": "discount_codes", "data": {"id": 11539415990461, "price_rule_id": 945000284349, "code": "updated_mon_24.04.2023", "usage_count": 0, "created_at": "2021-07-07T07:23:11-07:00", "updated_at": "2023-04-24T05:52:22-07:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194682519} -{"stream": "draft_orders", "data": {"id": 929019691197, "note": "updated_mon_24.04.2023", "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2022-02-22T03:23:19-08:00", "updated_at": "2023-04-24T07:18:06-07:00", "tax_exempt": false, "completed_at": null, "name": "#D21", "status": "open", "line_items": [{"id": 58117295538365, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 2, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295538365"}, {"id": 58117295571133, "variant_id": null, "product_id": null, "title": "Test Item", "variant_title": null, "sku": null, "vendor": null, "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 1000, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 0.17}], "applied_discount": null, "name": "Test Item", "properties": [], "custom": true, "price": 1.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295571133"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/12893992cc01fc67935ab014fcf9300f", "applied_discount": null, "order_id": null, "shipping_line": {"title": "Test Shipping Fee", "custom": true, "handle": null, "price": 3.0}, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}, {"rate": 0.2, "title": "PDV", "price": 0.17}], "tags": "", "note_attributes": [], "total_price": "42.00", "subtotal_price": "39.00", "total_tax": "6.50", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/929019691197", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194685211} -{"stream": "draft_orders", "data": {"id": 988639920317, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2023-04-24T11:00:01-07:00", "updated_at": "2023-04-24T11:00:09-07:00", "tax_exempt": false, "completed_at": "2023-04-24T11:00:09-07:00", "name": "#D29", "status": "completed", "line_items": [{"id": 58121808019645, "variant_id": 41561961824445, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Test Variant 2", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Test Variant 2", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58121808019645"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/95271a5eeb083c831f76a98fa3712f89", "applied_discount": null, "order_id": 5033391718589, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "tags": "", "note_attributes": [], "total_price": "19.00", "subtotal_price": "19.00", "total_tax": "3.17", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/988639920317", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194685213} -{"stream": "draft_orders", "data": {"id": 997801689277, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2023-07-11T12:57:53-07:00", "updated_at": "2023-07-11T12:57:55-07:00", "tax_exempt": false, "completed_at": null, "name": "#D30", "status": "open", "line_items": [{"id": 58159126905021, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58159126905021"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/a98bc7e113733d6faa36c198cf6c7c1a", "applied_discount": null, "order_id": null, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "tags": "", "note_attributes": [], "total_price": "19.00", "subtotal_price": "19.00", "total_tax": "3.17", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/997801689277", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194685214} -{"stream": "fulfillment_orders", "data": {"id": 5558588309693, "shop_id": 58033176765, "order_id": 4554821468349, "assigned_location_id": 63590301885, "request_status": "unsubmitted", "status": "closed", "supported_actions": [], "destination": null, "line_items": [{"id": 11564232016061, "shop_id": 58033176765, "fulfillment_order_id": 5558588309693, "quantity": 1, "line_item_id": 11406125564093, "inventory_item_id": 42185212592317, "fulfillable_quantity": 0, "variant_id": 40090597884093}], "fulfill_at": "2022-06-15T05:00:00-07:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2022-06-15T05:16:54-07:00", "updated_at": "2022-06-15T05:16:55-07:00", "delivery_method": {"id": 119732437181, "method_type": "none", "min_delivery_date_time": null, "max_delivery_date_time": null}, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "location_id": 63590301885, "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100"}, "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194687309} -{"stream": "fulfillment_orders", "data": {"id": 5138290671805, "shop_id": 58033176765, "order_id": 4147980107965, "assigned_location_id": 63590301885, "request_status": "unsubmitted", "status": "closed", "supported_actions": [], "destination": {"id": 5183946588349, "address1": "San Francisco", "address2": "10", "city": "San Francisco", "company": "Umbrella LLC", "country": "United States", "email": "airbyte@airbyte.com", "first_name": "John", "last_name": "Doe", "phone": "", "province": "California", "zip": "91326"}, "line_items": [{"id": 10713758531773, "shop_id": 58033176765, "fulfillment_order_id": 5138290671805, "quantity": 1, "line_item_id": 10576771317949, "inventory_item_id": 42185195290813, "fulfillable_quantity": 0, "variant_id": 40090580615357}], "fulfill_at": null, "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2021-09-19T09:08:23-07:00", "updated_at": "2021-09-19T09:08:23-07:00", "delivery_method": null, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "location_id": 63590301885, "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100"}, "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194687822} -{"stream": "fulfillment_orders", "data": {"id": 4919375659197, "shop_id": 58033176765, "order_id": 3935377129661, "assigned_location_id": 63590301885, "request_status": "unsubmitted", "status": "closed", "supported_actions": [], "destination": null, "line_items": [{"id": 10251692081341, "shop_id": 58033176765, "fulfillment_order_id": 4919375659197, "quantity": 1, "line_item_id": 10130216452285, "inventory_item_id": 42185218719933, "fulfillable_quantity": 1, "variant_id": 40090604011709}], "fulfill_at": null, "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2021-07-02T00:51:51-07:00", "updated_at": "2021-09-21T05:31:59-07:00", "delivery_method": null, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "location_id": 63590301885, "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100"}, "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194688332} -{"stream": "fulfillments", "data": {"id": 4075788501181, "order_id": 4554821468349, "status": "success", "created_at": "2022-06-15T05:16:55-07:00", "service": "manual", "updated_at": "2022-06-15T05:16:55-07:00", "tracking_company": null, "shipment_status": null, "location_id": 63590301885, "origin_address": null, "line_items": [{"id": 11406125564093, "variant_id": 40090597884093, "title": "All Black Sneaker Right Foot", "quantity": 1, "sku": "", "variant_title": "ivory", "vendor": "Becker - Moore", "fulfillment_service": "manual", "product_id": 6796226560189, "requires_shipping": false, "taxable": true, "gift_card": false, "name": "All Black Sneaker Right Foot - ivory", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 0, "price": "59.00", "total_discount": "0.00", "fulfillment_status": "fulfilled", "price_set": {"shop_money": {"amount": "59.00", "currency_code": "USD"}, "presentment_money": {"amount": "59.00", "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "discount_allocations": [{"amount": "1.77", "discount_application_index": 0, "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}}], "origin_location": {"id": 3007664259261, "country_code": "UA", "province_code": "", "name": "airbyte integration test", "address1": "Heroiv UPA 72", "address2": "", "city": "Lviv", "zip": "30100"}, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "duties": [], "tax_lines": [], "fulfillment_line_item_id": 9633709097149}], "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "receipt": {}, "name": "#1136.1", "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194691604} -{"stream": "fulfillments", "data": {"id": 3693416710333, "order_id": 4147980107965, "status": "success", "created_at": "2021-09-19T09:08:23-07:00", "service": "manual", "updated_at": "2022-02-22T00:35:47-08:00", "tracking_company": "Amazon Logistics US", "shipment_status": null, "location_id": 63590301885, "origin_address": null, "line_items": [{"id": 10576771317949, "variant_id": 40090580615357, "title": "Red & Silver Fishing Lure", "quantity": 1, "sku": "", "variant_title": "Plastic", "vendor": "Harris - Hamill", "fulfillment_service": "manual", "product_id": 6796218302653, "requires_shipping": true, "taxable": true, "gift_card": false, "name": "Red & Silver Fishing Lure - Plastic", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 285, "price": "27.00", "total_discount": "0.00", "fulfillment_status": "fulfilled", "price_set": {"shop_money": {"amount": "27.00", "currency_code": "USD"}, "presentment_money": {"amount": "27.00", "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "discount_allocations": [], "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "duties": [], "tax_lines": [], "fulfillment_line_item_id": 8852381401277}], "tracking_number": "123456", "tracking_numbers": ["123456"], "tracking_url": "https://track.amazon.com/tracking/123456", "tracking_urls": ["https://track.amazon.com/tracking/123456"], "receipt": {}, "name": "#1121.1", "admin_graphql_api_id": "gid://shopify/Fulfillment/3693416710333", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194692148} -{"stream": "fulfillments", "data": {"id": 4465911431357, "order_id": 5033391718589, "status": "success", "created_at": "2023-04-24T11:00:09-07:00", "service": "manual", "updated_at": "2023-04-24T11:00:09-07:00", "tracking_company": null, "shipment_status": null, "location_id": 63590301885, "origin_address": null, "line_items": [{"id": 12247585521853, "variant_id": 41561961824445, "title": "4 Ounce Soy Candle", "quantity": 1, "sku": "", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "fulfillment_service": "manual", "product_id": 6796220989629, "requires_shipping": true, "taxable": true, "gift_card": false, "name": "4 Ounce Soy Candle - Test Variant 2", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 112, "price": "19.00", "total_discount": "0.00", "fulfillment_status": "fulfilled", "price_set": {"shop_money": {"amount": "19.00", "currency_code": "USD"}, "presentment_money": {"amount": "19.00", "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "discount_allocations": [], "origin_location": {"id": 3000230707389, "country_code": "UA", "province_code": "", "name": "Heroiv UPA 72", "address1": "Heroiv UPA 72", "address2": "", "city": "Lviv", "zip": "30100"}, "admin_graphql_api_id": "gid://shopify/LineItem/12247585521853", "duties": [], "tax_lines": [{"price": 3.17, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": "3.17", "currency_code": "USD"}, "presentment_money": {"amount": "3.17", "currency_code": "USD"}}, "channel_liable": null}], "fulfillment_line_item_id": 10383179514045}], "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "receipt": {}, "name": "#1145.1", "admin_graphql_api_id": "gid://shopify/Fulfillment/4465911431357", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194693123} -{"stream": "inventory_items", "data": {"id": 42185200631997, "sku": "", "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2022-02-22T00:40:19-08:00", "requires_shipping": true, "cost": 19.0, "country_code_of_origin": null, "province_code_of_origin": null, "harmonized_system_code": null, "tracked": true, "country_harmonized_system_codes": [], "admin_graphql_api_id": "gid://shopify/InventoryItem/42185200631997", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194695452} -{"stream": "inventory_items", "data": {"id": 43653682495677, "sku": "", "created_at": "2022-03-06T14:09:20-08:00", "updated_at": "2022-03-06T14:09:20-08:00", "requires_shipping": true, "cost": 19.0, "country_code_of_origin": null, "province_code_of_origin": null, "harmonized_system_code": null, "tracked": true, "country_harmonized_system_codes": [], "admin_graphql_api_id": "gid://shopify/InventoryItem/43653682495677", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194695454} -{"stream": "inventory_items", "data": {"id": 43653688524989, "sku": "", "created_at": "2022-03-06T14:12:20-08:00", "updated_at": "2022-03-06T14:12:20-08:00", "requires_shipping": true, "cost": 19.0, "country_code_of_origin": null, "province_code_of_origin": null, "harmonized_system_code": null, "tracked": true, "country_harmonized_system_codes": [], "admin_graphql_api_id": "gid://shopify/InventoryItem/43653688524989", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194695454} -{"stream": "inventory_levels", "data": {"inventory_item_id": 42185194668221, "location_id": 63590301885, "available": 12, "updated_at": "2021-06-22T18:09:27-07:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185194668221", "shop_url": "airbyte-integration-test", "id": "63590301885|42185194668221"}, "emitted_at": 1697194698578} -{"stream": "inventory_levels", "data": {"inventory_item_id": 42185194700989, "location_id": 63590301885, "available": 3, "updated_at": "2021-06-22T18:09:27-07:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185194700989", "shop_url": "airbyte-integration-test", "id": "63590301885|42185194700989"}, "emitted_at": 1697194698579} -{"stream": "inventory_levels", "data": {"inventory_item_id": 42185194733757, "location_id": 63590301885, "available": 38, "updated_at": "2021-06-22T18:09:27-07:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185194733757", "shop_url": "airbyte-integration-test", "id": "63590301885|42185194733757"}, "emitted_at": 1697194698579} -{"stream":"locations","data":{"id":63590301885,"name":"Heroiv UPA 72","address1":"Heroiv UPA 72","address2":"","city":"Lviv","zip":"30100","province":null,"country":"UA","phone":"","created_at":"2021-06-22T18:00:29-07:00","updated_at":"2023-11-28T07:08:27-08:00","country_code":"UA","country_name":"Ukraine","province_code":null,"legacy":false,"active":true,"admin_graphql_api_id":"gid://shopify/Location/63590301885","localized_country_name":"Ukraine","localized_province_name":null,"shop_url":"airbyte-integration-test"},"emitted_at":1704314548257} -{"stream": "metafield_articles", "data": {"id": 21519818162365, "namespace": "global", "key": "new", "value": "newvalue", "description": null, "owner_id": 558137508029, "created_at": "2022-10-07T16:09:02-07:00", "updated_at": "2022-10-07T16:09:02-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519818162365", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194703693} -{"stream": "metafield_articles", "data": {"id": 22365709992125, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Article Metafield", "description": null, "owner_id": 558137508029, "created_at": "2023-04-14T03:18:26-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365709992125", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194703694} -{"stream": "metafield_articles", "data": {"id": 22365710352573, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Blog Post Metafiled", "description": null, "owner_id": 558627979453, "created_at": "2023-04-14T03:19:18-07:00", "updated_at": "2023-04-14T03:19:18-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710352573", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194704159} -{"stream": "metafield_blogs", "data": {"id": 21519428255933, "namespace": "some_fields", "key": "sponsor", "value": "Shopify", "description": null, "owner_id": 80417685693, "created_at": "2022-10-07T06:05:23-07:00", "updated_at": "2022-10-07T06:05:23-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519428255933", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194706701} -{"stream": "metafield_blogs", "data": {"id": 22365710745789, "namespace": "custom", "key": "test_blog_metafield", "value": "Test Blog Metafield", "description": null, "owner_id": 80417685693, "created_at": "2023-04-14T03:20:20-07:00", "updated_at": "2023-04-14T03:20:20-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710745789", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194706702} -{"stream": "metafield_collections", "data": {"id": 21520343367869, "namespace": "my_fields", "key": "discount", "value": "25%", "description": null, "owner_id": 270889287869, "created_at": "2022-10-08T04:44:51-07:00", "updated_at": "2022-10-08T04:44:51-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21520343367869", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194709216} -{"stream": "metafield_collections", "data": {"id": 22365707174077, "namespace": "custom", "key": "test_collection_metafield", "value": "Test Collection Metafield", "description": null, "owner_id": 270889287869, "created_at": "2023-04-14T03:15:30-07:00", "updated_at": "2023-04-14T03:15:30-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365707174077", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194709218} -{"stream": "metafield_customers", "data": {"id": 22346893361341, "namespace": "custom", "key": "test_definition_list_1", "value": "Teste\n", "description": null, "owner_id": 6569096478909, "created_at": "2023-04-13T04:50:10-07:00", "updated_at": "2023-04-13T04:50:10-07:00", "owner_resource": "customer", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893361341", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194711312} -{"stream": "metafield_customers", "data": {"id": 22346893394109, "namespace": "custom", "key": "test_definition", "value": "Taster", "description": null, "owner_id": 6569096478909, "created_at": "2023-04-13T04:50:10-07:00", "updated_at": "2023-04-13T04:50:10-07:00", "owner_resource": "customer", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893394109", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194711313} -{"stream": "metafield_draft_orders", "data": {"id": 22532787175613, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 929019691197, "created_at": "2023-04-24T07:18:06-07:00", "updated_at": "2023-04-24T07:18:06-07:00", "owner_resource": "draft_order", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22532787175613", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194714876} -{"stream":"metafield_locations","data":{"id":21524407255229,"namespace":"inventory","key":"warehouse_2","value":"234","description":null,"owner_id":63590301885,"created_at":"2022-10-12T02:21:27-07:00","updated_at":"2022-10-12T02:21:27-07:00","owner_resource":"location","type":"number_integer","admin_graphql_api_id":"gid://shopify/Metafield/21524407255229","shop_url":"airbyte-integration-test"},"emitted_at":1704314554082} -{"stream":"metafield_locations","data":{"id":21524407681213,"namespace":"inventory","key":"warehouse_233","value":"564","description":null,"owner_id":63590301885,"created_at":"2022-10-12T02:21:35-07:00","updated_at":"2022-10-12T02:21:35-07:00","owner_resource":"location","type":"number_integer","admin_graphql_api_id":"gid://shopify/Metafield/21524407681213","shop_url":"airbyte-integration-test"},"emitted_at":1704314554084} -{"stream": "metafield_orders", "data": {"id": 22347287855293, "namespace": "my_fields", "key": "purchase_order", "value": "trtrtr", "description": null, "owner_id": 4147980107965, "created_at": "2023-04-13T05:09:08-07:00", "updated_at": "2023-04-13T05:09:08-07:00", "owner_resource": "order", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347287855293", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194720313} -{"stream": "metafield_orders", "data": {"id": 22365749805245, "namespace": "my_fields", "key": "purchase_order", "value": "Test Draft Order Metafield", "description": null, "owner_id": 3935377129661, "created_at": "2023-04-14T03:52:40-07:00", "updated_at": "2023-04-14T03:52:40-07:00", "owner_resource": "order", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365749805245", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194720780} -{"stream": "metafield_pages", "data": {"id": 22534014828733, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 83074252989, "created_at": "2023-04-24T11:08:41-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "owner_resource": "page", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534014828733", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194723743} -{"stream": "metafield_product_images", "data": {"id": 22533588451517, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 29301297316029, "created_at": "2023-04-24T10:32:19-07:00", "updated_at": "2023-04-24T10:32:19-07:00", "owner_resource": "product_image", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22533588451517", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194726839} -{"stream": "metafield_products", "data": {"id": 22365706944701, "namespace": "custom", "key": "test_product_metafield", "value": "gid://shopify/Product/6796220989629", "description": null, "owner_id": 6796220989629, "created_at": "2023-04-14T03:15:07-07:00", "updated_at": "2023-04-14T03:15:07-07:00", "owner_resource": "product", "type": "product_reference", "admin_graphql_api_id": "gid://shopify/Metafield/22365706944701", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194728238} -{"stream": "metafield_products", "data": {"id": 22365762486461, "namespace": "custom", "key": "product_metafield_test_2", "value": "Test", "description": null, "owner_id": 6796220989629, "created_at": "2023-04-14T03:59:44-07:00", "updated_at": "2023-04-14T03:59:44-07:00", "owner_resource": "product", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365762486461", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194728239} -{"stream": "metafield_product_variants", "data": {"id": 22365715955901, "namespace": "custom", "key": "test_variant_metafield", "value": "Test Varia", "description": null, "owner_id": 41561961824445, "created_at": "2023-04-14T03:24:03-07:00", "updated_at": "2023-04-14T03:24:03-07:00", "owner_resource": "variant", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365715955901", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194733126} -{"stream": "metafield_shops", "data": {"id": 22534020104381, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 58033176765, "created_at": "2023-04-24T11:12:38-07:00", "updated_at": "2023-04-24T11:12:38-07:00", "owner_resource": "shop", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534020104381", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194734113} -{"stream": "metafield_smart_collections", "data": {"id": 21525604106429, "namespace": "my_fields", "key": "discount", "value": "50%", "description": null, "owner_id": 273278566589, "created_at": "2022-10-12T13:36:55-07:00", "updated_at": "2022-10-12T13:36:55-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21525604106429", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194736384} -{"stream": "metafield_smart_collections", "data": {"id": 22366265573565, "namespace": "my_fields", "key": "new_key", "value": "51%", "description": null, "owner_id": 273278566589, "created_at": "2023-04-14T05:21:58-07:00", "updated_at": "2023-04-14T05:21:58-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366265573565", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194736385} -{"stream": "order_refunds", "data": {"id": 829538369725, "order_id": 3935377129661, "created_at": "2021-09-21T05:31:59-07:00", "note": "test refund", "user_id": 74861019325, "processed_at": "2021-09-21T05:31:59-07:00", "restock": true, "duties": "[]", "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "return": null, "admin_graphql_api_id": "gid://shopify/Refund/829538369725", "refund_line_items": [{"id": 332807864509, "quantity": 1, "line_item_id": 10130216452285, "location_id": 63590301885, "restock_type": "cancel", "subtotal": 102.0, "total_tax": 17.0, "subtotal_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "line_item": {"id": 10130216452285, "variant_id": 40090604011709, "title": "8 Ounce Soy Candle", "quantity": 1, "sku": "", "variant_title": "Wooden", "vendor": "Bosco Inc", "fulfillment_service": "manual", "product_id": 6796229509309, "requires_shipping": true, "taxable": true, "gift_card": false, "name": "8 Ounce Soy Candle - Wooden", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 63, "price": 102.0, "total_discount": 0.0, "fulfillment_status": null, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "discount_allocations": [], "duties": [], "admin_graphql_api_id": "gid://shopify/LineItem/10130216452285", "tax_lines": [{"title": "PDV", "price": 17.0, "rate": 0.2, "channel_liable": false, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}}]}}], "transactions": [{"id": 5189894406333, "order_id": 3935377129661, "kind": "refund", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2021-09-21T05:31:58-07:00", "test": true, "authorization": null, "location_id": null, "user_id": 74861019325, "parent_id": 4933790040253, "processed_at": "2021-09-21T05:31:58-07:00", "device_id": null, "error_code": null, "source_name": "1830279", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 11, "credit_card_expiration_year": 2023}, "receipt": {"paid_amount": "102.00"}, "amount": "102.00", "currency": "USD", "payment_id": "c21670281707709.2", "total_unsettled_set": {"presentment_money": {"amount": "0.0", "currency": "USD"}, "shop_money": {"amount": "0.0", "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5189894406333"}], "order_adjustments": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194739764} -{"stream": "order_refunds", "data": {"id": 845032358077, "order_id": 4147980107965, "created_at": "2022-03-07T02:09:04-08:00", "note": null, "user_id": 74861019325, "processed_at": "2022-03-07T02:09:04-08:00", "restock": true, "duties": "[]", "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "return": {"id": 822313149, "admin_graphql_api_id": "gid://shopify/Return/822313149"}, "admin_graphql_api_id": "gid://shopify/Refund/845032358077", "refund_line_items": [{"id": 352716947645, "quantity": 1, "line_item_id": 10576771317949, "location_id": 63590301885, "restock_type": "return", "subtotal": 27.0, "total_tax": 0.0, "subtotal_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 10576771317949, "variant_id": 40090580615357, "title": "Red & Silver Fishing Lure", "quantity": 1, "sku": "", "variant_title": "Plastic", "vendor": "Harris - Hamill", "fulfillment_service": "manual", "product_id": 6796218302653, "requires_shipping": true, "taxable": true, "gift_card": false, "name": "Red & Silver Fishing Lure - Plastic", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 285, "price": 27.0, "total_discount": 0.0, "fulfillment_status": "fulfilled", "price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "discount_allocations": [], "duties": [], "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "tax_lines": []}}], "transactions": [], "order_adjustments": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194740336} -{"stream": "order_refunds", "data": {"id": 852809646269, "order_id": 4554821468349, "created_at": "2022-06-15T06:25:43-07:00", "note": null, "user_id": 74861019325, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "duties": "[]", "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "return": {"id": 947388605, "admin_graphql_api_id": "gid://shopify/Return/947388605"}, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "refund_line_items": [{"id": 363131404477, "quantity": 1, "line_item_id": 11406125564093, "location_id": 63590301885, "restock_type": "return", "subtotal": 57.23, "total_tax": 0.0, "subtotal_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "variant_id": 40090597884093, "title": "All Black Sneaker Right Foot", "quantity": 1, "sku": "", "variant_title": "ivory", "vendor": "Becker - Moore", "fulfillment_service": "manual", "product_id": 6796226560189, "requires_shipping": false, "taxable": true, "gift_card": false, "name": "All Black Sneaker Right Foot - ivory", "variant_inventory_management": "shopify", "properties": [], "product_exists": true, "fulfillable_quantity": 0, "grams": 0, "price": 59.0, "total_discount": 0.0, "fulfillment_status": "fulfilled", "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "discount_allocations": [{"amount": 1.77, "discount_application_index": 0, "amount_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}}], "duties": [], "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "tax_lines": []}}], "transactions": [{"id": 5721170968765, "order_id": 4554821468349, "kind": "refund", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2022-06-15T06:25:42-07:00", "test": true, "authorization": null, "location_id": null, "user_id": null, "parent_id": 5721110872253, "processed_at": "2022-06-15T06:25:42-07:00", "device_id": null, "error_code": null, "source_name": "1830279", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}, "receipt": {"paid_amount": "57.23"}, "amount": "57.23", "currency": "USD", "payment_id": "c25048437719229.2", "total_unsettled_set": {"presentment_money": {"amount": "0.0", "currency": "USD"}, "shop_money": {"amount": "0.0", "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765"}], "order_adjustments": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194740934} -{"stream": "order_risks", "data": {"id": 6446736474301, "order_id": 4147980107965, "checkout_id": null, "source": "External", "score": 1.0, "recommendation": "cancel", "display": true, "cause_cancel": true, "message": "This order came from an anonymous proxy", "merchant_message": "This order came from an anonymous proxy", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194743896} -{"stream": "orders", "data": {"id": 4554821468349, "admin_graphql_api_id": "gid://shopify/Order/4554821468349", "app_id": 580111, "browser_ip": "176.113.167.23", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 25048437719229, "checkout_token": "cf5d16a0a0688905bd551c6dec591506", "client_details": {"accept_language": "en-US,en;q=0.9,uk;q=0.8", "browser_height": 754, "browser_ip": "176.113.167.23", "browser_width": 1519, "session_hash": null, "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"}, "closed_at": "2022-06-15T06:25:43-07:00", "company": null, "confirmation_number": null, "confirmed": true, "contact_email": "integration-test@airbyte.io", "created_at": "2022-06-15T05:16:53-07:00", "currency": "USD", "current_subtotal_price": 0.0, "current_subtotal_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 0.0, "current_total_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_tax": 0.0, "current_total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "integration-test@airbyte.io", "estimated_taxes": false, "financial_status": "refunded", "fulfillment_status": "fulfilled", "landing_site": "/wallets/checkouts.json", "landing_site_ref": null, "location_id": null, "merchant_of_record_app_id": null, "name": "#1136", "note": "updated_mon_24.04.2023", "note_attributes": [], "number": 136, "order_number": 1136, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/e4f98630ea44a884e33e700203ce2130/authenticate?key=edf087d6ae55a4541bf1375432f6a4b8", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["bogus"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2022-06-15T05:16:53-07:00", "reference": null, "referring_site": "https://airbyte-integration-test.myshopify.com/products/all-black-sneaker-right-foot", "source_identifier": null, "source_name": "web", "source_url": null, "subtotal_price": 57.23, "subtotal_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "tags": "Refund", "tax_exempt": false, "tax_lines": [], "taxes_included": true, "test": true, "token": "e4f98630ea44a884e33e700203ce2130", "total_discounts": 1.77, "total_discounts_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}, "total_line_items_price": 59.0, "total_line_items_price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 57.23, "total_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 0, "updated_at": "2023-04-24T07:00:37-07:00", "user_id": null, "billing_address": {"first_name": "Iryna", "address1": "2261 Market Street", "phone": null, "city": "San Francisco", "zip": "94114", "province": "California", "country": "United States", "last_name": "Grankova", "address2": "4381", "company": null, "latitude": 37.7647751, "longitude": -122.4320369, "name": "Iryna Grankova", "country_code": "US", "province_code": "CA"}, "customer": {"id": 5362027233469, "email": "integration-test@airbyte.io", "accepts_marketing": false, "created_at": "2021-07-08T05:41:47-07:00", "updated_at": "2022-06-22T03:50:13-07:00", "first_name": "Airbyte", "last_name": "Team", "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "tags": "", "currency": "USD", "accepts_marketing_updated_at": "2021-07-08T05:41:47-07:00", "marketing_opt_in_level": null, "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/5362027233469", "default_address": {"id": 7492260823229, "customer_id": 5362027233469, "first_name": "Airbyte", "last_name": "Team", "company": null, "address1": "2261 Market Street", "address2": "4381", "city": "San Francisco", "province": "California", "country": "United States", "zip": "94114", "phone": null, "name": "Airbyte Team", "province_code": "CA", "country_code": "US", "country_name": "United States", "default": true}}, "discount_applications": [{"target_type": "line_item", "type": "automatic", "value": "3.0", "value_type": "percentage", "allocation_method": "across", "target_selection": "all", "title": "eeeee"}], "fulfillments": [{"id": 4075788501181, "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "created_at": "2022-06-15T05:16:55-07:00", "location_id": 63590301885, "name": "#1136.1", "order_id": 4554821468349, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2022-06-15T05:16:55-07:00", "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}]}], "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}], "payment_terms": null, "refunds": [{"id": 852809646269, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "created_at": "2022-06-15T06:25:43-07:00", "note": null, "order_id": 4554821468349, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5721170968765, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "amount": "57.23", "authorization": null, "created_at": "2022-06-15T06:25:42-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 4554821468349, "parent_id": 5721110872253, "payment_id": "c25048437719229.2", "processed_at": "2022-06-15T06:25:42-07:00", "receipt": {"paid_amount": "57.23"}, "source_name": "1830279", "status": "success", "test": true, "user_id": null, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}}], "refund_line_items": [{"id": 363131404477, "line_item_id": 11406125564093, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 57.23, "subtotal_set": {"shop_money": {"amount": "57.23", "currency_code": "USD"}, "presentment_money": {"amount": "57.23", "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": "59.00", "price_set": {"shop_money": {"amount": "59.00", "currency_code": "USD"}, "presentment_money": {"amount": "59.00", "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}}], "duties": []}], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194746441} -{"stream": "orders", "data": {"id": 4147980107965, "admin_graphql_api_id": "gid://shopify/Order/4147980107965", "app_id": 5505221, "browser_ip": null, "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": null, "checkout_token": null, "client_details": null, "closed_at": null, "company": null, "confirmation_number": null, "confirmed": true, "contact_email": "airbyte@airbyte.com", "created_at": "2021-09-19T09:08:23-07:00", "currency": "USD", "current_subtotal_price": 0.0, "current_subtotal_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 0.0, "current_total_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_tax": 0.0, "current_total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "customer_locale": null, "device_id": null, "discount_codes": [], "email": "airbyte@airbyte.com", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": "fulfilled", "landing_site": null, "landing_site_ref": null, "location_id": null, "merchant_of_record_app_id": null, "name": "#1121", "note": "updated_mon_24.04.2023", "note_attributes": [], "number": 121, "order_number": 1121, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/6adf11e07ccb49b280ea4b9f53d64f12/authenticate?key=4cef2ff10ba4d18f31114df33933f81e", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": [], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2021-09-19T09:08:23-07:00", "reference": null, "referring_site": null, "source_identifier": null, "source_name": "5505221", "source_url": null, "subtotal_price": 27.0, "subtotal_price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "tags": "", "tax_exempt": false, "tax_lines": [], "taxes_included": false, "test": false, "token": "6adf11e07ccb49b280ea4b9f53d64f12", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 27.0, "total_line_items_price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 27.0, "total_price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 0, "updated_at": "2023-04-24T07:03:06-07:00", "user_id": null, "billing_address": null, "customer": {"id": 5565161144509, "email": "airbyte@airbyte.com", "accepts_marketing": false, "created_at": "2021-09-19T08:31:05-07:00", "updated_at": "2021-09-19T09:08:24-07:00", "first_name": null, "last_name": null, "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "tags": "", "currency": "USD", "accepts_marketing_updated_at": "2021-09-19T08:31:05-07:00", "marketing_opt_in_level": null, "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/5565161144509"}, "discount_applications": [], "fulfillments": [{"id": 3693416710333, "admin_graphql_api_id": "gid://shopify/Fulfillment/3693416710333", "created_at": "2021-09-19T09:08:23-07:00", "location_id": 63590301885, "name": "#1121.1", "order_id": 4147980107965, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": "Amazon Logistics US", "tracking_number": "123456", "tracking_numbers": ["123456"], "tracking_url": "https://track.amazon.com/tracking/123456", "tracking_urls": ["https://track.amazon.com/tracking/123456"], "updated_at": "2022-02-22T00:35:47-08:00", "line_items": [{"id": 10576771317949, "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 285, "name": "Red & Silver Fishing Lure - Plastic", "price": 27.0, "price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796218302653, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "Red & Silver Fishing Lure", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090580615357, "variant_inventory_management": "shopify", "variant_title": "Plastic", "vendor": "Harris - Hamill", "tax_lines": [], "duties": [], "discount_allocations": []}]}], "line_items": [{"id": 10576771317949, "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 285, "name": "Red & Silver Fishing Lure - Plastic", "price": 27.0, "price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796218302653, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "Red & Silver Fishing Lure", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090580615357, "variant_inventory_management": "shopify", "variant_title": "Plastic", "vendor": "Harris - Hamill", "tax_lines": [], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [{"id": 845032358077, "admin_graphql_api_id": "gid://shopify/Refund/845032358077", "created_at": "2022-03-07T02:09:04-08:00", "note": null, "order_id": 4147980107965, "processed_at": "2022-03-07T02:09:04-08:00", "restock": true, "total_duties_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [], "refund_line_items": [{"id": 352716947645, "line_item_id": 10576771317949, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 27.0, "subtotal_set": {"shop_money": {"amount": "27.00", "currency_code": "USD"}, "presentment_money": {"amount": "27.00", "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "line_item": {"id": 10576771317949, "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 285, "name": "Red & Silver Fishing Lure - Plastic", "price": "27.00", "price_set": {"shop_money": {"amount": "27.00", "currency_code": "USD"}, "presentment_money": {"amount": "27.00", "currency_code": "USD"}}, "product_exists": true, "product_id": 6796218302653, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "Red & Silver Fishing Lure", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "variant_id": 40090580615357, "variant_inventory_management": "shopify", "variant_title": "Plastic", "vendor": "Harris - Hamill", "tax_lines": [], "duties": [], "discount_allocations": []}}], "duties": []}], "shipping_address": {"first_name": "John", "address1": "San Francisco", "phone": "", "city": "San Francisco", "zip": "91326", "province": "California", "country": "United States", "last_name": "Doe", "address2": "10", "company": "Umbrella LLC", "latitude": 34.2894584, "longitude": -118.5622893, "name": "John Doe", "country_code": "US", "province_code": "CA"}, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194746446} -{"stream": "orders", "data": {"id": 3935377129661, "admin_graphql_api_id": "gid://shopify/Order/3935377129661", "app_id": 1354745, "browser_ip": "76.14.176.236", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 21670281707709, "checkout_token": "ea03756d615a5f9e752f3c085e8cf9bd", "client_details": {"accept_language": "en-US,en;q=0.9", "browser_height": null, "browser_ip": "76.14.176.236", "browser_width": null, "session_hash": null, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"}, "closed_at": null, "company": null, "confirmation_number": null, "confirmed": true, "contact_email": null, "created_at": "2021-07-02T00:51:50-07:00", "currency": "USD", "current_subtotal_price": 0.0, "current_subtotal_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 0.0, "current_total_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_tax": 0.0, "current_total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "customer_locale": null, "device_id": null, "discount_codes": [], "email": "", "estimated_taxes": false, "financial_status": "refunded", "fulfillment_status": null, "landing_site": null, "landing_site_ref": null, "location_id": 63590301885, "merchant_of_record_app_id": null, "name": "#1001", "note": null, "note_attributes": [], "number": 1, "order_number": 1001, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/16dd6c6e17f562f1f5eee0fefa00b4cb/authenticate?key=931eb302588779d0ab93839d42bf7166", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["bogus"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2021-07-02T00:51:49-07:00", "reference": null, "referring_site": null, "source_identifier": null, "source_name": "shopify_draft_order", "source_url": null, "subtotal_price": 102.0, "subtotal_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "tags": "teest", "tax_exempt": false, "tax_lines": [{"price": 17.0, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "channel_liable": false}], "taxes_included": true, "test": true, "token": "16dd6c6e17f562f1f5eee0fefa00b4cb", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 102.0, "total_line_items_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 102.0, "total_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 63, "updated_at": "2023-04-24T10:59:00-07:00", "user_id": 74861019325, "billing_address": null, "customer": {"id": 5349364105405, "email": null, "accepts_marketing": false, "created_at": "2021-07-02T00:51:46-07:00", "updated_at": "2021-07-02T00:51:46-07:00", "first_name": "Bogus", "last_name": "Gateway", "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": null, "sms_marketing_consent": null, "tags": "", "currency": "USD", "accepts_marketing_updated_at": "2021-07-02T00:51:46-07:00", "marketing_opt_in_level": null, "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/5349364105405"}, "discount_applications": [], "fulfillments": [], "line_items": [{"id": 10130216452285, "admin_graphql_api_id": "gid://shopify/LineItem/10130216452285", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": null, "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [{"id": 829538369725, "admin_graphql_api_id": "gid://shopify/Refund/829538369725", "created_at": "2021-09-21T05:31:59-07:00", "note": "test refund", "order_id": 3935377129661, "processed_at": "2021-09-21T05:31:59-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5189894406333, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5189894406333", "amount": "102.00", "authorization": null, "created_at": "2021-09-21T05:31:58-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 3935377129661, "parent_id": 4933790040253, "payment_id": "c21670281707709.2", "processed_at": "2021-09-21T05:31:58-07:00", "receipt": {"paid_amount": "102.00"}, "source_name": "1830279", "status": "success", "test": true, "user_id": 74861019325, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 11, "credit_card_expiration_year": 2023}}], "refund_line_items": [{"id": 332807864509, "line_item_id": 10130216452285, "location_id": 63590301885, "quantity": 1, "restock_type": "cancel", "subtotal": 102.0, "subtotal_set": {"shop_money": {"amount": "102.00", "currency_code": "USD"}, "presentment_money": {"amount": "102.00", "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": "17.00", "currency_code": "USD"}, "presentment_money": {"amount": "17.00", "currency_code": "USD"}}, "line_item": {"id": 10130216452285, "admin_graphql_api_id": "gid://shopify/LineItem/10130216452285", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": null, "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": "102.00", "price_set": {"shop_money": {"amount": "102.00", "currency_code": "USD"}, "presentment_money": {"amount": "102.00", "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": "17.00", "price_set": {"shop_money": {"amount": "17.00", "currency_code": "USD"}, "presentment_money": {"amount": "17.00", "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}}], "duties": []}], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194746449} -{"stream": "pages", "data": {"id": 83074252989, "title": "Warranty information", "shop_id": 58033176765, "handle": "warranty-information", "body_html": "updated_mon_24.04.2023", "author": "Shopify API", "created_at": "2021-07-08T05:19:00-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "published_at": "2021-07-08T05:19:00-07:00", "template_suffix": null, "admin_graphql_api_id": "gid://shopify/OnlineStorePage/83074252989", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194747936} -{"stream": "pages", "data": {"id": 95926616253, "deleted_at": "2023-09-06T03:37:06-07:00", "updated_at": "2023-09-06T03:37:06-07:00", "deleted_message": "Online Store deleted a page: Test Page for delete.", "deleted_description": "Online Store deleted a page: Test Page for delete.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194748486} -{"stream": "price_rules", "data": {"id": 945000284349, "value_type": "percentage", "value": "-3.0", "customer_selection": "all", "target_type": "line_item", "target_selection": "all", "allocation_method": "across", "allocation_limit": null, "once_per_customer": true, "usage_limit": 10, "starts_at": "2021-07-07T07:22:04-07:00", "ends_at": null, "created_at": "2021-07-07T07:23:11-07:00", "updated_at": "2023-04-24T05:52:22-07:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": null, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "1V8Z165KSH5T", "admin_graphql_api_id": "gid://shopify/PriceRule/945000284349", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194749554} -{"stream": "price_rules", "data": {"id": 1278552473789, "deleted_at": "2023-09-06T03:48:46-07:00", "updated_at": "2023-09-06T03:48:46-07:00", "deleted_message": "Airbyte Test deleted this discount.", "deleted_description": "Airbyte Test deleted this discount.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194750128} -{"stream": "product_images", "data": {"id": 29301297316029, "product_id": 6796220989629, "position": 1, "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2023-04-24T10:32:19-07:00", "alt": "updated_mon_24.04.2023", "width": 2200, "height": 1467, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/4-ounce-soy-candle.jpg?v=1682357539", "variant_ids": [], "admin_graphql_api_id": "gid://shopify/ProductImage/29301297316029", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194752617} -{"stream": "products", "data": {"id": 6796220989629, "title": "4 Ounce Soy Candle", "body_html": "updated_mon_24.04.2023", "vendor": "Hartmann Group", "product_type": "Baby", "created_at": "2021-06-22T18:09:47-07:00", "handle": "4-ounce-soy-candle", "updated_at": "2023-04-24T11:05:13-07:00", "published_at": "2021-06-22T18:09:47-07:00", "template_suffix": "", "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796220989629", "variants": [{"id": 40090585923773, "product_id": 6796220989629, "title": "Metal", "price": 19.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Metal", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2023-04-13T05:00:55-07:00", "taxable": true, "barcode": null, "grams": 112, "image_id": null, "weight": 112.0, "weight_unit": "g", "inventory_item_id": 42185200631997, "inventory_quantity": 15, "old_inventory_quantity": 15, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090585923773"}, {"id": 41561955827901, "product_id": 6796220989629, "title": "Test Variant 1", "price": 19.0, "sku": "", "position": 2, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Test Variant 1", "option2": null, "option3": null, "created_at": "2022-03-06T14:09:20-08:00", "updated_at": "2022-03-06T14:12:40-08:00", "taxable": true, "barcode": "", "grams": 112, "image_id": null, "weight": 112.0, "weight_unit": "g", "inventory_item_id": 43653682495677, "inventory_quantity": 2, "old_inventory_quantity": 2, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/41561955827901"}, {"id": 41561961824445, "product_id": 6796220989629, "title": "Test Variant 2", "price": 19.0, "sku": "", "position": 3, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Test Variant 2", "option2": null, "option3": null, "created_at": "2022-03-06T14:12:20-08:00", "updated_at": "2023-04-24T11:00:10-07:00", "taxable": true, "barcode": "", "grams": 112, "image_id": null, "weight": 112.0, "weight_unit": "g", "inventory_item_id": 43653688524989, "inventory_quantity": 0, "old_inventory_quantity": 0, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/41561961824445"}], "options": [{"id": 8720178315453, "product_id": 6796220989629, "name": "Title", "position": 1, "values": ["Metal", "Test Variant 1", "Test Variant 2"]}], "images": [{"id": 29301297316029, "product_id": 6796220989629, "position": 1, "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2023-04-24T10:32:19-07:00", "alt": "updated_mon_24.04.2023", "width": 2200, "height": 1467, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/4-ounce-soy-candle.jpg?v=1682357539", "variant_ids": [], "admin_graphql_api_id": "gid://shopify/ProductImage/29301297316029"}], "image": {"id": 29301297316029, "product_id": 6796220989629, "position": 1, "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2023-04-24T10:32:19-07:00", "alt": "updated_mon_24.04.2023", "width": 2200, "height": 1467, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/4-ounce-soy-candle.jpg?v=1682357539", "variant_ids": [], "admin_graphql_api_id": "gid://shopify/ProductImage/29301297316029"}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194753037} -{"stream": "products", "data": {"id": 6796217843901, "title": "Lace Detail On Womens Top", "body_html": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "vendor": "Hayes, Hettinger and Hauck", "product_type": "Beauty", "created_at": "2021-06-22T18:09:26-07:00", "handle": "lace-detail-on-womens-top", "updated_at": "2023-09-05T07:12:05-07:00", "published_at": null, "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "archived", "admin_graphql_api_id": "gid://shopify/Product/6796217843901", "variants": [{"id": 40090579959997, "product_id": 6796217843901, "title": "Soft", "price": 85.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Soft", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2021-06-22T18:09:27-07:00", "taxable": true, "barcode": null, "grams": 391, "image_id": null, "weight": 391.0, "weight_unit": "g", "inventory_item_id": 42185194668221, "inventory_quantity": 12, "old_inventory_quantity": 12, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579959997"}], "options": [{"id": 8720175169725, "product_id": 6796217843901, "name": "Title", "position": 1, "values": ["Soft"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194753040} -{"stream": "products", "data": {"id": 6796217811133, "deleted_at": "2023-09-05T07:07:00-07:00", "updated_at": "2023-09-05T07:07:00-07:00", "deleted_message": "Airbyte Airbyte deleted a product: Yoga Mat Rolled.", "deleted_description": "Airbyte Airbyte deleted a product: Yoga Mat Rolled.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194753917} -{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217843901", "title": "Lace Detail On Womens Top", "updatedAt": "2023-09-05T14:12:05Z", "createdAt": "2021-06-23T01:09:26Z", "publishedAt": null, "status": "ARCHIVED", "vendor": "Hayes, Hettinger and Hauck", "productType": "Beauty", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175169725", "name": "Title", "position": 1, "values": ["Soft"]}], "handle": "lace-detail-on-womens-top", "description": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "tracksInventory": true, "totalInventory": 12, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://xozdpweqwavev7lh-58033176765.shopifypreview.com/products_preview?preview_key=6fd9afd8977385d048b67ffb24ad7a7f&_bt=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaXRoYVhKaWVYUmxMV2x1ZEdWbmNtRjBhVzl1TFhSbGMzUXViWGx6YUc5d2FXWjVMbU52YlFZNkJrVlUiLCJleHAiOiIyMDIzLTEwLTEzVDExOjU5OjE0LjkwNFoiLCJwdXIiOiJwZXJtYW5lbnRfcGFzc3dvcmRfYnlwYXNzIn19--aee5ded34bedee80bb841b77b1205d58a10f607e", "descriptionHtml": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "isGiftCard": false, "legacyResourceId": "6796217843901", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194755072} -{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796220989629", "title": "4 Ounce Soy Candle", "updatedAt": "2023-04-24T18:05:13Z", "createdAt": "2021-06-23T01:09:47Z", "publishedAt": "2021-06-23T01:09:47Z", "status": "ACTIVE", "vendor": "Hartmann Group", "productType": "Baby", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720178315453", "name": "Title", "position": 1, "values": ["Metal", "Test Variant 1", "Test Variant 2"]}], "handle": "4-ounce-soy-candle", "description": "updated_mon_24.04.2023", "tracksInventory": true, "totalInventory": 17, "totalVariants": 3, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://airbyte-integration-test.myshopify.com/products/4-ounce-soy-candle", "descriptionHtml": "updated_mon_24.04.2023", "isGiftCard": false, "legacyResourceId": "6796220989629", "mediaCount": 1, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194755073} -{"stream": "product_variants", "data": {"id": 40090579959997, "product_id": 6796217843901, "title": "Soft", "price": 85.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Soft", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2021-06-22T18:09:27-07:00", "taxable": true, "barcode": null, "grams": 391, "image_id": null, "weight": 391.0, "weight_unit": "g", "inventory_item_id": 42185194668221, "inventory_quantity": 12, "old_inventory_quantity": 12, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579959997", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194757681} -{"stream": "product_variants", "data": {"id": 40090585923773, "product_id": 6796220989629, "title": "Metal", "price": 19.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Metal", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:47-07:00", "updated_at": "2023-04-13T05:00:55-07:00", "taxable": true, "barcode": null, "grams": 112, "image_id": null, "weight": 112.0, "weight_unit": "g", "inventory_item_id": 42185200631997, "inventory_quantity": 15, "old_inventory_quantity": 15, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090585923773", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194758143} -{"stream": "product_variants", "data": {"id": 41561955827901, "product_id": 6796220989629, "title": "Test Variant 1", "price": 19.0, "sku": "", "position": 2, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Test Variant 1", "option2": null, "option3": null, "created_at": "2022-03-06T14:09:20-08:00", "updated_at": "2022-03-06T14:12:40-08:00", "taxable": true, "barcode": "", "grams": 112, "image_id": null, "weight": 112.0, "weight_unit": "g", "inventory_item_id": 43653682495677, "inventory_quantity": 2, "old_inventory_quantity": 2, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/41561955827901", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194758144} -{"stream": "shop", "data": {"id": 58033176765, "name": "airbyte integration test", "email": "sherif@airbyte.io", "domain": "airbyte-integration-test.myshopify.com", "province": "California", "country": "US", "address1": "350 29th Avenue", "zip": "94121", "city": "San Francisco", "source": null, "phone": "8023494963", "latitude": 37.7827286, "longitude": -122.4889911, "primary_locale": "en", "address2": "", "created_at": "2021-06-22T18:00:23-07:00", "updated_at": "2023-04-30T09:02:52-07:00", "country_code": "US", "country_name": "United States", "currency": "USD", "customer_email": "sherif@airbyte.io", "timezone": "(GMT-08:00) America/Los_Angeles", "iana_timezone": "America/Los_Angeles", "shop_owner": "Airbyte Airbyte", "money_format": "${{amount}}", "money_with_currency_format": "${{amount}} USD", "weight_unit": "kg", "province_code": "CA", "taxes_included": true, "auto_configure_tax_inclusivity": null, "tax_shipping": null, "county_taxes": true, "plan_display_name": "Developer Preview", "plan_name": "partner_test", "has_discounts": true, "has_gift_cards": false, "myshopify_domain": "airbyte-integration-test.myshopify.com", "google_apps_domain": null, "google_apps_login_enabled": null, "money_in_emails_format": "${{amount}}", "money_with_currency_in_emails_format": "${{amount}} USD", "eligible_for_payments": true, "requires_extra_payments_agreement": false, "password_enabled": true, "has_storefront": true, "finances": true, "primary_location_id": 63590301885, "checkout_api_supported": true, "multi_location_enabled": true, "setup_required": false, "pre_launch_enabled": false, "enabled_presentment_currencies": ["USD"], "transactional_sms_disabled": false, "marketing_sms_consent_enabled_at_checkout": false, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194759349} -{"stream": "smart_collections", "data": {"id": 273278566589, "handle": "test-collection", "title": "Test Collection", "updated_at": "2023-09-05T07:12:04-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-07-19T07:02:54-07:00", "sort_order": "best-selling", "template_suffix": "", "disjunctive": false, "rules": ["{'column': 'type', 'relation': 'equals', 'condition': 'Beauty'}"], "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/273278566589", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194760379} -{"stream": "tender_transactions", "data": {"id": 4464009117885, "order_id": 5033391718589, "amount": "19.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-24T11:00:08-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194761405} -{"stream": "transactions", "data": {"id": 5721110872253, "order_id": 4554821468349, "kind": "sale", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2022-06-15T05:16:52-07:00", "test": true, "authorization": "53433", "location_id": null, "user_id": null, "parent_id": null, "processed_at": "2022-06-15T05:16:52-07:00", "device_id": null, "error_code": null, "source_name": "580111", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}, "receipt": {"paid_amount": "57.23"}, "amount": 57.23, "currency": "USD", "payment_id": "c25048437719229.1", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721110872253", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194763489} -{"stream": "transactions", "data": {"id": 5721170968765, "order_id": 4554821468349, "kind": "refund", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2022-06-15T06:25:42-07:00", "test": true, "authorization": null, "location_id": null, "user_id": null, "parent_id": 5721110872253, "processed_at": "2022-06-15T06:25:42-07:00", "device_id": null, "error_code": null, "source_name": "1830279", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}, "receipt": {"paid_amount": "57.23"}, "amount": 57.23, "currency": "USD", "payment_id": "c25048437719229.2", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194763490} -{"stream": "transactions", "data": {"id": 4933790040253, "order_id": 3935377129661, "kind": "sale", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2021-07-02T00:51:49-07:00", "test": true, "authorization": "53433", "location_id": null, "user_id": null, "parent_id": null, "processed_at": "2021-07-02T00:51:49-07:00", "device_id": null, "error_code": null, "source_name": "shopify_draft_order", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 11, "credit_card_expiration_year": 2023}, "receipt": {"paid_amount": "102.00"}, "amount": 102.0, "currency": "USD", "payment_id": "c21670281707709.1", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/4933790040253", "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194764447} -{"stream": "customer_address", "data": {"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194770214} -{"stream": "customer_address", "data": {"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true, "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194770676} -{"stream": "countries", "data": {"id": 417014841533, "name": "Rest of World", "code": "*", "tax_name": "Tax", "tax": 0.0, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194771844} -{"stream": "countries", "data": {"id": 417014808765, "name": "Ukraine", "code": "UA", "tax_name": "PDV", "tax": 0.2, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1697194771845} +{"stream": "articles", "data": {"id": 558137508029, "title": "My new Article title", "created_at": "2022-10-07T16:09:02-07:00", "body_html": "

I like articles

\n

Yea, I like posting them through REST.

", "blog_id": 80417685693, "author": "John Smith", "user_id": null, "published_at": "2011-03-24T08:45:47-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "summary_html": null, "template_suffix": null, "handle": "my-new-article-title", "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558137508029", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953761718} +{"stream": "articles", "data": {"id": 558627979453, "title": "Test Blog Post", "created_at": "2023-04-14T03:19:02-07:00", "body_html": "Test Blog Post 1", "blog_id": 80417685693, "author": "Airbyte Airbyte", "user_id": "74861019325", "published_at": null, "updated_at": "2023-04-14T03:19:18-07:00", "summary_html": "", "template_suffix": "", "handle": "test-blog-post", "tags": "Has Been Tagged", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558627979453", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953761720} +{"stream": "articles", "data": {"id": 558999371965, "deleted_at": "2023-09-05T13:50:04-07:00", "updated_at": "2023-09-05T13:50:04-07:00", "deleted_message": "Online Store deleted an article: Test Article 1.", "deleted_description": "Online Store deleted an article: Test Article 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953762282} +{"stream": "blogs", "data": {"id": 80417685693, "handle": "news", "title": "News", "updated_at": "2023-09-05T14:02:00-07:00", "commentable": "no", "feedburner": null, "feedburner_location": null, "created_at": "2021-06-22T18:00:25-07:00", "template_suffix": null, "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/80417685693", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953764270} +{"stream": "blogs", "data": {"id": 85733114045, "deleted_at": "2023-09-06T03:30:22-07:00", "updated_at": "2023-09-06T03:30:22-07:00", "deleted_message": "Online Store deleted a blog: Test Blog 1.", "deleted_description": "Online Store deleted a blog: Test Blog 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953764809} +{"stream": "collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T14:06:59+00:00", "body_html": "updated_mon_24.04.2023", "sort_order": "BEST_SELLING", "template_suffix": "", "products_count": 1, "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "published_at": "2021-06-23T01:00:25+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953771931} +{"stream": "collections", "data": {"id": 273278566589, "handle": "test-collection", "title": "Test Collection", "updated_at": "2023-09-05T14:12:04+00:00", "body_html": "updated_mon_24.04.2023", "sort_order": "BEST_SELLING", "template_suffix": "", "products_count": 26, "admin_graphql_api_id": "gid://shopify/Collection/273278566589", "published_at": "2021-07-19T14:02:54+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953771932} +{"stream": "collects", "data": {"id": 29427031703741, "collection_id": 270889287869, "product_id": 6796220989629, "created_at": "2021-07-19T07:01:36-07:00", "updated_at": "2022-03-06T14:12:21-08:00", "position": 2, "sort_value": "0000000002", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953772898} +{"stream": "custom_collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T07:06:59-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-06-22T18:00:25-07:00", "sort_order": "best-selling", "template_suffix": "", "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953773873} +{"stream": "custom_collections", "data": {"id": 294253822141, "deleted_at": "2023-09-06T03:34:39-07:00", "updated_at": "2023-09-06T03:34:39-07:00", "deleted_message": "Airbyte Airbyte deleted a collection.", "deleted_description": "Airbyte Airbyte deleted a collection.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953774396} +{"stream": "customers", "data": {"id": 6569096478909, "email": "test@test.com", "created_at": "2023-04-13T02:30:04-07:00", "updated_at": "2023-04-24T06:53:48-07:00", "first_name": "New Test", "last_name": "Customer", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": "updated_mon_24.04.2023", "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": "+380639379992", "addresses": [{"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}], "accepts_marketing": true, "accepts_marketing_updated_at": "2023-04-13T02:30:04-07:00", "marketing_opt_in_level": "single_opt_in", "tax_exemptions": "[]", "email_marketing_consent": {"state": "subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": "2023-04-13T02:30:04-07:00"}, "sms_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null, "consent_collected_from": "SHOPIFY"}, "admin_graphql_api_id": "gid://shopify/Customer/6569096478909", "default_address": {"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953775493} +{"stream": "customers", "data": {"id": 6676027932861, "email": "marcos@airbyte.io", "created_at": "2023-07-11T13:07:45-07:00", "updated_at": "2023-07-11T13:07:45-07:00", "first_name": "MArcos", "last_name": "Millnitz", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": null, "addresses": [{"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}], "accepts_marketing": false, "accepts_marketing_updated_at": null, "marketing_opt_in_level": "single_opt_in", "tax_exemptions": "[]", "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "admin_graphql_api_id": "gid://shopify/Customer/6676027932861", "default_address": {"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953775495} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "updated_mon_24.04.2023", "id": 11539415990461, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/11539415990461", "price_rule_id": 945000284349, "updated_at": "2023-04-24T12:52:22+00:00", "created_at": "2021-07-07T14:23:11+00:00", "summary": "3% off entire order \u2022 One use per customer", "discount_type": "ORDER", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953782734} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "HZAVNV2487WC", "id": 11545139282109, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/11545139282109", "price_rule_id": 945205379261, "updated_at": "2023-12-07T11:40:44+00:00", "created_at": "2021-07-08T12:40:37+00:00", "summary": "Free shipping on all products \u2022 Minimum purchase of $1.00 \u2022 For all countries", "discount_type": "SHIPPING", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953782734} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "SUMMERSALE10OFF", "id": 13175793582269, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/13175793582269", "price_rule_id": 945205379261, "updated_at": "2023-12-07T11:40:44+00:00", "created_at": "2021-07-08T12:40:37+00:00", "summary": "Free shipping on all products \u2022 Minimum purchase of $1.00 \u2022 For all countries", "discount_type": "SHIPPING", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953782734} +{"stream": "draft_orders", "data": {"id": 874683629757, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2021-07-02T00:50:29-07:00", "updated_at": "2023-04-14T05:16:33-07:00", "tax_exempt": false, "completed_at": "2021-07-02T00:51:50-07:00", "name": "#D2", "status": "completed", "line_items": [{"id": 57443281666237, "variant_id": 40090604011709, "product_id": 6796229509309, "title": "8 Ounce Soy Candle", "variant_title": "Wooden", "sku": "", "vendor": "Bosco Inc", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 63, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 17.0}], "applied_discount": null, "name": "8 Ounce Soy Candle - Wooden", "properties": [], "custom": false, "price": 102.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/57443281666237"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/e155e3254d0c0d64fa90587de417e0f3", "applied_discount": null, "order_id": 3935377129661, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 17.0}], "tags": "", "note_attributes": [], "total_price": "102.00", "subtotal_price": "102.00", "total_tax": "17.00", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/874683629757", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953784884} +{"stream": "draft_orders", "data": {"id": 929019691197, "note": "updated_mon_24.04.2023", "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2022-02-22T03:23:19-08:00", "updated_at": "2023-04-24T07:18:06-07:00", "tax_exempt": false, "completed_at": null, "name": "#D21", "status": "open", "line_items": [{"id": 58117295538365, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 2, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295538365"}, {"id": 58117295571133, "variant_id": null, "product_id": null, "title": "Test Item", "variant_title": null, "sku": null, "vendor": null, "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 1000, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 0.17}], "applied_discount": null, "name": "Test Item", "properties": [], "custom": true, "price": 1.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295571133"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/12893992cc01fc67935ab014fcf9300f", "applied_discount": null, "order_id": null, "shipping_line": {"title": "Test Shipping Fee", "custom": true, "handle": null, "price": 3.0}, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}, {"rate": 0.2, "title": "PDV", "price": 0.17}], "tags": "", "note_attributes": [], "total_price": "42.00", "subtotal_price": "39.00", "total_tax": "6.50", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/929019691197", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953784892} +{"stream": "draft_orders", "data": {"id": 987391033533, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2023-04-13T04:56:17-07:00", "updated_at": "2023-04-13T04:56:17-07:00", "tax_exempt": false, "completed_at": null, "name": "#D25", "status": "open", "line_items": [{"id": 58116862083261, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.16}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862083261"}, {"id": 58116862116029, "variant_id": 41561955827901, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Test Variant 1", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Test Variant 1", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862116029"}, {"id": 58116862148797, "variant_id": 41561961824445, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Test Variant 2", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Test Variant 2", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862148797"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/d193a965f7815817a2d37fddb30bfdb2", "applied_discount": null, "order_id": null, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.16}, {"rate": 0.2, "title": "PDV", "price": 3.17}, {"rate": 0.2, "title": "PDV", "price": 3.17}], "tags": "", "note_attributes": [], "total_price": "57.00", "subtotal_price": "57.00", "total_tax": "9.50", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/987391033533", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953784893} +{"stream": "fulfillment_orders", "data": {"id": 5962451452093, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 431686549693, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-13T12:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-13T12:09:45+00:00", "updated_at": "2023-04-13T12:09:46+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5962451452093", "shop_id": 58033176765, "order_id": 5010584895677, "assigned_location_id": 63590301885, "line_items": [{"id": 12363725996221, "inventory_item_id": 42185218719933, "shop_id": 58033176765, "fulfillment_order_id": 5962451452093, "quantity": 1, "line_item_id": 12204214845629, "fulfillable_quantity": 0, "variant_id": 40090604011709}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953792126} +{"stream": "fulfillment_orders", "data": {"id": 5962452467901, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 431687532733, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-13T12:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-13T12:11:16+00:00", "updated_at": "2023-04-13T12:11:16+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5962452467901", "shop_id": 58033176765, "order_id": 5010585911485, "assigned_location_id": 63590301885, "line_items": [{"id": 12363727536317, "inventory_item_id": 43653688524989, "shop_id": 58033176765, "fulfillment_order_id": 5962452467901, "quantity": 1, "line_item_id": 12204216385725, "fulfillable_quantity": 0, "variant_id": 41561961824445}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953792129} +{"stream": "fulfillment_orders", "data": {"id": 5985636450493, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 442031046845, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-24T18:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-24T18:00:09+00:00", "updated_at": "2023-04-24T18:00:09+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5985636450493", "shop_id": 58033176765, "order_id": 5033391718589, "assigned_location_id": 63590301885, "line_items": [{"id": 12407122067645, "inventory_item_id": 43653688524989, "shop_id": 58033176765, "fulfillment_order_id": 5985636450493, "quantity": 1, "line_item_id": 12247585521853, "fulfillable_quantity": 0, "variant_id": 41561961824445}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953792131} +{"stream": "fulfillments", "data": {"id": 4451164913853, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451164913853", "created_at": "2023-04-13T05:09:45-07:00", "location_id": 63590301885, "name": "#1143.1", "order_id": 5010584895677, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:09:45-07:00", "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": "102.00", "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953793256} +{"stream": "fulfillments", "data": {"id": 4451169501373, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451169501373", "created_at": "2023-04-13T05:11:16-07:00", "location_id": 63590301885, "name": "#1144.1", "order_id": 5010585911485, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:11:16-07:00", "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": "19.00", "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953793263} +{"stream": "fulfillments", "data": {"id": 4075788501181, "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "created_at": "2022-06-15T05:16:55-07:00", "location_id": 63590301885, "name": "#1136.1", "order_id": 4554821468349, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2022-06-15T05:16:55-07:00", "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": "59.00", "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953793275} +{"stream": "inventory_items", "data": {"id": 44871665713341, "country_code_of_origin": null, "harmonized_system_code": null, "province_code_of_origin": null, "updated_at": "2023-04-14T10:29:27+00:00", "created_at": "2023-04-14T10:29:27+00:00", "sku": "", "tracked": true, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/InventoryItem/44871665713341", "cost": 60.0, "country_harmonized_system_codes": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953800805} +{"stream": "inventory_items", "data": {"id": 45419395743933, "country_code_of_origin": "UA", "harmonized_system_code": "330510", "province_code_of_origin": null, "updated_at": "2023-12-11T10:37:41+00:00", "created_at": "2023-12-11T10:37:41+00:00", "sku": "123", "tracked": true, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/InventoryItem/45419395743933", "cost": 29.0, "country_harmonized_system_codes": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953800806} +{"stream": "inventory_levels", "data": {"id": "63590301885|42185200631997", "available": 15, "updated_at": "2023-04-13T12:00:55+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185200631997", "inventory_item_id": 42185200631997, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953807899} +{"stream": "inventory_levels", "data": {"id": "63590301885|42185218719933", "available": 8, "updated_at": "2023-04-13T12:09:45+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185218719933", "inventory_item_id": 42185218719933, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953807904} +{"stream": "inventory_levels", "data": {"id": "63590301885|43653688524989", "available": 0, "updated_at": "2023-04-24T18:00:10+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=43653688524989", "inventory_item_id": 43653688524989, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953807905} +{"stream": "locations", "data": {"id": 63590301885, "name": "Heroiv UPA 72", "address1": "Heroiv UPA 72", "address2": "", "city": "Lviv", "zip": "30100", "province": null, "country": "UA", "phone": "", "created_at": "2021-06-22T18:00:29-07:00", "updated_at": "2023-11-28T07:08:27-08:00", "country_code": "UA", "country_name": "Ukraine", "province_code": null, "legacy": false, "active": true, "admin_graphql_api_id": "gid://shopify/Location/63590301885", "localized_country_name": "Ukraine", "localized_province_name": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953808895} +{"stream": "metafield_articles", "data": {"id": 21519818162365, "namespace": "global", "key": "new", "value": "newvalue", "description": null, "owner_id": 558137508029, "created_at": "2022-10-07T16:09:02-07:00", "updated_at": "2022-10-07T16:09:02-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519818162365", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953810882} +{"stream": "metafield_articles", "data": {"id": 22365709992125, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Article Metafield", "description": null, "owner_id": 558137508029, "created_at": "2023-04-14T03:18:26-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365709992125", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953810884} +{"stream": "metafield_articles", "data": {"id": 22365710352573, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Blog Post Metafiled", "description": null, "owner_id": 558627979453, "created_at": "2023-04-14T03:19:18-07:00", "updated_at": "2023-04-14T03:19:18-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710352573", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953811338} +{"stream": "metafield_blogs", "data": {"id": 21519428255933, "namespace": "some_fields", "key": "sponsor", "value": "Shopify", "description": null, "owner_id": 80417685693, "created_at": "2022-10-07T06:05:23-07:00", "updated_at": "2022-10-07T06:05:23-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519428255933", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953813888} +{"stream": "metafield_blogs", "data": {"id": 22365710745789, "namespace": "custom", "key": "test_blog_metafield", "value": "Test Blog Metafield", "description": null, "owner_id": 80417685693, "created_at": "2023-04-14T03:20:20-07:00", "updated_at": "2023-04-14T03:20:20-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710745789", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953813890} +{"stream": "metafield_collections", "data": {"id": 22365707174077, "namespace": "custom", "value": "Test Collection Metafield", "key": "test_collection_metafield", "description": null, "created_at": "2023-04-14T10:15:30+00:00", "updated_at": "2023-04-14T10:15:30+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365707174077", "owner_id": 270889287869, "owner_resource": "collection", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953821449} +{"stream": "metafield_collections", "data": {"id": 22366265573565, "namespace": "my_fields", "value": "51%", "key": "new_key", "description": null, "created_at": "2023-04-14T12:21:58+00:00", "updated_at": "2023-04-14T12:21:58+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366265573565", "owner_id": 273278566589, "owner_resource": "collection", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953821450} +{"stream": "metafield_customers", "data": {"id": 22346893361341, "namespace": "custom", "value": "Teste\n", "key": "test_definition_list_1", "description": null, "created_at": "2023-04-13T11:50:10+00:00", "updated_at": "2023-04-13T11:50:10+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893361341", "owner_id": 6569096478909, "owner_resource": "customer", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953828534} +{"stream": "metafield_customers", "data": {"id": 22346893394109, "namespace": "custom", "value": "Taster", "key": "test_definition", "description": null, "created_at": "2023-04-13T11:50:10+00:00", "updated_at": "2023-04-13T11:50:10+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893394109", "owner_id": 6569096478909, "owner_resource": "customer", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953828534} +{"stream": "metafield_draft_orders", "data": {"id": 22366258528445, "namespace": "discounts", "value": "50%", "key": "hello", "description": null, "created_at": "2023-04-14T12:16:33+00:00", "updated_at": "2023-04-14T12:16:33+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366258528445", "owner_id": 874683629757, "owner_resource": "draft_order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953835570} +{"stream": "metafield_draft_orders", "data": {"id": 22532787175613, "namespace": "new_metafield", "value": "updated_mon_24.04.2023", "key": "new_metafield", "description": null, "created_at": "2023-04-24T14:18:06+00:00", "updated_at": "2023-04-24T14:18:06+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22532787175613", "owner_id": 929019691197, "owner_resource": "draft_order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953835572} +{"stream": "metafield_locations", "data": {"id": 26246034161853, "namespace": "custom", "value": "2023-11-28 updated", "key": "test_location_metafield", "description": null, "created_at": "2023-11-28T15:08:26+00:00", "updated_at": "2023-11-28T15:08:26+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/26246034161853", "owner_id": 63590301885, "owner_resource": "location", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953842618} +{"stream": "metafield_orders", "data": {"id": 22347288150205, "namespace": "my_fields", "value": "asdfasdf", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:09:50+00:00", "updated_at": "2023-04-13T12:09:50+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347288150205", "owner_id": 5010584895677, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953849753} +{"stream": "metafield_orders", "data": {"id": 22347288740029, "namespace": "my_fields", "value": "asdfasdfasdf", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:11:20+00:00", "updated_at": "2023-04-13T12:11:20+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347288740029", "owner_id": 5010585911485, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953849753} +{"stream": "metafield_orders", "data": {"id": 22347287855293, "namespace": "my_fields", "value": "trtrtr", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:09:08+00:00", "updated_at": "2023-04-13T12:09:08+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347287855293", "owner_id": 4147980107965, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953849754} +{"stream": "metafield_pages", "data": {"id": 22365711499453, "namespace": "custom", "key": "test_page_metafield", "value": "Test Page Metafield", "description": null, "owner_id": 93795909821, "created_at": "2023-04-14T03:21:49-07:00", "updated_at": "2023-04-14T03:21:49-07:00", "owner_resource": "page", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365711499453", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953851755} +{"stream": "metafield_pages", "data": {"id": 22534014828733, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 83074252989, "created_at": "2023-04-24T11:08:41-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "owner_resource": "page", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534014828733", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953852192} +{"stream": "metafield_product_images", "data": {"id": 22365851517117, "namespace": "my_fields", "value": "natural coton", "key": "liner_material", "description": null, "created_at": "2023-04-14T11:59:27+00:00", "updated_at": "2023-04-14T11:59:27+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365851517117", "owner_id": 29301295481021, "owner_resource": "product_image", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953865505} +{"stream": "metafield_product_images", "data": {"id": 22533588451517, "namespace": "new_metafield", "value": "updated_mon_24.04.2023", "key": "new_metafield", "description": null, "created_at": "2023-04-24T17:32:19+00:00", "updated_at": "2023-04-24T17:32:19+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22533588451517", "owner_id": 29301297316029, "owner_resource": "product_image", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953865509} +{"stream": "metafield_products", "data": {"id": 22365729718461, "namespace": "custom", "value": "Test Product Metafield", "key": "product_metafield_test_2", "description": null, "created_at": "2023-04-14T10:31:19+00:00", "updated_at": "2023-04-14T10:31:19+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365729718461", "owner_id": 6796226560189, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953872773} +{"stream": "metafield_products", "data": {"id": 22365729816765, "namespace": "custom", "value": "gid://shopify/Product/6796229574845", "key": "test_product_metafield", "description": null, "created_at": "2023-04-14T10:31:29+00:00", "updated_at": "2023-04-14T10:31:29+00:00", "type": "product_reference", "admin_graphql_api_id": "gid://shopify/Metafield/22365729816765", "owner_id": 6796226560189, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953872775} +{"stream": "metafield_products", "data": {"id": 22365772251325, "namespace": "custom", "value": "Test", "key": "product_metafield_test_2", "description": null, "created_at": "2023-04-14T11:04:46+00:00", "updated_at": "2023-04-14T11:04:46+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365772251325", "owner_id": 6796229574845, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953872776} +{"stream": "metafield_product_variants", "data": {"id": 22365715955901, "namespace": "custom", "value": "Test Varia", "key": "test_variant_metafield", "description": null, "created_at": "2023-04-14T10:24:03+00:00", "updated_at": "2023-04-14T10:24:03+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365715955901", "owner_id": 41561961824445, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953885682} +{"stream": "metafield_product_variants", "data": {"id": 22365724082365, "namespace": "custom", "value": "Test Varia", "key": "test_variant_metafield", "description": null, "created_at": "2023-04-14T10:29:27+00:00", "updated_at": "2023-04-14T10:29:27+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365724082365", "owner_id": 42778150305981, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953885682} +{"stream": "metafield_product_variants", "data": {"id": 26493956391101, "namespace": "global", "value": "330510", "key": "harmonized_system_code", "description": null, "created_at": "2023-12-11T10:37:41+00:00", "updated_at": "2023-12-11T10:37:41+00:00", "type": "string", "admin_graphql_api_id": "gid://shopify/Metafield/26493956391101", "owner_id": 43315735396541, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953885683} +{"stream": "metafield_shops", "data": {"id": 19716782129341, "namespace": "inventory", "key": "warehouse", "value": "26", "description": null, "owner_id": 58033176765, "created_at": "2021-07-08T03:38:45-07:00", "updated_at": "2023-04-14T05:47:26-07:00", "owner_resource": "shop", "type": "number_integer", "admin_graphql_api_id": "gid://shopify/Metafield/19716782129341", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953886629} +{"stream": "metafield_shops", "data": {"id": 22534020104381, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 58033176765, "created_at": "2023-04-24T11:12:38-07:00", "updated_at": "2023-04-24T11:12:38-07:00", "owner_resource": "shop", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534020104381", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953886630} +{"stream": "metafield_smart_collections", "data": {"id": 21525604106429, "namespace": "my_fields", "key": "discount", "value": "50%", "description": null, "owner_id": 273278566589, "created_at": "2022-10-12T13:36:55-07:00", "updated_at": "2022-10-12T13:36:55-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21525604106429", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953888675} +{"stream": "metafield_smart_collections", "data": {"id": 22366265573565, "namespace": "my_fields", "key": "new_key", "value": "51%", "description": null, "owner_id": 273278566589, "created_at": "2023-04-14T05:21:58-07:00", "updated_at": "2023-04-14T05:21:58-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366265573565", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953888677} +{"stream": "order_refunds", "data": {"id": 852809646269, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "created_at": "2022-06-15T06:25:43-07:00", "note": null, "order_id": 4554821468349, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5721170968765, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "amount": "57.23", "authorization": null, "created_at": "2022-06-15T06:25:42-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 4554821468349, "parent_id": 5721110872253, "payment_id": "c25048437719229.2", "processed_at": "2022-06-15T06:25:42-07:00", "receipt": {"paid_amount": "57.23"}, "source_name": "1830279", "status": "success", "test": true, "user_id": null, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}}], "refund_line_items": [{"id": 363131404477, "line_item_id": 11406125564093, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 57.23, "subtotal_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": 1.77, "amount_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}, "discount_application_index": 0}]}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953889759} +{"stream": "order_refunds", "data": {"id": 845032358077, "admin_graphql_api_id": "gid://shopify/Refund/845032358077", "created_at": "2022-03-07T02:09:04-08:00", "note": null, "order_id": 4147980107965, "processed_at": "2022-03-07T02:09:04-08:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [], "refund_line_items": [{"id": 352716947645, "line_item_id": 10576771317949, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 27.0, "subtotal_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 10576771317949, "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 285, "name": "Red & Silver Fishing Lure - Plastic", "price": 27.0, "price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796218302653, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "Red & Silver Fishing Lure", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090580615357, "variant_inventory_management": "shopify", "variant_title": "Plastic", "vendor": "Harris - Hamill", "tax_lines": [], "duties": [], "discount_allocations": []}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953889761} +{"stream": "order_refunds", "data": {"id": 829538369725, "admin_graphql_api_id": "gid://shopify/Refund/829538369725", "created_at": "2021-09-21T05:31:59-07:00", "note": "test refund", "order_id": 3935377129661, "processed_at": "2021-09-21T05:31:59-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5189894406333, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5189894406333", "amount": "102.00", "authorization": null, "created_at": "2021-09-21T05:31:58-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 3935377129661, "parent_id": 4933790040253, "payment_id": "c21670281707709.2", "processed_at": "2021-09-21T05:31:58-07:00", "receipt": {"paid_amount": "102.00"}, "source_name": "1830279", "status": "success", "test": true, "user_id": 74861019325, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 11, "credit_card_expiration_year": 2023}}], "refund_line_items": [{"id": 332807864509, "line_item_id": 10130216452285, "location_id": 63590301885, "quantity": 1, "restock_type": "cancel", "subtotal": 102.0, "subtotal_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "line_item": {"id": 10130216452285, "admin_graphql_api_id": "gid://shopify/LineItem/10130216452285", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": null, "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953889762} +{"stream": "order_risks", "data": {"id": 6446736474301, "order_id": 4147980107965, "checkout_id": null, "source": "External", "score": 1.0, "recommendation": "cancel", "display": true, "cause_cancel": true, "message": "This order came from an anonymous proxy", "merchant_message": "This order came from an anonymous proxy", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953893694} +{"stream": "orders", "data": {"id": 5010584895677, "admin_graphql_api_id": "gid://shopify/Order/5010584895677", "app_id": 1354745, "browser_ip": "109.162.18.117", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 27351199088829, "checkout_token": "4064bfadc2457c9e15f2c7b4ee7ddb7d", "client_details": {"accept_language": null, "browser_height": null, "browser_ip": "109.162.18.117", "browser_width": null, "session_hash": null, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}, "closed_at": "2023-04-13T05:09:46-07:00", "company": null, "confirmation_number": "ECI3YZGWP", "confirmed": true, "contact_email": null, "created_at": "2023-04-13T05:09:44-07:00", "currency": "USD", "current_subtotal_price": 102.0, "current_subtotal_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 102.0, "current_total_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "current_total_tax": 17.0, "current_total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": "fulfilled", "landing_site": null, "landing_site_ref": null, "location_id": 63590301885, "merchant_of_record_app_id": null, "name": "#1143", "note": null, "note_attributes": [], "number": 143, "order_number": 1143, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/ad85969259bee7d4b380744934e67556/authenticate?key=cdd70808759b04f31c29975ba796fce9", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["manual"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2023-04-13T05:09:44-07:00", "reference": "b9344c8b118753db132edd503dc91515", "referring_site": null, "source_identifier": "b9344c8b118753db132edd503dc91515", "source_name": "shopify_draft_order", "source_url": null, "subtotal_price": 102.0, "subtotal_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "tags": "", "tax_exempt": false, "tax_lines": [{"price": 17.0, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "channel_liable": false}], "taxes_included": true, "test": false, "token": "ad85969259bee7d4b380744934e67556", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 102.0, "total_line_items_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 102.0, "total_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 63, "updated_at": "2023-04-13T05:09:50-07:00", "user_id": 74861019325, "billing_address": null, "customer": null, "discount_applications": [], "fulfillments": [{"id": 4451164913853, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451164913853", "created_at": "2023-04-13T05:09:45-07:00", "location_id": 63590301885, "name": "#1143.1", "order_id": 5010584895677, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:09:45-07:00", "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}]}], "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953896328} +{"stream": "orders", "data": {"id": 5010585911485, "admin_graphql_api_id": "gid://shopify/Order/5010585911485", "app_id": 1354745, "browser_ip": "109.162.18.117", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 27351203774653, "checkout_token": "117b35b4fd64c8de8d984830b72edfaf", "client_details": {"accept_language": null, "browser_height": null, "browser_ip": "109.162.18.117", "browser_width": null, "session_hash": null, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}, "closed_at": "2023-04-13T05:11:17-07:00", "company": null, "confirmation_number": "CQPWZK5ZU", "confirmed": true, "contact_email": null, "created_at": "2023-04-13T05:11:15-07:00", "currency": "USD", "current_subtotal_price": 19.0, "current_subtotal_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 19.0, "current_total_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "current_total_tax": 3.17, "current_total_tax_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": "fulfilled", "landing_site": null, "landing_site_ref": null, "location_id": 63590301885, "merchant_of_record_app_id": null, "name": "#1144", "note": null, "note_attributes": [], "number": 144, "order_number": 1144, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/a2d4a8a04fc6ec52a85f1811d269c88f/authenticate?key=a26b27cc1a040df3a1d7c67f6b14df75", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["manual"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2023-04-13T05:11:15-07:00", "reference": "f75c72a120e34e15a4dbc2d32315cc72", "referring_site": null, "source_identifier": "f75c72a120e34e15a4dbc2d32315cc72", "source_name": "shopify_draft_order", "source_url": null, "subtotal_price": 19.0, "subtotal_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "tags": "", "tax_exempt": false, "tax_lines": [{"price": 3.17, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "channel_liable": false}], "taxes_included": true, "test": false, "token": "a2d4a8a04fc6ec52a85f1811d269c88f", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 19.0, "total_line_items_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 19.0, "total_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 3.17, "total_tax_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 112, "updated_at": "2023-04-13T05:11:20-07:00", "user_id": 74861019325, "billing_address": null, "customer": null, "discount_applications": [], "fulfillments": [{"id": 4451169501373, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451169501373", "created_at": "2023-04-13T05:11:16-07:00", "location_id": 63590301885, "name": "#1144.1", "order_id": 5010585911485, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:11:16-07:00", "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": 19.0, "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}]}], "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": 19.0, "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953896336} +{"stream": "orders", "data": {"id": 4554821468349, "admin_graphql_api_id": "gid://shopify/Order/4554821468349", "app_id": 580111, "browser_ip": "176.113.167.23", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 25048437719229, "checkout_token": "cf5d16a0a0688905bd551c6dec591506", "client_details": {"accept_language": "en-US,en;q=0.9,uk;q=0.8", "browser_height": 754, "browser_ip": "176.113.167.23", "browser_width": 1519, "session_hash": null, "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"}, "closed_at": "2022-06-15T06:25:43-07:00", "company": null, "confirmation_number": null, "confirmed": true, "contact_email": "integration-test@airbyte.io", "created_at": "2022-06-15T05:16:53-07:00", "currency": "USD", "current_subtotal_price": 0.0, "current_subtotal_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 0.0, "current_total_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_tax": 0.0, "current_total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "integration-test@airbyte.io", "estimated_taxes": false, "financial_status": "refunded", "fulfillment_status": "fulfilled", "landing_site": "/wallets/checkouts.json", "landing_site_ref": null, "location_id": null, "merchant_of_record_app_id": null, "name": "#1136", "note": "updated_mon_24.04.2023", "note_attributes": [], "number": 136, "order_number": 1136, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/e4f98630ea44a884e33e700203ce2130/authenticate?key=edf087d6ae55a4541bf1375432f6a4b8", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["bogus"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2022-06-15T05:16:53-07:00", "reference": null, "referring_site": "https://airbyte-integration-test.myshopify.com/products/all-black-sneaker-right-foot", "source_identifier": null, "source_name": "web", "source_url": null, "subtotal_price": 57.23, "subtotal_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "tags": "Refund", "tax_exempt": false, "tax_lines": [], "taxes_included": true, "test": true, "token": "e4f98630ea44a884e33e700203ce2130", "total_discounts": 1.77, "total_discounts_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}, "total_line_items_price": 59.0, "total_line_items_price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 57.23, "total_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 0, "updated_at": "2023-04-24T07:00:37-07:00", "user_id": null, "billing_address": {"first_name": "Iryna", "address1": "2261 Market Street", "phone": null, "city": "San Francisco", "zip": "94114", "province": "California", "country": "United States", "last_name": "Grankova", "address2": "4381", "company": null, "latitude": 37.7647751, "longitude": -122.4320369, "name": "Iryna Grankova", "country_code": "US", "province_code": "CA"}, "customer": {"id": 5362027233469, "email": "integration-test@airbyte.io", "created_at": "2021-07-08T05:41:47-07:00", "updated_at": "2022-06-22T03:50:13-07:00", "first_name": "Airbyte", "last_name": "Team", "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "tags": "", "currency": "USD", "accepts_marketing": false, "accepts_marketing_updated_at": null, "marketing_opt_in_level": "single_opt_in", "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/5362027233469", "default_address": {"id": 7492260823229, "customer_id": 5362027233469, "first_name": "Airbyte", "last_name": "Team", "company": null, "address1": "2261 Market Street", "address2": "4381", "city": "San Francisco", "province": "California", "country": "United States", "zip": "94114", "phone": null, "name": "Airbyte Team", "province_code": "CA", "country_code": "US", "country_name": "United States", "default": true}}, "discount_applications": [{"target_type": "line_item", "type": "automatic", "value": "3.0", "value_type": "percentage", "allocation_method": "across", "target_selection": "all", "title": "eeeee"}], "fulfillments": [{"id": 4075788501181, "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "created_at": "2022-06-15T05:16:55-07:00", "location_id": 63590301885, "name": "#1136.1", "order_id": 4554821468349, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2022-06-15T05:16:55-07:00", "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}]}], "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}], "payment_terms": null, "refunds": [{"id": 852809646269, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "created_at": "2022-06-15T06:25:43-07:00", "note": null, "order_id": 4554821468349, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5721170968765, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "amount": "57.23", "authorization": null, "created_at": "2022-06-15T06:25:42-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 4554821468349, "parent_id": 5721110872253, "payment_id": "c25048437719229.2", "processed_at": "2022-06-15T06:25:42-07:00", "receipt": {"paid_amount": "57.23"}, "source_name": "1830279", "status": "success", "test": true, "user_id": null, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}}], "refund_line_items": [{"id": 363131404477, "line_item_id": 11406125564093, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 57.23, "subtotal_set": {"shop_money": {"amount": "57.23", "currency_code": "USD"}, "presentment_money": {"amount": "57.23", "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": "59.00", "price_set": {"shop_money": {"amount": "59.00", "currency_code": "USD"}, "presentment_money": {"amount": "59.00", "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}}], "duties": []}], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953896344} +{"stream": "pages", "data": {"id": 93795909821, "title": "Test Page", "shop_id": 58033176765, "handle": "test-page", "body_html": "Test Page 1", "author": null, "created_at": "2023-04-14T03:21:40-07:00", "updated_at": "2023-04-14T03:21:49-07:00", "published_at": "2023-04-14T03:21:40-07:00", "template_suffix": "", "admin_graphql_api_id": "gid://shopify/OnlineStorePage/93795909821", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953897896} +{"stream": "pages", "data": {"id": 83074252989, "title": "Warranty information", "shop_id": 58033176765, "handle": "warranty-information", "body_html": "updated_mon_24.04.2023", "author": "Shopify API", "created_at": "2021-07-08T05:19:00-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "published_at": "2021-07-08T05:19:00-07:00", "template_suffix": null, "admin_graphql_api_id": "gid://shopify/OnlineStorePage/83074252989", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953897896} +{"stream": "pages", "data": {"id": 95926616253, "deleted_at": "2023-09-06T03:37:06-07:00", "updated_at": "2023-09-06T03:37:06-07:00", "deleted_message": "Online Store deleted a page: Test Page for delete.", "deleted_description": "Online Store deleted a page: Test Page for delete.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953898431} +{"stream": "price_rules", "data": {"id": 1112171741373, "value_type": "fixed_amount", "value": "-10.0", "customer_selection": "all", "target_type": "line_item", "target_selection": "all", "allocation_method": "across", "allocation_limit": null, "once_per_customer": false, "usage_limit": null, "starts_at": "2017-01-19T09:59:10-08:00", "ends_at": null, "created_at": "2022-10-14T10:19:39-07:00", "updated_at": "2023-04-14T05:24:53-07:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": null, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "New Title 2023", "admin_graphql_api_id": "gid://shopify/PriceRule/1112171741373", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953899511} +{"stream": "price_rules", "data": {"id": 945000284349, "value_type": "percentage", "value": "-3.0", "customer_selection": "all", "target_type": "line_item", "target_selection": "all", "allocation_method": "across", "allocation_limit": null, "once_per_customer": true, "usage_limit": 10, "starts_at": "2021-07-07T07:22:04-07:00", "ends_at": null, "created_at": "2021-07-07T07:23:11-07:00", "updated_at": "2023-04-24T05:52:22-07:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": null, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "1V8Z165KSH5T", "admin_graphql_api_id": "gid://shopify/PriceRule/945000284349", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953899512} +{"stream": "price_rules", "data": {"id": 945205379261, "value_type": "percentage", "value": "-100.0", "customer_selection": "all", "target_type": "shipping_line", "target_selection": "all", "allocation_method": "each", "allocation_limit": null, "once_per_customer": false, "usage_limit": null, "starts_at": "2021-07-08T05:40:13-07:00", "ends_at": "2024-01-01T23:59:59-08:00", "created_at": "2021-07-08T05:40:37-07:00", "updated_at": "2023-12-07T03:40:44-08:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": {"greater_than_or_equal_to": "1.0"}, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "HZAVNV2487WC", "admin_graphql_api_id": "gid://shopify/PriceRule/945205379261", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953899513} +{"stream": "product_images", "data": {"id": 29301295481021, "alt": null, "position": 1, "product_id": 6796218138813, "created_at": "2021-06-22T18:09:28-07:00", "updated_at": "2021-06-22T18:09:28-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295481021", "width": 4393, "height": 2929, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/tin-of-beard-balm.jpg?v=1624410568", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953901149} +{"stream": "product_images", "data": {"id": 29301295513789, "alt": null, "position": 1, "product_id": 6796218269885, "created_at": "2021-06-22T18:09:29-07:00", "updated_at": "2021-06-22T18:09:29-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295513789", "width": 3840, "height": 2560, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/pair-of-all-black-sneakers.jpg?v=1624410569", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953901154} +{"stream": "product_images", "data": {"id": 29301295546557, "alt": null, "position": 1, "product_id": 6796218302653, "created_at": "2021-06-22T18:09:29-07:00", "updated_at": "2021-06-22T18:09:29-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295546557", "width": 3960, "height": 2640, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/red-silver-fishing-lure.jpg?v=1624410569", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953901155} +{"stream": "products", "data": {"id": 6796217909437, "title": "Red And Navy Tee Sleeve", "body_html": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "vendor": "Little Group", "product_type": "Movies", "created_at": "2021-06-22T18:09:27-07:00", "handle": "red-and-navy-tee-sleeve", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217909437", "variants": [{"id": 40090579992765, "product_id": 6796217909437, "title": "Plastic", "price": 23.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Plastic", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 39, "weight": 39.0, "weight_unit": "g", "inventory_item_id": 42185194700989, "inventory_quantity": 3, "old_inventory_quantity": 3, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579992765", "image_id": null}], "options": [{"id": 8720175235261, "product_id": 6796217909437, "name": "Title", "position": 1, "values": ["Plastic"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953903012} +{"stream": "products", "data": {"id": 6796217942205, "title": "Grey T-Shirt", "body_html": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "vendor": "Lang - Bogisich", "product_type": "Home", "created_at": "2021-06-22T18:09:27-07:00", "handle": "grey-t-shirt", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217942205", "variants": [{"id": 40090580025533, "product_id": 6796217942205, "title": "Granite", "price": 70.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Granite", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 0, "weight": 0.0, "weight_unit": "g", "inventory_item_id": 42185194733757, "inventory_quantity": 38, "old_inventory_quantity": 38, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580025533", "image_id": null}], "options": [{"id": 8720175268029, "product_id": 6796217942205, "name": "Title", "position": 1, "values": ["Granite"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953903015} +{"stream": "products", "data": {"id": 6796217974973, "title": "Pool Floaty Icecream", "body_html": "Inflatable pink ice cream pool toy.", "vendor": "Fritsch - Ferry", "product_type": "Grocery", "created_at": "2021-06-22T18:09:27-07:00", "handle": "pool-floaty-icecream", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217974973", "variants": [{"id": 40090580091069, "product_id": 6796217974973, "title": "magenta", "price": 57.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "magenta", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 499, "weight": 499.0, "weight_unit": "g", "inventory_item_id": 42185194766525, "inventory_quantity": 1, "old_inventory_quantity": 1, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580091069", "image_id": null}], "options": [{"id": 8720175300797, "product_id": 6796217974973, "name": "Title", "position": 1, "values": ["magenta"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953903015} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217843901", "title": "Lace Detail On Womens Top", "updatedAt": "2023-09-05T14:12:05Z", "createdAt": "2021-06-23T01:09:26Z", "publishedAt": null, "status": "ARCHIVED", "vendor": "Hayes, Hettinger and Hauck", "productType": "Beauty", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175169725", "name": "Title", "position": 1, "values": ["Soft"]}], "handle": "lace-detail-on-womens-top", "description": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "tracksInventory": true, "totalInventory": 12, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://2p5oyhnqeai50h4v-58033176765.shopifypreview.com/products_preview?preview_key=0684b80dc464e2ee090442093af4a856&_bt=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaXRoYVhKaWVYUmxMV2x1ZEdWbmNtRjBhVzl1TFhSbGMzUXViWGx6YUc5d2FXWjVMbU52YlFZNkJrVlUiLCJleHAiOiIyMDI0LTAyLTI2VDE0OjI1OjA2LjQwMVoiLCJwdXIiOiJwZXJtYW5lbnRfcGFzc3dvcmRfYnlwYXNzIn19--7b63f2609629fadb3ba6b372b742a474055b5d14", "descriptionHtml": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "isGiftCard": false, "legacyResourceId": "6796217843901", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953906953} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217909437", "title": "Red And Navy Tee Sleeve", "updatedAt": "2023-04-20T11:12:25Z", "createdAt": "2021-06-23T01:09:27Z", "publishedAt": "2021-06-23T01:09:27Z", "status": "ACTIVE", "vendor": "Little Group", "productType": "Movies", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175235261", "name": "Title", "position": 1, "values": ["Plastic"]}], "handle": "red-and-navy-tee-sleeve", "description": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "tracksInventory": true, "totalInventory": 3, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://airbyte-integration-test.myshopify.com/products/red-and-navy-tee-sleeve", "descriptionHtml": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "isGiftCard": false, "legacyResourceId": "6796217909437", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953906955} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217942205", "title": "Grey T-Shirt", "updatedAt": "2023-04-20T11:12:25Z", "createdAt": "2021-06-23T01:09:27Z", "publishedAt": "2021-06-23T01:09:27Z", "status": "ACTIVE", "vendor": "Lang - Bogisich", "productType": "Home", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175268029", "name": "Title", "position": 1, "values": ["Granite"]}], "handle": "grey-t-shirt", "description": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "tracksInventory": true, "totalInventory": 38, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://airbyte-integration-test.myshopify.com/products/grey-t-shirt", "descriptionHtml": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "isGiftCard": false, "legacyResourceId": "6796217942205", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953906956} +{"stream": "product_variants", "data": {"id": 40090579992765, "product_id": 6796217909437, "title": "Plastic", "price": 23.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Plastic", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 39, "weight": 39.0, "weight_unit": "g", "inventory_item_id": 42185194700989, "inventory_quantity": 3, "old_inventory_quantity": 3, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579992765", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953908829} +{"stream": "product_variants", "data": {"id": 40090580025533, "product_id": 6796217942205, "title": "Granite", "price": 70.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Granite", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 0, "weight": 0.0, "weight_unit": "g", "inventory_item_id": 42185194733757, "inventory_quantity": 38, "old_inventory_quantity": 38, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580025533", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953908831} +{"stream": "product_variants", "data": {"id": 40090580091069, "product_id": 6796217974973, "title": "magenta", "price": 57.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "magenta", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 499, "weight": 499.0, "weight_unit": "g", "inventory_item_id": 42185194766525, "inventory_quantity": 1, "old_inventory_quantity": 1, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580091069", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953908832} +{"stream": "shop", "data": {"id": 58033176765, "name": "airbyte integration test", "email": "sherif@airbyte.io", "domain": "airbyte-integration-test.myshopify.com", "province": "California", "country": "US", "address1": "350 29th Avenue", "zip": "94121", "city": "San Francisco", "source": null, "phone": "8023494963", "latitude": 37.7827286, "longitude": -122.4889911, "primary_locale": "en", "address2": "", "created_at": "2021-06-22T18:00:23-07:00", "updated_at": "2024-01-30T21:11:05-08:00", "country_code": "US", "country_name": "United States", "currency": "USD", "customer_email": "sherif@airbyte.io", "timezone": "(GMT-08:00) America/Los_Angeles", "iana_timezone": "America/Los_Angeles", "shop_owner": "Airbyte Airbyte", "money_format": "${{amount}}", "money_with_currency_format": "${{amount}} USD", "weight_unit": "kg", "province_code": "CA", "taxes_included": true, "auto_configure_tax_inclusivity": null, "tax_shipping": null, "county_taxes": true, "plan_display_name": "Developer Preview", "plan_name": "partner_test", "has_discounts": true, "has_gift_cards": false, "myshopify_domain": "airbyte-integration-test.myshopify.com", "google_apps_domain": null, "google_apps_login_enabled": null, "money_in_emails_format": "${{amount}}", "money_with_currency_in_emails_format": "${{amount}} USD", "eligible_for_payments": true, "requires_extra_payments_agreement": false, "password_enabled": true, "has_storefront": true, "finances": true, "primary_location_id": 63590301885, "checkout_api_supported": true, "multi_location_enabled": true, "setup_required": false, "pre_launch_enabled": false, "enabled_presentment_currencies": ["USD"], "transactional_sms_disabled": false, "marketing_sms_consent_enabled_at_checkout": false, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953910990} +{"stream": "smart_collections", "data": {"id": 273278566589, "handle": "test-collection", "title": "Test Collection", "updated_at": "2023-09-05T07:12:04-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-07-19T07:02:54-07:00", "sort_order": "best-selling", "template_suffix": "", "disjunctive": false, "rules": ["{'column': 'type', 'relation': 'equals', 'condition': 'Beauty'}"], "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/273278566589", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953912019} +{"stream": "tender_transactions", "data": {"id": 4464009117885, "order_id": 5033391718589, "amount": "19.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-24T11:00:08-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953913062} +{"stream": "tender_transactions", "data": {"id": 4448993542333, "order_id": 5010585911485, "amount": "19.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-13T05:11:15-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953913064} +{"stream": "tender_transactions", "data": {"id": 4448992690365, "order_id": 5010584895677, "amount": "102.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-13T05:09:44-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953913065} +{"stream": "transactions", "data": {"id": 6281692217533, "error_code": null, "test": false, "kind": "SALE", "amount": 102.0, "receipt": "{}", "gateway": "manual", "authorization": null, "created_at": "2023-04-13T12:09:44+00:00", "status": "SUCCESS", "processed_at": "2023-04-13T12:09:44+00:00", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "payment_id": "r9BerEaVJ5OzQNmPGZsK2V7zq", "payment_details": null, "order_id": 5010584895677, "currency": "USD", "admin_graphql_api_id": "gid://shopify/OrderTransaction/6281692217533", "parent_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953920174} +{"stream": "transactions", "data": {"id": 6281693561021, "error_code": null, "test": false, "kind": "SALE", "amount": 19.0, "receipt": "{}", "gateway": "manual", "authorization": null, "created_at": "2023-04-13T12:11:15+00:00", "status": "SUCCESS", "processed_at": "2023-04-13T12:11:15+00:00", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "payment_id": "rguGpKMnZqzpEzPvDfnSS8x4B", "payment_details": null, "order_id": 5010585911485, "currency": "USD", "admin_graphql_api_id": "gid://shopify/OrderTransaction/6281693561021", "parent_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953920180} +{"stream": "transactions", "data": {"id": 6302086037693, "error_code": null, "test": false, "kind": "SALE", "amount": 19.0, "receipt": "{}", "gateway": "manual", "authorization": null, "created_at": "2023-04-24T18:00:08+00:00", "status": "SUCCESS", "processed_at": "2023-04-24T18:00:08+00:00", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "payment_id": "ru7Najsh1HavL8RRkZHavCzGe", "payment_details": null, "order_id": 5033391718589, "currency": "USD", "admin_graphql_api_id": "gid://shopify/OrderTransaction/6302086037693", "parent_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953920187} +{"stream": "customer_address", "data": {"address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "country": "United States", "country_code": "US", "company": "Test Company", "first_name": "New Test", "id": 8092523135165, "last_name": "Customer", "name": "New Test Customer", "phone": "", "province": "New Jersey", "province_code": "NJ", "zip": "07410", "customer_id": 6569096478909, "country_name": "United States", "default": true, "updated_at": "2023-04-24T13:53:48+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953929853} +{"stream": "customer_address", "data": {"address1": null, "address2": null, "city": null, "country": null, "country_code": null, "company": null, "first_name": "MArcos", "id": 8212915650749, "last_name": "Millnitz", "name": "MArcos Millnitz", "phone": null, "province": null, "province_code": null, "zip": null, "customer_id": 6676027932861, "country_name": null, "default": true, "updated_at": "2023-07-11T20:07:45+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953929855} +{"stream": "countries", "data": {"id": 417014841533, "name": "Rest of World", "code": "*", "tax_name": "Tax", "tax": 0.0, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953930918} +{"stream": "countries", "data": {"id": 417014808765, "name": "Ukraine", "code": "UA", "tax_name": "PDV", "tax": 0.2, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953930918} diff --git a/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records_transactions_with_user_id.jsonl b/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records_transactions_with_user_id.jsonl new file mode 100644 index 000000000000..37be336a3ed6 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/integration_tests/expected_records_transactions_with_user_id.jsonl @@ -0,0 +1,96 @@ +{"stream": "articles", "data": {"id": 558137508029, "title": "My new Article title", "created_at": "2022-10-07T16:09:02-07:00", "body_html": "

I like articles

\n

Yea, I like posting them through REST.

", "blog_id": 80417685693, "author": "John Smith", "user_id": null, "published_at": "2011-03-24T08:45:47-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "summary_html": null, "template_suffix": null, "handle": "my-new-article-title", "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558137508029", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953538863} +{"stream": "articles", "data": {"id": 558627979453, "title": "Test Blog Post", "created_at": "2023-04-14T03:19:02-07:00", "body_html": "Test Blog Post 1", "blog_id": 80417685693, "author": "Airbyte Airbyte", "user_id": "74861019325", "published_at": null, "updated_at": "2023-04-14T03:19:18-07:00", "summary_html": "", "template_suffix": "", "handle": "test-blog-post", "tags": "Has Been Tagged", "admin_graphql_api_id": "gid://shopify/OnlineStoreArticle/558627979453", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953538864} +{"stream": "articles", "data": {"id": 558999371965, "deleted_at": "2023-09-05T13:50:04-07:00", "updated_at": "2023-09-05T13:50:04-07:00", "deleted_message": "Online Store deleted an article: Test Article 1.", "deleted_description": "Online Store deleted an article: Test Article 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953539407} +{"stream": "blogs", "data": {"id": 80417685693, "handle": "news", "title": "News", "updated_at": "2023-09-05T14:02:00-07:00", "commentable": "no", "feedburner": null, "feedburner_location": null, "created_at": "2021-06-22T18:00:25-07:00", "template_suffix": null, "tags": "Has Been Tagged, This Post", "admin_graphql_api_id": "gid://shopify/OnlineStoreBlog/80417685693", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953541474} +{"stream": "blogs", "data": {"id": 85733114045, "deleted_at": "2023-09-06T03:30:22-07:00", "updated_at": "2023-09-06T03:30:22-07:00", "deleted_message": "Online Store deleted a blog: Test Blog 1.", "deleted_description": "Online Store deleted a blog: Test Blog 1.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953541999} +{"stream": "collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T14:06:59+00:00", "body_html": "updated_mon_24.04.2023", "sort_order": "BEST_SELLING", "template_suffix": "", "products_count": 1, "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "published_at": "2021-06-23T01:00:25+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953549142} +{"stream": "collections", "data": {"id": 273278566589, "handle": "test-collection", "title": "Test Collection", "updated_at": "2023-09-05T14:12:04+00:00", "body_html": "updated_mon_24.04.2023", "sort_order": "BEST_SELLING", "template_suffix": "", "products_count": 26, "admin_graphql_api_id": "gid://shopify/Collection/273278566589", "published_at": "2021-07-19T14:02:54+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953549142} +{"stream": "collects", "data": {"id": 29427031703741, "collection_id": 270889287869, "product_id": 6796220989629, "created_at": "2021-07-19T07:01:36-07:00", "updated_at": "2022-03-06T14:12:21-08:00", "position": 2, "sort_value": "0000000002", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953550149} +{"stream": "custom_collections", "data": {"id": 270889287869, "handle": "frontpage", "title": "Home page", "updated_at": "2023-09-05T07:06:59-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-06-22T18:00:25-07:00", "sort_order": "best-selling", "template_suffix": "", "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/270889287869", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953551166} +{"stream": "custom_collections", "data": {"id": 294253822141, "deleted_at": "2023-09-06T03:34:39-07:00", "updated_at": "2023-09-06T03:34:39-07:00", "deleted_message": "Airbyte Airbyte deleted a collection.", "deleted_description": "Airbyte Airbyte deleted a collection.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953551694} +{"stream": "customers", "data": {"id": 6569096478909, "email": "test@test.com", "created_at": "2023-04-13T02:30:04-07:00", "updated_at": "2023-04-24T06:53:48-07:00", "first_name": "New Test", "last_name": "Customer", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": "updated_mon_24.04.2023", "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": "+380639379992", "addresses": [{"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}], "accepts_marketing": true, "accepts_marketing_updated_at": "2023-04-13T02:30:04-07:00", "marketing_opt_in_level": "single_opt_in", "tax_exemptions": "[]", "email_marketing_consent": {"state": "subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": "2023-04-13T02:30:04-07:00"}, "sms_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null, "consent_collected_from": "SHOPIFY"}, "admin_graphql_api_id": "gid://shopify/Customer/6569096478909", "default_address": {"id": 8092523135165, "customer_id": 6569096478909, "first_name": "New Test", "last_name": "Customer", "company": "Test Company", "address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "province": "New Jersey", "country": "United States", "zip": "07410", "phone": "", "name": "New Test Customer", "province_code": "NJ", "country_code": "US", "country_name": "United States", "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953552788} +{"stream": "customers", "data": {"id": 6676027932861, "email": "marcos@airbyte.io", "created_at": "2023-07-11T13:07:45-07:00", "updated_at": "2023-07-11T13:07:45-07:00", "first_name": "MArcos", "last_name": "Millnitz", "orders_count": 0, "state": "disabled", "total_spent": 0.0, "last_order_id": null, "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "tags": "", "last_order_name": null, "currency": "USD", "phone": null, "addresses": [{"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}], "accepts_marketing": false, "accepts_marketing_updated_at": null, "marketing_opt_in_level": "single_opt_in", "tax_exemptions": "[]", "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "admin_graphql_api_id": "gid://shopify/Customer/6676027932861", "default_address": {"id": 8212915650749, "customer_id": 6676027932861, "first_name": "MArcos", "last_name": "Millnitz", "company": null, "address1": null, "address2": null, "city": null, "province": null, "country": null, "zip": null, "phone": null, "name": "MArcos Millnitz", "province_code": null, "country_code": null, "country_name": null, "default": true}, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953552789} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "updated_mon_24.04.2023", "id": 11539415990461, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/11539415990461", "price_rule_id": 945000284349, "updated_at": "2023-04-24T12:52:22+00:00", "created_at": "2021-07-07T14:23:11+00:00", "summary": "3% off entire order \u2022 One use per customer", "discount_type": "ORDER", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953559794} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "HZAVNV2487WC", "id": 11545139282109, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/11545139282109", "price_rule_id": 945205379261, "updated_at": "2023-12-07T11:40:44+00:00", "created_at": "2021-07-08T12:40:37+00:00", "summary": "Free shipping on all products \u2022 Minimum purchase of $1.00 \u2022 For all countries", "discount_type": "SHIPPING", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953559795} +{"stream": "discount_codes", "data": {"usage_count": 0, "code": "SUMMERSALE10OFF", "id": 13175793582269, "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/13175793582269", "price_rule_id": 945205379261, "updated_at": "2023-12-07T11:40:44+00:00", "created_at": "2021-07-08T12:40:37+00:00", "summary": "Free shipping on all products \u2022 Minimum purchase of $1.00 \u2022 For all countries", "discount_type": "SHIPPING", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953559795} +{"stream": "draft_orders", "data": {"id": 874683629757, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2021-07-02T00:50:29-07:00", "updated_at": "2023-04-14T05:16:33-07:00", "tax_exempt": false, "completed_at": "2021-07-02T00:51:50-07:00", "name": "#D2", "status": "completed", "line_items": [{"id": 57443281666237, "variant_id": 40090604011709, "product_id": 6796229509309, "title": "8 Ounce Soy Candle", "variant_title": "Wooden", "sku": "", "vendor": "Bosco Inc", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 63, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 17.0}], "applied_discount": null, "name": "8 Ounce Soy Candle - Wooden", "properties": [], "custom": false, "price": 102.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/57443281666237"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/e155e3254d0c0d64fa90587de417e0f3", "applied_discount": null, "order_id": 3935377129661, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 17.0}], "tags": "", "note_attributes": [], "total_price": "102.00", "subtotal_price": "102.00", "total_tax": "17.00", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/874683629757", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953561948} +{"stream": "draft_orders", "data": {"id": 929019691197, "note": "updated_mon_24.04.2023", "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2022-02-22T03:23:19-08:00", "updated_at": "2023-04-24T07:18:06-07:00", "tax_exempt": false, "completed_at": null, "name": "#D21", "status": "open", "line_items": [{"id": 58117295538365, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 2, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295538365"}, {"id": 58117295571133, "variant_id": null, "product_id": null, "title": "Test Item", "variant_title": null, "sku": null, "vendor": null, "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 1000, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 0.17}], "applied_discount": null, "name": "Test Item", "properties": [], "custom": true, "price": 1.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58117295571133"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/12893992cc01fc67935ab014fcf9300f", "applied_discount": null, "order_id": null, "shipping_line": {"title": "Test Shipping Fee", "custom": true, "handle": null, "price": 3.0}, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 6.33}, {"rate": 0.2, "title": "PDV", "price": 0.17}], "tags": "", "note_attributes": [], "total_price": "42.00", "subtotal_price": "39.00", "total_tax": "6.50", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/929019691197", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953561951} +{"stream": "draft_orders", "data": {"id": 987391033533, "note": null, "email": null, "taxes_included": true, "currency": "USD", "invoice_sent_at": null, "created_at": "2023-04-13T04:56:17-07:00", "updated_at": "2023-04-13T04:56:17-07:00", "tax_exempt": false, "completed_at": null, "name": "#D25", "status": "open", "line_items": [{"id": 58116862083261, "variant_id": 40090585923773, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Metal", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.16}], "applied_discount": null, "name": "4 Ounce Soy Candle - Metal", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862083261"}, {"id": 58116862116029, "variant_id": 41561955827901, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Test Variant 1", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Test Variant 1", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862116029"}, {"id": 58116862148797, "variant_id": 41561961824445, "product_id": 6796220989629, "title": "4 Ounce Soy Candle", "variant_title": "Test Variant 2", "sku": "", "vendor": "Hartmann Group", "quantity": 1, "requires_shipping": true, "taxable": true, "gift_card": false, "fulfillment_service": "manual", "grams": 112, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.17}], "applied_discount": null, "name": "4 Ounce Soy Candle - Test Variant 2", "properties": [], "custom": false, "price": 19.0, "admin_graphql_api_id": "gid://shopify/DraftOrderLineItem/58116862148797"}], "shipping_address": null, "billing_address": null, "invoice_url": "https://airbyte-integration-test.myshopify.com/58033176765/invoices/d193a965f7815817a2d37fddb30bfdb2", "applied_discount": null, "order_id": null, "shipping_line": null, "tax_lines": [{"rate": 0.2, "title": "PDV", "price": 3.16}, {"rate": 0.2, "title": "PDV", "price": 3.17}, {"rate": 0.2, "title": "PDV", "price": 3.17}], "tags": "", "note_attributes": [], "total_price": "57.00", "subtotal_price": "57.00", "total_tax": "9.50", "payment_terms": null, "admin_graphql_api_id": "gid://shopify/DraftOrder/987391033533", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953561952} +{"stream": "fulfillment_orders", "data": {"id": 5962451452093, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 431686549693, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-13T12:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-13T12:09:45+00:00", "updated_at": "2023-04-13T12:09:46+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5962451452093", "shop_id": 58033176765, "order_id": 5010584895677, "assigned_location_id": 63590301885, "line_items": [{"id": 12363725996221, "inventory_item_id": 42185218719933, "shop_id": 58033176765, "fulfillment_order_id": 5962451452093, "quantity": 1, "line_item_id": 12204214845629, "fulfillable_quantity": 0, "variant_id": 40090604011709}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953569038} +{"stream": "fulfillment_orders", "data": {"id": 5962452467901, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 431687532733, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-13T12:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-13T12:11:16+00:00", "updated_at": "2023-04-13T12:11:16+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5962452467901", "shop_id": 58033176765, "order_id": 5010585911485, "assigned_location_id": 63590301885, "line_items": [{"id": 12363727536317, "inventory_item_id": 43653688524989, "shop_id": 58033176765, "fulfillment_order_id": 5962452467901, "quantity": 1, "line_item_id": 12204216385725, "fulfillable_quantity": 0, "variant_id": 41561961824445}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953569039} +{"stream": "fulfillment_orders", "data": {"id": 5985636450493, "assigned_location": {"address1": "Heroiv UPA 72", "address2": null, "city": "Lviv", "country_code": "UA", "name": "Heroiv UPA 72", "phone": "", "province": null, "zip": "30100", "location_id": 63590301885}, "destination": null, "delivery_method": {"id": 442031046845, "method_type": "SHIPPING", "min_delivery_date_time": null, "max_delivery_date_time": null}, "fulfill_at": "2023-04-24T18:00:00+00:00", "fulfill_by": null, "international_duties": null, "fulfillment_holds": [], "created_at": "2023-04-24T18:00:09+00:00", "updated_at": "2023-04-24T18:00:09+00:00", "request_status": "UNSUBMITTED", "status": "CLOSED", "supported_actions": [], "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/5985636450493", "shop_id": 58033176765, "order_id": 5033391718589, "assigned_location_id": 63590301885, "line_items": [{"id": 12407122067645, "inventory_item_id": 43653688524989, "shop_id": 58033176765, "fulfillment_order_id": 5985636450493, "quantity": 1, "line_item_id": 12247585521853, "fulfillable_quantity": 0, "variant_id": 41561961824445}], "merchant_requests": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953569040} +{"stream": "fulfillments", "data": {"id": 4451164913853, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451164913853", "created_at": "2023-04-13T05:09:45-07:00", "location_id": 63590301885, "name": "#1143.1", "order_id": 5010584895677, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:09:45-07:00", "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": "102.00", "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953570024} +{"stream": "fulfillments", "data": {"id": 4451169501373, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451169501373", "created_at": "2023-04-13T05:11:16-07:00", "location_id": 63590301885, "name": "#1144.1", "order_id": 5010585911485, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:11:16-07:00", "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": "19.00", "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953570026} +{"stream": "fulfillments", "data": {"id": 4075788501181, "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "created_at": "2022-06-15T05:16:55-07:00", "location_id": 63590301885, "name": "#1136.1", "order_id": 4554821468349, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2022-06-15T05:16:55-07:00", "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": "59.00", "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953570027} +{"stream": "inventory_items", "data": {"id": 44871665713341, "country_code_of_origin": null, "harmonized_system_code": null, "province_code_of_origin": null, "updated_at": "2023-04-14T10:29:27+00:00", "created_at": "2023-04-14T10:29:27+00:00", "sku": "", "tracked": true, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/InventoryItem/44871665713341", "cost": 60.0, "country_harmonized_system_codes": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953577593} +{"stream": "inventory_items", "data": {"id": 45419395743933, "country_code_of_origin": "UA", "harmonized_system_code": "330510", "province_code_of_origin": null, "updated_at": "2023-12-11T10:37:41+00:00", "created_at": "2023-12-11T10:37:41+00:00", "sku": "123", "tracked": true, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/InventoryItem/45419395743933", "cost": 29.0, "country_harmonized_system_codes": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953577593} +{"stream": "inventory_levels", "data": {"id": "63590301885|42185200631997", "available": 15, "updated_at": "2023-04-13T12:00:55+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185200631997", "inventory_item_id": 42185200631997, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953584675} +{"stream": "inventory_levels", "data": {"id": "63590301885|42185218719933", "available": 8, "updated_at": "2023-04-13T12:09:45+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185218719933", "inventory_item_id": 42185218719933, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953584677} +{"stream": "inventory_levels", "data": {"id": "63590301885|43653688524989", "available": 0, "updated_at": "2023-04-24T18:00:10+00:00", "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=43653688524989", "inventory_item_id": 43653688524989, "location_id": 63590301885, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953584677} +{"stream": "locations", "data": {"id": 63590301885, "name": "Heroiv UPA 72", "address1": "Heroiv UPA 72", "address2": "", "city": "Lviv", "zip": "30100", "province": null, "country": "UA", "phone": "", "created_at": "2021-06-22T18:00:29-07:00", "updated_at": "2023-11-28T07:08:27-08:00", "country_code": "UA", "country_name": "Ukraine", "province_code": null, "legacy": false, "active": true, "admin_graphql_api_id": "gid://shopify/Location/63590301885", "localized_country_name": "Ukraine", "localized_province_name": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953585688} +{"stream": "metafield_articles", "data": {"id": 21519818162365, "namespace": "global", "key": "new", "value": "newvalue", "description": null, "owner_id": 558137508029, "created_at": "2022-10-07T16:09:02-07:00", "updated_at": "2022-10-07T16:09:02-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519818162365", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953587648} +{"stream": "metafield_articles", "data": {"id": 22365709992125, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Article Metafield", "description": null, "owner_id": 558137508029, "created_at": "2023-04-14T03:18:26-07:00", "updated_at": "2023-04-14T03:18:26-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365709992125", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953587649} +{"stream": "metafield_articles", "data": {"id": 22365710352573, "namespace": "custom", "key": "test_blog_post_metafield", "value": "Test Blog Post Metafiled", "description": null, "owner_id": 558627979453, "created_at": "2023-04-14T03:19:18-07:00", "updated_at": "2023-04-14T03:19:18-07:00", "owner_resource": "article", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710352573", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953588091} +{"stream": "metafield_blogs", "data": {"id": 21519428255933, "namespace": "some_fields", "key": "sponsor", "value": "Shopify", "description": null, "owner_id": 80417685693, "created_at": "2022-10-07T06:05:23-07:00", "updated_at": "2022-10-07T06:05:23-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21519428255933", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953590792} +{"stream": "metafield_blogs", "data": {"id": 22365710745789, "namespace": "custom", "key": "test_blog_metafield", "value": "Test Blog Metafield", "description": null, "owner_id": 80417685693, "created_at": "2023-04-14T03:20:20-07:00", "updated_at": "2023-04-14T03:20:20-07:00", "owner_resource": "blog", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365710745789", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953590794} +{"stream": "metafield_collections", "data": {"id": 22365707174077, "namespace": "custom", "value": "Test Collection Metafield", "key": "test_collection_metafield", "description": null, "created_at": "2023-04-14T10:15:30+00:00", "updated_at": "2023-04-14T10:15:30+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365707174077", "owner_id": 270889287869, "owner_resource": "collection", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953598420} +{"stream": "metafield_collections", "data": {"id": 22366265573565, "namespace": "my_fields", "value": "51%", "key": "new_key", "description": null, "created_at": "2023-04-14T12:21:58+00:00", "updated_at": "2023-04-14T12:21:58+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366265573565", "owner_id": 273278566589, "owner_resource": "collection", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953598428} +{"stream": "metafield_customers", "data": {"id": 22346893361341, "namespace": "custom", "value": "Teste\n", "key": "test_definition_list_1", "description": null, "created_at": "2023-04-13T11:50:10+00:00", "updated_at": "2023-04-13T11:50:10+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893361341", "owner_id": 6569096478909, "owner_resource": "customer", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953605731} +{"stream": "metafield_customers", "data": {"id": 22346893394109, "namespace": "custom", "value": "Taster", "key": "test_definition", "description": null, "created_at": "2023-04-13T11:50:10+00:00", "updated_at": "2023-04-13T11:50:10+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22346893394109", "owner_id": 6569096478909, "owner_resource": "customer", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953605732} +{"stream": "metafield_draft_orders", "data": {"id": 22366258528445, "namespace": "discounts", "value": "50%", "key": "hello", "description": null, "created_at": "2023-04-14T12:16:33+00:00", "updated_at": "2023-04-14T12:16:33+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366258528445", "owner_id": 874683629757, "owner_resource": "draft_order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953612753} +{"stream": "metafield_draft_orders", "data": {"id": 22532787175613, "namespace": "new_metafield", "value": "updated_mon_24.04.2023", "key": "new_metafield", "description": null, "created_at": "2023-04-24T14:18:06+00:00", "updated_at": "2023-04-24T14:18:06+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22532787175613", "owner_id": 929019691197, "owner_resource": "draft_order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953612755} +{"stream": "metafield_locations", "data": {"id": 26246034161853, "namespace": "custom", "value": "2023-11-28 updated", "key": "test_location_metafield", "description": null, "created_at": "2023-11-28T15:08:26+00:00", "updated_at": "2023-11-28T15:08:26+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/26246034161853", "owner_id": 63590301885, "owner_resource": "location", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953619903} +{"stream": "metafield_orders", "data": {"id": 22347288150205, "namespace": "my_fields", "value": "asdfasdf", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:09:50+00:00", "updated_at": "2023-04-13T12:09:50+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347288150205", "owner_id": 5010584895677, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953626961} +{"stream": "metafield_orders", "data": {"id": 22347288740029, "namespace": "my_fields", "value": "asdfasdfasdf", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:11:20+00:00", "updated_at": "2023-04-13T12:11:20+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347288740029", "owner_id": 5010585911485, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953626961} +{"stream": "metafield_orders", "data": {"id": 22347287855293, "namespace": "my_fields", "value": "trtrtr", "key": "purchase_order", "description": null, "created_at": "2023-04-13T12:09:08+00:00", "updated_at": "2023-04-13T12:09:08+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22347287855293", "owner_id": 4147980107965, "owner_resource": "order", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953626962} +{"stream": "metafield_pages", "data": {"id": 22365711499453, "namespace": "custom", "key": "test_page_metafield", "value": "Test Page Metafield", "description": null, "owner_id": 93795909821, "created_at": "2023-04-14T03:21:49-07:00", "updated_at": "2023-04-14T03:21:49-07:00", "owner_resource": "page", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365711499453", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953628925} +{"stream": "metafield_pages", "data": {"id": 22534014828733, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 83074252989, "created_at": "2023-04-24T11:08:41-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "owner_resource": "page", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534014828733", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953629370} +{"stream": "metafield_product_images", "data": {"id": 22365851517117, "namespace": "my_fields", "value": "natural coton", "key": "liner_material", "description": null, "created_at": "2023-04-14T11:59:27+00:00", "updated_at": "2023-04-14T11:59:27+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365851517117", "owner_id": 29301295481021, "owner_resource": "product_image", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953637175} +{"stream": "metafield_product_images", "data": {"id": 22533588451517, "namespace": "new_metafield", "value": "updated_mon_24.04.2023", "key": "new_metafield", "description": null, "created_at": "2023-04-24T17:32:19+00:00", "updated_at": "2023-04-24T17:32:19+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22533588451517", "owner_id": 29301297316029, "owner_resource": "product_image", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953637175} +{"stream": "metafield_products", "data": {"id": 22365729718461, "namespace": "custom", "value": "Test Product Metafield", "key": "product_metafield_test_2", "description": null, "created_at": "2023-04-14T10:31:19+00:00", "updated_at": "2023-04-14T10:31:19+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365729718461", "owner_id": 6796226560189, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953644458} +{"stream": "metafield_products", "data": {"id": 22365729816765, "namespace": "custom", "value": "gid://shopify/Product/6796229574845", "key": "test_product_metafield", "description": null, "created_at": "2023-04-14T10:31:29+00:00", "updated_at": "2023-04-14T10:31:29+00:00", "type": "product_reference", "admin_graphql_api_id": "gid://shopify/Metafield/22365729816765", "owner_id": 6796226560189, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953644459} +{"stream": "metafield_products", "data": {"id": 22365772251325, "namespace": "custom", "value": "Test", "key": "product_metafield_test_2", "description": null, "created_at": "2023-04-14T11:04:46+00:00", "updated_at": "2023-04-14T11:04:46+00:00", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365772251325", "owner_id": 6796229574845, "owner_resource": "product", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953644459} +{"stream": "metafield_product_variants", "data": {"id": 22365715955901, "namespace": "custom", "value": "Test Varia", "key": "test_variant_metafield", "description": null, "created_at": "2023-04-14T10:24:03+00:00", "updated_at": "2023-04-14T10:24:03+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365715955901", "owner_id": 41561961824445, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953657344} +{"stream": "metafield_product_variants", "data": {"id": 22365724082365, "namespace": "custom", "value": "Test Varia", "key": "test_variant_metafield", "description": null, "created_at": "2023-04-14T10:29:27+00:00", "updated_at": "2023-04-14T10:29:27+00:00", "type": "multi_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22365724082365", "owner_id": 42778150305981, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953657344} +{"stream": "metafield_product_variants", "data": {"id": 26493956391101, "namespace": "global", "value": "330510", "key": "harmonized_system_code", "description": null, "created_at": "2023-12-11T10:37:41+00:00", "updated_at": "2023-12-11T10:37:41+00:00", "type": "string", "admin_graphql_api_id": "gid://shopify/Metafield/26493956391101", "owner_id": 43315735396541, "owner_resource": "product_variant", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953657344} +{"stream": "metafield_shops", "data": {"id": 19716782129341, "namespace": "inventory", "key": "warehouse", "value": "26", "description": null, "owner_id": 58033176765, "created_at": "2021-07-08T03:38:45-07:00", "updated_at": "2023-04-14T05:47:26-07:00", "owner_resource": "shop", "type": "number_integer", "admin_graphql_api_id": "gid://shopify/Metafield/19716782129341", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953658313} +{"stream": "metafield_shops", "data": {"id": 22534020104381, "namespace": "new_metafield", "key": "new_metafield", "value": "updated_mon_24.04.2023", "description": null, "owner_id": 58033176765, "created_at": "2023-04-24T11:12:38-07:00", "updated_at": "2023-04-24T11:12:38-07:00", "owner_resource": "shop", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22534020104381", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953658314} +{"stream": "metafield_smart_collections", "data": {"id": 21525604106429, "namespace": "my_fields", "key": "discount", "value": "50%", "description": null, "owner_id": 273278566589, "created_at": "2022-10-12T13:36:55-07:00", "updated_at": "2022-10-12T13:36:55-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/21525604106429", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953660383} +{"stream": "metafield_smart_collections", "data": {"id": 22366265573565, "namespace": "my_fields", "key": "new_key", "value": "51%", "description": null, "owner_id": 273278566589, "created_at": "2023-04-14T05:21:58-07:00", "updated_at": "2023-04-14T05:21:58-07:00", "owner_resource": "collection", "type": "single_line_text_field", "admin_graphql_api_id": "gid://shopify/Metafield/22366265573565", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953660391} +{"stream": "order_refunds", "data": {"id": 852809646269, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "created_at": "2022-06-15T06:25:43-07:00", "note": null, "order_id": 4554821468349, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5721170968765, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "amount": "57.23", "authorization": null, "created_at": "2022-06-15T06:25:42-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 4554821468349, "parent_id": 5721110872253, "payment_id": "c25048437719229.2", "processed_at": "2022-06-15T06:25:42-07:00", "receipt": {"paid_amount": "57.23"}, "source_name": "1830279", "status": "success", "test": true, "user_id": null, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}}], "refund_line_items": [{"id": 363131404477, "line_item_id": 11406125564093, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 57.23, "subtotal_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": 1.77, "amount_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}, "discount_application_index": 0}]}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953661477} +{"stream": "order_refunds", "data": {"id": 845032358077, "admin_graphql_api_id": "gid://shopify/Refund/845032358077", "created_at": "2022-03-07T02:09:04-08:00", "note": null, "order_id": 4147980107965, "processed_at": "2022-03-07T02:09:04-08:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [], "refund_line_items": [{"id": 352716947645, "line_item_id": 10576771317949, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 27.0, "subtotal_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "line_item": {"id": 10576771317949, "admin_graphql_api_id": "gid://shopify/LineItem/10576771317949", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 285, "name": "Red & Silver Fishing Lure - Plastic", "price": 27.0, "price_set": {"shop_money": {"amount": 27.0, "currency_code": "USD"}, "presentment_money": {"amount": 27.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796218302653, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "Red & Silver Fishing Lure", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090580615357, "variant_inventory_management": "shopify", "variant_title": "Plastic", "vendor": "Harris - Hamill", "tax_lines": [], "duties": [], "discount_allocations": []}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953661479} +{"stream": "order_refunds", "data": {"id": 829538369725, "admin_graphql_api_id": "gid://shopify/Refund/829538369725", "created_at": "2021-09-21T05:31:59-07:00", "note": "test refund", "order_id": 3935377129661, "processed_at": "2021-09-21T05:31:59-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5189894406333, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5189894406333", "amount": "102.00", "authorization": null, "created_at": "2021-09-21T05:31:58-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 3935377129661, "parent_id": 4933790040253, "payment_id": "c21670281707709.2", "processed_at": "2021-09-21T05:31:58-07:00", "receipt": {"paid_amount": "102.00"}, "source_name": "1830279", "status": "success", "test": true, "user_id": 74861019325, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 11, "credit_card_expiration_year": 2023}}], "refund_line_items": [{"id": 332807864509, "line_item_id": 10130216452285, "location_id": 63590301885, "quantity": 1, "restock_type": "cancel", "subtotal": 102.0, "subtotal_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "line_item": {"id": 10130216452285, "admin_graphql_api_id": "gid://shopify/LineItem/10130216452285", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": null, "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}}], "duties": "[]", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953661480} +{"stream": "order_risks", "data": {"id": 6446736474301, "order_id": 4147980107965, "checkout_id": null, "source": "External", "score": 1.0, "recommendation": "cancel", "display": true, "cause_cancel": true, "message": "This order came from an anonymous proxy", "merchant_message": "This order came from an anonymous proxy", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953665729} +{"stream": "orders", "data": {"id": 5010584895677, "admin_graphql_api_id": "gid://shopify/Order/5010584895677", "app_id": 1354745, "browser_ip": "109.162.18.117", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 27351199088829, "checkout_token": "4064bfadc2457c9e15f2c7b4ee7ddb7d", "client_details": {"accept_language": null, "browser_height": null, "browser_ip": "109.162.18.117", "browser_width": null, "session_hash": null, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}, "closed_at": "2023-04-13T05:09:46-07:00", "company": null, "confirmation_number": "ECI3YZGWP", "confirmed": true, "contact_email": null, "created_at": "2023-04-13T05:09:44-07:00", "currency": "USD", "current_subtotal_price": 102.0, "current_subtotal_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 102.0, "current_total_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "current_total_tax": 17.0, "current_total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": "fulfilled", "landing_site": null, "landing_site_ref": null, "location_id": 63590301885, "merchant_of_record_app_id": null, "name": "#1143", "note": null, "note_attributes": [], "number": 143, "order_number": 1143, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/ad85969259bee7d4b380744934e67556/authenticate?key=cdd70808759b04f31c29975ba796fce9", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["manual"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2023-04-13T05:09:44-07:00", "reference": "b9344c8b118753db132edd503dc91515", "referring_site": null, "source_identifier": "b9344c8b118753db132edd503dc91515", "source_name": "shopify_draft_order", "source_url": null, "subtotal_price": 102.0, "subtotal_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "tags": "", "tax_exempt": false, "tax_lines": [{"price": 17.0, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "channel_liable": false}], "taxes_included": true, "test": false, "token": "ad85969259bee7d4b380744934e67556", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 102.0, "total_line_items_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 102.0, "total_price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 17.0, "total_tax_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 63, "updated_at": "2023-04-13T05:09:50-07:00", "user_id": 74861019325, "billing_address": null, "customer": null, "discount_applications": [], "fulfillments": [{"id": 4451164913853, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451164913853", "created_at": "2023-04-13T05:09:45-07:00", "location_id": 63590301885, "name": "#1143.1", "order_id": 5010584895677, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:09:45-07:00", "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}]}], "line_items": [{"id": 12204214845629, "admin_graphql_api_id": "gid://shopify/LineItem/12204214845629", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 63, "name": "8 Ounce Soy Candle - Wooden", "price": 102.0, "price_set": {"shop_money": {"amount": 102.0, "currency_code": "USD"}, "presentment_money": {"amount": 102.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796229509309, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "8 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090604011709, "variant_inventory_management": "shopify", "variant_title": "Wooden", "vendor": "Bosco Inc", "tax_lines": [{"channel_liable": false, "price": 17.0, "price_set": {"shop_money": {"amount": 17.0, "currency_code": "USD"}, "presentment_money": {"amount": 17.0, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953668490} +{"stream": "orders", "data": {"id": 5010585911485, "admin_graphql_api_id": "gid://shopify/Order/5010585911485", "app_id": 1354745, "browser_ip": "109.162.18.117", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 27351203774653, "checkout_token": "117b35b4fd64c8de8d984830b72edfaf", "client_details": {"accept_language": null, "browser_height": null, "browser_ip": "109.162.18.117", "browser_width": null, "session_hash": null, "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}, "closed_at": "2023-04-13T05:11:17-07:00", "company": null, "confirmation_number": "CQPWZK5ZU", "confirmed": true, "contact_email": null, "created_at": "2023-04-13T05:11:15-07:00", "currency": "USD", "current_subtotal_price": 19.0, "current_subtotal_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 19.0, "current_total_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "current_total_tax": 3.17, "current_total_tax_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": "fulfilled", "landing_site": null, "landing_site_ref": null, "location_id": 63590301885, "merchant_of_record_app_id": null, "name": "#1144", "note": null, "note_attributes": [], "number": 144, "order_number": 1144, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/a2d4a8a04fc6ec52a85f1811d269c88f/authenticate?key=a26b27cc1a040df3a1d7c67f6b14df75", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["manual"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2023-04-13T05:11:15-07:00", "reference": "f75c72a120e34e15a4dbc2d32315cc72", "referring_site": null, "source_identifier": "f75c72a120e34e15a4dbc2d32315cc72", "source_name": "shopify_draft_order", "source_url": null, "subtotal_price": 19.0, "subtotal_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "tags": "", "tax_exempt": false, "tax_lines": [{"price": 3.17, "rate": 0.2, "title": "PDV", "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "channel_liable": false}], "taxes_included": true, "test": false, "token": "a2d4a8a04fc6ec52a85f1811d269c88f", "total_discounts": 0.0, "total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_line_items_price": 19.0, "total_line_items_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 19.0, "total_price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 3.17, "total_tax_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 112, "updated_at": "2023-04-13T05:11:20-07:00", "user_id": 74861019325, "billing_address": null, "customer": null, "discount_applications": [], "fulfillments": [{"id": 4451169501373, "admin_graphql_api_id": "gid://shopify/Fulfillment/4451169501373", "created_at": "2023-04-13T05:11:16-07:00", "location_id": 63590301885, "name": "#1144.1", "order_id": 5010585911485, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2023-04-13T05:11:16-07:00", "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": 19.0, "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}]}], "line_items": [{"id": 12204216385725, "admin_graphql_api_id": "gid://shopify/LineItem/12204216385725", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 112, "name": "4 Ounce Soy Candle - Test Variant 2", "price": 19.0, "price_set": {"shop_money": {"amount": 19.0, "currency_code": "USD"}, "presentment_money": {"amount": 19.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796220989629, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "", "taxable": true, "title": "4 Ounce Soy Candle", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 41561961824445, "variant_inventory_management": "shopify", "variant_title": "Test Variant 2", "vendor": "Hartmann Group", "tax_lines": [{"channel_liable": false, "price": 3.17, "price_set": {"shop_money": {"amount": 3.17, "currency_code": "USD"}, "presentment_money": {"amount": 3.17, "currency_code": "USD"}}, "rate": 0.2, "title": "PDV"}], "duties": [], "discount_allocations": []}], "payment_terms": null, "refunds": [], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953668500} +{"stream": "orders", "data": {"id": 4554821468349, "admin_graphql_api_id": "gid://shopify/Order/4554821468349", "app_id": 580111, "browser_ip": "176.113.167.23", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": null, "checkout_id": 25048437719229, "checkout_token": "cf5d16a0a0688905bd551c6dec591506", "client_details": {"accept_language": "en-US,en;q=0.9,uk;q=0.8", "browser_height": 754, "browser_ip": "176.113.167.23", "browser_width": 1519, "session_hash": null, "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53"}, "closed_at": "2022-06-15T06:25:43-07:00", "company": null, "confirmation_number": null, "confirmed": true, "contact_email": "integration-test@airbyte.io", "created_at": "2022-06-15T05:16:53-07:00", "currency": "USD", "current_subtotal_price": 0.0, "current_subtotal_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_additional_fees_set": null, "current_total_discounts": 0.0, "current_total_discounts_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_duties_set": null, "current_total_price": 0.0, "current_total_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "current_total_tax": 0.0, "current_total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "customer_locale": "en", "device_id": null, "discount_codes": [], "email": "integration-test@airbyte.io", "estimated_taxes": false, "financial_status": "refunded", "fulfillment_status": "fulfilled", "landing_site": "/wallets/checkouts.json", "landing_site_ref": null, "location_id": null, "merchant_of_record_app_id": null, "name": "#1136", "note": "updated_mon_24.04.2023", "note_attributes": [], "number": 136, "order_number": 1136, "order_status_url": "https://airbyte-integration-test.myshopify.com/58033176765/orders/e4f98630ea44a884e33e700203ce2130/authenticate?key=edf087d6ae55a4541bf1375432f6a4b8", "original_total_additional_fees_set": null, "original_total_duties_set": null, "payment_gateway_names": ["bogus"], "phone": null, "po_number": null, "presentment_currency": "USD", "processed_at": "2022-06-15T05:16:53-07:00", "reference": null, "referring_site": "https://airbyte-integration-test.myshopify.com/products/all-black-sneaker-right-foot", "source_identifier": null, "source_name": "web", "source_url": null, "subtotal_price": 57.23, "subtotal_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "tags": "Refund", "tax_exempt": false, "tax_lines": [], "taxes_included": true, "test": true, "token": "e4f98630ea44a884e33e700203ce2130", "total_discounts": 1.77, "total_discounts_set": {"shop_money": {"amount": 1.77, "currency_code": "USD"}, "presentment_money": {"amount": 1.77, "currency_code": "USD"}}, "total_line_items_price": 59.0, "total_line_items_price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "total_outstanding": 0.0, "total_price": 57.23, "total_price_set": {"shop_money": {"amount": 57.23, "currency_code": "USD"}, "presentment_money": {"amount": 57.23, "currency_code": "USD"}}, "total_shipping_price_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "total_tip_received": 0.0, "total_weight": 0, "updated_at": "2023-04-24T07:00:37-07:00", "user_id": null, "billing_address": {"first_name": "Iryna", "address1": "2261 Market Street", "phone": null, "city": "San Francisco", "zip": "94114", "province": "California", "country": "United States", "last_name": "Grankova", "address2": "4381", "company": null, "latitude": 37.7647751, "longitude": -122.4320369, "name": "Iryna Grankova", "country_code": "US", "province_code": "CA"}, "customer": {"id": 5362027233469, "email": "integration-test@airbyte.io", "created_at": "2021-07-08T05:41:47-07:00", "updated_at": "2022-06-22T03:50:13-07:00", "first_name": "Airbyte", "last_name": "Team", "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": {"state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null}, "sms_marketing_consent": null, "tags": "", "currency": "USD", "accepts_marketing": false, "accepts_marketing_updated_at": null, "marketing_opt_in_level": "single_opt_in", "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/5362027233469", "default_address": {"id": 7492260823229, "customer_id": 5362027233469, "first_name": "Airbyte", "last_name": "Team", "company": null, "address1": "2261 Market Street", "address2": "4381", "city": "San Francisco", "province": "California", "country": "United States", "zip": "94114", "phone": null, "name": "Airbyte Team", "province_code": "CA", "country_code": "US", "country_name": "United States", "default": true}}, "discount_applications": [{"target_type": "line_item", "type": "automatic", "value": "3.0", "value_type": "percentage", "allocation_method": "across", "target_selection": "all", "title": "eeeee"}], "fulfillments": [{"id": 4075788501181, "admin_graphql_api_id": "gid://shopify/Fulfillment/4075788501181", "created_at": "2022-06-15T05:16:55-07:00", "location_id": 63590301885, "name": "#1136.1", "order_id": 4554821468349, "origin_address": {}, "receipt": {}, "service": "manual", "shipment_status": null, "status": "success", "tracking_company": null, "tracking_number": null, "tracking_numbers": [], "tracking_url": null, "tracking_urls": [], "updated_at": "2022-06-15T05:16:55-07:00", "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}]}], "line_items": [{"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": 59.0, "price_set": {"shop_money": {"amount": 59.0, "currency_code": "USD"}, "presentment_money": {"amount": 59.0, "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": 0.0, "total_discount_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}], "payment_terms": null, "refunds": [{"id": 852809646269, "admin_graphql_api_id": "gid://shopify/Refund/852809646269", "created_at": "2022-06-15T06:25:43-07:00", "note": null, "order_id": 4554821468349, "processed_at": "2022-06-15T06:25:43-07:00", "restock": true, "total_duties_set": {"shop_money": {"amount": 0.0, "currency_code": "USD"}, "presentment_money": {"amount": 0.0, "currency_code": "USD"}}, "user_id": 74861019325, "order_adjustments": [], "transactions": [{"id": 5721170968765, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721170968765", "amount": "57.23", "authorization": null, "created_at": "2022-06-15T06:25:42-07:00", "currency": "USD", "device_id": null, "error_code": null, "gateway": "bogus", "kind": "refund", "location_id": null, "message": "Bogus Gateway: Forced success", "order_id": 4554821468349, "parent_id": 5721110872253, "payment_id": "c25048437719229.2", "processed_at": "2022-06-15T06:25:42-07:00", "receipt": {"paid_amount": "57.23"}, "source_name": "1830279", "status": "success", "test": true, "user_id": null, "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}}], "refund_line_items": [{"id": 363131404477, "line_item_id": 11406125564093, "location_id": 63590301885, "quantity": 1, "restock_type": "return", "subtotal": 57.23, "subtotal_set": {"shop_money": {"amount": "57.23", "currency_code": "USD"}, "presentment_money": {"amount": "57.23", "currency_code": "USD"}}, "total_tax": 0.0, "total_tax_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "line_item": {"id": 11406125564093, "admin_graphql_api_id": "gid://shopify/LineItem/11406125564093", "fulfillable_quantity": 0, "fulfillment_service": "manual", "fulfillment_status": "fulfilled", "gift_card": false, "grams": 0, "name": "All Black Sneaker Right Foot - ivory", "price": "59.00", "price_set": {"shop_money": {"amount": "59.00", "currency_code": "USD"}, "presentment_money": {"amount": "59.00", "currency_code": "USD"}}, "product_exists": true, "product_id": 6796226560189, "properties": [], "quantity": 1, "requires_shipping": false, "sku": "", "taxable": true, "title": "All Black Sneaker Right Foot", "total_discount": "0.00", "total_discount_set": {"shop_money": {"amount": "0.00", "currency_code": "USD"}, "presentment_money": {"amount": "0.00", "currency_code": "USD"}}, "variant_id": 40090597884093, "variant_inventory_management": "shopify", "variant_title": "ivory", "vendor": "Becker - Moore", "tax_lines": [], "duties": [], "discount_allocations": [{"amount": "1.77", "amount_set": {"shop_money": {"amount": "1.77", "currency_code": "USD"}, "presentment_money": {"amount": "1.77", "currency_code": "USD"}}, "discount_application_index": 0}]}}], "duties": []}], "shipping_address": null, "shipping_lines": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953668502} +{"stream": "pages", "data": {"id": 93795909821, "title": "Test Page", "shop_id": 58033176765, "handle": "test-page", "body_html": "Test Page 1", "author": null, "created_at": "2023-04-14T03:21:40-07:00", "updated_at": "2023-04-14T03:21:49-07:00", "published_at": "2023-04-14T03:21:40-07:00", "template_suffix": "", "admin_graphql_api_id": "gid://shopify/OnlineStorePage/93795909821", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953670254} +{"stream": "pages", "data": {"id": 83074252989, "title": "Warranty information", "shop_id": 58033176765, "handle": "warranty-information", "body_html": "updated_mon_24.04.2023", "author": "Shopify API", "created_at": "2021-07-08T05:19:00-07:00", "updated_at": "2023-04-24T11:08:41-07:00", "published_at": "2021-07-08T05:19:00-07:00", "template_suffix": null, "admin_graphql_api_id": "gid://shopify/OnlineStorePage/83074252989", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953670255} +{"stream": "pages", "data": {"id": 95926616253, "deleted_at": "2023-09-06T03:37:06-07:00", "updated_at": "2023-09-06T03:37:06-07:00", "deleted_message": "Online Store deleted a page: Test Page for delete.", "deleted_description": "Online Store deleted a page: Test Page for delete.", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953670813} +{"stream": "price_rules", "data": {"id": 1112171741373, "value_type": "fixed_amount", "value": "-10.0", "customer_selection": "all", "target_type": "line_item", "target_selection": "all", "allocation_method": "across", "allocation_limit": null, "once_per_customer": false, "usage_limit": null, "starts_at": "2017-01-19T09:59:10-08:00", "ends_at": null, "created_at": "2022-10-14T10:19:39-07:00", "updated_at": "2023-04-14T05:24:53-07:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": null, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "New Title 2023", "admin_graphql_api_id": "gid://shopify/PriceRule/1112171741373", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953671890} +{"stream": "price_rules", "data": {"id": 945000284349, "value_type": "percentage", "value": "-3.0", "customer_selection": "all", "target_type": "line_item", "target_selection": "all", "allocation_method": "across", "allocation_limit": null, "once_per_customer": true, "usage_limit": 10, "starts_at": "2021-07-07T07:22:04-07:00", "ends_at": null, "created_at": "2021-07-07T07:23:11-07:00", "updated_at": "2023-04-24T05:52:22-07:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": null, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "1V8Z165KSH5T", "admin_graphql_api_id": "gid://shopify/PriceRule/945000284349", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953671890} +{"stream": "price_rules", "data": {"id": 945205379261, "value_type": "percentage", "value": "-100.0", "customer_selection": "all", "target_type": "shipping_line", "target_selection": "all", "allocation_method": "each", "allocation_limit": null, "once_per_customer": false, "usage_limit": null, "starts_at": "2021-07-08T05:40:13-07:00", "ends_at": "2024-01-01T23:59:59-08:00", "created_at": "2021-07-08T05:40:37-07:00", "updated_at": "2023-12-07T03:40:44-08:00", "entitled_product_ids": [], "entitled_variant_ids": [], "entitled_collection_ids": [], "entitled_country_ids": [], "prerequisite_product_ids": [], "prerequisite_variant_ids": [], "prerequisite_collection_ids": [], "customer_segment_prerequisite_ids": [], "prerequisite_customer_ids": [], "prerequisite_subtotal_range": {"greater_than_or_equal_to": "1.0"}, "prerequisite_quantity_range": null, "prerequisite_shipping_price_range": null, "prerequisite_to_entitlement_quantity_ratio": {"prerequisite_quantity": null, "entitled_quantity": null}, "prerequisite_to_entitlement_purchase": {"prerequisite_amount": null}, "title": "HZAVNV2487WC", "admin_graphql_api_id": "gid://shopify/PriceRule/945205379261", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953671891} +{"stream": "product_images", "data": {"id": 29301295481021, "alt": null, "position": 1, "product_id": 6796218138813, "created_at": "2021-06-22T18:09:28-07:00", "updated_at": "2021-06-22T18:09:28-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295481021", "width": 4393, "height": 2929, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/tin-of-beard-balm.jpg?v=1624410568", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953673537} +{"stream": "product_images", "data": {"id": 29301295513789, "alt": null, "position": 1, "product_id": 6796218269885, "created_at": "2021-06-22T18:09:29-07:00", "updated_at": "2021-06-22T18:09:29-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295513789", "width": 3840, "height": 2560, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/pair-of-all-black-sneakers.jpg?v=1624410569", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953673539} +{"stream": "product_images", "data": {"id": 29301295546557, "alt": null, "position": 1, "product_id": 6796218302653, "created_at": "2021-06-22T18:09:29-07:00", "updated_at": "2021-06-22T18:09:29-07:00", "admin_graphql_api_id": "gid://shopify/ProductImage/29301295546557", "width": 3960, "height": 2640, "src": "https://cdn.shopify.com/s/files/1/0580/3317/6765/products/red-silver-fishing-lure.jpg?v=1624410569", "variant_ids": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953673539} +{"stream": "products", "data": {"id": 6796217909437, "title": "Red And Navy Tee Sleeve", "body_html": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "vendor": "Little Group", "product_type": "Movies", "created_at": "2021-06-22T18:09:27-07:00", "handle": "red-and-navy-tee-sleeve", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217909437", "variants": [{"id": 40090579992765, "product_id": 6796217909437, "title": "Plastic", "price": 23.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Plastic", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 39, "weight": 39.0, "weight_unit": "g", "inventory_item_id": 42185194700989, "inventory_quantity": 3, "old_inventory_quantity": 3, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579992765", "image_id": null}], "options": [{"id": 8720175235261, "product_id": 6796217909437, "name": "Title", "position": 1, "values": ["Plastic"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953675398} +{"stream": "products", "data": {"id": 6796217942205, "title": "Grey T-Shirt", "body_html": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "vendor": "Lang - Bogisich", "product_type": "Home", "created_at": "2021-06-22T18:09:27-07:00", "handle": "grey-t-shirt", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217942205", "variants": [{"id": 40090580025533, "product_id": 6796217942205, "title": "Granite", "price": 70.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Granite", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 0, "weight": 0.0, "weight_unit": "g", "inventory_item_id": 42185194733757, "inventory_quantity": 38, "old_inventory_quantity": 38, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580025533", "image_id": null}], "options": [{"id": 8720175268029, "product_id": 6796217942205, "name": "Title", "position": 1, "values": ["Granite"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953675399} +{"stream": "products", "data": {"id": 6796217974973, "title": "Pool Floaty Icecream", "body_html": "Inflatable pink ice cream pool toy.", "vendor": "Fritsch - Ferry", "product_type": "Grocery", "created_at": "2021-06-22T18:09:27-07:00", "handle": "pool-floaty-icecream", "updated_at": "2023-04-20T04:12:25-07:00", "published_at": "2021-06-22T18:09:27-07:00", "template_suffix": null, "published_scope": "web", "tags": "developer-tools-generator", "status": "active", "admin_graphql_api_id": "gid://shopify/Product/6796217974973", "variants": [{"id": 40090580091069, "product_id": 6796217974973, "title": "magenta", "price": 57.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "magenta", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 499, "weight": 499.0, "weight_unit": "g", "inventory_item_id": 42185194766525, "inventory_quantity": 1, "old_inventory_quantity": 1, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580091069", "image_id": null}], "options": [{"id": 8720175300797, "product_id": 6796217974973, "name": "Title", "position": 1, "values": ["magenta"]}], "images": [], "image": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953675399} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217843901", "title": "Lace Detail On Womens Top", "updatedAt": "2023-09-05T14:12:05Z", "createdAt": "2021-06-23T01:09:26Z", "publishedAt": null, "status": "ARCHIVED", "vendor": "Hayes, Hettinger and Hauck", "productType": "Beauty", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175169725", "name": "Title", "position": 1, "values": ["Soft"]}], "handle": "lace-detail-on-womens-top", "description": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "tracksInventory": true, "totalInventory": 12, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://2p5oyhnqeai50h4v-58033176765.shopifypreview.com/products_preview?preview_key=49fdc517904f477196144662c8ad7b8f&_bt=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJaXRoYVhKaWVYUmxMV2x1ZEdWbmNtRjBhVzl1TFhSbGMzUXViWGx6YUc5d2FXWjVMbU52YlFZNkJrVlUiLCJleHAiOiIyMDI0LTAyLTI2VDE0OjIxOjE5LjAyOVoiLCJwdXIiOiJwZXJtYW5lbnRfcGFzc3dvcmRfYnlwYXNzIn19--a4d2e3e622f6ab0bcd3820bf524f8f50b65c14d7", "descriptionHtml": "A close-up side view of a woman's off-white shirt shows the design detail in the lace.", "isGiftCard": false, "legacyResourceId": "6796217843901", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953679676} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217909437", "title": "Red And Navy Tee Sleeve", "updatedAt": "2023-04-20T11:12:25Z", "createdAt": "2021-06-23T01:09:27Z", "publishedAt": "2021-06-23T01:09:27Z", "status": "ACTIVE", "vendor": "Little Group", "productType": "Movies", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175235261", "name": "Title", "position": 1, "values": ["Plastic"]}], "handle": "red-and-navy-tee-sleeve", "description": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "tracksInventory": true, "totalInventory": 3, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://airbyte-integration-test.myshopify.com/products/red-and-navy-tee-sleeve", "descriptionHtml": "Zoom in on the sleeve of a red t-shirt with navy blue trim along the sleeve. Looks like a great tennis outfit.", "isGiftCard": false, "legacyResourceId": "6796217909437", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953679682} +{"stream": "products_graph_ql", "data": {"id": "gid://shopify/Product/6796217942205", "title": "Grey T-Shirt", "updatedAt": "2023-04-20T11:12:25Z", "createdAt": "2021-06-23T01:09:27Z", "publishedAt": "2021-06-23T01:09:27Z", "status": "ACTIVE", "vendor": "Lang - Bogisich", "productType": "Home", "tags": ["developer-tools-generator"], "options": [{"id": "gid://shopify/ProductOption/8720175268029", "name": "Title", "position": 1, "values": ["Granite"]}], "handle": "grey-t-shirt", "description": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "tracksInventory": true, "totalInventory": 38, "totalVariants": 1, "onlineStoreUrl": null, "onlineStorePreviewUrl": "https://airbyte-integration-test.myshopify.com/products/grey-t-shirt", "descriptionHtml": "A grey t-shirt on a hanger. Simple. Classic. Grey.", "isGiftCard": false, "legacyResourceId": "6796217942205", "mediaCount": 0, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953679683} +{"stream": "product_variants", "data": {"id": 40090579992765, "product_id": 6796217909437, "title": "Plastic", "price": 23.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Plastic", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 39, "weight": 39.0, "weight_unit": "g", "inventory_item_id": 42185194700989, "inventory_quantity": 3, "old_inventory_quantity": 3, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090579992765", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953681543} +{"stream": "product_variants", "data": {"id": 40090580025533, "product_id": 6796217942205, "title": "Granite", "price": 70.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "Granite", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 0, "weight": 0.0, "weight_unit": "g", "inventory_item_id": 42185194733757, "inventory_quantity": 38, "old_inventory_quantity": 38, "requires_shipping": false, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580025533", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953681544} +{"stream": "product_variants", "data": {"id": 40090580091069, "product_id": 6796217974973, "title": "magenta", "price": 57.0, "sku": "", "position": 1, "inventory_policy": "deny", "compare_at_price": null, "fulfillment_service": "manual", "inventory_management": "shopify", "option1": "magenta", "option2": null, "option3": null, "created_at": "2021-06-22T18:09:27-07:00", "updated_at": "2023-10-27T09:55:54-07:00", "taxable": true, "barcode": null, "grams": 499, "weight": 499.0, "weight_unit": "g", "inventory_item_id": 42185194766525, "inventory_quantity": 1, "old_inventory_quantity": 1, "requires_shipping": true, "admin_graphql_api_id": "gid://shopify/ProductVariant/40090580091069", "image_id": null, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953681544} +{"stream": "shop", "data": {"id": 58033176765, "name": "airbyte integration test", "email": "sherif@airbyte.io", "domain": "airbyte-integration-test.myshopify.com", "province": "California", "country": "US", "address1": "350 29th Avenue", "zip": "94121", "city": "San Francisco", "source": null, "phone": "8023494963", "latitude": 37.7827286, "longitude": -122.4889911, "primary_locale": "en", "address2": "", "created_at": "2021-06-22T18:00:23-07:00", "updated_at": "2024-01-30T21:11:05-08:00", "country_code": "US", "country_name": "United States", "currency": "USD", "customer_email": "sherif@airbyte.io", "timezone": "(GMT-08:00) America/Los_Angeles", "iana_timezone": "America/Los_Angeles", "shop_owner": "Airbyte Airbyte", "money_format": "${{amount}}", "money_with_currency_format": "${{amount}} USD", "weight_unit": "kg", "province_code": "CA", "taxes_included": true, "auto_configure_tax_inclusivity": null, "tax_shipping": null, "county_taxes": true, "plan_display_name": "Developer Preview", "plan_name": "partner_test", "has_discounts": true, "has_gift_cards": false, "myshopify_domain": "airbyte-integration-test.myshopify.com", "google_apps_domain": null, "google_apps_login_enabled": null, "money_in_emails_format": "${{amount}}", "money_with_currency_in_emails_format": "${{amount}} USD", "eligible_for_payments": true, "requires_extra_payments_agreement": false, "password_enabled": true, "has_storefront": true, "finances": true, "primary_location_id": 63590301885, "checkout_api_supported": true, "multi_location_enabled": true, "setup_required": false, "pre_launch_enabled": false, "enabled_presentment_currencies": ["USD"], "transactional_sms_disabled": false, "marketing_sms_consent_enabled_at_checkout": false, "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953683813} +{"stream": "smart_collections", "data": {"id": 273278566589, "handle": "test-collection", "title": "Test Collection", "updated_at": "2023-09-05T07:12:04-07:00", "body_html": "updated_mon_24.04.2023", "published_at": "2021-07-19T07:02:54-07:00", "sort_order": "best-selling", "template_suffix": "", "disjunctive": false, "rules": ["{'column': 'type', 'relation': 'equals', 'condition': 'Beauty'}"], "published_scope": "web", "admin_graphql_api_id": "gid://shopify/Collection/273278566589", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953684911} +{"stream": "tender_transactions", "data": {"id": 4464009117885, "order_id": 5033391718589, "amount": "19.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-24T11:00:08-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953685992} +{"stream": "tender_transactions", "data": {"id": 4448993542333, "order_id": 5010585911485, "amount": "19.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-13T05:11:15-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953685994} +{"stream": "tender_transactions", "data": {"id": 4448992690365, "order_id": 5010584895677, "amount": "102.00", "currency": "USD", "user_id": null, "test": false, "processed_at": "2023-04-13T05:09:44-07:00", "remote_reference": null, "payment_details": null, "payment_method": "other", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953685995} +{"stream": "transactions", "data": {"id": 6281692217533, "order_id": 5010584895677, "kind": "sale", "gateway": "manual", "status": "success", "message": "Marked the manual payment as received", "created_at": "2023-04-13T05:09:44-07:00", "test": false, "authorization": null, "location_id": null, "user_id": null, "parent_id": null, "processed_at": "2023-04-13T05:09:44-07:00", "device_id": null, "error_code": null, "source_name": "checkout_one", "receipt": {}, "amount": 102.0, "currency": "USD", "payment_id": "r9BerEaVJ5OzQNmPGZsK2V7zq", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/6281692217533", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953688151} +{"stream": "transactions", "data": {"id": 6281693561021, "order_id": 5010585911485, "kind": "sale", "gateway": "manual", "status": "success", "message": "Marked the manual payment as received", "created_at": "2023-04-13T05:11:15-07:00", "test": false, "authorization": null, "location_id": null, "user_id": null, "parent_id": null, "processed_at": "2023-04-13T05:11:15-07:00", "device_id": null, "error_code": null, "source_name": "checkout_one", "receipt": {}, "amount": 19.0, "currency": "USD", "payment_id": "rguGpKMnZqzpEzPvDfnSS8x4B", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/6281693561021", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953688613} +{"stream": "transactions", "data": {"id": 5721110872253, "order_id": 4554821468349, "kind": "sale", "gateway": "bogus", "status": "success", "message": "Bogus Gateway: Forced success", "created_at": "2022-06-15T05:16:52-07:00", "test": true, "authorization": "53433", "location_id": null, "user_id": null, "parent_id": null, "processed_at": "2022-06-15T05:16:52-07:00", "device_id": null, "error_code": null, "source_name": "580111", "payment_details": {"credit_card_bin": "1", "avs_result_code": null, "cvv_result_code": null, "credit_card_number": "\u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 \u2022\u2022\u2022\u2022 1", "credit_card_company": "Bogus", "buyer_action_info": null, "credit_card_name": "Bogus Gateway", "credit_card_wallet": null, "credit_card_expiration_month": 2, "credit_card_expiration_year": 2025}, "receipt": {"paid_amount": "57.23"}, "amount": 57.23, "currency": "USD", "payment_id": "c25048437719229.1", "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, "admin_graphql_api_id": "gid://shopify/OrderTransaction/5721110872253", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953689123} +{"stream": "customer_address", "data": {"address1": "My Best Accent", "address2": "", "city": "Fair Lawn", "country": "United States", "country_code": "US", "company": "Test Company", "first_name": "New Test", "id": 8092523135165, "last_name": "Customer", "name": "New Test Customer", "phone": "", "province": "New Jersey", "province_code": "NJ", "zip": "07410", "customer_id": 6569096478909, "country_name": "United States", "default": true, "updated_at": "2023-04-24T13:53:48+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953700866} +{"stream": "customer_address", "data": {"address1": null, "address2": null, "city": null, "country": null, "country_code": null, "company": null, "first_name": "MArcos", "id": 8212915650749, "last_name": "Millnitz", "name": "MArcos Millnitz", "phone": null, "province": null, "province_code": null, "zip": null, "customer_id": 6676027932861, "country_name": null, "default": true, "updated_at": "2023-07-11T20:07:45+00:00", "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953700867} +{"stream": "countries", "data": {"id": 417014841533, "name": "Rest of World", "code": "*", "tax_name": "Tax", "tax": 0.0, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953701837} +{"stream": "countries", "data": {"id": 417014808765, "name": "Ukraine", "code": "UA", "tax_name": "PDV", "tax": 0.2, "provinces": [], "shop_url": "airbyte-integration-test"}, "emitted_at": 1708953701838} diff --git a/airbyte-integrations/connectors/source-shopify/integration_tests/state.json b/airbyte-integrations/connectors/source-shopify/integration_tests/state.json index 25734860ba98..c29ae675c6c5 100644 --- a/airbyte-integrations/connectors/source-shopify/integration_tests/state.json +++ b/airbyte-integrations/connectors/source-shopify/integration_tests/state.json @@ -174,13 +174,13 @@ "updated_at": "2023-04-14T04:04:46-07:00" }, "product_images": { - "id": 33290489659581, "products": { - "updated_at": "", + "updated_at": "2023-04-24T11:05:13-07:00", "deleted": { "deleted_at": "2023-09-05T13:32:22-07:00" } - } + }, + "updated_at": "2023-04-24T10:27:15-07:00" }, "metafield_product_images": { "products": { diff --git a/airbyte-integrations/connectors/source-shopify/metadata.yaml b/airbyte-integrations/connectors/source-shopify/metadata.yaml index 0eb582dd457d..a1881ee5550b 100644 --- a/airbyte-integrations/connectors/source-shopify/metadata.yaml +++ b/airbyte-integrations/connectors/source-shopify/metadata.yaml @@ -11,7 +11,7 @@ data: connectorSubtype: api connectorType: source definitionId: 9da77001-af33-4bcd-be46-6252bf9342b9 - dockerImageTag: 1.1.8 + dockerImageTag: 2.0.0 dockerRepository: airbyte/source-shopify documentationUrl: https://docs.airbyte.com/integrations/sources/shopify githubIssueLabel: source-shopify @@ -35,11 +35,37 @@ data: "This upgrade brings changes to certain streams after migration to Shopify API version `2023-07`, more details in this PR: https://github.com/airbytehq/airbyte/pull/29361." upgradeDeadline: "2023-09-17" + 2.0.0: + message: "This upgrade brings perfomance impovements and stream schema changes. Details are available here: https://github.com/airbytehq/airbyte/pull/32345#issue-1985556333." + upgradeDeadline: "2024-03-18" + scopedImpact: + - scopeType: stream + impactedScopes: + [ + "collections", + "customer_address", + "discount_codes", + "fulfillment_orders", + "fulfillments", + "inventory_items", + "inventory_levels", + "metafield_collections", + "metafield_customers", + "metafield_draft_orders", + "metafield_locations", + "metafield_orders", + "metafield_product_images", + "metafield_product_variants", + "order_refunds", + "product_images", + "product_variants", + "transactions", + ] suggestedStreams: streams: - customers - order_refunds - - transactions + - transactions_graphql - product_variants - abandoned_checkouts - discount_codes @@ -50,7 +76,6 @@ data: - inventory_levels - custom_collections - fulfillments - - order_risks - products_graph_ql - product_images - collects diff --git a/airbyte-integrations/connectors/source-shopify/poetry.lock b/airbyte-integrations/connectors/source-shopify/poetry.lock index faca58b052f6..ea5d5de6d857 100644 --- a/airbyte-integrations/connectors/source-shopify/poetry.lock +++ b/airbyte-integrations/connectors/source-shopify/poetry.lock @@ -312,6 +312,26 @@ files = [ {file = "graphql_core-3.2.3-py3-none-any.whl", hash = "sha256:5766780452bd5ec8ba133f8bf287dc92713e3868ddd83aee4faab9fc3e303dc3"}, ] +[[package]] +name = "graphql-query" +version = "1.1.1" +description = "Complete GraphQL query string generation for python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "graphql_query-1.1.1-py3-none-any.whl", hash = "sha256:c88e052d5739cbc0c20ed4597892025b2e3c363c75b44a06ea55005f09ecbd3d"}, + {file = "graphql_query-1.1.1.tar.gz", hash = "sha256:b0f52b560977fdf48c5ca48bb35772d86632018e13e948b10681815a58945b07"}, +] + +[package.dependencies] +jinja2 = ">=3.1,<3.2" +pydantic = ">=1.10,<1.11" + +[package.extras] +dev = ["black", "mypy", "pylint-pydantic", "ruff", "wheel"] +docs = ["sphinx", "sphinx-argparse", "sphinx-rtd-theme", "sphinxcontrib-github"] +test = ["pytest", "pytest-cov", "pytest-mock"] + [[package]] name = "idna" version = "3.6" @@ -1037,4 +1057,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.9,<3.12" -content-hash = "71f6b166e4220683dea93a273110eca25f9680be5842ee802d78a9583f31ee2f" +content-hash = "d5eb24b58b8ae8d10cc9f421ea1d125ef3833c69a1007e13624990a30bf2070a" diff --git a/airbyte-integrations/connectors/source-shopify/pyproject.toml b/airbyte-integrations/connectors/source-shopify/pyproject.toml index 65ae0c202895..e26cb727a7e7 100644 --- a/airbyte-integrations/connectors/source-shopify/pyproject.toml +++ b/airbyte-integrations/connectors/source-shopify/pyproject.toml @@ -3,7 +3,7 @@ requires = [ "poetry-core>=1.0.0",] build-backend = "poetry.core.masonry.api" [tool.poetry] -version = "1.1.8" +version = "2.0.0" name = "source-shopify" description = "Source CDK implementation for Shopify." authors = [ "Airbyte ",] @@ -19,6 +19,7 @@ include = "source_shopify" python = "^3.9,<3.12" airbyte-cdk = "==0.59.0" sgqlc = "==16.3" +graphql-query = "^1.1.1" [tool.poetry.scripts] source-shopify = "source_shopify.run:run" diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/auth.py b/airbyte-integrations/connectors/source-shopify/source_shopify/auth.py index cba5ea272f26..6d53197ff18a 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/auth.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/auth.py @@ -34,7 +34,6 @@ def __init__(self, config: Mapping[str, Any]): self.config = config def get_auth_header(self) -> Mapping[str, Any]: - auth_header: str = "X-Shopify-Access-Token" credentials: Dict = self.config.get("credentials", self.config.get("auth_method")) auth_method: str = credentials.get("auth_method") diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customer_address.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customer_address.json index 31d24b3c458c..a2e9af21f4fc 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customer_address.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customer_address.json @@ -55,6 +55,10 @@ }, "shop_url": { "type": ["null", "string"] + }, + "updated_at": { + "type": ["null", "string"], + "format": "date-time" } } } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customers.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customers.json index 3baa26ec8d73..c78b7ee47494 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customers.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/customers.json @@ -214,6 +214,9 @@ "sms_marketing_consent": { "type": ["null", "object"], "properties": { + "consent_collected_from": { + "type": ["null", "string"] + }, "consent_updated_at": { "type": ["null", "string"], "format": "date-time" diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/discount_codes.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/discount_codes.json index f3e208e014c5..4b864604d486 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/discount_codes.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/discount_codes.json @@ -22,6 +22,15 @@ "type": ["null", "string"], "format": "date-time" }, + "summary": { + "type": ["null", "string"] + }, + "discount_type": { + "type": ["null", "string"] + }, + "admin_graphql_api_id": { + "type": ["null", "string"] + }, "shop_url": { "type": ["null", "string"] } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillment_orders.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillment_orders.json index 9d810f8a694a..d4644ee66075 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillment_orders.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillment_orders.json @@ -54,6 +54,14 @@ }, "method_type": { "type": ["null", "string"] + }, + "min_delivery_date_time": { + "type": ["null", "string"], + "format": "date-time" + }, + "max_delivery_date_time": { + "type": ["null", "string"], + "format": "date-time" } } }, @@ -99,7 +107,7 @@ "shop_id": { "type": ["null", "integer"] }, - "fullfillment_order_id": { + "fulfillment_order_id": { "type": ["null", "integer"] }, "line_item_id": { @@ -135,7 +143,15 @@ "supported_actions": { "type": ["null", "array"], "items": { - "type": ["null", "string"] + "type": ["null", "object"], + "properties": { + "action": { + "type": ["null", "string"] + }, + "external_url": { + "type": ["null", "string"] + } + } } }, "merchant_requests": { @@ -143,6 +159,9 @@ "items": { "type": ["null", "object"], "properties": { + "id": { + "type": ["null", "integer"] + }, "message": { "type": ["null", "string"] }, @@ -150,7 +169,13 @@ "type": ["null", "string"] }, "request_options": { - "type": ["null", "object"] + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "notify_customer": { + "type": ["null", "boolean"] + } + } } } } @@ -197,6 +222,9 @@ "updated_at": { "type": ["null", "string"], "format": "date-time" + }, + "admin_graphql_api_id": { + "type": ["null", "string"] } } } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillments.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillments.json index d04a0c3686c6..3b85a5fc97b2 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillments.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/fulfillments.json @@ -115,6 +115,33 @@ "price": { "type": ["null", "string"] }, + "price_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + } + } + }, "grams": { "type": ["null", "number"] }, @@ -163,6 +190,33 @@ "total_discount": { "type": ["null", "string"] }, + "total_discount_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + } + } + }, "fulfillment_status": { "type": ["null", "string"] }, @@ -174,9 +228,39 @@ "items": { "type": ["null", "object"], "properties": { + "channel_liable": { + "type": ["null", "boolean"] + }, "price": { "type": ["null", "number"] }, + "price_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "number"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + } + } + }, "rate": { "type": ["null", "number"] }, @@ -185,6 +269,149 @@ } } } + }, + "duties": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "string"] + }, + "harmonized_system_code": { + "type": ["null", "string"] + }, + "country_code_of_origin": { + "type": ["null", "string"] + }, + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "tax_lines": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "title": { + "type": ["null", "string"] + }, + "price": { + "type": ["null", "string"] + }, + "rate": { + "type": ["null", "number"] + }, + "price_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + } + } + }, + "channel_liable": { + "type": ["null", "boolean"] + } + } + } + } + } + } + }, + "discount_allocations": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "discount_application_index": { + "type": ["null", "number"] + }, + "amount_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "amount": { + "type": ["null", "string"] + }, + "currency_code": { + "type": ["null", "string"] + } + } + } + } + }, + "application_type": { + "type": ["null", "string"] + } + } + } + }, + "admin_graphql_api_id": { + "type": ["null", "string"] } } } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/order_refunds.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/order_refunds.json index aa1b05981036..85b2c167674f 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/order_refunds.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/order_refunds.json @@ -179,6 +179,9 @@ }, "rate": { "type": ["null", "number"] + }, + "channel_liable": { + "type": ["null", "boolean"] } }, "type": ["null", "object"] @@ -196,15 +199,7 @@ "properties": { "type": ["null", "array"], "items": { - "properties": { - "name": { - "type": ["null", "string"] - }, - "value": { - "type": ["null", "string"] - } - }, - "type": ["null", "object"] + "type": ["null", "string"] } }, "quantity": { @@ -379,6 +374,45 @@ }, "title": { "type": ["null", "string"] + }, + "duties": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "duty_id": { + "type": ["null", "integer"] + }, + "amount_set": { + "properties": { + "shop_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + }, + "presentment_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + } + }, + "type": ["null", "object"] + } + } + } } }, "type": ["null", "object"] @@ -473,6 +507,45 @@ }, "user_id": { "type": ["null", "integer"] + }, + "payment_details": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "avs_result_code": { + "type": ["null", "string"] + }, + "buyer_action_info": { + "type": ["null", "string"] + }, + "credit_card_bin": { + "type": ["null", "string"] + }, + "credit_card_company": { + "type": ["null", "string"] + }, + "credit_card_expiration_month": { + "type": ["null", "integer"] + }, + "credit_card_expiration_year": { + "type": ["null", "integer"] + }, + "credit_card_name": { + "type": ["null", "string"] + }, + "credit_card_number": { + "type": ["null", "string"] + }, + "credit_card_wallet": { + "type": ["null", "string"] + }, + "cvv_result_code": { + "type": ["null", "string"] + } + } + }, + "payment_id": { + "type": ["null", "string"] } } } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/orders.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/orders.json index 416b20b7d0f4..f7e975ac9e12 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/orders.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/orders.json @@ -447,6 +447,9 @@ "items": { "type": ["null", "object"], "properties": { + "channel_liable": { + "type": ["null", "boolean"] + }, "price": { "type": ["null", "number"] }, @@ -837,6 +840,50 @@ "type": ["null", "boolean"] } } + }, + "email_marketing_consent": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "state": { + "type": ["null", "string"] + }, + "opt_in_level": { + "type": ["null", "string"] + }, + "consent_updated_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "consent_collected_from": { + "type": ["null", "string"] + } + } + }, + "sms_marketing_consent": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "state": { + "type": ["null", "string"] + }, + "opt_in_level": { + "type": ["null", "string"] + }, + "consent_updated_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "consent_collected_from": { + "type": ["null", "string"] + } + } + }, + "tax_exemptions": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } } } }, @@ -1157,6 +1204,9 @@ "items": { "type": ["null", "object"], "properties": { + "channel_liable": { + "type": ["null", "boolean"] + }, "price": { "type": ["null", "number"] }, @@ -1341,6 +1391,30 @@ } } } + }, + "origin_address": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "address1": { + "type": ["null", "string"] + }, + "address2": { + "type": ["null", "string"] + }, + "city": { + "type": ["null", "string"] + }, + "country_code": { + "type": ["null", "string"] + }, + "province_code": { + "type": ["null", "string"] + }, + "zip": { + "type": ["null", "string"] + } + } } } } @@ -1547,6 +1621,9 @@ "items": { "type": ["null", "object"], "properties": { + "channel_liable": { + "type": ["null", "boolean"] + }, "price": { "type": ["null", "number"] }, @@ -1915,6 +1992,45 @@ }, "user_id": { "type": ["null", "integer"] + }, + "payment_details": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "avs_result_code": { + "type": ["null", "string"] + }, + "buyer_action_info": { + "type": ["null", "string"] + }, + "credit_card_bin": { + "type": ["null", "string"] + }, + "credit_card_company": { + "type": ["null", "string"] + }, + "credit_card_expiration_month": { + "type": ["null", "integer"] + }, + "credit_card_expiration_year": { + "type": ["null", "integer"] + }, + "credit_card_name": { + "type": ["null", "string"] + }, + "credit_card_number": { + "type": ["null", "string"] + }, + "credit_card_wallet": { + "type": ["null", "string"] + }, + "cvv_result_code": { + "type": ["null", "string"] + } + } + }, + "payment_id": { + "type": ["null", "string"] } } } @@ -2130,6 +2246,9 @@ "items": { "type": ["null", "object"], "properties": { + "channel_liable": { + "type": ["null", "boolean"] + }, "price": { "type": ["null", "string"] }, @@ -2209,11 +2328,116 @@ } } } + }, + "duties": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "duty_id": { + "type": ["null", "integer"] + }, + "amount_set": { + "properties": { + "shop_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + }, + "presentment_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + } + }, + "type": ["null", "object"] + } + } + } } } } } } + }, + "duties": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "duty_id": { + "type": ["null", "integer"] + }, + "amount_set": { + "properties": { + "shop_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + }, + "presentment_money": { + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + }, + "type": ["null", "object"] + } + }, + "type": ["null", "object"] + } + } + } + }, + "total_duties_set": { + "type": ["null", "object"], + "properties": { + "shop_money": { + "type": ["null", "object"], + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + } + }, + "presentment_money": { + "type": ["null", "object"], + "properties": { + "currency_code": { + "type": ["null", "string"] + }, + "amount": { + "type": ["null", "number"] + } + } + } + } } } } diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/products.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/products.json index c97a60b74645..f70f3ecb39e7 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/products.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/products.json @@ -94,6 +94,9 @@ }, "width": { "type": ["null", "integer"] + }, + "product_id": { + "type": ["null", "integer"] } }, "type": ["null", "object"] @@ -139,6 +142,9 @@ }, "width": { "type": ["null", "integer"] + }, + "product_id": { + "type": ["null", "integer"] } }, "type": ["null", "object"] @@ -255,6 +261,9 @@ }, "option3": { "type": ["null", "string"] + }, + "product_id": { + "type": ["null", "integer"] } }, "type": ["null", "object"] diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/transactions.json b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/transactions.json index f8a05c8091f5..cec14d1d20b2 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/transactions.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/schemas/transactions.json @@ -57,6 +57,9 @@ }, "currency_code": { "type": ["null", "string"] + }, + "currency": { + "type": ["null", "string"] } } }, @@ -68,6 +71,9 @@ }, "currency_code": { "type": ["null", "string"] + }, + "currency": { + "type": ["null", "string"] } } } @@ -77,8 +83,13 @@ "type": ["null", "string"] }, "payment_details": { + "type": ["null", "object"], + "additionalProperties": true, "properties": { - "cvv_result_code": { + "avs_result_code": { + "type": ["null", "string"] + }, + "buyer_action_info": { "type": ["null", "string"] }, "credit_card_bin": { @@ -87,14 +98,25 @@ "credit_card_company": { "type": ["null", "string"] }, + "credit_card_expiration_month": { + "type": ["null", "integer"] + }, + "credit_card_expiration_year": { + "type": ["null", "integer"] + }, + "credit_card_name": { + "type": ["null", "string"] + }, "credit_card_number": { "type": ["null", "string"] }, - "avs_result_code": { + "credit_card_wallet": { + "type": ["null", "string"] + }, + "cvv_result_code": { "type": ["null", "string"] } - }, - "type": ["null", "object"] + } }, "processed_at": { "type": ["null", "string"], @@ -107,21 +129,29 @@ "type": ["null", "string"] }, "receipt": { - "type": ["null", "object"], - "properties": { - "fee_amount": { - "type": ["null", "number"], - "multipleOf": 1e-10 - }, - "gross_amount": { - "type": ["null", "number"], - "multipleOf": 1e-10 + "oneOf": [ + { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "fee_amount": { + "type": ["null", "number"], + "multipleOf": 1e-10 + }, + "gross_amount": { + "type": ["null", "number"], + "multipleOf": 1e-10 + }, + "tax_amount": { + "type": ["null", "number"], + "multipleOf": 1e-10 + } + } }, - "tax_amount": { - "type": ["null", "number"], - "multipleOf": 1e-10 + { + "type": ["null", "string"] } - } + ] }, "location_id": { "type": ["null", "integer"] diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/scopes.py b/airbyte-integrations/connectors/source-shopify/source_shopify/scopes.py new file mode 100644 index 000000000000..805acc1f8d68 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/scopes.py @@ -0,0 +1,157 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import logging +from typing import Any, Iterable, List, Mapping, Optional + +import requests +from requests.exceptions import ConnectionError, InvalidURL, JSONDecodeError, SSLError + +from .utils import ShopifyAccessScopesError, ShopifyBadJsonError, ShopifyConnectionError, ShopifyWrongShopNameError + +SCOPES_MAPPING: Mapping[str, set[str]] = { + # SCOPE: read_customers + "Customers": ("read_customers",), + "MetafieldCustomers": ("read_customers",), + "CustomerSavedSearch": ("read_customers",), + "CustomerAddress": ("read_customers",), + # SCOPE: read_orders + "Orders": ("read_orders",), + "AbandonedCheckouts": ("read_orders",), + "TenderTransactions": ("read_orders",), + "Transactions": ("read_orders",), + "TransactionsGraphql": ("read_orders",), + "Fulfillments": ("read_orders",), + "OrderRefunds": ("read_orders",), + "OrderRisks": ("read_orders",), + "MetafieldOrders": ("read_orders",), + # SCOPE: read_draft_orders + "DraftOrders": ("read_draft_orders",), + "MetafieldDraftOrders": ("read_draft_orders",), + # SCOPE: read_products + "Products": ("read_products",), + "ProductsGraphQl": ("read_products",), + "MetafieldProducts": ("read_products",), + "ProductImages": ("read_products",), + "MetafieldProductImages": ("read_products",), + "MetafieldProductVariants": ("read_products",), + "CustomCollections": ("read_products",), + "Collects": ("read_products",), + "ProductVariants": ("read_products",), + "MetafieldCollections": ("read_products",), + "SmartCollections": ("read_products",), + "MetafieldSmartCollections": ("read_products",), + # SCOPE: read_products, read_publications + "Collections": ("read_products", "read_publications"), + # SCOPE: read_content + "Pages": ("read_content",), + "MetafieldPages": ("read_content",), + # SCOPE: read_price_rules + "PriceRules": ("read_price_rules",), + # SCOPE: read_discounts + "DiscountCodes": ("read_discounts",), + # SCOPE: read_locations + "Locations": ("read_locations",), + "MetafieldLocations": ("read_locations",), + # SCOPE: read_inventory + "InventoryItems": ("read_inventory",), + "InventoryLevels": ("read_inventory",), + # SCOPE: read_merchant_managed_fulfillment_orders + "FulfillmentOrders": ("read_merchant_managed_fulfillment_orders",), + # SCOPE: read_shopify_payments_payouts + "BalanceTransactions": ("read_shopify_payments_payouts",), + "Disputes": ("read_shopify_payments_payouts",), + # SCOPE: read_online_store_pages + "Articles": ("read_online_store_pages",), + "MetafieldArticles": ("read_online_store_pages",), + "Blogs": ("read_online_store_pages",), + "MetafieldBlogs": ("read_online_store_pages",), +} + +ALWAYS_PERMITTED_STREAMS: List[str] = [ + "MetafieldShops", + "Shop", + "Countries", +] + + +class ShopifyScopes: + + # define default logger + logger = logging.getLogger("airbyte") + + def __init__(self, config: Mapping[str, Any]) -> None: + self.user_scopes = self.get_user_scopes(config) + # for each stream check the authenticated user has all scopes required + self.get_streams_from_user_scopes() + # log if there are streams missing scopes and should be omitted + self.emit_missing_scopes() + + # the list of validated streams + permitted_streams: List[str] = ALWAYS_PERMITTED_STREAMS + # the list of not permitted streams + not_permitted_streams: List[set[str, str]] = [] + # template for the log message + missing_scope_message: str = ( + "The stream `{stream}` could not be synced without the `{scope}` scope. Please check the `{scope}` is granted." + ) + + @staticmethod + def get_user_scopes(config) -> list[Any]: + session = requests.Session() + url = f"https://{config['shop']}.myshopify.com/admin/oauth/access_scopes.json" + headers = config["authenticator"].get_auth_header() + try: + response = session.get(url, headers=headers).json() + access_scopes = [scope.get("handle") for scope in response.get("access_scopes")] + except InvalidURL: + raise ShopifyWrongShopNameError(url) + except JSONDecodeError as json_error: + raise ShopifyBadJsonError(json_error) + except (SSLError, ConnectionError) as con_error: + raise ShopifyConnectionError(con_error) + + if access_scopes: + return access_scopes + else: + raise ShopifyAccessScopesError(response) + + def log_missing_scope(self, not_permitted_stream: Mapping[str, Any]) -> str: + stream_name, scope = not_permitted_stream + self.logger.warning(self.missing_scope_message.format(stream=stream_name, scope=scope)) + + def emit_missing_scopes(self) -> Optional[Iterable[List[str]]]: + if len(self.not_permitted_streams) > 0: + for not_permitted_stream in self.not_permitted_streams: + self.log_missing_scope(not_permitted_stream) + + def get_permitted_streams(self) -> List[str]: + # return the list of validated streams + return self.permitted_streams + + def not_permitted_streams_names(self) -> List[str]: + return [not_permitted[0] for not_permitted in self.not_permitted_streams] + + def stream_has_no_missing_scopes(self, stream_name: str) -> bool: + return stream_name not in self.not_permitted_streams_names() + + def check_user_has_stream_scope(self, stream_name: str, scope: str) -> None: + if scope not in self.user_scopes: + self.not_permitted_streams.append((stream_name, scope)) + + def register_permitted_stream(self, stream_name: str) -> None: + # allow stream only if there is a complete match with required scopes + if self.stream_has_no_missing_scopes(stream_name): + self.permitted_streams.append(stream_name) + + def validate_stream_scopes(self, stream_name: str, scopes_required: str) -> None: + for scope in scopes_required: + self.check_user_has_stream_scope(stream_name, scope) + + def get_streams_from_user_scopes(self) -> None: + # for each stream check the authenticated user has all scopes required + for stream_name, stream_scopes in SCOPES_MAPPING.items(): + self.validate_stream_scopes(stream_name, stream_scopes) + self.register_permitted_stream(stream_name) diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/exceptions.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/exceptions.py new file mode 100644 index 000000000000..51a0a0b004ff --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/exceptions.py @@ -0,0 +1,40 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from airbyte_cdk.utils import AirbyteTracedException +from airbyte_protocol.models import FailureType + + +class ShopifyBulkExceptions: + class BaseBulkException(AirbyteTracedException): + def __init__(self, message: str, **kwargs) -> None: + super().__init__(internal_message=message, failure_type=FailureType.config_error, **kwargs) + + class BulkJobError(BaseBulkException): + """Raised when there are BULK Job Errors in response""" + + class BulkJobUnknownError(BaseBulkException): + """Raised when BULK Job has FAILED with Unknown status""" + + class BulkJobBadResponse(BaseBulkException): + """Raised when the requests.Response object could not be parsed""" + + class BulkJobResultUrlError(BaseBulkException): + """Raised when BULK Job has ACCESS_DENIED status""" + + class BulkRecordProduceError(BaseBulkException): + """Raised when there are error producing records from BULK Job result""" + + class BulkJobFailed(BaseBulkException): + """Raised when BULK Job has FAILED status""" + + class BulkJobTimout(BaseBulkException): + """Raised when BULK Job has TIMEOUT status""" + + class BulkJobAccessDenied(BaseBulkException): + """Raised when BULK Job has ACCESS_DENIED status""" + + class BulkJobConcurrentError(BaseBulkException): + """Raised when BULK Job could not be created, since the 1 Bulk job / shop quota is exceeded.""" diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/job.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/job.py new file mode 100644 index 000000000000..127b87161762 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/job.py @@ -0,0 +1,262 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import logging +from dataclasses import dataclass, field +from enum import Enum +from time import sleep, time +from typing import Any, Iterable, List, Mapping, Optional, Union + +import requests +from airbyte_cdk import AirbyteLogger +from requests.exceptions import JSONDecodeError +from source_shopify.utils import ApiTypeEnum +from source_shopify.utils import ShopifyRateLimiter as limiter + +from .exceptions import AirbyteTracedException, ShopifyBulkExceptions +from .query import ShopifyBulkTemplates +from .tools import END_OF_FILE, BulkTools + + +class ShopifyBulkStatus(Enum): + CREATED = "CREATED" + COMPLETED = "COMPLETED" + RUNNING = "RUNNING" + FAILED = "FAILED" + TIMEOUT = "TIMEOUT" + ACCESS_DENIED = "ACCESS_DENIED" + + +@dataclass +class ShopifyBulkManager: + session: requests.Session + base_url: str + + # 5Mb chunk size to save the file + retrieve_chunk_size: int = 1024 * 1024 * 5 + # time between job status checks + job_check_interval_sec: int = 5 + + # PLATFORM HEARTBEAT NOTES: + # 30 sec / attempt * 19 attempts = 570 sec of wait time in total, + # which is < 10 min of retrying, before Heartbeat will kill the source as non-responsive + + # sleep time per creation attempt + concurrent_interval_sec = 30 + # max attempts for job creation + concurrent_max_retry: int = 19 + + # attempt limit indicator + concurrent_max_attempt_reached: bool = field(init=False, default=False) + # attempt counter + concurrent_attempt: int = field(init=False, default=0) + + # default logger + logger: AirbyteLogger = field(init=False, default=logging.getLogger("airbyte")) + + # currents: job_id, job_state + job_id: Optional[str] = field(init=False, default=None) + job_state: ShopifyBulkStatus = field(init=False, default=None) + + @property + def tools(self) -> BulkTools: + return BulkTools() + + @property + def job_state_to_fn_map(self) -> Mapping[str, Any]: + return { + ShopifyBulkStatus.CREATED.value: self.on_created_job, + ShopifyBulkStatus.COMPLETED.value: self.on_completed_job, + ShopifyBulkStatus.RUNNING.value: self.on_running_job, + ShopifyBulkStatus.TIMEOUT.value: self.on_timeout_job, + ShopifyBulkStatus.FAILED.value: self.on_failed_job, + ShopifyBulkStatus.ACCESS_DENIED.value: self.on_access_denied_job, + } + + def __reset_state(self) -> None: + # set current job state to default value + self.job_state, self.job_id = None, None + + def job_completed(self) -> bool: + return self.job_state == ShopifyBulkStatus.COMPLETED.value + + def log_state(self) -> None: + self.logger.info(f"The BULK Job: `{self.job_id}` is {self.job_state}.") + + def job_get_state_args(self) -> Mapping[str, Any]: + return { + "method": "POST", + "url": self.base_url, + "data": ShopifyBulkTemplates.status(self.job_id), + "headers": {"Content-Type": "application/graphql"}, + } + + def job_get_result(self, response: Optional[requests.Response] = None) -> Optional[str]: + job_result_url = response.json().get("data", {}).get("node", {}).get("url") if response else None + if job_result_url: + # save to local file using chunks to avoid OOM + filename = self.tools.filename_from_url(job_result_url) + with self.session.get(job_result_url, stream=True) as response: + response.raise_for_status() + with open(filename, "wb") as file: + for chunk in response.iter_content(chunk_size=self.retrieve_chunk_size): + file.write(chunk) + # add `` line to the bottom of the saved data for easy parsing + file.write(END_OF_FILE.encode()) + return filename + + def job_update_state(self, response: Optional[requests.Response] = None) -> None: + if response: + self.job_state = response.json().get("data", {}).get("node", {}).get("status") + self.log_state() + + def on_created_job(self, **kwargs) -> None: + pass + + def on_running_job(self, **kwargs) -> None: + sleep(self.job_check_interval_sec) + + def on_completed_job(self, **kwargs) -> None: + pass + + def on_failed_job(self, response: requests.Response) -> AirbyteTracedException: + raise ShopifyBulkExceptions.BulkJobFailed( + f"The BULK Job: `{self.job_id}` exited with {self.job_state}, details: {response.text}", + ) + + def on_timeout_job(self, **kwargs) -> AirbyteTracedException: + raise ShopifyBulkExceptions.BulkJobTimout( + f"The BULK Job: `{self.job_id}` exited with {self.job_state}, please reduce the `GraphQL BULK Date Range in Days` in SOURCES > Your Shopify Source > SETTINGS.", + ) + + def on_access_denied_job(self, **kwagrs) -> AirbyteTracedException: + raise ShopifyBulkExceptions.BulkJobAccessDenied( + f"The BULK Job: `{self.job_id}` exited with {self.job_state}, please check your PERMISSION to fetch the data for this stream.", + ) + + def on_job_with_errors(self, errors: List[Mapping[str, Any]]) -> AirbyteTracedException: + raise ShopifyBulkExceptions.BulkJobUnknownError(f"Could not validate the status of the BULK Job `{self.job_id}`. Errors: {errors}.") + + @limiter.balance_rate_limit(api_type=ApiTypeEnum.graphql.value) + def job_check_for_errors(self, response: requests.Response) -> Iterable[Mapping[str, Any]]: + try: + return response.json().get("errors") or response.json().get("data", {}).get("bulkOperationRunQuery", {}).get("userErrors", []) + except (Exception, JSONDecodeError) as e: + raise ShopifyBulkExceptions.BulkJobBadResponse( + f"Couldn't check the `response` for `errors`, response: `{response.text}`. Trace: {repr(e)}." + ) + + def job_track_running(self) -> Union[AirbyteTracedException, requests.Response]: + # format Job state check args + status_args = self.job_get_state_args() + # re-use of `self._session(*, **)` to make BULK Job status checks + response = self.session.request(**status_args) + # errors check + errors = self.job_check_for_errors(response) + if not errors: + self.job_update_state(response) + self.job_state_to_fn_map.get(self.job_state)(response=response) + return response + else: + # execute ERRORS scenario + self.on_job_with_errors(errors) + + def job_check_state(self) -> Optional[str]: + while not self.job_completed(): + response = self.job_track_running() + # return `job_result_url` when status is `COMPLETED` + return self.job_get_result(response) + + def has_running_concurrent_job(self, errors: Optional[Iterable[Mapping[str, Any]]] = None) -> bool: + """ + When concurent BULK Job is already running for the same SHOP we receive: + Error example: + [ + { + 'field': None, + 'message': 'A bulk query operation for this app and shop is already in progress: gid://shopify/BulkOperation/4039184154813.', + } + ] + """ + + concurent_job_pattern = "A bulk query operation for this app and shop is already in progress" + # the errors are handled in `job_job_check_for_errors` + if errors: + for error in errors: + message = error.get("message", "") + if concurent_job_pattern in message: + return True + # reset the `concurrent_attempt` counter, once there is no concurrent job error + self.concurrent_attempt = 0 + return False + + def has_reached_max_concurrency_attempt(self) -> bool: + return self.concurrent_attempt == self.concurrent_max_retry + + def job_retry_concurrent(self, request: requests.PreparedRequest) -> Optional[requests.Response]: + # increment attempt + self.concurrent_attempt += 1 + # try to execute previous request, it's handy because we can retry / each slice yielded + self.logger.warning( + f"The BULK concurrency limit has reached. Waiting {self.concurrent_interval_sec} sec before retry, atttempt: {self.concurrent_attempt}.", + ) + sleep(self.concurrent_interval_sec) + # retry current `request` + return self.job_healthcheck(self.session.send(request)) + + def job_get_id(self, response: requests.Response) -> Optional[str]: + response_data = response.json() + bulk_response = response_data.get("data", {}).get("bulkOperationRunQuery", {}).get("bulkOperation", {}) + if bulk_response and bulk_response.get("status") == ShopifyBulkStatus.CREATED.value: + job_id = bulk_response.get("id") + self.logger.info(f"The BULK Job: `{job_id}` is {ShopifyBulkStatus.CREATED.value}") + return job_id + else: + return None + + def job_retry_on_concurrency(self, request: requests.PreparedRequest) -> Union[AirbyteTracedException, Optional[requests.Response]]: + if self.has_reached_max_concurrency_attempt(): + # indicate we're out of attempts to retry with job creation + message = f"The BULK Job couldn't be created at this time, since another job is running." + # log the message + self.logger.error(message) + # raise AibyteTracebackException with `INCOMPLETE` status + raise ShopifyBulkExceptions.BulkJobConcurrentError(message) + else: + return self.job_retry_concurrent(request) + + def job_healthcheck(self, response: requests.Response) -> Optional[requests.Response]: + # errors check + errors = self.job_check_for_errors(response) + # when the concurrent job takes place, we typically need to wait and retry, but no longer than 10 min. + if not self.has_running_concurrent_job(errors): + return response if not errors else None + else: + # get the latest request to retry + request: requests.PreparedRequest = response.request + return self.job_retry_on_concurrency(request) + + @limiter.balance_rate_limit(api_type=ApiTypeEnum.graphql.value) + def job_check(self, created_job_response: requests.Response) -> Optional[str]: + """ + This method checks the status for the BULK Job created, using it's `ID`. + The time spent for the Job execution is tracked to understand the effort. + """ + job_response = self.job_healthcheck(created_job_response) + self.job_id: str = self.job_get_id(job_response) + job_started = time() + try: + return self.job_check_state() + except ( + ShopifyBulkExceptions.BulkJobFailed, + ShopifyBulkExceptions.BulkJobTimout, + ShopifyBulkExceptions.BulkJobAccessDenied, + ShopifyBulkExceptions.BulkJobUnknownError, + ) as bulk_job_error: + raise bulk_job_error + finally: + time_elapsed = round((time() - job_started), 3) + self.logger.info(f"The BULK Job: `{self.job_id}` time elapsed: {time_elapsed} sec.") + # reset the state for COMPLETED job + self.__reset_state() diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/query.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/query.py new file mode 100644 index 000000000000..c614def08dfa --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/query.py @@ -0,0 +1,1484 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from abc import abstractmethod +from dataclasses import dataclass +from enum import Enum +from string import Template +from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Union + +from attr import dataclass +from graphql_query import Argument, Field, InlineFragment, Operation, Query + +from .tools import BULK_PARENT_KEY, BulkTools + + +class ShopifyBulkTemplates: + @staticmethod + def status(bulk_job_id: str) -> str: + return Template( + """query { + node(id: "$job_id") { + ... on BulkOperation { + id + status + errorCode + objectCount + fileSize + url + partialDataUrl + } + } + }""" + ).substitute(job_id=bulk_job_id) + + @staticmethod + def prepare(query: str) -> str: + bulk_template = Template( + '''mutation { + bulkOperationRunQuery( + query: """ + $query + """ + ) { + bulkOperation { + id + status + } + userErrors { + field + message + } + } + }''' + ) + return bulk_template.substitute(query=query) + + +@dataclass +class ShopifyBulkQuery: + shop_id: int + + @property + def tools(self) -> BulkTools: + return BulkTools() + + @property + @abstractmethod + def query_name(self) -> str: + """ + Defines the root graph node name to fetch from: https://shopify.dev/docs/api/admin-graphql + """ + + @property + def record_composition(self) -> Optional[Mapping[str, Any]]: + """ + Example: + { + "new_record": "Collection", // the GQL Typename of the parent entity + "record_components": [ + "CollectionPublication" // each `collection` has List `publications` + ], + } + """ + return {} + + @property + def sort_key(self) -> Optional[str]: + """ + The field name by which the records are ASC sorted, if defined. + """ + return None + + @property + def query_nodes(self) -> Optional[Union[List[Field], List[str]]]: + """ + Defines the fields for final graph selection. + https://shopify.dev/docs/api/admin-graphql + """ + return ["__typename", "id"] + + def get(self, filter_field: Optional[str] = None, start: Optional[str] = None, end: Optional[str] = None) -> str: + # define filter query string, if passed + filter_query = f"{filter_field}:>='{start}' AND {filter_field}:<='{end}'" if filter_field else None + # building query + query: Query = self.query(filter_query) + # resolving + return self.resolve(query) + + def query(self, filter_query: Optional[str] = None) -> Query: + """ + Overide this method, if you need to customize query build logic. + Output example to BULK query `` with `filter query`: + { + (query: "") { + edges { + node { + id + } + } + } + } + """ + # return the constructed query operation + return self.build(self.query_name, self.query_nodes, filter_query) + + def build( + self, + name: str, + edges: Optional[Union[List[Field], List[InlineFragment], Field, InlineFragment]] = None, + filter_query: Optional[str] = None, + additional_query_args: Optional[Mapping[str, Any]] = None, + ) -> Query: + """ + Defines the root of the graph with edges. + """ + query_args: List[Argument] = [] + # constructing arguments + if filter_query: + query_args.append(Argument(name="query", value=f'"{filter_query}"')) + if self.sort_key: + query_args.append(Argument(name="sortKey", value=self.sort_key)) + if additional_query_args: + for k, v in additional_query_args.items(): + query_args.append(Argument(name=k, value=v)) + # constructing edges + query_fields = [ + Field(name="edges", fields=[Field(name="node", fields=edges if edges else ["id"])]), + ] + # return constucted query + return Query(name=name, arguments=query_args, fields=query_fields) + + def resolve(self, query: Query) -> str: + """ + Default query resolver from type(Operation) > type(str). + Overide this method to build multiple queries in one, if needed. + """ + # return the constructed query operation + return Operation(type="", queries=[query]).render() + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components, default `as is`. + """ + yield record + + +class MetafieldType(Enum): + CUSTOMERS = "customers" + ORDERS = "orders" + DRAFT_ORDERS = "draftOrders" + PRODUCTS = "products" + PRODUCT_IMAGES = ["products", "images"] + PRODUCT_VARIANTS = "productVariants" + COLLECTIONS = "collections" + LOCATIONS = "locations" + + +class Metafield(ShopifyBulkQuery): + """ + Only 2 lvl nesting is available: https://shopify.dev/docs/api/usage/bulk-operations/queries#operation-restrictions + Output example to BULK query `customers.metafields` with `filter query` by `updated_at` sorted `ASC`: + { + ( + query: "updated_at:>='2023-04-13' AND updated_at:<='2023-12-01'" + sortKey: UPDATED_AT + ) { + edges { + node { + __typename + id + metafields { + edges { + node { + __typename + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + sort_key = "UPDATED_AT" + record_composition = {"new_record": "Metafield"} + + metafield_fields: List[Field] = [ + "__typename", + "id", + "namespace", + "value", + "key", + "description", + "createdAt", + "updatedAt", + "type", + ] + + @property + def query_name(self) -> str: + if isinstance(self.type.value, list): + return self.type.value[0] + elif isinstance(self.type.value, str): + return self.type.value + + @property + @abstractmethod + def type(self) -> MetafieldType: + """ + Defines the Metafield type to fetch, see `MetafieldType` for more info. + """ + + def get_edge_node(self, name: str, fields: Union[List[str], List[Field], str]) -> Field: + """ + Defines the edge of the graph and it's fields to select for Shopify BULK Operaion. + https://shopify.dev/docs/api/usage/bulk-operations/queries#the-jsonl-data-format + """ + return Field(name=name, fields=[Field(name="edges", fields=[Field(name="node", fields=fields)])]) + + @property + def query_nodes(self) -> List[Field]: + """ + List of available fields: + https://shopify.dev/docs/api/admin-graphql/unstable/objects/Metafield + """ + # define metafield node + metafield_node = self.get_edge_node("metafields", self.metafield_fields) + + if isinstance(self.type.value, list): + return ["__typename", "id", self.get_edge_node(self.type.value[1], ["__typename", "id", metafield_node])] + elif isinstance(self.type.value, str): + return ["__typename", "id", metafield_node] + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + # resolve parent id from `str` to `int` + record["owner_id"] = self.tools.resolve_str_id(record.get(BULK_PARENT_KEY)) + # add `owner_resource` field + record["owner_resource"] = self.tools.camel_to_snake(record.get(BULK_PARENT_KEY, "").split("/")[3]) + # remove `__parentId` from record + record.pop(BULK_PARENT_KEY, None) + # convert dates from ISO-8601 to RFC-3339 + record["createdAt"] = self.tools.from_iso8601_to_rfc3339(record, "createdAt") + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + record = self.tools.fields_names_to_snake_case(record) + yield record + + +class MetafieldCollection(Metafield): + """ + { + collections(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + type = MetafieldType.COLLECTIONS + + +class MetafieldCustomer(Metafield): + """ + { + customers(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + type = MetafieldType.CUSTOMERS + + +class MetafieldLocation(Metafield): + """ + { + locations { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + sort_key = None + type = MetafieldType.LOCATIONS + + +class MetafieldOrder(Metafield): + """ + { + orders(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + type = MetafieldType.ORDERS + + +class MetafieldDraftOrder(Metafield): + """ + { + draftOrders(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + type = MetafieldType.DRAFT_ORDERS + + +class MetafieldProduct(Metafield): + """ + { + products(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + type = MetafieldType.PRODUCTS + + +class MetafieldProductImage(Metafield): + """ + { + products(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + id + images{ + edges{ + node{ + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + } + } + } + """ + + type = MetafieldType.PRODUCT_IMAGES + + +class MetafieldProductVariant(Metafield): + """ + { + productVariants(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'") { + edges { + node { + id + metafields { + edges { + node { + id + namespace + value + key + description + createdAt + updatedAt + type + } + } + } + } + } + } + } + """ + + sort_key = None + type = MetafieldType.PRODUCT_VARIANTS + + +class DiscountCode(ShopifyBulkQuery): + """ + Output example to BULK query `codeDiscountNodes` with `filter query` by `updated_at` sorted `ASC`: + { + codeDiscountNodes(query: "updated_at:>='2023-12-07T00:00:00Z' AND updated_at:<='2023-12-30T00:00:00Z'", sortKey: UPDATED_AT) { + edges { + node { + __typename + id + codeDiscount { + ... on DiscountCodeApp { + updatedAt + createdAt + discountType: discountClass + codes { + edges { + node { + __typename + usageCount: asyncUsageCount + code + id + } + } + } + } + ... on DiscountCodeBasic { + createdAt + updatedAt + discountType: discountClass + summary + codes { + edges { + node { + __typename + usageCount: asyncUsageCount + code + id + } + } + } + } + ... on DiscountCodeBxgy { + updatedAt + createdAt + discountType: discountClass + summary + codes { + edges { + node { + __typename + usageCount: asyncUsageCount + code + id + } + } + } + } + ... on DiscountCodeFreeShipping { + updatedAt + createdAt + discountType: discountClass + summary + codes { + edges { + node { + __typename + usageCount: asyncUsageCount + code + id + } + } + } + } + } + } + } + } + } + """ + + query_name = "codeDiscountNodes" + sort_key = "UPDATED_AT" + + code_discount_fields: List[Field] = [ + Field(name="discountClass", alias="discountType"), + Field( + name="codes", + fields=[ + Field( + name="edges", + fields=[ + Field( + name="node", + fields=[ + "__typename", + Field(name="asyncUsageCount", alias="usageCount"), + "code", + "id", + ], + ) + ], + ) + ], + ), + ] + + code_discount_fragments: List[InlineFragment] = [ + # the type: DiscountCodeApp has no `"summary"` field available + InlineFragment(type="DiscountCodeApp", fields=["updatedAt", "createdAt", *code_discount_fields]), + InlineFragment(type="DiscountCodeBasic", fields=["updatedAt", "createdAt", "summary", *code_discount_fields]), + InlineFragment(type="DiscountCodeBxgy", fields=["updatedAt", "createdAt", "summary", *code_discount_fields]), + InlineFragment(type="DiscountCodeFreeShipping", fields=["updatedAt", "createdAt", "summary", *code_discount_fields]), + ] + + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="codeDiscount", fields=code_discount_fragments), + ] + + record_composition = { + "new_record": "DiscountCodeNode", + # each DiscountCodeNode has `DiscountRedeemCode` + "record_components": ["DiscountRedeemCode"], + } + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components. + """ + + record_components = record.get("record_components", {}) + if record_components: + discounts = record_components.get("DiscountRedeemCode", []) + if len(discounts) > 0: + for discount in discounts: + # resolve parent id from `str` to `int` + discount["admin_graphql_api_id"] = discount.get("id") + discount["price_rule_id"] = self.tools.resolve_str_id(discount.get(BULK_PARENT_KEY)) + discount["id"] = self.tools.resolve_str_id(discount.get("id")) + code_discount = record.get("codeDiscount", {}) + if code_discount: + discount.update(**code_discount) + discount.pop(BULK_PARENT_KEY, None) + # field names to snake case for discount + discount = self.tools.fields_names_to_snake_case(discount) + # convert dates from ISO-8601 to RFC-3339 + discount["created_at"] = self.tools.from_iso8601_to_rfc3339(discount, "created_at") + discount["updated_at"] = self.tools.from_iso8601_to_rfc3339(discount, "updated_at") + yield discount + + +class Collection(ShopifyBulkQuery): + """ + { + collections(query: "updated_at:>='2023-02-07T00:00:00+00:00' AND updated_at:<='2023-12-04T00:00:00+00:00'", sortKey: UPDATED_AT) { + edges { + node { + __typename + id + handle + title + updatedAt + bodyHtml: descriptionHtml + publications { + edges { + node { + __typename + publishedAt: publishDate + } + } + } + sortOrder + templateSuffix + productsCount + } + } + } + } + """ + + query_name = "collections" + sort_key = "UPDATED_AT" + + publications_fields: List[Field] = [ + Field(name="edges", fields=[Field(name="node", fields=["__typename", Field(name="publishDate", alias="publishedAt")])]) + ] + + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="handle"), + Field(name="title"), + Field(name="updatedAt"), + Field(name="descriptionHtml", alias="bodyHtml"), + Field(name="publications", fields=publications_fields), + Field(name="sortOrder"), + Field(name="templateSuffix"), + Field(name="productsCount"), + ] + + record_composition = { + "new_record": "Collection", + # each collection has `publications` + "record_components": ["CollectionPublication"], + } + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components. + """ + record_components = record.get("record_components", {}) + if record_components: + publications = record_components.get("CollectionPublication", []) + if len(publications) > 0: + record["published_at"] = publications[0].get("publishedAt") + record.pop("record_components") + # convert dates from ISO-8601 to RFC-3339 + record["published_at"] = self.tools.from_iso8601_to_rfc3339(record, "published_at") + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + # remove leftovers + record.pop(BULK_PARENT_KEY, None) + yield record + + +class CustomerAddresses(ShopifyBulkQuery): + """ + { + customers(query: "updated_at:>='2024-01-20T00:00:00+00:00' AND updated_at:<'2024-01-24T00:00:00+00:00'", sortKey:UPDATED_AT) { + edges { + node { + __typename + customerId: id + defaultAddress { + id + } + addresses { + address1 + address2 + city + country + countryCode + company + firstName + id + lastName + name + phone + province + provinceCode + zip + } + } + } + } + } + """ + + query_name = "customers" + sort_key = "UPDATED_AT" + + addresses_fields: List[str] = [ + "address1", + "address2", + "city", + "country", + "countryCode", + "company", + "firstName", + "id", + "lastName", + "name", + "phone", + "province", + "provinceCode", + "zip", + ] + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="defaultAddress", fields=["id"]), + Field(name="addresses", fields=addresses_fields), + # add `Customer.updated_at` field to provide the parent state + "updatedAt", + ] + + record_composition = { + "new_record": "Customer", + } + + def set_default_address(self, record: MutableMapping[str, Any], address_record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + default_address = record.get("defaultAddress", {}) + # the default_address could be literal `None`, additional check is required + if default_address: + if address_record.get("id") == record.get("defaultAddress", {}).get("id"): + address_record["default"] = True + return address_record + + def record_process_components(self, record: MutableMapping[str, Any]) -> Optional[Iterable[MutableMapping[str, Any]]]: + """ + Defines how to process collected components. + """ + if "addresses" in record.keys(): + addresses = record.get("addresses") + if len(addresses) > 0: + for customer_address in addresses: + # add `customer_id` to each address entry + customer_address["customer_id"] = record.get("id") + # add `country_name` from `country` + customer_address["country_name"] = customer_address.get("country") + # default address check + customer_address = self.set_default_address(record, customer_address) + # resolve address id + customer_address["id"] = self.tools.resolve_str_id(customer_address.get("id")) + # add PARENT stream cursor_field to the root level of the record + # providing the ability to track the PARENT state as well + # convert dates from ISO-8601 to RFC-3339 + customer_address["updated_at"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + # names to snake + customer_address = self.tools.fields_names_to_snake_case(customer_address) + yield customer_address + + +class InventoryItem(ShopifyBulkQuery): + """ + { + inventoryItems(query: "updated_at:>='2022-04-13T00:00:00+00:00' AND updated_at:<='2023-02-07T00:00:00+00:00'") { + edges { + node { + __typename + unitCost { + cost: amount + } + countryCodeOfOrigin + countryHarmonizedSystemCodes { + edges { + node { + harmonizedSystemCode + countryCode + } + } + } + harmonizedSystemCode + provinceCodeOfOrigin + updatedAt + createdAt + sku + tracked + requiresShipping + } + } + } + } + """ + + query_name = "inventoryItems" + + country_harmonizedS_system_codes: List[Field] = [ + Field(name="edges", fields=[Field(name="node", fields=["__typename", "harmonizedSystemCode", "countryCode"])]) + ] + + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="unitCost", fields=[Field(name="amount", alias="cost")]), + Field(name="countryCodeOfOrigin"), + Field(name="countryHarmonizedSystemCodes", fields=country_harmonizedS_system_codes), + Field(name="harmonizedSystemCode"), + Field(name="provinceCodeOfOrigin"), + Field(name="updatedAt"), + Field(name="createdAt"), + Field(name="sku"), + Field(name="tracked"), + Field(name="requiresShipping"), + ] + + record_composition = { + "new_record": "InventoryItem", + } + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components. + """ + + # resolve `cost` to root lvl as `number` + unit_cost = record.get("unitCost", {}) + if unit_cost: + record["cost"] = float(unit_cost.get("cost")) + else: + record["cost"] = None + # clean up + record.pop("unitCost", None) + # add empty `country_harmonized_system_codes` array, if missing for record + if "countryHarmonizedSystemCodes" not in record.keys(): + record["country_harmonized_system_codes"] = [] + # convert dates from ISO-8601 to RFC-3339 + record["createdAt"] = self.tools.from_iso8601_to_rfc3339(record, "createdAt") + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + record = self.tools.fields_names_to_snake_case(record) + yield record + + +class InventoryLevel(ShopifyBulkQuery): + """ + Output example to BULK query `inventory_levels` from `locations` with `filter query` by `updated_at`: + { + locations(includeLegacy: true, includeInactive: true) { + edges { + node { + __typename + id + inventoryLevels(query: "updated_at:>='2023-04-14T00:00:00+00:00'") { + edges { + node { + __typename + id + available + item { + inventory_item_id: id + } + updatedAt + } + } + } + } + } + } + } + """ + + query_name = "locations" + # in order to return all the locations, additional query args must be provided + # https://shopify.dev/docs/api/admin-graphql/2023-10/queries/locations#query-arguments + locations_query_args = { + "includeLegacy": "true", + "includeInactive": "true", + } + record_composition = { + "new_record": "InventoryLevel", + } + + inventory_levels_fields: List[Field] = [ + "__typename", + "id", + Field(name="available"), + Field(name="item", fields=[Field(name="id", alias="inventory_item_id")]), + Field(name="updatedAt"), + ] + + def query(self, filter_query: Optional[str] = None) -> Query: + # build the nested query first with `filter_query` to have the incremental syncs + inventory_levels: List[Query] = [self.build("inventoryLevels", self.inventory_levels_fields, filter_query)] + # build the main query around previous + # return the constructed query operation + return self.build( + name=self.query_name, + edges=self.query_nodes + inventory_levels, + # passing more query args for `locations` query + additional_query_args=self.locations_query_args, + ) + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components. + """ + + # resolve `inventory_item_id` to root lvl + resolve to int + record["inventory_item_id"] = self.tools.resolve_str_id(record.get("item", {}).get("inventory_item_id")) + # add `location_id` from `__parentId` + record["location_id"] = self.tools.resolve_str_id(record[BULK_PARENT_KEY]) + # make composite `id` from `location_id|inventory_item_id` + record["id"] = "|".join((str(record.get("location_id", "")), str(record.get("inventory_item_id", "")))) + # convert dates from ISO-8601 to RFC-3339 + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + # remove leftovers + record.pop("item", None) + record.pop(BULK_PARENT_KEY, None) + record = self.tools.fields_names_to_snake_case(record) + yield record + + +class FulfillmentOrder(ShopifyBulkQuery): + """ + Output example to BULK query `fulfillmentOrders` from `orders` with `filter query` by `updated_at`, sorted by `UPDATED_AT`: + { + orders(query: "updated_at:>='2023-04-13T05:00:09Z' and updated_at:<='2023-04-15T05:00:09Z'", sortKey: UPDATED_AT){ + edges { + node { + __typename + id + fulfillmentOrders { + edges { + node { + __typename + id + assignedLocation { + location { + locationId: id + } + address1 + address2 + city + countryCode + name + phone + province + zip + } + destination { + id + address1 + address2 + city + company + countryCode + email + firstName + lastName + phone + province + zip + } + deliveryMethod { + id + methodType + minDeliveryDateTime + maxDeliveryDateTime + } + fulfillAt + fulfillBy + internationalDuties { + incoterm + } + fulfillmentHolds { + reason + reasonNotes + } + lineItems { + edges { + node { + __typename + id + inventoryItemId + lineItem { + lineItemId: id + fulfillableQuantity + quantity: currentQuantity + variant { + variantId: id + } + } + } + } + } + createdAt + updatedAt + requestStatus + status + supportedActions { + action + externalUrl + } + merchantRequests { + edges { + node { + __typename + id + message + kind + requestOptions + } + } + } + } + } + } + } + } + } + } + """ + + query_name = "orders" + sort_key = "UPDATED_AT" + + assigned_location_fields: List[Field] = [ + "address1", + "address2", + "city", + "countryCode", + "name", + "phone", + "province", + "zip", + Field(name="location", fields=[Field(name="id", alias="locationId")]), + ] + + destination_fields: List[Field] = [ + "id", + "address1", + "address2", + "city", + "company", + "countryCode", + "email", + "firstName", + "lastName", + "phone", + "province", + "zip", + ] + + delivery_method_fields: List[Field] = [ + "id", + "methodType", + "minDeliveryDateTime", + "maxDeliveryDateTime", + ] + + line_items_fields: List[Field] = [ + "__typename", + "id", + "inventoryItemId", + Field( + name="lineItem", + fields=[ + Field(name="id", alias="lineItemId"), + "fulfillableQuantity", + Field(name="currentQuantity", alias="quantity"), + Field(name="variant", fields=[Field(name="id", alias="variantId")]), + ], + ), + ] + + merchant_requests_fields: List[Field] = [ + "__typename", + "id", + "message", + "kind", + "requestOptions", + ] + + fulfillment_order_fields: List[Field] = [ + "__typename", + "id", + Field(name="assignedLocation", fields=assigned_location_fields), + Field(name="destination", fields=destination_fields), + Field(name="deliveryMethod", fields=delivery_method_fields), + "fulfillAt", + "fulfillBy", + Field(name="internationalDuties", fields=["incoterm"]), + Field(name="fulfillmentHolds", fields=["reason", "reasonNotes"]), + Field(name="lineItems", fields=[Field(name="edges", fields=[Field(name="node", fields=line_items_fields)])]), + "createdAt", + "updatedAt", + "requestStatus", + "status", + Field(name="supportedActions", fields=["action", "externalUrl"]), + Field(name="merchantRequests", fields=[Field(name="edges", fields=[Field(name="node", fields=merchant_requests_fields)])]), + ] + + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="fulfillmentOrders", fields=[Field(name="edges", fields=[Field(name="node", fields=fulfillment_order_fields)])]), + ] + + record_composition = { + "new_record": "FulfillmentOrder", + # each FulfillmentOrder has multiple `FulfillmentOrderLineItem` and `FulfillmentOrderMerchantRequest` + "record_components": [ + "FulfillmentOrderLineItem", + "FulfillmentOrderMerchantRequest", + ], + } + + def process_fulfillment_order(self, record: MutableMapping[str, Any], shop_id: int) -> MutableMapping[str, Any]: + # addings + record["shop_id"] = shop_id + record["order_id"] = record.get(BULK_PARENT_KEY) + # unnest nested locationId to the `assignedLocation` + location_id = record.get("assignedLocation", {}).get("location", {}).get("locationId") + record["assignedLocation"]["locationId"] = location_id + record["assigned_location_id"] = location_id + # create nested placeholders for other parts + record["line_items"] = [] + record["merchant_requests"] = [] + # cleaning + record.pop(BULK_PARENT_KEY) + record.get("assignedLocation").pop("location", None) + # resolve ids from `str` to `int` + # location id + location = record.get("assignedLocation", {}) + if location: + location_id = location.get("locationId") + if location_id: + record["assignedLocation"]["locationId"] = self.tools.resolve_str_id(location_id) + # assigned_location_id + record["assigned_location_id"] = self.tools.resolve_str_id(record.get("assigned_location_id")) + # destination id + destination = record.get("destination", {}) + if destination: + destination_id = destination.get("id") + if destination_id: + record["destination"]["id"] = self.tools.resolve_str_id(destination_id) + # delivery method id + delivery_method = record.get("deliveryMethod", {}) + if delivery_method: + delivery_method_id = delivery_method.get("id") + if delivery_method_id: + record["deliveryMethod"]["id"] = self.tools.resolve_str_id(delivery_method_id) + # order id + record["order_id"] = self.tools.resolve_str_id(record.get("order_id")) + # field names to snake for nested objects + # `assignedLocation`(object) field names to snake case + record["assignedLocation"] = self.tools.fields_names_to_snake_case(record.get("assignedLocation")) + # `deliveryMethod`(object) field names to snake case + record["deliveryMethod"] = self.tools.fields_names_to_snake_case(record.get("deliveryMethod")) + # `destination`(object) field names to snake case + record["destination"] = self.tools.fields_names_to_snake_case(record.get("destination")) + # `fulfillmentHolds`(list[object]) field names to snake case + record["fulfillment_holds"] = [self.tools.fields_names_to_snake_case(el) for el in record.get("fulfillment_holds", [])] + # `supportedActions`(list[object]) field names to snake case + record["supported_actions"] = [self.tools.fields_names_to_snake_case(el) for el in record.get("supported_actions", [])] + return record + + def process_line_item(self, record: MutableMapping[str, Any], shop_id: int) -> MutableMapping[str, Any]: + # addings + record["shop_id"] = shop_id + record["fulfillmentOrderId"] = record.get(BULK_PARENT_KEY) + # unnesting nested `lineItem` + line_item = record.get("lineItem", {}) + if line_item: + record["quantity"] = line_item.get("quantity") + record["lineItemId"] = line_item.get("lineItemId") + record["fulfillableQuantity"] = line_item.get("fulfillableQuantity") + variant = line_item.get("variant", {}) + if variant: + record["variantId"] = variant.get("variantId") + # cleaning + record.pop(BULK_PARENT_KEY) + record.pop("lineItem") + # resolve ids from `str` to `int` + record["id"] = self.tools.resolve_str_id(record.get("id")) + # inventoryItemId + record["inventoryItemId"] = self.tools.resolve_str_id(record.get("inventoryItemId")) + # fulfillmentOrderId + record["fulfillmentOrderId"] = self.tools.resolve_str_id(record.get("fulfillmentOrderId")) + # lineItemId + record["lineItemId"] = self.tools.resolve_str_id(record.get("lineItemId")) + # variantId + record["variantId"] = self.tools.resolve_str_id(record.get("variantId")) + # field names to snake case + record = self.tools.fields_names_to_snake_case(record) + return record + + def process_merchant_request(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + # cleaning + record.pop(BULK_PARENT_KEY) + # resolve ids from `str` to `int` + record["id"] = self.tools.resolve_str_id(record.get("id")) + # field names to snake case + record = self.tools.fields_names_to_snake_case(record) + return record + + def record_process_components(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Defines how to process collected components. + """ + + record = self.process_fulfillment_order(record, self.shop_id) + record_components = record.get("record_components", {}) + if record_components: + line_items = record_components.get("FulfillmentOrderLineItem", []) + if len(line_items) > 0: + for line_item in line_items: + record["line_items"].append(self.process_line_item(line_item, self.shop_id)) + merchant_requests = record_components.get("FulfillmentOrderMerchantRequest", []) + if len(merchant_requests) > 0: + for merchant_request in merchant_requests: + record["merchant_requests"].append(self.process_merchant_request(merchant_request)) + record.pop("record_components") + # convert dates from ISO-8601 to RFC-3339 + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + # convert dates from ISO-8601 to RFC-3339 + record["fulfillAt"] = self.tools.from_iso8601_to_rfc3339(record, "fulfillAt") + record["createdAt"] = self.tools.from_iso8601_to_rfc3339(record, "createdAt") + record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt") + # delivery method + delivery_method = record.get("deliveryMethod", {}) + if delivery_method: + record["deliveryMethod"]["min_delivery_date_time"] = self.tools.from_iso8601_to_rfc3339( + delivery_method, "min_delivery_date_time" + ) + record["deliveryMethod"]["max_delivery_date_time"] = self.tools.from_iso8601_to_rfc3339( + delivery_method, "max_delivery_date_time" + ) + yield record + + +class Transaction(ShopifyBulkQuery): + """ + Output example to BULK query `transactions` from `orders` with `filter query` by `updated_at` sorted `ASC`: + { + orders(query: "updated_at:>='2021-05-23T00:00:00+00:00' AND updated_at:<'2021-12-22T00:00:00+00:00'", sortKey:UPDATED_AT) { + edges { + node { + __typename + id + currency: currencyCode + transactions { + id + errorCode + parentTransaction { + parentId: id + } + test + kind + amount + receipt: receiptJson + gateway + authorization: authorizationCode + createdAt + status + processedAt + totalUnsettledSet { + presentmentMoney { + amount + currency: currencyCode + } + shopMoney { + amount + currency: currencyCode + } + } + paymentId + paymentDetails { + ... on CardPaymentDetails { + avsResultCode + creditCardBin: bin + creditCardCompany: company + creditCardNumber: number + creditCardName: name + cvvResultCode + creditCardWallet: wallet + creditCardExpirationYear: expirationYear + creditCardExpirationMonth: expirationMonth + } + } + } + } + } + } + } + """ + + query_name = "orders" + sort_key = "UPDATED_AT" + + total_unsettled_set_fields: List[Field] = [ + Field(name="presentmentMoney", fields=["amount", Field(name="currencyCode", alias="currency")]), + Field(name="shopMoney", fields=["amount", Field(name="currencyCode", alias="currency")]), + ] + + payment_details: List[InlineFragment] = [ + InlineFragment( + type="CardPaymentDetails", + fields=[ + "avsResultCode", + "cvvResultCode", + Field(name="bin", alias="creditCardBin"), + Field(name="company", alias="creditCardCompany"), + Field(name="number", alias="creditCardNumber"), + Field(name="name", alias="creditCardName"), + Field(name="wallet", alias="creditCardWallet"), + Field(name="expirationYear", alias="creditCardExpirationYear"), + Field(name="expirationMonth", alias="creditCardExpirationMonth"), + ], + ) + ] + + query_nodes: List[Field] = [ + "__typename", + "id", + Field(name="currencyCode", alias="currency"), + Field( + name="transactions", + fields=[ + "id", + "errorCode", + Field(name="parentTransaction", fields=[Field(name="id", alias="parentId")]), + "test", + "kind", + "amount", + Field(name="receiptJson", alias="receipt"), + "gateway", + Field(name="authorizationCode", alias="authorization"), + "createdAt", + "status", + "processedAt", + Field(name="totalUnsettledSet", fields=total_unsettled_set_fields), + "paymentId", + Field(name="paymentDetails", fields=payment_details), + ], + ), + ] + + record_composition = { + "new_record": "Order", + } + + def process_transaction(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + # save the id before it's resolved + record["admin_graphql_api_id"] = record.get("id") + # unnest nested fields + parent_transaction = record.get("parentTransaction", {}) + if parent_transaction: + record["parent_id"] = parent_transaction.get("parentId") + # str values to float + record["amount"] = float(record.get("amount")) + # convert dates from ISO-8601 to RFC-3339 + record["processedAt"] = self.tools.from_iso8601_to_rfc3339(record, "processedAt") + record["createdAt"] = self.tools.from_iso8601_to_rfc3339(record, "createdAt") + # resolve ids + record["id"] = self.tools.resolve_str_id(record.get("id")) + record["parent_id"] = self.tools.resolve_str_id(record.get("parent_id")) + # remove leftovers + record.pop("parentTransaction", None) + # field names to snake case + total_unsettled_set = record.get("totalUnsettledSet", {}) + if total_unsettled_set: + record["totalUnsettledSet"] = self.tools.fields_names_to_snake_case(total_unsettled_set) + # nested str values to float + record["totalUnsettledSet"]["presentment_money"]["amount"] = float( + total_unsettled_set.get("presentmentMoney", {}).get("amount") + ) + record["totalUnsettledSet"]["shop_money"]["amount"] = float(total_unsettled_set.get("shopMoney", {}).get("amount")) + payment_details = record.get("paymentDetails", {}) + if payment_details: + record["paymentDetails"] = self.tools.fields_names_to_snake_case(payment_details) + # field names to snake case for root level + record = self.tools.fields_names_to_snake_case(record) + return record + + def record_process_components(self, record: MutableMapping[str, Any]) -> Optional[MutableMapping[str, Any]]: + """ + Defines how to process collected components. + """ + + if "transactions" in record.keys(): + transactions = record.get("transactions") + if len(transactions) > 0: + for transaction in transactions: + # populate parent record keys + transaction["order_id"] = record.get("id") + transaction["currency"] = record.get("currency") + yield self.process_transaction(transaction) diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/record.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/record.py new file mode 100644 index 000000000000..5564dad60822 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/record.py @@ -0,0 +1,154 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import logging +from dataclasses import dataclass, field +from io import TextIOWrapper +from json import loads +from os import remove +from typing import Any, Callable, Iterable, List, Mapping, MutableMapping, Optional, Union + +from airbyte_cdk import AirbyteLogger + +from .exceptions import ShopifyBulkExceptions +from .query import ShopifyBulkQuery +from .tools import END_OF_FILE, BulkTools + + +@dataclass +class ShopifyBulkRecord: + query: ShopifyBulkQuery + + # default buffer + buffer: List[MutableMapping[str, Any]] = field(init=False, default_factory=list) + + # default logger + logger: AirbyteLogger = field(init=False, default=logging.getLogger("airbyte")) + + def __post_init__(self) -> None: + self.composition: Optional[Mapping[str, Any]] = self.query.record_composition + self.record_process_components: Optional[Callable[[MutableMapping], MutableMapping]] = self.query.record_process_components + self.components: List[str] = self.composition.get("record_components", []) if self.composition else [] + + @property + def tools(self) -> BulkTools: + return BulkTools() + + @staticmethod + def check_type(record: Mapping[str, Any], types: Union[List[str], str]) -> bool: + record_type = record.get("__typename") + if isinstance(types, list): + return any(record_type == t for t in types) + else: + return record_type == types + + def record_new(self, record: MutableMapping[str, Any]) -> None: + record = self.component_prepare(record) + record.pop("__typename") + self.buffer.append(record) + + def record_new_component(self, record: MutableMapping[str, Any]) -> None: + component = record.get("__typename") + record.pop("__typename") + # add component to its placeholder in the components list + self.buffer[-1]["record_components"][component].append(record) + + def component_prepare(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + if self.components: + record["record_components"] = {} + for component in self.components: + record["record_components"][component] = [] + return record + + def buffer_flush(self) -> Iterable[Mapping[str, Any]]: + if len(self.buffer) > 0: + for record in self.buffer: + # resolve id from `str` to `int` + record = self.record_resolve_id(record) + # process record components + yield from self.record_process_components(record) + # clean the buffer + self.buffer.clear() + + def record_compose(self, record: Mapping[str, Any]) -> Optional[Iterable[MutableMapping[str, Any]]]: + """ + Step 1: register the new record by it's `__typename` + Step 2: check for `components` by their `__typename` and add to the placeholder + Step 3: repeat until the ``. + """ + if self.check_type(record, self.composition.get("new_record")): + # emit from previous iteration, if present + yield from self.buffer_flush() + # register the record + self.record_new(record) + # components check + elif self.check_type(record, self.components): + self.record_new_component(record) + + def process_line(self, jsonl_file: TextIOWrapper) -> Iterable[MutableMapping[str, Any]]: + # process the json lines + for line in jsonl_file: + # we exit from the loop when receive (file ends) + if line == END_OF_FILE: + break + elif line != "": + yield from self.record_compose(loads(line)) + + # emit what's left in the buffer, typically last record + yield from self.buffer_flush() + + def record_resolve_id(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + The ids are fetched in the format of: " gid://shopify/Order/ " + Input: + { "Id": "gid://shopify/Order/19435458986123"} + We need to extract the actual id from the string instead. + Output: + { "id": 19435458986123, "admin_graphql_api_id": "gid://shopify/Order/19435458986123"} + """ + # save the actual api id to the `admin_graphql_api_id` + # while resolving the `id` in `record_resolve_id`, + # we re-assign the original id like `"gid://shopify/Order/19435458986123"`, + # into `admin_graphql_api_id` have the ability to identify the record oigin correctly in subsequent actions. + id = record.get("id") + if isinstance(id, str): + record["admin_graphql_api_id"] = id + # extracting the int(id) and reassign + record["id"] = self.tools.resolve_str_id(id) + return record + elif isinstance(id, int): + return record + + def produce_records(self, filename: str) -> Iterable[MutableMapping[str, Any]]: + """ + Read the JSONL content saved from `job.job_retrieve_result()` line-by-line to avoid OOM. + The filename example: `bulk-4039263649981.jsonl`, + where `4039263649981` is the `id` of the COMPLETED BULK Jobw with `result_url`. + Note: typically the `filename` is taken from the `result_url` string provided in the response. + """ + + with open(filename, "r") as jsonl_file: + for record in self.process_line(jsonl_file): + yield self.tools.fields_names_to_snake_case(record) + + def read_file(self, filename: str, remove_file: Optional[bool] = True) -> Iterable[Mapping[str, Any]]: + try: + # produce records from saved result + yield from self.produce_records(filename) + except Exception as e: + raise ShopifyBulkExceptions.BulkRecordProduceError( + f"An error occured while producing records from BULK Job result. Trace: {repr(e)}.", + ) + finally: + # removing the tmp file, if requested + if remove_file and filename: + try: + remove(filename) + except Exception as e: + self.logger.info(f"Failed to remove the `tmp job result` file, the file doen't exist. Details: {repr(e)}.") + # we should pass here, if the file wasn't removed , it's either: + # - doesn't exist + # - will be dropped with the container shut down. + pass diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/tools.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/tools.py new file mode 100644 index 000000000000..bd5d26099edb --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/bulk/tools.py @@ -0,0 +1,83 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import re +from typing import Any, Mapping, MutableMapping, Optional, Union +from urllib.parse import parse_qsl, urlparse + +import pendulum as pdm + +from .exceptions import ShopifyBulkExceptions + +# default end line tag +END_OF_FILE: str = "" +BULK_PARENT_KEY: str = "__parentId" + + +class BulkTools: + @staticmethod + def camel_to_snake(camel_case: str) -> str: + snake_case = [] + for char in camel_case: + if char.isupper(): + snake_case.append("_" + char.lower()) + else: + snake_case.append(char) + return "".join(snake_case).lstrip("_") + + @staticmethod + def filename_from_url(job_result_url: str) -> str: + """ + Example of `job_result_url` (str) : + https://storage.googleapis.com/shopify-tiers-assets-prod-us-east1/? + GoogleAccessId=assets-us-prod%40shopify-tiers.iam.gserviceaccount.com& + Expires=1705508208& + Signature=%3D%3D& + response-content-disposition=attachment%3B+filename%3D%22bulk-4147374162109.jsonl%22%3B+filename%2A%3DUTF-8%27%27bulk-4147374162109.jsonl& + response-content-type=application%2Fjsonl + + Output: + (str): bulk-4147374162109.jsonl + """ + # Regular expression pattern to extract the filename + filename_pattern = r'filename\*?=(?:UTF-8\'\')?"([^"]+)"' + parsed_url = dict(parse_qsl(urlparse(job_result_url).query)) + match = re.search(filename_pattern, parsed_url.get("response-content-disposition", "")) + if match: + return match.group(1) + else: + raise ShopifyBulkExceptions.BulkJobResultUrlError( + f"Could not extract the `filename` from `result_url` provided, details: {job_result_url}", + ) + + @staticmethod + def from_iso8601_to_rfc3339(record: Mapping[str, Any], field: str) -> Mapping[str, Any]: + """ + Converts date-time as follows: + Input: "2023-01-01T15:00:00Z" + Output: "2023-01-01T15:00:00+00:00" + If the value of the `field` is `None` we return it `as is`. + """ + # some fields that expected to be resolved as ids, might not be populated for the particular `RECORD`, + # we should return `None` to make the field `null` in the output as the result of the transformation. + target_value = record.get(field) + return pdm.parse(target_value).to_rfc3339_string() if target_value else record.get(field) + + def fields_names_to_snake_case(self, dict_input: Optional[Mapping[str, Any]] = None) -> Optional[MutableMapping[str, Any]]: + # transforming record field names from camel to snake case, leaving the `__parent_id` relation in place + if dict_input: + # the `None` type check is required, to properly handle nested missing entities (return None) + return {self.camel_to_snake(k) if dict_input and k != BULK_PARENT_KEY else k: v for k, v in dict_input.items()} + + @staticmethod + def resolve_str_id( + str_input: Optional[str] = None, output_type: Optional[Union[int, str, float]] = int + ) -> Optional[Union[int, str, float]]: + # some fields that expected to be resolved as ids, might not be populated for the particular `RECORD`, + # we should return `None` to make the field `null` in the output as the result of the transformation. + if str_input: + return output_type(re.search(r"\d+", str_input).group()) + else: + return None diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/graphql.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/graphql.py similarity index 97% rename from airbyte-integrations/connectors/source-shopify/source_shopify/graphql.py rename to airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/graphql.py index e8d38c64cdff..462ad3ea3aa8 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/graphql.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/graphql.py @@ -2,13 +2,14 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # + from typing import Optional import sgqlc.operation -from . import shopify_schema +from . import schema -_schema = shopify_schema +_schema = schema _schema_root = _schema.shopify_schema diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_schema.py b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/schema.py similarity index 78% rename from airbyte-integrations/connectors/source-shopify/source_shopify/shopify_schema.py rename to airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/schema.py index 81966b99fc95..d3647a562084 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_schema.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/shopify_graphql/schema.py @@ -2,6 +2,7 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # + import sgqlc.types import sgqlc.types.datetime import sgqlc.types.relay @@ -21,6 +22,31 @@ class ARN(sgqlc.types.Scalar): __schema__ = shopify_schema +class AbandonmentAbandonmentType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("BROWSE", "CART", "CHECKOUT") + + +class AbandonmentDeliveryState(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("NOT_SENT", "SCHEDULED", "SENT") + + +class AbandonmentEmailState(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("NOT_SENT", "SCHEDULED", "SENT") + + +class AbandonmentEmailStateUpdateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ABANDONMENT_NOT_FOUND",) + + +class AbandonmentUpdateActivitiesDeliveryStatusesUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ABANDONMENT_NOT_FOUND", "DELIVERY_STATUS_INFO_NOT_FOUND", "MARKETING_ACTIVITY_NOT_FOUND") + + class AppDeveloperType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("MERCHANT", "PARTNER", "SHOPIFY", "UNKNOWN") @@ -118,7 +144,16 @@ class BadgeType(sgqlc.types.Enum): class BillingAttemptUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("BLANK", "CONTRACT_NOT_FOUND", "INVALID") + __choices__ = ( + "BLANK", + "CONTRACT_NOT_FOUND", + "CYCLE_INDEX_OUT_OF_RANGE", + "CYCLE_START_DATE_OUT_OF_RANGE", + "INVALID", + "ORIGIN_TIME_BEFORE_CONTRACT_CREATION", + "ORIGIN_TIME_OUT_OF_RANGE", + "UPCOMING_CYCLE_LIMIT_EXCEEDED", + ) Boolean = sgqlc.types.Boolean @@ -126,13 +161,7 @@ class BillingAttemptUserErrorCode(sgqlc.types.Enum): class BulkMutationErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "INTERNAL_FILE_SERVER_ERROR", - "INVALID_MUTATION", - "INVALID_STAGED_UPLOAD_FILE", - "NO_SUCH_FILE", - "OPERATION_IN_PROGRESS", - ) + __choices__ = ("INTERNAL_FILE_SERVER_ERROR", "INVALID_MUTATION", "INVALID_STAGED_UPLOAD_FILE", "NO_SUCH_FILE", "OPERATION_IN_PROGRESS") class BulkOperationErrorCode(sgqlc.types.Enum): @@ -181,9 +210,75 @@ class BusinessCustomerErrorCode(sgqlc.types.Enum): ) +class CartTransformCreateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FUNCTION_ALREADY_REGISTERED", "FUNCTION_DOES_NOT_IMPLEMENT", "FUNCTION_NOT_FOUND", "INPUT_INVALID") + + +class CartTransformDeleteUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("NOT_FOUND", "UNAUTHORIZED_APP_SCOPE") + + +class CatalogSortKeys(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ID", "RELEVANCE", "TITLE") + + +class CatalogStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE", "ARCHIVED", "DRAFT") + + +class CatalogType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("APP", "COMPANY_LOCATION", "MARKET", "NONE") + + +class CatalogUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "APP_CATALOG_PRICE_LIST_ASSIGNMENT", + "BLANK", + "CANNOT_ADD_MORE_THAN_ONE_MARKET", + "CANNOT_CREATE_APP_CATALOG", + "CANNOT_CREATE_MARKET_CATALOG", + "CANNOT_DELETE_APP_CATALOG", + "CANNOT_DELETE_MARKET_CATALOG", + "CANNOT_MODIFY_APP_CATALOG", + "CANNOT_MODIFY_MARKET_CATALOG", + "CATALOG_CONTEXT_DOES_NOT_SUPPORT_QUANTITY_RULES", + "CATALOG_FAILED_TO_SAVE", + "CATALOG_NOT_FOUND", + "COMPANY_LOCATION_CATALOG_STATUS_PLAN", + "COMPANY_LOCATION_NOT_FOUND", + "CONTEXT_ALREADY_ASSIGNED_TO_CATALOG", + "CONTEXT_CATALOG_LIMIT_REACHED", + "CONTEXT_DRIVER_MISMATCH", + "COUNTRY_PRICE_LIST_ASSIGNMENT", + "INVALID", + "INVALID_CATALOG_CONTEXT_TYPE", + "MARKET_AND_PRICE_LIST_CURRENCY_MISMATCH", + "MARKET_CATALOG_STATUS", + "MARKET_NOT_FOUND", + "MARKET_TAKEN", + "MUST_PROVIDE_EXACTLY_ONE_CONTEXT_TYPE", + "PRICE_LIST_FAILED_TO_SAVE", + "PRICE_LIST_LOCKED", + "PRICE_LIST_NOT_ALLOWED_FOR_PRIMARY_MARKET", + "PRICE_LIST_NOT_FOUND", + "PUBLICATION_NOT_FOUND", + "REQUIRES_CONTEXTS_TO_ADD_OR_REMOVE", + "TAKEN", + "TOO_LONG", + "TOO_SHORT", + "UNSUPPORTED_CATALOG_ACTION", + ) + + class CheckoutProfileSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("CREATED_AT", "ID", "IS_PUBLISHED", "RELEVANCE", "UPDATED_AT") + __choices__ = ("CREATED_AT", "EDITED_AT", "ID", "IS_PUBLISHED", "RELEVANCE", "UPDATED_AT") class CodeDiscountSortKeys(sgqlc.types.Enum): @@ -200,12 +295,14 @@ class CollectionRuleColumn(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( "IS_PRICE_REDUCED", + "PRODUCT_METAFIELD_DEFINITION", "PRODUCT_TAXONOMY_NODE_ID", "TAG", "TITLE", "TYPE", "VARIANT_COMPARE_AT_PRICE", "VARIANT_INVENTORY", + "VARIANT_METAFIELD_DEFINITION", "VARIANT_PRICE", "VARIANT_TITLE", "VARIANT_WEIGHT", @@ -236,16 +333,7 @@ class CollectionSortKeys(sgqlc.types.Enum): class CollectionSortOrder(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "ALPHA_ASC", - "ALPHA_DESC", - "BEST_SELLING", - "CREATED", - "CREATED_DESC", - "MANUAL", - "PRICE_ASC", - "PRICE_DESC", - ) + __choices__ = ("ALPHA_ASC", "ALPHA_DESC", "BEST_SELLING", "CREATED", "CREATED_DESC", "MANUAL", "PRICE_ASC", "PRICE_DESC") class CompanyAddressType(sgqlc.types.Enum): @@ -728,16 +816,60 @@ class CustomerMarketingOptInLevel(sgqlc.types.Enum): __choices__ = ("CONFIRMED_OPT_IN", "SINGLE_OPT_IN", "UNKNOWN") -class CustomerPaymentMethodGetUpdateUrlUserErrorCode(sgqlc.types.Enum): +class CustomerMergeErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "CUSTOMER_HAS_GIFT_CARDS", + "INTERNAL_ERROR", + "INVALID_CUSTOMER", + "INVALID_CUSTOMER_ID", + "MISSING_OVERRIDE_ATTRIBUTE", + "OVERRIDE_ATTRIBUTE_INVALID", + ) + + +class CustomerMergeErrorFieldType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "COMPANY_CONTACT", + "CUSTOMER_PAYMENT_METHODS", + "DELETED_AT", + "GIFT_CARDS", + "MERGE_IN_PROGRESS", + "MULTIPASS_IDENTIFIER", + "PENDING_DATA_REQUEST", + "REDACTED_AT", + "SUBSCRIPTIONS", + ) + + +class CustomerMergeRequestStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("COMPLETED", "FAILED", "IN_PROGRESS", "REQUESTED") + + +class CustomerPaymentMethodCreateFromDuplicationDataUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CUSTOMER_DOES_NOT_EXIST", "INVALID_ENCRYPTED_DUPLICATION_DATA", "TOO_MANY_REQUESTS") + + +class CustomerPaymentMethodGetDuplicationDataUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( "CUSTOMER_DOES_NOT_EXIST", "INVALID_INSTRUMENT", + "INVALID_ORGANIZATION_SHOP", "PAYMENT_METHOD_DOES_NOT_EXIST", + "SAME_SHOP", "TOO_MANY_REQUESTS", ) +class CustomerPaymentMethodGetUpdateUrlUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CUSTOMER_DOES_NOT_EXIST", "INVALID_INSTRUMENT", "PAYMENT_METHOD_DOES_NOT_EXIST", "TOO_MANY_REQUESTS") + + class CustomerPaymentMethodRemoteUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -790,6 +922,11 @@ class CustomerSavedSearchSortKeys(sgqlc.types.Enum): __choices__ = ("ID", "NAME", "RELEVANCE") +class CustomerSegmentMembersQueryUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("INVALID",) + + class CustomerSmsMarketingConsentErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("INCLUSION", "INTERNAL_ERROR", "INVALID", "MISSING_ARGUMENT") @@ -802,17 +939,7 @@ class CustomerSmsMarketingState(sgqlc.types.Enum): class CustomerSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "CREATED_AT", - "ID", - "LAST_ORDER_DATE", - "LOCATION", - "NAME", - "ORDERS_COUNT", - "RELEVANCE", - "TOTAL_SPENT", - "UPDATED_AT", - ) + __choices__ = ("CREATED_AT", "ID", "LAST_ORDER_DATE", "LOCATION", "NAME", "ORDERS_COUNT", "RELEVANCE", "TOTAL_SPENT", "UPDATED_AT") class CustomerState(sgqlc.types.Enum): @@ -847,6 +974,11 @@ class DelegateAccessTokenCreateUserErrorCode(sgqlc.types.Enum): ) +class DelegateAccessTokenDestroyUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACCESS_DENIED", "ACCESS_TOKEN_NOT_FOUND", "CAN_ONLY_DELETE_DELEGATE_TOKENS", "PERSISTENCE_FAILED") + + class DeletionEventSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("CREATED_AT", "ID", "RELEVANCE") @@ -867,11 +999,39 @@ class DeliveryConditionOperator(sgqlc.types.Enum): __choices__ = ("GREATER_THAN_OR_EQUAL_TO", "LESS_THAN_OR_EQUAL_TO") +class DeliveryCustomizationErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "CUSTOM_APP_FUNCTION_NOT_ELIGIBLE", + "DELIVERY_CUSTOMIZATION_FUNCTION_NOT_ELIGIBLE", + "DELIVERY_CUSTOMIZATION_NOT_FOUND", + "FUNCTION_DOES_NOT_IMPLEMENT", + "FUNCTION_ID_CANNOT_BE_CHANGED", + "FUNCTION_NOT_FOUND", + "FUNCTION_PENDING_DELETION", + "INVALID", + "INVALID_METAFIELDS", + "MAXIMUM_ACTIVE_DELIVERY_CUSTOMIZATIONS", + "REQUIRED_INPUT_FIELD", + "UNAUTHORIZED_APP_SCOPE", + ) + + class DeliveryLegacyModeBlockedReason(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("NO_LOCATIONS_FULFILLING_ONLINE_ORDERS",) +class DeliveryLocalPickupTime(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FIVE_OR_MORE_DAYS", "FOUR_HOURS", "ONE_HOUR", "TWENTY_FOUR_HOURS", "TWO_HOURS", "TWO_TO_FOUR_DAYS") + + +class DeliveryLocationLocalPickupSettingsErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE_LOCATION_NOT_FOUND", "GENERIC_ERROR") + + class DeliveryMethodDefinitionType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("MERCHANT", "PARTICIPANT") @@ -1010,6 +1170,11 @@ class DraftOrderStatus(sgqlc.types.Enum): __choices__ = ("COMPLETED", "INVOICE_SENT", "OPEN") +class ErrorsServerPixelUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ALREADY_EXISTS", "NEEDS_CONFIGURATION_TO_CONNECT", "NOT_FOUND", "PUB_SUB_ERROR") + + class ErrorsWebPixelUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("BLANK", "INVALID_SETTINGS", "NOT_FOUND", "TAKEN", "UNABLE_TO_DELETE") @@ -1025,9 +1190,15 @@ class FileContentType(sgqlc.types.Enum): __choices__ = ("FILE", "IMAGE", "VIDEO") +class FileCreateInputDuplicateResolutionMode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("APPEND_UUID", "RAISE_ERROR", "REPLACE") + + class FileErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( + "DUPLICATE_FILENAME_ERROR", "EXTERNAL_VIDEO_EMBED_DISABLED", "EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING", "EXTERNAL_VIDEO_INVALID_ASPECT_RATIO", @@ -1047,6 +1218,7 @@ class FileErrorCode(sgqlc.types.Enum): "MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR", "MODEL3D_PROCESSING_FAILURE", "MODEL3D_THUMBNAIL_GENERATION_ERROR", + "MODEL3D_THUMBNAIL_REGENERATION_ERROR", "MODEL3D_VALIDATION_ERROR", "UNKNOWN", "UNSUPPORTED_IMAGE_FILE_TYPE", @@ -1064,7 +1236,7 @@ class FileErrorCode(sgqlc.types.Enum): class FileSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("CREATED_AT", "FILENAME", "ID", "ORIGINAL_UPLOAD_SIZE", "RELEVANCE") + __choices__ = ("CREATED_AT", "FILENAME", "ID", "ORIGINAL_UPLOAD_SIZE", "RELEVANCE", "UPDATED_AT") class FileStatus(sgqlc.types.Enum): @@ -1077,16 +1249,25 @@ class FilesErrorCode(sgqlc.types.Enum): __choices__ = ( "ALT_VALUE_LIMIT_EXCEEDED", "BLANK_SEARCH", + "FILENAME_ALREADY_EXISTS", "FILE_DOES_NOT_EXIST", "FILE_LOCKED", "INVALID", + "INVALID_DUPLICATE_MODE_FOR_TYPE", + "INVALID_FILENAME", + "INVALID_FILENAME_EXTENSION", + "INVALID_IMAGE_SOURCE_URL", "INVALID_QUERY", + "MISMATCHED_FILENAME_AND_ORIGINAL_SOURCE", "MISSING_ARGUMENTS", + "MISSING_FILENAME_FOR_DUPLICATE_MODE_REPLACE", "NON_IMAGE_MEDIA_PER_SHOP_LIMIT_EXCEEDED", + "NON_READY_STATE", "TOO_MANY_ARGUMENTS", "UNACCEPTABLE_ASSET", "UNACCEPTABLE_TRIAL_ASSET", "UNACCEPTABLE_UNVERIFIED_TRIAL_ASSET", + "UNSUPPORTED_MEDIA_TYPE_FOR_FILENAME_UPDATE", ) @@ -1146,6 +1327,7 @@ class FulfillmentHoldReason(sgqlc.types.Enum): "HIGH_RISK_OF_FRAUD", "INCORRECT_ADDRESS", "INVENTORY_OUT_OF_STOCK", + "ONLINE_STORE_POST_PURCHASE_CROSS_SELL", "OTHER", "UNKNOWN_DELIVERY_DATE", ) @@ -1159,10 +1341,12 @@ class FulfillmentOrderAction(sgqlc.types.Enum): "EXTERNAL", "HOLD", "MARK_AS_OPEN", + "MERGE", "MOVE", "RELEASE_HOLD", "REQUEST_CANCELLATION", "REQUEST_FULFILLMENT", + "SPLIT", ) @@ -1173,7 +1357,12 @@ class FulfillmentOrderAssignmentStatus(sgqlc.types.Enum): class FulfillmentOrderHoldUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND", "TAKEN") + __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND", "GREATER_THAN_ZERO", "INVALID_LINE_ITEM_QUANTITY", "TAKEN") + + +class FulfillmentOrderLineItemsPreparedForPickupUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FULFILLMENT_ORDER_INVALID", "NO_LINE_ITEMS_TO_PREPARE_FOR_FULFILLMENT_ORDER", "UNABLE_TO_PREPARE_QUANTITY") class FulfillmentOrderMerchantRequestKind(sgqlc.types.Enum): @@ -1181,20 +1370,19 @@ class FulfillmentOrderMerchantRequestKind(sgqlc.types.Enum): __choices__ = ("CANCELLATION_REQUEST", "FULFILLMENT_REQUEST") +class FulfillmentOrderMergeUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND", "GREATER_THAN", "INVALID_LINE_ITEM_QUANTITY") + + class FulfillmentOrderRejectionReason(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "INCORRECT_ADDRESS", - "INELIGIBLE_PRODUCT", - "INVENTORY_OUT_OF_STOCK", - "OTHER", - "UNDELIVERABLE_DESTINATION", - ) + __choices__ = ("INCORRECT_ADDRESS", "INELIGIBLE_PRODUCT", "INVENTORY_OUT_OF_STOCK", "OTHER", "UNDELIVERABLE_DESTINATION") class FulfillmentOrderReleaseHoldUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND",) + __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND", "GREATER_THAN_ZERO", "INVALID_LINE_ITEM_QUANTITY") class FulfillmentOrderRequestStatus(sgqlc.types.Enum): @@ -1221,11 +1409,21 @@ class FulfillmentOrderSortKeys(sgqlc.types.Enum): __choices__ = ("ID", "RELEVANCE") +class FulfillmentOrderSplitUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FULFILLMENT_ORDER_NOT_FOUND", "GREATER_THAN", "INVALID_LINE_ITEM_QUANTITY") + + class FulfillmentOrderStatus(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("CANCELLED", "CLOSED", "INCOMPLETE", "IN_PROGRESS", "ON_HOLD", "OPEN", "SCHEDULED") +class FulfillmentOrdersReleaseHoldsUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FAILED_TO_CREATE_JOB",) + + class FulfillmentOrdersSetFulfillmentDeadlineUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("FULFILLMENT_ORDERS_NOT_FOUND",) @@ -1278,15 +1476,256 @@ class ImageContentType(sgqlc.types.Enum): Int = sgqlc.types.Int +class InventoryAdjustQuantitiesUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "ADJUST_QUANTITIES_FAILED", + "INTERNAL_LEDGER_DOCUMENT", + "INVALID_AVAILABLE_DOCUMENT", + "INVALID_INVENTORY_ITEM", + "INVALID_LEDGER_DOCUMENT", + "INVALID_LOCATION", + "INVALID_QUANTITY_DOCUMENT", + "INVALID_QUANTITY_NAME", + "INVALID_QUANTITY_TOO_HIGH", + "INVALID_QUANTITY_TOO_LOW", + "INVALID_REASON", + "INVALID_REFERENCE_DOCUMENT", + "ITEM_NOT_STOCKED_AT_LOCATION", + "MAX_ONE_LEDGER_DOCUMENT", + "NON_MUTABLE_INVENTORY_ITEM", + ) + + class InventoryBulkToggleActivationUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("GENERIC_ERROR",) + __choices__ = ( + "CANNOT_DEACTIVATE_FROM_ONLY_LOCATION", + "COMMITTED_INVENTORY_AT_LOCATION", + "FAILED_TO_STOCK_AT_LOCATION", + "FAILED_TO_UNSTOCK_FROM_LOCATION", + "GENERIC_ERROR", + "INCOMING_INVENTORY_AT_LOCATION", + "INVENTORY_ITEM_NOT_FOUND", + "INVENTORY_MANAGED_BY_3RD_PARTY", + "INVENTORY_MANAGED_BY_SHOPIFY", + "LOCATION_NOT_FOUND", + "MISSING_SKU", + "RESERVED_INVENTORY_AT_LOCATION", + ) + + +class InventoryMoveQuantitiesUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "DIFFERENT_LOCATIONS", + "INTERNAL_LEDGER_DOCUMENT", + "INVALID_AVAILABLE_DOCUMENT", + "INVALID_INVENTORY_ITEM", + "INVALID_LEDGER_DOCUMENT", + "INVALID_LOCATION", + "INVALID_QUANTITY_DOCUMENT", + "INVALID_QUANTITY_NAME", + "INVALID_QUANTITY_NEGATIVE", + "INVALID_QUANTITY_TOO_HIGH", + "INVALID_REASON", + "INVALID_REFERENCE_DOCUMENT", + "ITEM_NOT_STOCKED_AT_LOCATION", + "MAXIMUM_LEDGER_DOCUMENT_URIS", + "MOVE_QUANTITIES_FAILED", + "NON_MUTABLE_INVENTORY_ITEM", + "SAME_QUANTITY_NAME", + ) + + +class InventorySetOnHandQuantitiesUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "INVALID_INVENTORY_ITEM", + "INVALID_LOCATION", + "INVALID_QUANTITY_NEGATIVE", + "INVALID_QUANTITY_TOO_HIGH", + "INVALID_REASON", + "INVALID_REFERENCE_DOCUMENT", + "ITEM_NOT_STOCKED_AT_LOCATION", + "NON_MUTABLE_INVENTORY_ITEM", + "SET_ON_HAND_QUANTITIES_FAILED", + ) class JSON(sgqlc.types.Scalar): __schema__ = shopify_schema +class LanguageCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "AF", + "AK", + "AM", + "AR", + "AS", + "AZ", + "BE", + "BG", + "BM", + "BN", + "BO", + "BR", + "BS", + "CA", + "CE", + "CS", + "CU", + "CY", + "DA", + "DE", + "DZ", + "EE", + "EL", + "EN", + "EO", + "ES", + "ET", + "EU", + "FA", + "FF", + "FI", + "FO", + "FR", + "FY", + "GA", + "GD", + "GL", + "GU", + "GV", + "HA", + "HE", + "HI", + "HR", + "HU", + "HY", + "IA", + "ID", + "IG", + "II", + "IS", + "IT", + "JA", + "JV", + "KA", + "KI", + "KK", + "KL", + "KM", + "KN", + "KO", + "KS", + "KU", + "KW", + "KY", + "LB", + "LG", + "LN", + "LO", + "LT", + "LU", + "LV", + "MG", + "MI", + "MK", + "ML", + "MN", + "MR", + "MS", + "MT", + "MY", + "NB", + "ND", + "NE", + "NL", + "NN", + "NO", + "OM", + "OR", + "OS", + "PA", + "PL", + "PS", + "PT", + "PT_BR", + "PT_PT", + "QU", + "RM", + "RN", + "RO", + "RU", + "RW", + "SD", + "SE", + "SG", + "SI", + "SK", + "SL", + "SN", + "SO", + "SQ", + "SR", + "SU", + "SV", + "SW", + "TA", + "TE", + "TG", + "TH", + "TI", + "TK", + "TO", + "TR", + "TT", + "UG", + "UK", + "UR", + "UZ", + "VI", + "VO", + "WO", + "XH", + "YI", + "YO", + "ZH", + "ZH_CN", + "ZH_TW", + "ZU", + ) + + +class LengthUnit(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CENTIMETERS", "FEET", "INCHES", "METERS", "MILLIMETERS", "YARDS") + + +class LocalizableContentType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "FILE_REFERENCE", + "HTML", + "INLINE_RICH_TEXT", + "JSON", + "JSON_STRING", + "LIST_FILE_REFERENCE", + "LIST_MULTI_LINE_TEXT_FIELD", + "LIST_SINGLE_LINE_TEXT_FIELD", + "LIST_URL", + "MULTI_LINE_TEXT_FIELD", + "RICH_TEXT_FIELD", + "SINGLE_LINE_TEXT_FIELD", + "STRING", + "URI", + "URL", + ) + + class LocalizationExtensionKey(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -1306,12 +1745,27 @@ class LocalizationExtensionPurpose(sgqlc.types.Enum): class LocationActivateUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("GENERIC_ERROR", "HAS_ONGOING_RELOCATION", "LOCATION_LIMIT", "LOCATION_NOT_FOUND") + __choices__ = ("GENERIC_ERROR", "HAS_NON_UNIQUE_NAME", "HAS_ONGOING_RELOCATION", "LOCATION_LIMIT", "LOCATION_NOT_FOUND") class LocationAddUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("BLANK", "GENERIC_ERROR", "INVALID", "INVALID_US_ZIPCODE", "TAKEN", "TOO_LONG") + __choices__ = ( + "APP_NOT_AUTHORIZED", + "BLANK", + "DISALLOWED_OWNER_TYPE", + "GENERIC_ERROR", + "INCLUSION", + "INVALID", + "INVALID_TYPE", + "INVALID_US_ZIPCODE", + "INVALID_VALUE", + "PRESENT", + "TAKEN", + "TOO_LONG", + "TOO_SHORT", + "UNSTRUCTURED_RESERVED_NAMESPACE", + ) class LocationDeactivateUserErrorCode(sgqlc.types.Enum): @@ -1330,7 +1784,6 @@ class LocationDeactivateUserErrorCode(sgqlc.types.Enum): "HAS_INCOMING_MOVEMENTS_ERROR", "HAS_OPEN_PURCHASE_ORDERS_ERROR", "HAS_OPEN_TRANSFERS_ERROR", - "INVALID", "LOCATION_NOT_FOUND", "PERMANENTLY_BLOCKED_FROM_DEACTIVATION_ERROR", "TEMPORARILY_BLOCKED_FROM_DEACTIVATION_ERROR", @@ -1352,13 +1805,22 @@ class LocationDeleteUserErrorCode(sgqlc.types.Enum): class LocationEditUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( + "APP_NOT_AUTHORIZED", "BLANK", "CANNOT_DISABLE_ONLINE_ORDER_FULFILLMENT", + "DISALLOWED_OWNER_TYPE", "GENERIC_ERROR", + "INCLUSION", "INVALID", + "INVALID_TYPE", "INVALID_US_ZIPCODE", + "INVALID_VALUE", "NOT_FOUND", - "TOO_LONG", + "PRESENT", + "TAKEN", + "TOO_LONG", + "TOO_SHORT", + "UNSTRUCTURED_RESERVED_NAMESPACE", ) @@ -1409,7 +1871,7 @@ class MarketUserErrorCode(sgqlc.types.Enum): "REQUIRES_DOMAIN_OR_SUBFOLDER", "REQUIRES_EXACTLY_ONE_OPTION", "SHOP_REACHED_MARKETS_LIMIT", - "SUBFOLDER_NOT_ALLOWED_FOR_CCTLD_DOMAINS", + "SUBFOLDER_SUFFIX_CANNOT_BE_SCRIPT_CODE", "SUBFOLDER_SUFFIX_MUST_CONTAIN_ONLY_LETTERS", "TAKEN", "TOO_LONG", @@ -1500,6 +1962,7 @@ class MediaContentType(sgqlc.types.Enum): class MediaErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( + "DUPLICATE_FILENAME_ERROR", "EXTERNAL_VIDEO_EMBED_DISABLED", "EXTERNAL_VIDEO_EMBED_NOT_FOUND_OR_TRANSCODING", "EXTERNAL_VIDEO_INVALID_ASPECT_RATIO", @@ -1519,6 +1982,7 @@ class MediaErrorCode(sgqlc.types.Enum): "MODEL3D_GLB_TO_USDZ_CONVERSION_ERROR", "MODEL3D_PROCESSING_FAILURE", "MODEL3D_THUMBNAIL_GENERATION_ERROR", + "MODEL3D_THUMBNAIL_REGENERATION_ERROR", "MODEL3D_VALIDATION_ERROR", "UNKNOWN", "UNSUPPORTED_IMAGE_FILE_TYPE", @@ -1585,6 +2049,11 @@ class MerchandiseDiscountClass(sgqlc.types.Enum): __choices__ = ("ORDER", "PRODUCT") +class MetafieldAdminAccess(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("MERCHANT_READ", "MERCHANT_READ_WRITE", "PRIVATE", "PUBLIC_READ") + + class MetafieldDefinitionCreateUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -1594,6 +2063,7 @@ class MetafieldDefinitionCreateUserErrorCode(sgqlc.types.Enum): "INVALID_CHARACTER", "INVALID_OPTION", "LIMIT_EXCEEDED", + "OWNER_TYPE_LIMIT_EXCEEDED_FOR_AUTOMATED_COLLECTIONS", "PINNED_LIMIT_REACHED", "PRESENT", "RESERVED_NAMESPACE_KEY", @@ -1601,18 +2071,26 @@ class MetafieldDefinitionCreateUserErrorCode(sgqlc.types.Enum): "TAKEN", "TOO_LONG", "TOO_SHORT", + "TYPE_NOT_ALLOWED_FOR_CONDITIONS", "UNSTRUCTURED_ALREADY_EXISTS", ) class MetafieldDefinitionDeleteUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("INTERNAL_ERROR", "NOT_FOUND", "PRESENT", "REFERENCE_TYPE_DELETION_ERROR") + __choices__ = ( + "DISALLOWED_OWNER_TYPE", + "INTERNAL_ERROR", + "METAFIELD_DEFINITION_IN_USE", + "NOT_FOUND", + "PRESENT", + "REFERENCE_TYPE_DELETION_ERROR", + ) class MetafieldDefinitionPinUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("ALREADY_PINNED", "INTERNAL_ERROR", "NOT_FOUND", "PINNED_LIMIT_REACHED") + __choices__ = ("ALREADY_PINNED", "DISALLOWED_OWNER_TYPE", "INTERNAL_ERROR", "NOT_FOUND", "PINNED_LIMIT_REACHED") class MetafieldDefinitionPinnedStatus(sgqlc.types.Enum): @@ -1627,12 +2105,22 @@ class MetafieldDefinitionSortKeys(sgqlc.types.Enum): class MetafieldDefinitionUnpinUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("INTERNAL_ERROR", "NOT_FOUND", "NOT_PINNED") + __choices__ = ("DISALLOWED_OWNER_TYPE", "INTERNAL_ERROR", "NOT_FOUND", "NOT_PINNED") class MetafieldDefinitionUpdateUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("INTERNAL_ERROR", "INVALID_INPUT", "NOT_FOUND", "PINNED_LIMIT_REACHED", "PRESENT", "TOO_LONG") + __choices__ = ( + "INTERNAL_ERROR", + "INVALID_INPUT", + "METAFIELD_DEFINITION_IN_USE", + "NOT_FOUND", + "OWNER_TYPE_LIMIT_EXCEEDED_FOR_AUTOMATED_COLLECTIONS", + "PINNED_LIMIT_REACHED", + "PRESENT", + "TOO_LONG", + "TYPE_NOT_ALLOWED_FOR_CONDITIONS", + ) class MetafieldDefinitionValidationStatus(sgqlc.types.Enum): @@ -1647,14 +2135,19 @@ class MetafieldOwnerType(sgqlc.types.Enum): "ARTICLE", "BLOG", "COLLECTION", + "COMPANY", + "COMPANY_LOCATION", "CUSTOMER", + "DELIVERY_CUSTOMIZATION", "DISCOUNT", "DRAFTORDER", "LOCATION", + "MARKET", + "MEDIA_IMAGE", "ORDER", "PAGE", + "PAYMENT_CUSTOMIZATION", "PRODUCT", - "PRODUCTIMAGE", "PRODUCTVARIANT", "SHOP", ) @@ -1685,6 +2178,50 @@ class MetafieldsSetUserErrorCode(sgqlc.types.Enum): ) +class MetaobjectAdminAccess(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("MERCHANT_READ", "MERCHANT_READ_WRITE", "PRIVATE", "PUBLIC_READ", "PUBLIC_READ_WRITE") + + +class MetaobjectStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE", "DRAFT") + + +class MetaobjectStorefrontAccess(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("NONE", "PUBLIC_READ") + + +class MetaobjectUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "BLANK", + "CAPABILITY_NOT_ENABLED", + "DUPLICATE_FIELD_INPUT", + "IMMUTABLE", + "INCLUSION", + "INTERNAL_ERROR", + "INVALID", + "INVALID_OPTION", + "INVALID_TYPE", + "INVALID_VALUE", + "MAX_DEFINITIONS_EXCEEDED", + "MAX_OBJECTS_EXCEEDED", + "NOT_AUTHORIZED", + "OBJECT_FIELD_REQUIRED", + "OBJECT_FIELD_TAKEN", + "PRESENT", + "RECORD_NOT_FOUND", + "RESERVED_NAME", + "TAKEN", + "TOO_LONG", + "TOO_SHORT", + "UNDEFINED_OBJECT_FIELD", + "UNDEFINED_OBJECT_TYPE", + ) + + class MethodDefinitionSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("ID", "RATE_PROVIDER_TYPE", "RELEVANCE") @@ -1711,16 +2248,7 @@ class OrderCreateMandatePaymentUserErrorCode(sgqlc.types.Enum): class OrderDisplayFinancialStatus(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "AUTHORIZED", - "EXPIRED", - "PAID", - "PARTIALLY_PAID", - "PARTIALLY_REFUNDED", - "PENDING", - "REFUNDED", - "VOIDED", - ) + __choices__ = ("AUTHORIZED", "EXPIRED", "PAID", "PARTIALLY_PAID", "PARTIALLY_REFUNDED", "PENDING", "REFUNDED", "VOIDED") class OrderDisplayFulfillmentStatus(sgqlc.types.Enum): @@ -1760,6 +2288,11 @@ class OrderPaymentStatusResult(sgqlc.types.Enum): ) +class OrderReturnStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("INSPECTION_COMPLETE", "IN_PROGRESS", "NO_RETURN", "RETURNED", "RETURN_FAILED", "RETURN_REQUESTED") + + class OrderRiskLevel(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("HIGH", "LOW", "MEDIUM") @@ -1770,12 +2303,15 @@ class OrderSortKeys(sgqlc.types.Enum): __choices__ = ( "CREATED_AT", "CUSTOMER_NAME", + "DESTINATION", "FINANCIAL_STATUS", "FULFILLMENT_STATUS", "ID", "ORDER_NUMBER", + "PO_NUMBER", "PROCESSED_AT", "RELEVANCE", + "TOTAL_ITEMS_QUANTITY", "TOTAL_PRICE", "UPDATED_AT", ) @@ -1816,16 +2352,7 @@ class OrderTransactionErrorCode(sgqlc.types.Enum): class OrderTransactionKind(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "AUTHORIZATION", - "CAPTURE", - "CHANGE", - "EMV_AUTHORIZATION", - "REFUND", - "SALE", - "SUGGESTED_REFUND", - "VOID", - ) + __choices__ = ("AUTHORIZATION", "CAPTURE", "CHANGE", "EMV_AUTHORIZATION", "REFUND", "SALE", "SUGGESTED_REFUND", "VOID") class OrderTransactionStatus(sgqlc.types.Enum): @@ -1833,6 +2360,76 @@ class OrderTransactionStatus(sgqlc.types.Enum): __choices__ = ("AWAITING_RESPONSE", "ERROR", "FAILURE", "PENDING", "SUCCESS", "UNKNOWN") +class ParseErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "BACKFILL_DATE_RANGE_NOT_FOUND", + "COLUMN_NOT_FOUND", + "COMPARE_TO_INCOMPATIBLE_PERIOD", + "COMPARE_TO_INVALID_PERIOD", + "COMPARE_TO_MISSING_PERIOD", + "COMPARISON_WITH_NON_AGGREGATE_FIELDS", + "DATE_INTERVAL_NOT_FOUND", + "DATE_NOT_PARSABLE", + "DATE_TIME_NOT_PARSABLE", + "EXCESS_BACKFILL_DIMENSIONS", + "EXCESS_DIMENSIONS", + "EXCESS_PERIODS", + "EXCESS_PRESENTMENTS", + "FROM_NOT_FOUND", + "FUNCTION_ARGUMENTS_NOT_FOUND", + "FUNCTION_EXCESS_ARGUMENTS", + "FUNCTION_INCOMPATIBLE_TYPES", + "FUNCTION_MODIFIER_NOT_FOUND", + "FUNCTION_NESTED_AGGREGATE", + "FUNCTION_NOT_FOUND", + "INVALID_DATE_RANGE", + "LIMIT_INVALID", + "LIST_MIXED_ARGUMENT_TYPES", + "MIXED_AGGREGATE_AND_NON_AGGREGATE", + "NAMED_DATE_NOT_FOUND", + "OPERATOR_INCOMPATIBLE_TYPES", + "PRESENTMENT_NOT_FOUND", + "REQUIRED_GROUP_BY_NOT_FOUND", + "SEMANTICALLY_INVALID", + "SORT_FIELD_NOT_FOUND", + "SYNTAX_FAILED_PREDICATE", + "SYNTAX_INPUT_MISMATCH", + "SYNTAX_INVALID_TOKEN", + "SYNTAX_MISSING_TOKEN", + "SYNTAX_NOT_RECOGNIZED", + "SYNTAX_NO_VIABLE_ALTERNATIVE", + "SYNTAX_UNWANTED_TOKEN", + "TABLE_NOT_FOUND", + "TIME_FUNCTION_NOT_FOUND", + "UNBACKFILLED_TIME_GROUP_BY_COMPARISON", + "UNKNOWN", + "VALUE_NOT_PARSABLE", + "VISUALIZE_CHART_TYPE_NOT_FOUND", + "VISUALIZE_EXCESS_PROJECTIONS", + "VISUALIZE_GROUP_BY_MIXED_BACKFILL", + "VISUALIZE_GROUP_BY_NOT_FOUND", + "VISUALIZE_INCOMPATIBLE_TYPES", + ) + + +class PaymentCustomizationErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "CUSTOM_APP_FUNCTION_NOT_ELIGIBLE", + "FUNCTION_DOES_NOT_IMPLEMENT", + "FUNCTION_ID_CANNOT_BE_CHANGED", + "FUNCTION_NOT_FOUND", + "FUNCTION_PENDING_DELETION", + "INVALID", + "INVALID_METAFIELDS", + "MAXIMUM_ACTIVE_PAYMENT_CUSTOMIZATIONS", + "PAYMENT_CUSTOMIZATION_FUNCTION_NOT_ELIGIBLE", + "PAYMENT_CUSTOMIZATION_NOT_FOUND", + "REQUIRED_INPUT_FIELD", + ) + + class PaymentMethods(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -1843,6 +2440,7 @@ class PaymentMethods(sgqlc.types.Enum): "DINERS_CLUB", "DISCOVER", "DOGECOIN", + "EFTPOS", "ELO", "FORBRUGSFORENINGEN", "INTERAC", @@ -1856,6 +2454,11 @@ class PaymentMethods(sgqlc.types.Enum): ) +class PaymentReminderSendUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("PAYMENT_REMINDER_SEND_UNSUCCESSFUL",) + + class PaymentTermsCreateUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("PAYMENT_TERMS_CREATION_UNSUCCESSFUL",) @@ -1868,7 +2471,7 @@ class PaymentTermsDeleteUserErrorCode(sgqlc.types.Enum): class PaymentTermsType(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("FIXED", "NET", "RECEIPT", "UNKNOWN") + __choices__ = ("FIXED", "FULFILLMENT", "NET", "RECEIPT", "UNKNOWN") class PaymentTermsUpdateUserErrorCode(sgqlc.types.Enum): @@ -1881,11 +2484,34 @@ class PaypalExpressSubscriptionsGatewayStatus(sgqlc.types.Enum): __choices__ = ("DISABLED", "ENABLED", "PENDING") +class PriceCalculationType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("COMPONENTS_SUM", "FIXED", "NONE") + + class PriceListAdjustmentType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("PERCENTAGE_DECREASE", "PERCENTAGE_INCREASE") +class PriceListCompareAtMode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ADJUSTED", "NULLIFY") + + +class PriceListFixedPricesByProductBulkUpdateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "DUPLICATE_ID_IN_INPUT", + "ID_MUST_BE_MUTUALLY_EXCLUSIVE", + "NO_UPDATE_OPERATIONS_SPECIFIED", + "PRICES_TO_ADD_CURRENCY_MISMATCH", + "PRICE_LIMIT_EXCEEDED", + "PRICE_LIST_DOES_NOT_EXIST", + "PRODUCT_DOES_NOT_EXIST", + ) + + class PriceListPriceOriginType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("FIXED", "RELATIVE") @@ -1893,13 +2519,7 @@ class PriceListPriceOriginType(sgqlc.types.Enum): class PriceListPriceUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "BLANK", - "PRICE_LIST_CURRENCY_MISMATCH", - "PRICE_LIST_NOT_FOUND", - "PRICE_NOT_FIXED", - "VARIANT_NOT_FOUND", - ) + __choices__ = ("BLANK", "PRICE_LIST_CURRENCY_MISMATCH", "PRICE_LIST_NOT_FOUND", "PRICE_NOT_FIXED", "VARIANT_NOT_FOUND") class PriceListSortKeys(sgqlc.types.Enum): @@ -1910,20 +2530,35 @@ class PriceListSortKeys(sgqlc.types.Enum): class PriceListUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( + "APP_CATALOG_PRICE_LIST_ASSIGNMENT", + "BLANK", + "CATALOG_ASSIGNMENT_NOT_ALLOWED", + "CATALOG_CANNOT_CHANGE_CONTEXT_TYPE", + "CATALOG_CONTEXT_DOES_NOT_SUPPORT_QUANTITY_RULES", + "CATALOG_DOES_NOT_EXIST", + "CATALOG_MARKET_AND_PRICE_LIST_CURRENCY_MISMATCH", + "CATALOG_TAKEN", "CONTEXT_RULE_COUNTRIES_LIMIT", "CONTEXT_RULE_COUNTRY_TAKEN", "CONTEXT_RULE_LIMIT_ONE_OPTION", "CONTEXT_RULE_MARKET_NOT_FOUND", "CONTEXT_RULE_MARKET_TAKEN", "COUNTRY_CURRENCY_MISMATCH", + "COUNTRY_PRICE_LIST_ASSIGNMENT", "CURRENCY_COUNTRY_MISMATCH", "CURRENCY_MARKET_MISMATCH", "CURRENCY_NOT_SUPPORTED", + "GENERIC_ERROR", + "INCLUSION", + "INVALID_ADJUSTMENT_MAX_VALUE", + "INVALID_ADJUSTMENT_MIN_VALUE", "INVALID_ADJUSTMENT_VALUE", "MARKET_CURRENCY_MISMATCH", + "PRICE_LIST_LOCKED", "PRICE_LIST_NOT_ALLOWED_FOR_PRIMARY_MARKET", "PRICE_LIST_NOT_FOUND", "TAKEN", + "TOO_LONG", ) @@ -2015,13 +2650,7 @@ class PriceRuleErrorCode(sgqlc.types.Enum): class PriceRuleFeature(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "BULK", - "BUY_ONE_GET_ONE", - "BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT", - "QUANTITY_DISCOUNTS", - "SPECIFIC_CUSTOMERS", - ) + __choices__ = ("BULK", "BUY_ONE_GET_ONE", "BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT", "QUANTITY_DISCOUNTS", "SPECIFIC_CUSTOMERS") class PriceRuleShareableUrlTargetType(sgqlc.types.Enum): @@ -2046,13 +2675,7 @@ class PriceRuleTarget(sgqlc.types.Enum): class PriceRuleTrait(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "BULK", - "BUY_ONE_GET_ONE", - "BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT", - "QUANTITY_DISCOUNTS", - "SPECIFIC_CUSTOMERS", - ) + __choices__ = ("BULK", "BUY_ONE_GET_ONE", "BUY_ONE_GET_ONE_WITH_ALLOCATION_LIMIT", "QUANTITY_DISCOUNTS", "SPECIFIC_CUSTOMERS") class PrivateMetafieldValueType(sgqlc.types.Enum): @@ -2070,6 +2693,36 @@ class ProductCollectionSortKeys(sgqlc.types.Enum): __choices__ = ("BEST_SELLING", "COLLECTION_DEFAULT", "CREATED", "ID", "MANUAL", "PRICE", "RELEVANCE", "TITLE") +class ProductDeleteUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("GENERIC_ERROR", "PRODUCT_DOES_NOT_EXIST") + + +class ProductDuplicateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("BUNDLES_ERROR", "EMPTY_TITLE", "EMPTY_VARIANT", "FAILED_TO_SAVE", "GENERIC_ERROR", "PRODUCT_DOES_NOT_EXIST") + + +class ProductFeedCreateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("INVALID", "TAKEN") + + +class ProductFeedDeleteUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("INVALID",) + + +class ProductFeedStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE", "INACTIVE") + + +class ProductFullSyncUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("INVALID",) + + class ProductImageSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("CREATED_AT", "ID", "POSITION", "RELEVANCE") @@ -2082,17 +2735,7 @@ class ProductMediaSortKeys(sgqlc.types.Enum): class ProductSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "CREATED_AT", - "ID", - "INVENTORY_TOTAL", - "PRODUCT_TYPE", - "PUBLISHED_AT", - "RELEVANCE", - "TITLE", - "UPDATED_AT", - "VENDOR", - ) + __choices__ = ("CREATED_AT", "ID", "INVENTORY_TOTAL", "PRODUCT_TYPE", "PUBLISHED_AT", "RELEVANCE", "TITLE", "UPDATED_AT", "VENDOR") class ProductStatus(sgqlc.types.Enum): @@ -2110,6 +2753,32 @@ class ProductVariantInventoryPolicy(sgqlc.types.Enum): __choices__ = ("CONTINUE", "DENY") +class ProductVariantRelationshipBulkUpdateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "CIRCULAR_REFERENCE", + "DUPLICATE_PRODUCT_VARIANT_RELATIONSHIP", + "EXCEEDED_PRODUCT_VARIANT_RELATIONSHIP_LIMIT", + "FAILED_TO_CREATE", + "FAILED_TO_REMOVE", + "FAILED_TO_UPDATE", + "FAILED_TO_UPDATE_PARENT_PRODUCT_VARIANT_PRICE", + "INVALID_QUANTITY", + "MUST_SPECIFY_COMPONENTS", + "NESTED_PARENT_PRODUCT_VARIANT", + "PARENT_PRODUCT_VARIANT_CANNOT_BE_GIFT_CARD", + "PARENT_PRODUCT_VARIANT_CANNOT_REQUIRE_SELLING_PLAN", + "PARENT_REQUIRED", + "PRODUCT_EXPANDER_APP_OWNERSHIP_ALREADY_EXISTS", + "PRODUCT_VARIANTS_NOT_COMPONENTS", + "PRODUCT_VARIANTS_NOT_FOUND", + "PRODUCT_VARIANT_RELATIONSHIP_TYPE_CONFLICT", + "UNEXPECTED_ERROR", + "UNSUPPORTED_MULTIPACK_RELATIONSHIP", + "UPDATE_PARENT_VARIANT_PRICE_REQUIRED", + ) + + class ProductVariantSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -2150,11 +2819,7 @@ class ProductVariantsBulkCreateUserErrorCode(sgqlc.types.Enum): class ProductVariantsBulkDeleteUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "AT_LEAST_ONE_VARIANT_DOES_NOT_BELONG_TO_THE_PRODUCT", - "CANNOT_DELETE_LAST_VARIANT", - "PRODUCT_DOES_NOT_EXIST", - ) + __choices__ = ("AT_LEAST_ONE_VARIANT_DOES_NOT_BELONG_TO_THE_PRODUCT", "CANNOT_DELETE_LAST_VARIANT", "PRODUCT_DOES_NOT_EXIST") class ProductVariantsBulkReorderUserErrorCode(sgqlc.types.Enum): @@ -2181,17 +2846,7 @@ class ProductVariantsBulkUpdateUserErrorCode(sgqlc.types.Enum): class ProfileItemSortKeys(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ( - "CREATED_AT", - "ID", - "INVENTORY_TOTAL", - "PRODUCT_TYPE", - "PUBLISHED_AT", - "RELEVANCE", - "TITLE", - "UPDATED_AT", - "VENDOR", - ) + __choices__ = ("CREATED_AT", "ID", "INVENTORY_TOTAL", "PRODUCT_TYPE", "PUBLISHED_AT", "RELEVANCE", "TITLE", "UPDATED_AT", "VENDOR") class PubSubWebhookSubscriptionCreateUserErrorCode(sgqlc.types.Enum): @@ -2204,6 +2859,57 @@ class PubSubWebhookSubscriptionUpdateUserErrorCode(sgqlc.types.Enum): __choices__ = ("INVALID_PARAMETERS",) +class PublicationCreateInputPublicationDefaultState(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ALL_PRODUCTS", "EMPTY") + + +class PublicationUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "BLANK", + "CANNOT_MODIFY_APP_CATALOG", + "CANNOT_MODIFY_APP_CATALOG_PUBLICATION", + "CANNOT_MODIFY_MARKET_CATALOG", + "CANNOT_MODIFY_MARKET_CATALOG_PUBLICATION", + "CATALOG_NOT_FOUND", + "INVALID", + "INVALID_PUBLISHABLE_ID", + "MARKET_NOT_FOUND", + "PRODUCT_TYPE_INCOMPATIBLE_WITH_CATALOG_TYPE", + "PUBLICATION_LOCKED", + "PUBLICATION_NOT_FOUND", + "PUBLICATION_UPDATE_LIMIT_EXCEEDED", + "TAKEN", + "TOO_LONG", + "TOO_SHORT", + "UNSUPPORTED_PUBLICATION_ACTION", + "UNSUPPORTED_PUBLISHABLE_TYPE", + ) + + +class QuantityRuleOriginType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FIXED", "RELATIVE") + + +class QuantityRuleUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "BLANK", + "CATALOG_CONTEXT_DOES_NOT_SUPPORT_QUANTITY_RULES", + "GENERIC_ERROR", + "GREATER_THAN_OR_EQUAL_TO", + "INCREMENT_IS_GREATER_THAN_MINIMUM", + "MAXIMUM_NOT_MULTIPLE_OF_INCREMENT", + "MINIMUM_IS_GREATER_THAN_MAXIMUM", + "MINIMUM_NOT_MULTIPLE_OF_INCREMENT", + "PRICE_LIST_DOES_NOT_EXIST", + "PRODUCT_VARIANT_DOES_NOT_EXIST", + "VARIANT_QUANTITY_RULE_DOES_NOT_EXIST", + ) + + class RefundDutyRefundType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("FULL", "PROPORTIONAL") @@ -2229,6 +2935,82 @@ class ResourceFeedbackState(sgqlc.types.Enum): __choices__ = ("ACCEPTED", "REQUIRES_ACTION") +class ResourceOperationStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE", "COMPLETE", "CREATED") + + +class ReturnDeclineReason(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("FINAL_SALE", "OTHER", "RETURN_PERIOD_ENDED") + + +class ReturnErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "ALREADY_EXISTS", + "BLANK", + "CREATION_FAILED", + "EQUAL_TO", + "FEATURE_NOT_ENABLED", + "GREATER_THAN", + "GREATER_THAN_OR_EQUAL_TO", + "INCLUSION", + "INTERNAL_ERROR", + "INVALID", + "INVALID_STATE", + "LESS_THAN", + "LESS_THAN_OR_EQUAL_TO", + "NOTIFICATION_FAILED", + "NOT_A_NUMBER", + "NOT_EDITABLE", + "NOT_FOUND", + "PRESENT", + "TAKEN", + "TOO_BIG", + "TOO_LONG", + "TOO_MANY_ARGUMENTS", + "TOO_SHORT", + "WRONG_LENGTH", + ) + + +class ReturnReason(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ( + "COLOR", + "DEFECTIVE", + "NOT_AS_DESCRIBED", + "OTHER", + "SIZE_TOO_LARGE", + "SIZE_TOO_SMALL", + "STYLE", + "UNKNOWN", + "UNWANTED", + "WRONG_ITEM", + ) + + +class ReturnStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CANCELED", "CLOSED", "DECLINED", "OPEN", "REQUESTED") + + +class ReverseFulfillmentOrderDispositionType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("MISSING", "NOT_RESTOCKED", "PROCESSING_REQUIRED", "RESTOCKED") + + +class ReverseFulfillmentOrderStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CANCELED", "CLOSED", "OPEN") + + +class ReverseFulfillmentOrderThirdPartyConfirmationStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACCEPTED", "CANCEL_ACCEPTED", "CANCEL_REJECTED", "PENDING_ACCEPTANCE", "PENDING_CANCELATION", "REJECTED") + + class SaleActionType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("ORDER", "RETURN", "UNKNOWN", "UPDATE") @@ -2236,7 +3018,7 @@ class SaleActionType(sgqlc.types.Enum): class SaleLineType(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("ADJUSTMENT", "DUTY", "GIFT_CARD", "PRODUCT", "SHIPPING", "TIP", "UNKNOWN") + __choices__ = ("ADDITIONAL_FEE", "ADJUSTMENT", "DUTY", "GIFT_CARD", "PRODUCT", "SHIPPING", "TIP", "UNKNOWN") class ScriptTagDisplayScope(sgqlc.types.Enum): @@ -2398,11 +3180,21 @@ class SellingPlanReserve(sgqlc.types.Enum): __choices__ = ("ON_FULFILLMENT", "ON_SALE") +class ServerPixelStatus(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CONNECTED", "DISCONNECTED_CONFIGURED", "DISCONNECTED_UNCONFIGURED") + + class ShippingDiscountClass(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("SHIPPING",) +class ShippingPackageType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("BOX", "ENVELOPE", "FLAT_RATE", "SOFT_PACK") + + class ShopBranding(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("ROGERS", "SHOPIFY", "SHOPIFY_GOLD", "SHOPIFY_PLUS") @@ -2421,6 +3213,7 @@ class ShopPolicyErrorCode(sgqlc.types.Enum): class ShopPolicyType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( + "CONTACT_INFORMATION", "LEGAL_NOTICE", "PRIVACY_POLICY", "REFUND_POLICY", @@ -2431,6 +3224,11 @@ class ShopPolicyType(sgqlc.types.Enum): ) +class ShopResourceFeedbackCreateUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("BLANK", "INVALID", "OUTDATED_FEEDBACK", "PRESENT") + + class ShopTagSort(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("ALPHABETICAL", "POPULAR") @@ -2542,6 +3340,7 @@ class StagedUploadTargetGenerateUploadResource(sgqlc.types.Enum): "IMAGE", "MODEL_3D", "PRODUCT_IMAGE", + "RETURN_LABEL", "SHOP_IMAGE", "URL_REDIRECT_IMPORT", "VIDEO", @@ -2550,7 +3349,14 @@ class StagedUploadTargetGenerateUploadResource(sgqlc.types.Enum): class StandardMetafieldDefinitionEnableUserErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("INVALID", "LIMIT_EXCEEDED", "TAKEN", "TEMPLATE_NOT_FOUND", "UNSTRUCTURED_ALREADY_EXISTS") + __choices__ = ( + "INVALID", + "LIMIT_EXCEEDED", + "TAKEN", + "TEMPLATE_NOT_FOUND", + "TYPE_NOT_ALLOWED_FOR_CONDITIONS", + "UNSTRUCTURED_ALREADY_EXISTS", + ) class StorefrontID(sgqlc.types.Scalar): @@ -2572,16 +3378,23 @@ class SubscriptionBillingAttemptErrorCode(sgqlc.types.Enum): "INVALID_CUSTOMER_BILLING_AGREEMENT", "INVALID_PAYMENT_METHOD", "INVALID_SHIPPING_ADDRESS", + "INVENTORY_ALLOCATIONS_NOT_FOUND", "INVOICE_ALREADY_PAID", "PAYMENT_METHOD_DECLINED", "PAYMENT_METHOD_INCOMPATIBLE_WITH_GATEWAY_CONFIG", "PAYMENT_METHOD_NOT_FOUND", "PAYMENT_PROVIDER_IS_NOT_ENABLED", "TEST_MODE", + "TRANSIENT_ERROR", "UNEXPECTED_ERROR", ) +class SubscriptionBillingAttemptsSortKeys(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("CREATED_AT", "ID", "RELEVANCE") + + class SubscriptionBillingCycleBillingCycleStatus(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("BILLED", "UNBILLED") @@ -2591,13 +3404,17 @@ class SubscriptionBillingCycleErrorCode(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( "BILLING_DATE_SET_ON_SKIPPED", + "CYCLE_INDEX_OUT_OF_RANGE", "CYCLE_NOT_FOUND", + "CYCLE_START_DATE_OUT_OF_RANGE", "EMPTY_BILLING_CYCLE_EDIT_SCHEDULE_INPUT", + "INCOMPLETE_BILLING_ATTEMPTS", "INVALID", "INVALID_CYCLE_INDEX", "INVALID_DATE", "NO_CYCLE_EDITS", "OUT_OF_BOUNDS", + "UPCOMING_CYCLE_LIMIT_EXCEEDED", ) @@ -2628,7 +3445,7 @@ class SubscriptionContractLastPaymentStatus(sgqlc.types.Enum): class SubscriptionContractSubscriptionStatus(sgqlc.types.Enum): __schema__ = shopify_schema - __choices__ = ("ACTIVE", "CANCELLED", "EXPIRED", "FAILED", "PAUSED") + __choices__ = ("ACTIVE", "CANCELLED", "EXPIRED", "FAILED", "PAUSED", "STALE") class SubscriptionDiscountRejectionReason(sgqlc.types.Enum): @@ -2681,6 +3498,7 @@ class SubscriptionDraftErrorCode(sgqlc.types.Enum): "INVALID_NOTE_LENGTH", "LESS_THAN", "LESS_THAN_OR_EQUAL_TO", + "MISSING_LOCAL_DELIVERY_OPTIONS", "NOT_AN_INTEGER", "NOT_IN_RANGE", "NO_ENTITLED_LINES", @@ -2698,6 +3516,11 @@ class SuggestedOrderTransactionKind(sgqlc.types.Enum): __choices__ = ("SUGGESTED_REFUND",) +class TaxAppConfigureUserErrorCode(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("TAX_PARTNER_ALREADY_ACTIVE", "TAX_PARTNER_NOT_FOUND", "TAX_PARTNER_STATE_UPDATE_FAILED") + + class TaxExemption(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( @@ -2776,14 +3599,21 @@ class TaxExemption(sgqlc.types.Enum): ) +class TaxPartnerState(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("ACTIVE", "PENDING", "READY") + + class TranslatableResourceType(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ( "COLLECTION", "DELIVERY_METHOD_DEFINITION", "EMAIL_TEMPLATE", + "FILTER", "LINK", "METAFIELD", + "METAOBJECT", "ONLINE_STORE_ARTICLE", "ONLINE_STORE_BLOG", "ONLINE_STORE_MENU", @@ -2814,11 +3644,13 @@ class TranslationErrorCode(sgqlc.types.Enum): "INVALID_LOCALE_FOR_SHOP", "INVALID_MARKET_LOCALIZABLE_CONTENT", "INVALID_TRANSLATABLE_CONTENT", + "INVALID_VALUE_FOR_HANDLE_TRANSLATION", "MARKET_CUSTOM_CONTENT_NOT_ALLOWED", "MARKET_DOES_NOT_EXIST", "MARKET_LOCALE_CREATION_FAILED", "RESOURCE_NOT_FOUND", "RESOURCE_NOT_MARKET_CUSTOMIZABLE", + "RESOURCE_NOT_TRANSLATABLE", "TOO_MANY_KEYS_FOR_RESOURCE", ) @@ -2870,6 +3702,11 @@ class UtcOffset(sgqlc.types.Scalar): __schema__ = shopify_schema +class VisualizationType(sgqlc.types.Enum): + __schema__ = shopify_schema + __choices__ = ("BAR", "LINE") + + class WebhookSubscriptionFormat(sgqlc.types.Enum): __schema__ = shopify_schema __choices__ = ("JSON", "XML") @@ -2889,6 +3726,7 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "APP_UNINSTALLED", "ATTRIBUTED_SESSIONS_FIRST", "ATTRIBUTED_SESSIONS_LAST", + "AUDIT_EVENTS_ADMIN_API_ACTIVITY", "BULK_OPERATIONS_FINISH", "CARTS_CREATE", "CARTS_UPDATE", @@ -2905,11 +3743,24 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "COLLECTION_PUBLICATIONS_CREATE", "COLLECTION_PUBLICATIONS_DELETE", "COLLECTION_PUBLICATIONS_UPDATE", + "COMPANIES_CREATE", + "COMPANIES_DELETE", + "COMPANIES_UPDATE", + "COMPANY_CONTACTS_CREATE", + "COMPANY_CONTACTS_DELETE", + "COMPANY_CONTACTS_UPDATE", + "COMPANY_CONTACT_ROLES_ASSIGN", + "COMPANY_CONTACT_ROLES_REVOKE", + "COMPANY_LOCATIONS_CREATE", + "COMPANY_LOCATIONS_DELETE", + "COMPANY_LOCATIONS_UPDATE", "CUSTOMERS_CREATE", "CUSTOMERS_DELETE", "CUSTOMERS_DISABLE", + "CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE", "CUSTOMERS_ENABLE", "CUSTOMERS_MARKETING_CONSENT_UPDATE", + "CUSTOMERS_MERGE", "CUSTOMERS_UPDATE", "CUSTOMER_GROUPS_CREATE", "CUSTOMER_GROUPS_DELETE", @@ -2917,6 +3768,8 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "CUSTOMER_PAYMENT_METHODS_CREATE", "CUSTOMER_PAYMENT_METHODS_REVOKE", "CUSTOMER_PAYMENT_METHODS_UPDATE", + "CUSTOMER_TAGS_ADDED", + "CUSTOMER_TAGS_REMOVED", "DISPUTES_CREATE", "DISPUTES_UPDATE", "DOMAINS_CREATE", @@ -2929,6 +3782,22 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "FULFILLMENTS_UPDATE", "FULFILLMENT_EVENTS_CREATE", "FULFILLMENT_EVENTS_DELETE", + "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED", + "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED", + "FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED", + "FULFILLMENT_ORDERS_CANCELLED", + "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED", + "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED", + "FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED", + "FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE", + "FULFILLMENT_ORDERS_HOLD_RELEASED", + "FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY", + "FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP", + "FULFILLMENT_ORDERS_MOVED", + "FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE", + "FULFILLMENT_ORDERS_PLACED_ON_HOLD", + "FULFILLMENT_ORDERS_RESCHEDULED", + "FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY", "INVENTORY_ITEMS_CREATE", "INVENTORY_ITEMS_DELETE", "INVENTORY_ITEMS_UPDATE", @@ -2937,7 +3806,9 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "INVENTORY_LEVELS_UPDATE", "LOCALES_CREATE", "LOCALES_UPDATE", + "LOCATIONS_ACTIVATE", "LOCATIONS_CREATE", + "LOCATIONS_DEACTIVATE", "LOCATIONS_DELETE", "LOCATIONS_UPDATE", "MARKETS_CREATE", @@ -2952,12 +3823,17 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "ORDERS_PARTIALLY_FULFILLED", "ORDERS_UPDATED", "ORDER_TRANSACTIONS_CREATE", + "PAYMENT_SCHEDULES_DUE", "PAYMENT_TERMS_CREATE", "PAYMENT_TERMS_DELETE", "PAYMENT_TERMS_UPDATE", "PRODUCTS_CREATE", "PRODUCTS_DELETE", "PRODUCTS_UPDATE", + "PRODUCT_FEEDS_CREATE", + "PRODUCT_FEEDS_FULL_SYNC", + "PRODUCT_FEEDS_INCREMENTAL_SYNC", + "PRODUCT_FEEDS_UPDATE", "PRODUCT_LISTINGS_ADD", "PRODUCT_LISTINGS_REMOVE", "PRODUCT_LISTINGS_UPDATE", @@ -2968,6 +3844,14 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "PROFILES_DELETE", "PROFILES_UPDATE", "REFUNDS_CREATE", + "RETURNS_APPROVE", + "RETURNS_CANCEL", + "RETURNS_CLOSE", + "RETURNS_DECLINE", + "RETURNS_REOPEN", + "RETURNS_REQUEST", + "REVERSE_DELIVERIES_ATTACH_DELIVERABLE", + "REVERSE_FULFILLMENT_ORDERS_DISPOSE", "SCHEDULED_PRODUCT_LISTINGS_ADD", "SCHEDULED_PRODUCT_LISTINGS_REMOVE", "SCHEDULED_PRODUCT_LISTINGS_UPDATE", @@ -2983,8 +3867,12 @@ class WebhookSubscriptionTopic(sgqlc.types.Enum): "SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED", "SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE", "SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS", + "SUBSCRIPTION_BILLING_CYCLE_EDITS_CREATE", + "SUBSCRIPTION_BILLING_CYCLE_EDITS_DELETE", + "SUBSCRIPTION_BILLING_CYCLE_EDITS_UPDATE", "SUBSCRIPTION_CONTRACTS_CREATE", "SUBSCRIPTION_CONTRACTS_UPDATE", + "TAX_PARTNERS_UPDATE", "TAX_SERVICES_CREATE", "TAX_SERVICES_UPDATE", "TENDER_TRANSACTIONS_CREATE", @@ -3066,26 +3954,52 @@ class AttributeInput(sgqlc.types.Input): class BuyerExperienceConfigurationInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("checkout_to_draft", "payment_terms_template_id") + __field_names__ = ("checkout_to_draft", "payment_terms_template_id", "editable_shipping_address") checkout_to_draft = sgqlc.types.Field(Boolean, graphql_name="checkoutToDraft") payment_terms_template_id = sgqlc.types.Field(ID, graphql_name="paymentTermsTemplateId") + editable_shipping_address = sgqlc.types.Field(Boolean, graphql_name="editableShippingAddress") -class CollectionDeleteInput(sgqlc.types.Input): +class CatalogContextInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id",) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + __field_names__ = ("company_location_ids",) + company_location_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="companyLocationIds") -class CollectionInput(sgqlc.types.Input): +class CatalogCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "description_html", - "handle", - "id", - "image", + __field_names__ = ("title", "status", "context", "price_list_id", "publication_id") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + status = sgqlc.types.Field(sgqlc.types.non_null(CatalogStatus), graphql_name="status") + context = sgqlc.types.Field(sgqlc.types.non_null(CatalogContextInput), graphql_name="context") + price_list_id = sgqlc.types.Field(ID, graphql_name="priceListId") + publication_id = sgqlc.types.Field(ID, graphql_name="publicationId") + + +class CatalogUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("title", "status", "context", "price_list_id", "publication_id") + title = sgqlc.types.Field(String, graphql_name="title") + status = sgqlc.types.Field(CatalogStatus, graphql_name="status") + context = sgqlc.types.Field(CatalogContextInput, graphql_name="context") + price_list_id = sgqlc.types.Field(ID, graphql_name="priceListId") + publication_id = sgqlc.types.Field(ID, graphql_name="publicationId") + + +class CollectionDeleteInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class CollectionInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ( + "description_html", + "handle", + "id", + "image", "products", - "private_metafields", "rule_set", "template_suffix", "sort_order", @@ -3099,9 +4013,6 @@ class CollectionInput(sgqlc.types.Input): id = sgqlc.types.Field(ID, graphql_name="id") image = sgqlc.types.Field("ImageInput", graphql_name="image") products = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="products") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("PrivateMetafieldInput")), graphql_name="privateMetafields" - ) rule_set = sgqlc.types.Field("CollectionRuleSetInput", graphql_name="ruleSet") template_suffix = sgqlc.types.Field(String, graphql_name="templateSuffix") sort_order = sgqlc.types.Field(CollectionSortOrder, graphql_name="sortOrder") @@ -3122,17 +4033,17 @@ class CollectionPublishInput(sgqlc.types.Input): __field_names__ = ("id", "collection_publications") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") collection_publications = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionPublicationInput))), - graphql_name="collectionPublications", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionPublicationInput))), graphql_name="collectionPublications" ) class CollectionRuleInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("column", "relation", "condition") + __field_names__ = ("column", "relation", "condition", "condition_object_id") column = sgqlc.types.Field(sgqlc.types.non_null(CollectionRuleColumn), graphql_name="column") relation = sgqlc.types.Field(sgqlc.types.non_null(CollectionRuleRelation), graphql_name="relation") condition = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="condition") + condition_object_id = sgqlc.types.Field(ID, graphql_name="conditionObjectId") class CollectionRuleSetInput(sgqlc.types.Input): @@ -3147,8 +4058,7 @@ class CollectionUnpublishInput(sgqlc.types.Input): __field_names__ = ("id", "collection_publications") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") collection_publications = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionPublicationInput))), - graphql_name="collectionPublications", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionPublicationInput))), graphql_name="collectionPublications" ) @@ -3253,6 +4163,13 @@ class ContextualPricingContext(sgqlc.types.Input): company_location_id = sgqlc.types.Field(ID, graphql_name="companyLocationId") +class ContextualPublicationContext(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("country", "company_location_id") + country = sgqlc.types.Field(CountryCode, graphql_name="country") + company_location_id = sgqlc.types.Field(ID, graphql_name="companyLocationId") + + class CountryHarmonizedSystemCodeInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("harmonized_system_code", "country_code") @@ -3268,6 +4185,16 @@ class CreateMediaInput(sgqlc.types.Input): media_content_type = sgqlc.types.Field(sgqlc.types.non_null(MediaContentType), graphql_name="mediaContentType") +class CustomShippingPackageInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("weight", "dimensions", "default", "name", "type") + weight = sgqlc.types.Field("WeightInput", graphql_name="weight") + dimensions = sgqlc.types.Field("ObjectDimensionsInput", graphql_name="dimensions") + default = sgqlc.types.Field(Boolean, graphql_name="default") + name = sgqlc.types.Field(String, graphql_name="name") + type = sgqlc.types.Field(ShippingPackageType, graphql_name="type") + + class CustomerDeleteInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("id",) @@ -3303,7 +4230,6 @@ class CustomerInput(sgqlc.types.Input): "metafields", "note", "phone", - "private_metafields", "tags", "email_marketing_consent", "sms_marketing_consent", @@ -3319,9 +4245,6 @@ class CustomerInput(sgqlc.types.Input): metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldInput")), graphql_name="metafields") note = sgqlc.types.Field(String, graphql_name="note") phone = sgqlc.types.Field(String, graphql_name="phone") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("PrivateMetafieldInput")), graphql_name="privateMetafields" - ) tags = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="tags") email_marketing_consent = sgqlc.types.Field(CustomerEmailMarketingConsentInput, graphql_name="emailMarketingConsent") sms_marketing_consent = sgqlc.types.Field("CustomerSmsMarketingConsentInput", graphql_name="smsMarketingConsent") @@ -3329,6 +4252,26 @@ class CustomerInput(sgqlc.types.Input): tax_exemptions = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(TaxExemption)), graphql_name="taxExemptions") +class CustomerMergeOverrideFields(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ( + "customer_id_of_first_name_to_keep", + "customer_id_of_last_name_to_keep", + "customer_id_of_email_to_keep", + "customer_id_of_phone_number_to_keep", + "customer_id_of_default_address_to_keep", + "note", + "tags", + ) + customer_id_of_first_name_to_keep = sgqlc.types.Field(ID, graphql_name="customerIdOfFirstNameToKeep") + customer_id_of_last_name_to_keep = sgqlc.types.Field(ID, graphql_name="customerIdOfLastNameToKeep") + customer_id_of_email_to_keep = sgqlc.types.Field(ID, graphql_name="customerIdOfEmailToKeep") + customer_id_of_phone_number_to_keep = sgqlc.types.Field(ID, graphql_name="customerIdOfPhoneNumberToKeep") + customer_id_of_default_address_to_keep = sgqlc.types.Field(ID, graphql_name="customerIdOfDefaultAddressToKeep") + note = sgqlc.types.Field(String, graphql_name="note") + tags = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="tags") + + class CustomerPaymentMethodRemoteInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("stripe_payment_method", "authorize_net_customer_payment_profile", "braintree_payment_method") @@ -3339,6 +4282,15 @@ class CustomerPaymentMethodRemoteInput(sgqlc.types.Input): braintree_payment_method = sgqlc.types.Field("RemoteBraintreePaymentMethodInput", graphql_name="braintreePaymentMethod") +class CustomerSegmentMembersQueryInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("segment_id", "query", "reverse", "sort_key") + segment_id = sgqlc.types.Field(ID, graphql_name="segmentId") + query = sgqlc.types.Field(String, graphql_name="query") + reverse = sgqlc.types.Field(Boolean, graphql_name="reverse") + sort_key = sgqlc.types.Field(String, graphql_name="sortKey") + + class CustomerSmsMarketingConsentInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("marketing_opt_in_level", "marketing_state", "consent_updated_at") @@ -3372,6 +4324,15 @@ class DeliveryCountryInput(sgqlc.types.Input): include_all_provinces = sgqlc.types.Field(Boolean, graphql_name="includeAllProvinces") +class DeliveryCustomizationInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("function_id", "title", "enabled", "metafields") + function_id = sgqlc.types.Field(String, graphql_name="functionId") + title = sgqlc.types.Field(String, graphql_name="title") + enabled = sgqlc.types.Field(Boolean, graphql_name="enabled") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldInput")), graphql_name="metafields") + + class DeliveryLocationGroupZoneInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("id", "name", "countries", "method_definitions_to_create", "method_definitions_to_update") @@ -3379,15 +4340,21 @@ class DeliveryLocationGroupZoneInput(sgqlc.types.Input): name = sgqlc.types.Field(String, graphql_name="name") countries = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryCountryInput)), graphql_name="countries") method_definitions_to_create = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionInput")), - graphql_name="methodDefinitionsToCreate", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionInput")), graphql_name="methodDefinitionsToCreate" ) method_definitions_to_update = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionInput")), - graphql_name="methodDefinitionsToUpdate", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionInput")), graphql_name="methodDefinitionsToUpdate" ) +class DeliveryLocationLocalPickupEnableInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("location_id", "pickup_time", "instructions") + location_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="locationId") + pickup_time = sgqlc.types.Field(sgqlc.types.non_null(DeliveryLocalPickupTime), graphql_name="pickupTime") + instructions = sgqlc.types.Field(String, graphql_name="instructions") + + class DeliveryMethodDefinitionInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ( @@ -3408,8 +4375,7 @@ class DeliveryMethodDefinitionInput(sgqlc.types.Input): rate_definition = sgqlc.types.Field("DeliveryRateDefinitionInput", graphql_name="rateDefinition") participant = sgqlc.types.Field("DeliveryParticipantInput", graphql_name="participant") weight_conditions_to_create = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryWeightConditionInput")), - graphql_name="weightConditionsToCreate", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryWeightConditionInput")), graphql_name="weightConditionsToCreate" ) price_conditions_to_create = sgqlc.types.Field( sgqlc.types.list_of(sgqlc.types.non_null("DeliveryPriceConditionInput")), graphql_name="priceConditionsToCreate" @@ -3421,14 +4387,7 @@ class DeliveryMethodDefinitionInput(sgqlc.types.Input): class DeliveryParticipantInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "id", - "carrier_service_id", - "fixed_fee", - "percentage_of_rate_fee", - "participant_services", - "adapt_to_new_services", - ) + __field_names__ = ("id", "carrier_service_id", "fixed_fee", "percentage_of_rate_fee", "participant_services", "adapt_to_new_services") id = sgqlc.types.Field(ID, graphql_name="id") carrier_service_id = sgqlc.types.Field(ID, graphql_name="carrierServiceId") fixed_fee = sgqlc.types.Field("MoneyInput", graphql_name="fixedFee") @@ -3471,16 +4430,13 @@ class DeliveryProfileInput(sgqlc.types.Input): ) name = sgqlc.types.Field(String, graphql_name="name") profile_location_groups = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), - graphql_name="profileLocationGroups", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), graphql_name="profileLocationGroups" ) location_groups_to_create = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), - graphql_name="locationGroupsToCreate", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), graphql_name="locationGroupsToCreate" ) location_groups_to_update = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), - graphql_name="locationGroupsToUpdate", + sgqlc.types.list_of(sgqlc.types.non_null("DeliveryProfileLocationGroupInput")), graphql_name="locationGroupsToUpdate" ) location_groups_to_delete = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationGroupsToDelete") variants_to_associate = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="variantsToAssociate") @@ -3500,9 +4456,11 @@ class DeliveryProfileInput(sgqlc.types.Input): class DeliveryProfileLocationGroupInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id", "locations", "zones_to_create", "zones_to_update") + __field_names__ = ("id", "locations", "locations_to_add", "locations_to_remove", "zones_to_create", "zones_to_update") id = sgqlc.types.Field(ID, graphql_name="id") locations = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locations") + locations_to_add = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationsToAdd") + locations_to_remove = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationsToRemove") zones_to_create = sgqlc.types.Field( sgqlc.types.list_of(sgqlc.types.non_null(DeliveryLocationGroupZoneInput)), graphql_name="zonesToCreate" ) @@ -3578,15 +4536,7 @@ class DiscountAutomaticBasicInput(sgqlc.types.Input): class DiscountAutomaticBxgyInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "combines_with", - "starts_at", - "ends_at", - "title", - "uses_per_order_limit", - "customer_buys", - "customer_gets", - ) + __field_names__ = ("combines_with", "starts_at", "ends_at", "title", "uses_per_order_limit", "customer_buys", "customer_gets") combines_with = sgqlc.types.Field("DiscountCombinesWithInput", graphql_name="combinesWith") starts_at = sgqlc.types.Field(DateTime, graphql_name="startsAt") ends_at = sgqlc.types.Field(DateTime, graphql_name="endsAt") @@ -3875,7 +4825,6 @@ class DraftOrderInput(sgqlc.types.Input): "email", "line_items", "metafields", - "private_metafields", "localization_extensions", "note", "shipping_address", @@ -3891,6 +4840,7 @@ class DraftOrderInput(sgqlc.types.Input): "payment_terms", "purchasing_entity", "source_name", + "po_number", ) applied_discount = sgqlc.types.Field(DraftOrderAppliedDiscountInput, graphql_name="appliedDiscount") billing_address = sgqlc.types.Field("MailingAddressInput", graphql_name="billingAddress") @@ -3898,9 +4848,6 @@ class DraftOrderInput(sgqlc.types.Input): email = sgqlc.types.Field(String, graphql_name="email") line_items = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("DraftOrderLineItemInput")), graphql_name="lineItems") metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldInput")), graphql_name="metafields") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null("PrivateMetafieldInput")), graphql_name="privateMetafields" - ) localization_extensions = sgqlc.types.Field( sgqlc.types.list_of(sgqlc.types.non_null("LocalizationExtensionInput")), graphql_name="localizationExtensions" ) @@ -3918,6 +4865,7 @@ class DraftOrderInput(sgqlc.types.Input): payment_terms = sgqlc.types.Field("PaymentTermsInput", graphql_name="paymentTerms") purchasing_entity = sgqlc.types.Field("PurchasingEntityInput", graphql_name="purchasingEntity") source_name = sgqlc.types.Field(String, graphql_name="sourceName") + po_number = sgqlc.types.Field(String, graphql_name="poNumber") class DraftOrderLineItemInput(sgqlc.types.Input): @@ -3968,26 +4916,64 @@ class EventBridgeWebhookSubscriptionInput(sgqlc.types.Input): class FileCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("original_source", "content_type", "alt") + __field_names__ = ("filename", "original_source", "content_type", "alt", "duplicate_resolution_mode") + filename = sgqlc.types.Field(String, graphql_name="filename") original_source = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="originalSource") content_type = sgqlc.types.Field(FileContentType, graphql_name="contentType") alt = sgqlc.types.Field(String, graphql_name="alt") + duplicate_resolution_mode = sgqlc.types.Field(FileCreateInputDuplicateResolutionMode, graphql_name="duplicateResolutionMode") class FileUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id", "alt", "preview_image_source") + __field_names__ = ("id", "alt", "original_source", "preview_image_source", "filename") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") alt = sgqlc.types.Field(String, graphql_name="alt") + original_source = sgqlc.types.Field(String, graphql_name="originalSource") preview_image_source = sgqlc.types.Field(String, graphql_name="previewImageSource") + filename = sgqlc.types.Field(String, graphql_name="filename") + + +class FulfillmentEventInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ( + "address1", + "city", + "country", + "estimated_delivery_at", + "happened_at", + "fulfillment_id", + "latitude", + "longitude", + "message", + "province", + "status", + "zip", + ) + address1 = sgqlc.types.Field(String, graphql_name="address1") + city = sgqlc.types.Field(String, graphql_name="city") + country = sgqlc.types.Field(String, graphql_name="country") + estimated_delivery_at = sgqlc.types.Field(DateTime, graphql_name="estimatedDeliveryAt") + happened_at = sgqlc.types.Field(DateTime, graphql_name="happenedAt") + fulfillment_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentId") + latitude = sgqlc.types.Field(Float, graphql_name="latitude") + longitude = sgqlc.types.Field(Float, graphql_name="longitude") + message = sgqlc.types.Field(String, graphql_name="message") + province = sgqlc.types.Field(String, graphql_name="province") + status = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentEventStatus), graphql_name="status") + zip = sgqlc.types.Field(String, graphql_name="zip") class FulfillmentOrderHoldInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("reason", "reason_notes", "notify_merchant") + __field_names__ = ("reason", "reason_notes", "notify_merchant", "external_id", "fulfillment_order_line_items") reason = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentHoldReason), graphql_name="reason") reason_notes = sgqlc.types.Field(String, graphql_name="reasonNotes") notify_merchant = sgqlc.types.Field(Boolean, graphql_name="notifyMerchant") + external_id = sgqlc.types.Field(String, graphql_name="externalId") + fulfillment_order_line_items = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItemInput")), graphql_name="fulfillmentOrderLineItems" + ) class FulfillmentOrderLineItemInput(sgqlc.types.Input): @@ -4002,9 +4988,45 @@ class FulfillmentOrderLineItemsInput(sgqlc.types.Input): __field_names__ = ("fulfillment_order_id", "fulfillment_order_line_items") fulfillment_order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentOrderId") fulfillment_order_line_items = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemInput)), + sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemInput)), graphql_name="fulfillmentOrderLineItems" + ) + + +class FulfillmentOrderLineItemsPreparedForPickupInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("line_items_by_fulfillment_order",) + line_items_by_fulfillment_order = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PreparedFulfillmentOrderLineItemsInput"))), + graphql_name="lineItemsByFulfillmentOrder", + ) + + +class FulfillmentOrderMergeInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("merge_intents",) + merge_intents = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMergeInputMergeIntent"))), + graphql_name="mergeIntents", + ) + + +class FulfillmentOrderMergeInputMergeIntent(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order_line_items", "fulfillment_order_id") + fulfillment_order_line_items = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemInput)), graphql_name="fulfillmentOrderLineItems" + ) + fulfillment_order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentOrderId") + + +class FulfillmentOrderSplitInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order_line_items", "fulfillment_order_id") + fulfillment_order_line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemInput))), graphql_name="fulfillmentOrderLineItems", ) + fulfillment_order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentOrderId") class FulfillmentOriginAddressInput(sgqlc.types.Input): @@ -4092,6 +5114,17 @@ class InventoryAdjustItemInput(sgqlc.types.Input): available_delta = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="availableDelta") +class InventoryAdjustQuantitiesInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reason", "name", "reference_document_uri", "changes") + reason = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="reason") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + reference_document_uri = sgqlc.types.Field(String, graphql_name="referenceDocumentUri") + changes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryChangeInput"))), graphql_name="changes" + ) + + class InventoryAdjustQuantityInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("inventory_level_id", "available_delta") @@ -4106,6 +5139,15 @@ class InventoryBulkToggleActivationInput(sgqlc.types.Input): activate = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="activate") +class InventoryChangeInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("delta", "inventory_item_id", "location_id", "ledger_document_uri") + delta = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="delta") + inventory_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="inventoryItemId") + location_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="locationId") + ledger_document_uri = sgqlc.types.Field(String, graphql_name="ledgerDocumentUri") + + class InventoryItemInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("cost", "tracked") @@ -4129,8 +5171,7 @@ class InventoryItemUpdateInput(sgqlc.types.Input): province_code_of_origin = sgqlc.types.Field(String, graphql_name="provinceCodeOfOrigin") harmonized_system_code = sgqlc.types.Field(String, graphql_name="harmonizedSystemCode") country_harmonized_system_codes = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(CountryHarmonizedSystemCodeInput)), - graphql_name="countryHarmonizedSystemCodes", + sgqlc.types.list_of(sgqlc.types.non_null(CountryHarmonizedSystemCodeInput)), graphql_name="countryHarmonizedSystemCodes" ) @@ -4141,6 +5182,51 @@ class InventoryLevelInput(sgqlc.types.Input): location_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="locationId") +class InventoryMoveQuantitiesInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reason", "reference_document_uri", "changes") + reason = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="reason") + reference_document_uri = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="referenceDocumentUri") + changes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryMoveQuantityChange"))), graphql_name="changes" + ) + + +class InventoryMoveQuantityChange(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("inventory_item_id", "quantity", "from_", "to") + inventory_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="inventoryItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + from_ = sgqlc.types.Field(sgqlc.types.non_null("InventoryMoveQuantityTerminalInput"), graphql_name="from") + to = sgqlc.types.Field(sgqlc.types.non_null("InventoryMoveQuantityTerminalInput"), graphql_name="to") + + +class InventoryMoveQuantityTerminalInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("location_id", "name", "ledger_document_uri") + location_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="locationId") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + ledger_document_uri = sgqlc.types.Field(String, graphql_name="ledgerDocumentUri") + + +class InventorySetOnHandQuantitiesInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reason", "reference_document_uri", "set_quantities") + reason = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="reason") + reference_document_uri = sgqlc.types.Field(String, graphql_name="referenceDocumentUri") + set_quantities = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventorySetQuantityInput"))), graphql_name="setQuantities" + ) + + +class InventorySetQuantityInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("inventory_item_id", "location_id", "quantity") + inventory_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="inventoryItemId") + location_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="locationId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + + class LocalizationExtensionInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("key", "value") @@ -4162,10 +5248,11 @@ class LocationAddAddressInput(sgqlc.types.Input): class LocationAddInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "address", "fulfills_online_orders") + __field_names__ = ("name", "address", "fulfills_online_orders", "metafields") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") address = sgqlc.types.Field(sgqlc.types.non_null(LocationAddAddressInput), graphql_name="address") fulfills_online_orders = sgqlc.types.Field(Boolean, graphql_name="fulfillsOnlineOrders") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldInput")), graphql_name="metafields") class LocationEditAddressInput(sgqlc.types.Input): @@ -4182,10 +5269,11 @@ class LocationEditAddressInput(sgqlc.types.Input): class LocationEditInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "address", "fulfills_online_orders") + __field_names__ = ("name", "address", "fulfills_online_orders", "metafields") name = sgqlc.types.Field(String, graphql_name="name") address = sgqlc.types.Field(LocationEditAddressInput, graphql_name="address") fulfills_online_orders = sgqlc.types.Field(Boolean, graphql_name="fulfillsOnlineOrders") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldInput")), graphql_name="metafields") class MailingAddressInput(sgqlc.types.Input): @@ -4216,12 +5304,12 @@ class MailingAddressInput(sgqlc.types.Input): class MarketCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "enabled", "regions") + __field_names__ = ("name", "handle", "enabled", "regions") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + handle = sgqlc.types.Field(String, graphql_name="handle") enabled = sgqlc.types.Field(Boolean, graphql_name="enabled") regions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketRegionCreateInput"))), - graphql_name="regions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketRegionCreateInput"))), graphql_name="regions" ) @@ -4249,8 +5337,9 @@ class MarketRegionCreateInput(sgqlc.types.Input): class MarketUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "enabled") + __field_names__ = ("name", "handle", "enabled") name = sgqlc.types.Field(String, graphql_name="name") + handle = sgqlc.types.Field(String, graphql_name="handle") enabled = sgqlc.types.Field(Boolean, graphql_name="enabled") @@ -4315,15 +5404,7 @@ class MarketingActivityCreateExternalInput(sgqlc.types.Input): class MarketingActivityCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "marketing_activity_title", - "form_data", - "marketing_activity_extension_id", - "context", - "utm", - "status", - "budget", - ) + __field_names__ = ("marketing_activity_title", "form_data", "marketing_activity_extension_id", "context", "utm", "status", "budget") marketing_activity_title = sgqlc.types.Field(String, graphql_name="marketingActivityTitle") form_data = sgqlc.types.Field(String, graphql_name="formData") marketing_activity_extension_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="marketingActivityExtensionId") @@ -4431,6 +5512,12 @@ class MarketingEngagementInput(sgqlc.types.Input): fetched_at = sgqlc.types.Field(DateTime, graphql_name="fetchedAt") +class MetafieldAccessInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("admin",) + admin = sgqlc.types.Field(sgqlc.types.non_null(MetafieldAdminAccess), graphql_name="admin") + + class MetafieldDefinitionInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ( @@ -4442,7 +5529,9 @@ class MetafieldDefinitionInput(sgqlc.types.Input): "type", "validations", "visible_to_storefront_api", + "use_as_collection_condition", "pin", + "access", ) namespace = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="namespace") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") @@ -4454,19 +5543,37 @@ class MetafieldDefinitionInput(sgqlc.types.Input): sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionValidationInput")), graphql_name="validations" ) visible_to_storefront_api = sgqlc.types.Field(Boolean, graphql_name="visibleToStorefrontApi") + use_as_collection_condition = sgqlc.types.Field(Boolean, graphql_name="useAsCollectionCondition") pin = sgqlc.types.Field(Boolean, graphql_name="pin") + access = sgqlc.types.Field(MetafieldAccessInput, graphql_name="access") class MetafieldDefinitionUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("namespace", "key", "name", "description", "owner_type", "pin", "visible_to_storefront_api") + __field_names__ = ( + "namespace", + "key", + "name", + "description", + "owner_type", + "validations", + "pin", + "visible_to_storefront_api", + "use_as_collection_condition", + "access", + ) namespace = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="namespace") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") name = sgqlc.types.Field(String, graphql_name="name") description = sgqlc.types.Field(String, graphql_name="description") owner_type = sgqlc.types.Field(sgqlc.types.non_null(MetafieldOwnerType), graphql_name="ownerType") + validations = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionValidationInput")), graphql_name="validations" + ) pin = sgqlc.types.Field(Boolean, graphql_name="pin") visible_to_storefront_api = sgqlc.types.Field(Boolean, graphql_name="visibleToStorefrontApi") + use_as_collection_condition = sgqlc.types.Field(Boolean, graphql_name="useAsCollectionCondition") + access = sgqlc.types.Field(MetafieldAccessInput, graphql_name="access") class MetafieldDefinitionValidationInput(sgqlc.types.Input): @@ -4484,8 +5591,7 @@ class MetafieldDeleteInput(sgqlc.types.Input): class MetafieldInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("description", "id", "namespace", "key", "value", "type") - description = sgqlc.types.Field(String, graphql_name="description") + __field_names__ = ("id", "namespace", "key", "value", "type") id = sgqlc.types.Field(ID, graphql_name="id") namespace = sgqlc.types.Field(String, graphql_name="namespace") key = sgqlc.types.Field(String, graphql_name="key") @@ -4508,97 +5614,276 @@ class MetafieldsSetInput(sgqlc.types.Input): namespace = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="namespace") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") value = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="value") - type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + type = sgqlc.types.Field(String, graphql_name="type") -class MoneyInput(sgqlc.types.Input): +class MetaobjectAccessInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("amount", "currency_code") - amount = sgqlc.types.Field(sgqlc.types.non_null(Decimal), graphql_name="amount") - currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") + __field_names__ = ("admin", "storefront") + admin = sgqlc.types.Field(MetaobjectAdminAccess, graphql_name="admin") + storefront = sgqlc.types.Field(MetaobjectStorefrontAccess, graphql_name="storefront") -class MoveInput(sgqlc.types.Input): +class MetaobjectBulkDeleteWhereCondition(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id", "new_position") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - new_position = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="newPosition") + __field_names__ = ("type", "ids") + type = sgqlc.types.Field(String, graphql_name="type") + ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids") -class OrderCaptureInput(sgqlc.types.Input): +class MetaobjectCapabilityCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id", "parent_transaction_id", "amount", "currency") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - parent_transaction_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="parentTransactionId") - amount = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="amount") - currency = sgqlc.types.Field(CurrencyCode, graphql_name="currency") + __field_names__ = ("publishable", "translatable") + publishable = sgqlc.types.Field("MetaobjectCapabilityPublishableInput", graphql_name="publishable") + translatable = sgqlc.types.Field("MetaobjectCapabilityTranslatableInput", graphql_name="translatable") -class OrderCloseInput(sgqlc.types.Input): +class MetaobjectCapabilityDataInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id",) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + __field_names__ = ("publishable",) + publishable = sgqlc.types.Field("MetaobjectCapabilityDataPublishableInput", graphql_name="publishable") -class OrderEditAppliedDiscountInput(sgqlc.types.Input): +class MetaobjectCapabilityDataPublishableInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("description", "fixed_value", "percent_value") - description = sgqlc.types.Field(String, graphql_name="description") - fixed_value = sgqlc.types.Field(MoneyInput, graphql_name="fixedValue") - percent_value = sgqlc.types.Field(Float, graphql_name="percentValue") + __field_names__ = ("status",) + status = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectStatus), graphql_name="status") -class OrderInput(sgqlc.types.Input): +class MetaobjectCapabilityPublishableInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "id", - "email", - "note", - "tags", - "shipping_address", - "custom_attributes", - "metafields", - "localization_extensions", - ) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - email = sgqlc.types.Field(String, graphql_name="email") - note = sgqlc.types.Field(String, graphql_name="note") - tags = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="tags") - shipping_address = sgqlc.types.Field(MailingAddressInput, graphql_name="shippingAddress") - custom_attributes = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(AttributeInput)), graphql_name="customAttributes") - metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") - localization_extensions = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(LocalizationExtensionInput)), graphql_name="localizationExtensions" - ) + __field_names__ = ("enabled",) + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") -class OrderMarkAsPaidInput(sgqlc.types.Input): +class MetaobjectCapabilityTranslatableInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id",) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + __field_names__ = ("enabled",) + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") -class OrderOpenInput(sgqlc.types.Input): +class MetaobjectCapabilityUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id",) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + __field_names__ = ("publishable", "translatable") + publishable = sgqlc.types.Field(MetaobjectCapabilityPublishableInput, graphql_name="publishable") + translatable = sgqlc.types.Field(MetaobjectCapabilityTranslatableInput, graphql_name="translatable") -class OrderTransactionInput(sgqlc.types.Input): +class MetaobjectCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("amount", "gateway", "kind", "order_id", "parent_id") - amount = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="amount") - gateway = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="gateway") - kind = sgqlc.types.Field(sgqlc.types.non_null(OrderTransactionKind), graphql_name="kind") - order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="orderId") - parent_id = sgqlc.types.Field(ID, graphql_name="parentId") + __field_names__ = ("type", "handle", "fields", "capabilities") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + handle = sgqlc.types.Field(String, graphql_name="handle") + fields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectFieldInput")), graphql_name="fields") + capabilities = sgqlc.types.Field(MetaobjectCapabilityDataInput, graphql_name="capabilities") -class PaymentScheduleInput(sgqlc.types.Input): +class MetaobjectDefinitionCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("issued_at", "due_at") - issued_at = sgqlc.types.Field(DateTime, graphql_name="issuedAt") - due_at = sgqlc.types.Field(DateTime, graphql_name="dueAt") + __field_names__ = ("name", "description", "type", "field_definitions", "access", "display_name_key", "capabilities") + name = sgqlc.types.Field(String, graphql_name="name") + description = sgqlc.types.Field(String, graphql_name="description") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + field_definitions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectFieldDefinitionCreateInput"))), + graphql_name="fieldDefinitions", + ) + access = sgqlc.types.Field(MetaobjectAccessInput, graphql_name="access") + display_name_key = sgqlc.types.Field(String, graphql_name="displayNameKey") + capabilities = sgqlc.types.Field(MetaobjectCapabilityCreateInput, graphql_name="capabilities") + + +class MetaobjectDefinitionUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("name", "description", "field_definitions", "access", "display_name_key", "reset_field_order", "capabilities") + name = sgqlc.types.Field(String, graphql_name="name") + description = sgqlc.types.Field(String, graphql_name="description") + field_definitions = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectFieldDefinitionOperationInput")), graphql_name="fieldDefinitions" + ) + access = sgqlc.types.Field(MetaobjectAccessInput, graphql_name="access") + display_name_key = sgqlc.types.Field(String, graphql_name="displayNameKey") + reset_field_order = sgqlc.types.Field(Boolean, graphql_name="resetFieldOrder") + capabilities = sgqlc.types.Field(MetaobjectCapabilityUpdateInput, graphql_name="capabilities") + + +class MetaobjectFieldDefinitionCreateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("key", "type", "name", "description", "required", "validations") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + name = sgqlc.types.Field(String, graphql_name="name") + description = sgqlc.types.Field(String, graphql_name="description") + required = sgqlc.types.Field(Boolean, graphql_name="required") + validations = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidationInput)), graphql_name="validations" + ) + + +class MetaobjectFieldDefinitionDeleteInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("key",) + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + + +class MetaobjectFieldDefinitionOperationInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("create", "update", "delete") + create = sgqlc.types.Field(MetaobjectFieldDefinitionCreateInput, graphql_name="create") + update = sgqlc.types.Field("MetaobjectFieldDefinitionUpdateInput", graphql_name="update") + delete = sgqlc.types.Field(MetaobjectFieldDefinitionDeleteInput, graphql_name="delete") + + +class MetaobjectFieldDefinitionUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("key", "name", "description", "required", "validations") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + name = sgqlc.types.Field(String, graphql_name="name") + description = sgqlc.types.Field(String, graphql_name="description") + required = sgqlc.types.Field(Boolean, graphql_name="required") + validations = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidationInput)), graphql_name="validations" + ) + + +class MetaobjectFieldInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("key", "value") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + value = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="value") + + +class MetaobjectHandleInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("type", "handle") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + + +class MetaobjectUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("handle", "fields", "capabilities") + handle = sgqlc.types.Field(String, graphql_name="handle") + fields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetaobjectFieldInput)), graphql_name="fields") + capabilities = sgqlc.types.Field(MetaobjectCapabilityDataInput, graphql_name="capabilities") + + +class MetaobjectUpsertInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("handle", "fields", "capabilities") + handle = sgqlc.types.Field(String, graphql_name="handle") + fields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetaobjectFieldInput)), graphql_name="fields") + capabilities = sgqlc.types.Field(MetaobjectCapabilityDataInput, graphql_name="capabilities") + + +class MoneyInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("amount", "currency_code") + amount = sgqlc.types.Field(sgqlc.types.non_null(Decimal), graphql_name="amount") + currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") + + +class MoveInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id", "new_position") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + new_position = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="newPosition") + + +class ObjectDimensionsInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("length", "width", "height", "unit") + length = sgqlc.types.Field(sgqlc.types.non_null(Float), graphql_name="length") + width = sgqlc.types.Field(sgqlc.types.non_null(Float), graphql_name="width") + height = sgqlc.types.Field(sgqlc.types.non_null(Float), graphql_name="height") + unit = sgqlc.types.Field(sgqlc.types.non_null(LengthUnit), graphql_name="unit") + + +class OrderCaptureInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id", "parent_transaction_id", "amount", "currency") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + parent_transaction_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="parentTransactionId") + amount = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="amount") + currency = sgqlc.types.Field(CurrencyCode, graphql_name="currency") + + +class OrderCloseInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class OrderEditAppliedDiscountInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("description", "fixed_value", "percent_value") + description = sgqlc.types.Field(String, graphql_name="description") + fixed_value = sgqlc.types.Field(MoneyInput, graphql_name="fixedValue") + percent_value = sgqlc.types.Field(Float, graphql_name="percentValue") + + +class OrderInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ( + "id", + "email", + "note", + "tags", + "shipping_address", + "custom_attributes", + "metafields", + "localization_extensions", + "po_number", + ) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + email = sgqlc.types.Field(String, graphql_name="email") + note = sgqlc.types.Field(String, graphql_name="note") + tags = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="tags") + shipping_address = sgqlc.types.Field(MailingAddressInput, graphql_name="shippingAddress") + custom_attributes = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(AttributeInput)), graphql_name="customAttributes") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") + localization_extensions = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(LocalizationExtensionInput)), graphql_name="localizationExtensions" + ) + po_number = sgqlc.types.Field(String, graphql_name="poNumber") + + +class OrderMarkAsPaidInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class OrderOpenInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class OrderTransactionInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("amount", "gateway", "kind", "order_id", "parent_id") + amount = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="amount") + gateway = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="gateway") + kind = sgqlc.types.Field(sgqlc.types.non_null(OrderTransactionKind), graphql_name="kind") + order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="orderId") + parent_id = sgqlc.types.Field(ID, graphql_name="parentId") + + +class PaymentCustomizationInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("function_id", "title", "enabled", "metafields") + function_id = sgqlc.types.Field(String, graphql_name="functionId") + title = sgqlc.types.Field(String, graphql_name="title") + enabled = sgqlc.types.Field(Boolean, graphql_name="enabled") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") + + +class PaymentScheduleInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("issued_at", "due_at") + issued_at = sgqlc.types.Field(DateTime, graphql_name="issuedAt") + due_at = sgqlc.types.Field(DateTime, graphql_name="dueAt") class PaymentTermsCreateInput(sgqlc.types.Input): @@ -4628,6 +5913,19 @@ class PaymentTermsUpdateInput(sgqlc.types.Input): payment_terms_attributes = sgqlc.types.Field(sgqlc.types.non_null(PaymentTermsInput), graphql_name="paymentTermsAttributes") +class PreparedFulfillmentOrderLineItemsInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order_id",) + fulfillment_order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentOrderId") + + +class PriceInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("calculation", "price") + calculation = sgqlc.types.Field(PriceCalculationType, graphql_name="calculation") + price = sgqlc.types.Field(Money, graphql_name="price") + + class PriceListAdjustmentInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("value", "type") @@ -4635,37 +5933,33 @@ class PriceListAdjustmentInput(sgqlc.types.Input): type = sgqlc.types.Field(sgqlc.types.non_null(PriceListAdjustmentType), graphql_name="type") -class PriceListContext(sgqlc.types.Input): - __schema__ = shopify_schema - __field_names__ = ("country",) - country = sgqlc.types.Field(CountryCode, graphql_name="country") - - -class PriceListContextRuleInput(sgqlc.types.Input): +class PriceListAdjustmentSettingsInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("market_id",) - market_id = sgqlc.types.Field(ID, graphql_name="marketId") + __field_names__ = ("compare_at_mode",) + compare_at_mode = sgqlc.types.Field(sgqlc.types.non_null(PriceListCompareAtMode), graphql_name="compareAtMode") class PriceListCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "currency", "parent", "context_rule") + __field_names__ = ("name", "currency", "parent", "catalog_id") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") currency = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currency") parent = sgqlc.types.Field(sgqlc.types.non_null("PriceListParentCreateInput"), graphql_name="parent") - context_rule = sgqlc.types.Field(PriceListContextRuleInput, graphql_name="contextRule") + catalog_id = sgqlc.types.Field(ID, graphql_name="catalogId") class PriceListParentCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("adjustment",) + __field_names__ = ("adjustment", "settings") adjustment = sgqlc.types.Field(sgqlc.types.non_null(PriceListAdjustmentInput), graphql_name="adjustment") + settings = sgqlc.types.Field(PriceListAdjustmentSettingsInput, graphql_name="settings") class PriceListParentUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("adjustment",) + __field_names__ = ("adjustment", "settings") adjustment = sgqlc.types.Field(sgqlc.types.non_null(PriceListAdjustmentInput), graphql_name="adjustment") + settings = sgqlc.types.Field(PriceListAdjustmentSettingsInput, graphql_name="settings") class PriceListPriceInput(sgqlc.types.Input): @@ -4676,13 +5970,20 @@ class PriceListPriceInput(sgqlc.types.Input): compare_at_price = sgqlc.types.Field(MoneyInput, graphql_name="compareAtPrice") +class PriceListProductPriceInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("product_id", "price") + product_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="productId") + price = sgqlc.types.Field(sgqlc.types.non_null(MoneyInput), graphql_name="price") + + class PriceListUpdateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("name", "currency", "context_rule", "parent") + __field_names__ = ("name", "currency", "parent", "catalog_id") name = sgqlc.types.Field(String, graphql_name="name") currency = sgqlc.types.Field(CurrencyCode, graphql_name="currency") - context_rule = sgqlc.types.Field(PriceListContextRuleInput, graphql_name="contextRule") parent = sgqlc.types.Field(PriceListParentUpdateInput, graphql_name="parent") + catalog_id = sgqlc.types.Field(ID, graphql_name="catalogId") class PriceRuleCustomerSelectionInput(sgqlc.types.Input): @@ -4856,6 +6157,22 @@ class ProductDeleteInput(sgqlc.types.Input): id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") +class ProductDuplicateAsyncInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("product_id", "new_title", "new_status", "include_images") + product_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="productId") + new_title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="newTitle") + new_status = sgqlc.types.Field(ProductStatus, graphql_name="newStatus") + include_images = sgqlc.types.Field(Boolean, graphql_name="includeImages") + + +class ProductFeedInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("language", "country") + language = sgqlc.types.Field(sgqlc.types.non_null(LanguageCode), graphql_name="language") + country = sgqlc.types.Field(sgqlc.types.non_null(CountryCode), graphql_name="country") + + class ProductInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ( @@ -4876,9 +6193,7 @@ class ProductInput(sgqlc.types.Input): "collections_to_join", "collections_to_leave", "id", - "images", "metafields", - "private_metafields", "options", "variants", "status", @@ -4901,11 +6216,7 @@ class ProductInput(sgqlc.types.Input): collections_to_join = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="collectionsToJoin") collections_to_leave = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="collectionsToLeave") id = sgqlc.types.Field(ID, graphql_name="id") - images = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ImageInput)), graphql_name="images") metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(PrivateMetafieldInput)), graphql_name="privateMetafields" - ) options = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="options") variants = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantInput")), graphql_name="variants") status = sgqlc.types.Field(ProductStatus, graphql_name="status") @@ -4924,8 +6235,7 @@ class ProductPublishInput(sgqlc.types.Input): __field_names__ = ("id", "product_publications") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") product_publications = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductPublicationInput))), - graphql_name="productPublications", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductPublicationInput))), graphql_name="productPublications" ) @@ -4944,8 +6254,7 @@ class ProductUnpublishInput(sgqlc.types.Input): __field_names__ = ("id", "product_publications") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") product_publications = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductPublicationInput))), - graphql_name="productPublications", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductPublicationInput))), graphql_name="productPublications" ) @@ -4963,21 +6272,27 @@ class ProductVariantDetachMediaInput(sgqlc.types.Input): media_ids = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="mediaIds") +class ProductVariantGroupRelationshipInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id", "quantity") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + + class ProductVariantInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ( + "requires_components", "barcode", "compare_at_price", "harmonized_system_code", "id", - "image_id", - "image_src", + "media_id", "media_src", "inventory_policy", "inventory_quantities", "inventory_item", "metafields", - "private_metafields", "options", "position", "price", @@ -4989,12 +6304,12 @@ class ProductVariantInput(sgqlc.types.Input): "weight", "weight_unit", ) + requires_components = sgqlc.types.Field(Boolean, graphql_name="requiresComponents") barcode = sgqlc.types.Field(String, graphql_name="barcode") compare_at_price = sgqlc.types.Field(Money, graphql_name="compareAtPrice") harmonized_system_code = sgqlc.types.Field(String, graphql_name="harmonizedSystemCode") id = sgqlc.types.Field(ID, graphql_name="id") - image_id = sgqlc.types.Field(ID, graphql_name="imageId") - image_src = sgqlc.types.Field(String, graphql_name="imageSrc") + media_id = sgqlc.types.Field(ID, graphql_name="mediaId") media_src = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="mediaSrc") inventory_policy = sgqlc.types.Field(ProductVariantInventoryPolicy, graphql_name="inventoryPolicy") inventory_quantities = sgqlc.types.Field( @@ -5002,9 +6317,6 @@ class ProductVariantInput(sgqlc.types.Input): ) inventory_item = sgqlc.types.Field(InventoryItemInput, graphql_name="inventoryItem") metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(PrivateMetafieldInput)), graphql_name="privateMetafields" - ) options = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="options") position = sgqlc.types.Field(Int, graphql_name="position") price = sgqlc.types.Field(Money, graphql_name="price") @@ -5024,6 +6336,32 @@ class ProductVariantPositionInput(sgqlc.types.Input): position = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="position") +class ProductVariantRelationshipUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ( + "parent_product_variant_id", + "parent_product_id", + "product_variant_relationships_to_create", + "product_variant_relationships_to_update", + "product_variant_relationships_to_remove", + "remove_all_product_variant_relationships", + "price_input", + ) + parent_product_variant_id = sgqlc.types.Field(ID, graphql_name="parentProductVariantId") + parent_product_id = sgqlc.types.Field(ID, graphql_name="parentProductId") + product_variant_relationships_to_create = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(ProductVariantGroupRelationshipInput)), graphql_name="productVariantRelationshipsToCreate" + ) + product_variant_relationships_to_update = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(ProductVariantGroupRelationshipInput)), graphql_name="productVariantRelationshipsToUpdate" + ) + product_variant_relationships_to_remove = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="productVariantRelationshipsToRemove" + ) + remove_all_product_variant_relationships = sgqlc.types.Field(Boolean, graphql_name="removeAllProductVariantRelationships") + price_input = sgqlc.types.Field(PriceInput, graphql_name="priceInput") + + class ProductVariantsBulkInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ( @@ -5031,14 +6369,12 @@ class ProductVariantsBulkInput(sgqlc.types.Input): "compare_at_price", "harmonized_system_code", "id", - "image_id", - "image_src", "media_src", "inventory_policy", "inventory_quantities", "inventory_item", + "media_id", "metafields", - "private_metafields", "options", "price", "requires_shipping", @@ -5052,18 +6388,14 @@ class ProductVariantsBulkInput(sgqlc.types.Input): compare_at_price = sgqlc.types.Field(Money, graphql_name="compareAtPrice") harmonized_system_code = sgqlc.types.Field(String, graphql_name="harmonizedSystemCode") id = sgqlc.types.Field(ID, graphql_name="id") - image_id = sgqlc.types.Field(ID, graphql_name="imageId") - image_src = sgqlc.types.Field(String, graphql_name="imageSrc") media_src = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="mediaSrc") inventory_policy = sgqlc.types.Field(ProductVariantInventoryPolicy, graphql_name="inventoryPolicy") inventory_quantities = sgqlc.types.Field( sgqlc.types.list_of(sgqlc.types.non_null(InventoryLevelInput)), graphql_name="inventoryQuantities" ) inventory_item = sgqlc.types.Field(InventoryItemInput, graphql_name="inventoryItem") + media_id = sgqlc.types.Field(ID, graphql_name="mediaId") metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldInput)), graphql_name="metafields") - private_metafields = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(PrivateMetafieldInput)), graphql_name="privateMetafields" - ) options = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="options") price = sgqlc.types.Field(Money, graphql_name="price") requires_shipping = sgqlc.types.Field(Boolean, graphql_name="requiresShipping") @@ -5084,6 +6416,14 @@ class PubSubWebhookSubscriptionInput(sgqlc.types.Input): metafield_namespaces = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="metafieldNamespaces") +class PublicationCreateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("catalog_id", "default_state", "auto_publish") + catalog_id = sgqlc.types.Field(ID, graphql_name="catalogId") + default_state = sgqlc.types.Field(PublicationCreateInputPublicationDefaultState, graphql_name="defaultState") + auto_publish = sgqlc.types.Field(Boolean, graphql_name="autoPublish") + + class PublicationInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("publication_id", "publish_date") @@ -5091,6 +6431,14 @@ class PublicationInput(sgqlc.types.Input): publish_date = sgqlc.types.Field(DateTime, graphql_name="publishDate") +class PublicationUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("publishables_to_add", "publishables_to_remove", "auto_publish") + publishables_to_add = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="publishablesToAdd") + publishables_to_remove = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="publishablesToRemove") + auto_publish = sgqlc.types.Field(Boolean, graphql_name="autoPublish") + + class PurchasingCompanyInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("company_id", "company_contact_id", "company_location_id") @@ -5106,6 +6454,15 @@ class PurchasingEntityInput(sgqlc.types.Input): purchasing_company = sgqlc.types.Field(PurchasingCompanyInput, graphql_name="purchasingCompany") +class QuantityRuleInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("increment", "maximum", "minimum", "variant_id") + increment = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="increment") + maximum = sgqlc.types.Field(Int, graphql_name="maximum") + minimum = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="minimum") + variant_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="variantId") + + class RefundDutyInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("duty_id", "refund_type") @@ -5115,16 +6472,7 @@ class RefundDutyInput(sgqlc.types.Input): class RefundInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "currency", - "order_id", - "note", - "notify", - "shipping", - "refund_line_items", - "refund_duties", - "transactions", - ) + __field_names__ = ("currency", "order_id", "note", "notify", "shipping", "refund_line_items", "refund_duties", "transactions") currency = sgqlc.types.Field(CurrencyCode, graphql_name="currency") order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="orderId") note = sgqlc.types.Field(String, graphql_name="note") @@ -5144,6 +6492,13 @@ class RefundLineItemInput(sgqlc.types.Input): location_id = sgqlc.types.Field(ID, graphql_name="locationId") +class RefundShippingInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("shipping_refund_amount", "full_refund") + shipping_refund_amount = sgqlc.types.Field(MoneyInput, graphql_name="shippingRefundAmount") + full_refund = sgqlc.types.Field(Boolean, graphql_name="fullRefund") + + class RemoteAuthorizeNetCustomerPaymentProfileInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("customer_profile_id", "customer_payment_profile_id") @@ -5165,55 +6520,181 @@ class RemoteStripePaymentMethodInput(sgqlc.types.Input): payment_method_id = sgqlc.types.Field(String, graphql_name="paymentMethodId") -class SEOInput(sgqlc.types.Input): - __schema__ = shopify_schema - __field_names__ = ("title", "description") - title = sgqlc.types.Field(String, graphql_name="title") - description = sgqlc.types.Field(String, graphql_name="description") - - -class SavedSearchCreateInput(sgqlc.types.Input): +class ResourceFeedbackCreateInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("resource_type", "name", "query") - resource_type = sgqlc.types.Field(sgqlc.types.non_null(SearchResultType), graphql_name="resourceType") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - query = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="query") + __field_names__ = ("feedback_generated_at", "messages", "state") + feedback_generated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="feedbackGeneratedAt") + messages = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="messages") + state = sgqlc.types.Field(sgqlc.types.non_null(ResourceFeedbackState), graphql_name="state") -class SavedSearchDeleteInput(sgqlc.types.Input): +class ReturnApproveRequestInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("id",) id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") -class SavedSearchUpdateInput(sgqlc.types.Input): +class ReturnDeclineRequestInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("id", "name", "query") + __field_names__ = ("id", "decline_reason") id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - name = sgqlc.types.Field(String, graphql_name="name") - query = sgqlc.types.Field(String, graphql_name="query") + decline_reason = sgqlc.types.Field(sgqlc.types.non_null(ReturnDeclineReason), graphql_name="declineReason") -class ScriptTagInput(sgqlc.types.Input): +class ReturnInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("src", "display_scope", "cache") - src = sgqlc.types.Field(URL, graphql_name="src") - display_scope = sgqlc.types.Field(ScriptTagDisplayScope, graphql_name="displayScope") - cache = sgqlc.types.Field(Boolean, graphql_name="cache") + __field_names__ = ("order_id", "return_line_items", "notify_customer", "requested_at") + order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="orderId") + return_line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnLineItemInput"))), graphql_name="returnLineItems" + ) + notify_customer = sgqlc.types.Field(Boolean, graphql_name="notifyCustomer") + requested_at = sgqlc.types.Field(DateTime, graphql_name="requestedAt") -class SellingPlanAnchorInput(sgqlc.types.Input): +class ReturnLineItemInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("type", "day", "month", "cutoff_day") - type = sgqlc.types.Field(SellingPlanAnchorType, graphql_name="type") - day = sgqlc.types.Field(Int, graphql_name="day") - month = sgqlc.types.Field(Int, graphql_name="month") - cutoff_day = sgqlc.types.Field(Int, graphql_name="cutoffDay") + __field_names__ = ("fulfillment_line_item_id", "quantity", "return_reason", "return_reason_note") + fulfillment_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + return_reason = sgqlc.types.Field(sgqlc.types.non_null(ReturnReason), graphql_name="returnReason") + return_reason_note = sgqlc.types.Field(String, graphql_name="returnReasonNote") -class SellingPlanBillingPolicyInput(sgqlc.types.Input): +class ReturnRefundInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ("fixed", "recurring") + __field_names__ = ("return_id", "return_refund_line_items", "refund_shipping", "refund_duties", "order_transactions", "notify_customer") + return_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="returnId") + return_refund_line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnRefundLineItemInput"))), graphql_name="returnRefundLineItems" + ) + refund_shipping = sgqlc.types.Field(RefundShippingInput, graphql_name="refundShipping") + refund_duties = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(RefundDutyInput)), graphql_name="refundDuties") + order_transactions = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("ReturnRefundOrderTransactionInput")), graphql_name="orderTransactions" + ) + notify_customer = sgqlc.types.Field(Boolean, graphql_name="notifyCustomer") + + +class ReturnRefundLineItemInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("return_line_item_id", "quantity") + return_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="returnLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + + +class ReturnRefundOrderTransactionInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("transaction_amount", "parent_id") + transaction_amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyInput), graphql_name="transactionAmount") + parent_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="parentId") + + +class ReturnRequestInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("order_id", "return_line_items") + order_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="orderId") + return_line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnRequestLineItemInput"))), graphql_name="returnLineItems" + ) + + +class ReturnRequestLineItemInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_line_item_id", "quantity", "return_reason", "customer_note") + fulfillment_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="fulfillmentLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + return_reason = sgqlc.types.Field(sgqlc.types.non_null(ReturnReason), graphql_name="returnReason") + customer_note = sgqlc.types.Field(String, graphql_name="customerNote") + + +class ReverseDeliveryDisposeInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reverse_delivery_line_item_id", "quantity", "disposition_type", "location_id") + reverse_delivery_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="reverseDeliveryLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + disposition_type = sgqlc.types.Field(sgqlc.types.non_null(ReverseFulfillmentOrderDispositionType), graphql_name="dispositionType") + location_id = sgqlc.types.Field(ID, graphql_name="locationId") + + +class ReverseDeliveryLabelInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("file_url",) + file_url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="fileUrl") + + +class ReverseDeliveryLineItemInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reverse_fulfillment_order_line_item_id", "quantity") + reverse_fulfillment_order_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="reverseFulfillmentOrderLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + + +class ReverseDeliveryTrackingInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("number", "url") + number = sgqlc.types.Field(String, graphql_name="number") + url = sgqlc.types.Field(URL, graphql_name="url") + + +class ReverseFulfillmentOrderDisposeInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("reverse_fulfillment_order_line_item_id", "quantity", "location_id", "disposition_type") + reverse_fulfillment_order_line_item_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="reverseFulfillmentOrderLineItemId") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + location_id = sgqlc.types.Field(ID, graphql_name="locationId") + disposition_type = sgqlc.types.Field(sgqlc.types.non_null(ReverseFulfillmentOrderDispositionType), graphql_name="dispositionType") + + +class SEOInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("title", "description") + title = sgqlc.types.Field(String, graphql_name="title") + description = sgqlc.types.Field(String, graphql_name="description") + + +class SavedSearchCreateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("resource_type", "name", "query") + resource_type = sgqlc.types.Field(sgqlc.types.non_null(SearchResultType), graphql_name="resourceType") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + query = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="query") + + +class SavedSearchDeleteInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class SavedSearchUpdateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("id", "name", "query") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + name = sgqlc.types.Field(String, graphql_name="name") + query = sgqlc.types.Field(String, graphql_name="query") + + +class ScriptTagInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("src", "display_scope", "cache") + src = sgqlc.types.Field(URL, graphql_name="src") + display_scope = sgqlc.types.Field(ScriptTagDisplayScope, graphql_name="displayScope") + cache = sgqlc.types.Field(Boolean, graphql_name="cache") + + +class SellingPlanAnchorInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("type", "day", "month", "cutoff_day") + type = sgqlc.types.Field(SellingPlanAnchorType, graphql_name="type") + day = sgqlc.types.Field(Int, graphql_name="day") + month = sgqlc.types.Field(Int, graphql_name="month") + cutoff_day = sgqlc.types.Field(Int, graphql_name="cutoffDay") + + +class SellingPlanBillingPolicyInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("fixed", "recurring") fixed = sgqlc.types.Field("SellingPlanFixedBillingPolicyInput", graphql_name="fixed") recurring = sgqlc.types.Field("SellingPlanRecurringBillingPolicyInput", graphql_name="recurring") @@ -5257,14 +6738,7 @@ class SellingPlanFixedBillingPolicyInput(sgqlc.types.Input): class SellingPlanFixedDeliveryPolicyInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "anchors", - "fulfillment_trigger", - "fulfillment_exact_time", - "cutoff", - "intent", - "pre_anchor_behavior", - ) + __field_names__ = ("anchors", "fulfillment_trigger", "fulfillment_exact_time", "cutoff", "intent", "pre_anchor_behavior") anchors = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(SellingPlanAnchorInput)), graphql_name="anchors") fulfillment_trigger = sgqlc.types.Field(SellingPlanFulfillmentTrigger, graphql_name="fulfillmentTrigger") fulfillment_exact_time = sgqlc.types.Field(DateTime, graphql_name="fulfillmentExactTime") @@ -5517,6 +6991,23 @@ class StorefrontAccessTokenInput(sgqlc.types.Input): title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") +class SubscriptionAtomicLineInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("line", "discounts") + line = sgqlc.types.Field(sgqlc.types.non_null("SubscriptionLineInput"), graphql_name="line") + discounts = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionAtomicManualDiscountInput")), graphql_name="discounts" + ) + + +class SubscriptionAtomicManualDiscountInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("title", "value", "recurring_cycle_limit") + title = sgqlc.types.Field(String, graphql_name="title") + value = sgqlc.types.Field("SubscriptionManualDiscountValueInput", graphql_name="value") + recurring_cycle_limit = sgqlc.types.Field(Int, graphql_name="recurringCycleLimit") + + class SubscriptionBillingAttemptInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("idempotency_key", "origin_time", "billing_cycle_selector") @@ -5571,6 +7062,19 @@ class SubscriptionBillingPolicyInput(sgqlc.types.Input): anchors = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(SellingPlanAnchorInput)), graphql_name="anchors") +class SubscriptionContractAtomicCreateInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("customer_id", "next_billing_date", "currency_code", "contract", "lines", "discount_codes") + customer_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="customerId") + next_billing_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="nextBillingDate") + currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") + contract = sgqlc.types.Field(sgqlc.types.non_null("SubscriptionDraftInput"), graphql_name="contract") + lines = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionAtomicLineInput))), graphql_name="lines" + ) + discount_codes = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="discountCodes") + + class SubscriptionContractCreateInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("customer_id", "next_billing_date", "currency_code", "contract") @@ -5580,6 +7084,13 @@ class SubscriptionContractCreateInput(sgqlc.types.Input): contract = sgqlc.types.Field(sgqlc.types.non_null("SubscriptionDraftInput"), graphql_name="contract") +class SubscriptionContractProductChangeInput(sgqlc.types.Input): + __schema__ = shopify_schema + __field_names__ = ("product_variant_id", "current_price") + product_variant_id = sgqlc.types.Field(ID, graphql_name="productVariantId") + current_price = sgqlc.types.Field(Decimal, graphql_name="currentPrice") + + class SubscriptionDeliveryMethodInput(sgqlc.types.Input): __schema__ = shopify_schema __field_names__ = ("shipping", "local_delivery", "pickup") @@ -5815,20 +7326,11 @@ class WebPixelInput(sgqlc.types.Input): class WebhookSubscriptionInput(sgqlc.types.Input): __schema__ = shopify_schema - __field_names__ = ( - "callback_url", - "format", - "include_fields", - "metafield_namespaces", - "private_metafield_namespaces", - ) + __field_names__ = ("callback_url", "format", "include_fields", "metafield_namespaces") callback_url = sgqlc.types.Field(URL, graphql_name="callbackUrl") format = sgqlc.types.Field(WebhookSubscriptionFormat, graphql_name="format") include_fields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="includeFields") metafield_namespaces = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="metafieldNamespaces") - private_metafield_namespaces = sgqlc.types.Field( - sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="privateMetafieldNamespaces" - ) class WeightInput(sgqlc.types.Input): @@ -5841,103 +7343,594 @@ class WeightInput(sgqlc.types.Input): ######################################################################## # Output Objects and Interfaces ######################################################################## -class AccessScope(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("description", "handle") - description = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="description") - handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") - - -class AllDiscountItems(sgqlc.types.Type): +class AppPurchase(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("all_items",) - all_items = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="allItems") + __field_names__ = ("created_at", "name", "price", "status", "test") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + price = sgqlc.types.Field(sgqlc.types.non_null("MoneyV2"), graphql_name="price") + status = sgqlc.types.Field(sgqlc.types.non_null(AppPurchaseStatus), graphql_name="status") + test = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="test") -class ApiVersion(sgqlc.types.Type): +class CalculatedDiscountApplication(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("display_name", "handle", "supported") - display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") - handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") - supported = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supported") + __field_names__ = ("allocation_method", "applied_to", "description", "id", "target_selection", "target_type", "value") + allocation_method = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationAllocationMethod), graphql_name="allocationMethod") + applied_to = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationLevel), graphql_name="appliedTo") + description = sgqlc.types.Field(String, graphql_name="description") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + target_selection = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetSelection), graphql_name="targetSelection") + target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") + value = sgqlc.types.Field(sgqlc.types.non_null("PricingValue"), graphql_name="value") -class AppConnection(sgqlc.types.relay.Connection): +class CommentEventSubject(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("App"))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + __field_names__ = ("has_timeline_comment", "id") + has_timeline_comment = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="hasTimelineComment") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") -class AppCreditConnection(sgqlc.types.relay.Connection): +class CustomerMoment(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppCreditEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppCredit"))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + __field_names__ = ("occurred_at",) + occurred_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="occurredAt") -class AppCreditCreatePayload(sgqlc.types.Type): +class DiscountApplication(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("app_credit", "user_errors") - app_credit = sgqlc.types.Field("AppCredit", graphql_name="appCredit") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + __field_names__ = ("allocation_method", "index", "target_selection", "target_type", "value") + allocation_method = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationAllocationMethod), graphql_name="allocationMethod") + index = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="index") + target_selection = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetSelection), graphql_name="targetSelection") + target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") + value = sgqlc.types.Field(sgqlc.types.non_null("PricingValue"), graphql_name="value") -class AppCreditEdge(sgqlc.types.Type): +class DisplayableError(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("AppCredit"), graphql_name="node") + __field_names__ = ("field", "message") + field = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="field") + message = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="message") -class AppDiscountType(sgqlc.types.Type): +class Event(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ( - "app", - "app_bridge", - "app_key", - "description", - "discount_class", - "function_id", - "target_type", - "title", - ) - app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") - app_bridge = sgqlc.types.Field(sgqlc.types.non_null("FunctionsAppBridge"), graphql_name="appBridge") - app_key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="appKey") - description = sgqlc.types.Field(String, graphql_name="description") - discount_class = sgqlc.types.Field(sgqlc.types.non_null(DiscountClass), graphql_name="discountClass") - function_id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="functionId") - target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") - title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + __field_names__ = ("app_title", "attribute_to_app", "attribute_to_user", "created_at", "critical_alert", "id", "message") + app_title = sgqlc.types.Field(String, graphql_name="appTitle") + attribute_to_app = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="attributeToApp") + attribute_to_user = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="attributeToUser") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + critical_alert = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="criticalAlert") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + message = sgqlc.types.Field(sgqlc.types.non_null(FormattedString), graphql_name="message") -class AppEdge(sgqlc.types.Type): +class File(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="node") + __field_names__ = ("alt", "created_at", "file_errors", "file_status", "id", "preview", "updated_at") + alt = sgqlc.types.Field(String, graphql_name="alt") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + file_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FileError"))), graphql_name="fileErrors") + file_status = sgqlc.types.Field(sgqlc.types.non_null(FileStatus), graphql_name="fileStatus") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + preview = sgqlc.types.Field("MediaPreviewImage", graphql_name="preview") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") -class AppFeedback(sgqlc.types.Type): +class HasEvents(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("app", "link", "messages") - app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") - link = sgqlc.types.Field("Link", graphql_name="link") - messages = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="messages") + __field_names__ = ("events",) + events = sgqlc.types.Field( + sgqlc.types.non_null("EventConnection"), + graphql_name="events", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(EventSortKeys, graphql_name="sortKey", default="ID")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) -class AppInstallationConnection(sgqlc.types.relay.Connection): +class HasLocalizationExtensions(sgqlc.types.Interface): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppInstallationEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppInstallation"))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") - - -class AppInstallationEdge(sgqlc.types.Type): + __field_names__ = ("localization_extensions",) + localization_extensions = sgqlc.types.Field( + sgqlc.types.non_null("LocalizationExtensionConnection"), + graphql_name="localizationExtensions", + args=sgqlc.types.ArgDict( + ( + ( + "country_codes", + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CountryCode)), graphql_name="countryCodes", default=None), + ), + ( + "purposes", + sgqlc.types.Arg( + sgqlc.types.list_of(sgqlc.types.non_null(LocalizationExtensionPurpose)), graphql_name="purposes", default=None + ), + ), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + +class HasMetafieldDefinitions(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("metafield_definitions",) + metafield_definitions = sgqlc.types.Field( + sgqlc.types.non_null("MetafieldDefinitionConnection"), + graphql_name="metafieldDefinitions", + args=sgqlc.types.ArgDict( + ( + ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), + ("pinned_status", sgqlc.types.Arg(MetafieldDefinitionPinnedStatus, graphql_name="pinnedStatus", default="ANY")), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(MetafieldDefinitionSortKeys, graphql_name="sortKey", default="ID")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) + + +class HasMetafields(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("metafield", "metafields") + metafield = sgqlc.types.Field( + "Metafield", + graphql_name="metafield", + args=sgqlc.types.ArgDict( + ( + ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), + ("key", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="key", default=None)), + ) + ), + ) + metafields = sgqlc.types.Field( + sgqlc.types.non_null("MetafieldConnection"), + graphql_name="metafields", + args=sgqlc.types.ArgDict( + ( + ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), + ("keys", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="keys", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + +class HasPublishedTranslations(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("translations",) + translations = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Translation"))), + graphql_name="translations", + args=sgqlc.types.ArgDict( + ( + ("locale", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="locale", default=None)), + ("market_id", sgqlc.types.Arg(ID, graphql_name="marketId", default=None)), + ) + ), + ) + + +class JobResult(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("done", "id") + done = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="done") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class LegacyInteroperability(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("legacy_resource_id",) + legacy_resource_id = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="legacyResourceId") + + +class MarketRegion(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("id", "name") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + + +class Media(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("alt", "id", "media_content_type", "media_errors", "media_warnings", "preview", "status") + alt = sgqlc.types.Field(String, graphql_name="alt") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + media_content_type = sgqlc.types.Field(sgqlc.types.non_null(MediaContentType), graphql_name="mediaContentType") + media_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaError"))), graphql_name="mediaErrors" + ) + media_warnings = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaWarning"))), graphql_name="mediaWarnings" + ) + preview = sgqlc.types.Field("MediaPreviewImage", graphql_name="preview") + status = sgqlc.types.Field(sgqlc.types.non_null(MediaStatus), graphql_name="status") + + +class Navigable(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("default_cursor",) + default_cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="defaultCursor") + + +class Node(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("id",) + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + +class OnlineStorePreviewable(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("online_store_preview_url",) + online_store_preview_url = sgqlc.types.Field(URL, graphql_name="onlineStorePreviewUrl") + + +class Publishable(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ( + "available_publication_count", + "publication_count", + "published_on_current_publication", + "published_on_publication", + "resource_publications", + "resource_publications_v2", + "unpublished_publications", + ) + available_publication_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="availablePublicationCount") + publication_count = sgqlc.types.Field( + sgqlc.types.non_null(Int), + graphql_name="publicationCount", + args=sgqlc.types.ArgDict((("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)),)), + ) + published_on_current_publication = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="publishedOnCurrentPublication") + published_on_publication = sgqlc.types.Field( + sgqlc.types.non_null(Boolean), + graphql_name="publishedOnPublication", + args=sgqlc.types.ArgDict( + (("publication_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="publicationId", default=None)),) + ), + ) + resource_publications = sgqlc.types.Field( + sgqlc.types.non_null("ResourcePublicationConnection"), + graphql_name="resourcePublications", + args=sgqlc.types.ArgDict( + ( + ("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + resource_publications_v2 = sgqlc.types.Field( + sgqlc.types.non_null("ResourcePublicationV2Connection"), + graphql_name="resourcePublicationsV2", + args=sgqlc.types.ArgDict( + ( + ("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)), + ("catalog_type", sgqlc.types.Arg(CatalogType, graphql_name="catalogType", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + unpublished_publications = sgqlc.types.Field( + sgqlc.types.non_null("PublicationConnection"), + graphql_name="unpublishedPublications", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + +class ResourceOperation(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("id", "processed_row_count", "row_count", "status") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + processed_row_count = sgqlc.types.Field(Int, graphql_name="processedRowCount") + row_count = sgqlc.types.Field("RowCount", graphql_name="rowCount") + status = sgqlc.types.Field(sgqlc.types.non_null(ResourceOperationStatus), graphql_name="status") + + +class Sale(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ( + "action_type", + "id", + "line_type", + "quantity", + "taxes", + "total_amount", + "total_discount_amount_after_taxes", + "total_discount_amount_before_taxes", + "total_tax_amount", + ) + action_type = sgqlc.types.Field(sgqlc.types.non_null(SaleActionType), graphql_name="actionType") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + line_type = sgqlc.types.Field(sgqlc.types.non_null(SaleLineType), graphql_name="lineType") + quantity = sgqlc.types.Field(Int, graphql_name="quantity") + taxes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SaleTax"))), graphql_name="taxes") + total_amount = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalAmount") + total_discount_amount_after_taxes = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalDiscountAmountAfterTaxes") + total_discount_amount_before_taxes = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalDiscountAmountBeforeTaxes") + total_tax_amount = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalTaxAmount") + + +class SalesAgreement(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("app", "happened_at", "id", "reason", "sales", "user") + app = sgqlc.types.Field("App", graphql_name="app") + happened_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="happenedAt") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + reason = sgqlc.types.Field(sgqlc.types.non_null(OrderActionType), graphql_name="reason") + sales = sgqlc.types.Field( + sgqlc.types.non_null("SaleConnection"), + graphql_name="sales", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + user = sgqlc.types.Field("StaffMember", graphql_name="user") + + +class SegmentFilter(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("localized_name", "multi_value", "query_name") + localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") + multi_value = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="multiValue") + query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") + + +class SellingPlanPricingPolicyBase(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("adjustment_type", "adjustment_value") + adjustment_type = sgqlc.types.Field(sgqlc.types.non_null(SellingPlanPricingPolicyAdjustmentType), graphql_name="adjustmentType") + adjustment_value = sgqlc.types.Field(sgqlc.types.non_null("SellingPlanPricingPolicyAdjustmentValue"), graphql_name="adjustmentValue") + + +class ShopifyPaymentsChargeStatementDescriptor(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("default", "prefix") + default = sgqlc.types.Field(String, graphql_name="default") + prefix = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="prefix") + + +class ShopifyqlResponse(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("parse_errors", "table_data") + parse_errors = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("ParseError")), graphql_name="parseErrors") + table_data = sgqlc.types.Field("TableData", graphql_name="tableData") + + +class SubscriptionContractBase(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ( + "app", + "app_admin_url", + "currency_code", + "custom_attributes", + "customer", + "customer_payment_method", + "delivery_method", + "delivery_price", + "discounts", + "line_count", + "lines", + "note", + "orders", + "updated_at", + ) + app = sgqlc.types.Field("App", graphql_name="app") + app_admin_url = sgqlc.types.Field(URL, graphql_name="appAdminUrl") + currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") + custom_attributes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Attribute"))), graphql_name="customAttributes" + ) + customer = sgqlc.types.Field("Customer", graphql_name="customer") + customer_payment_method = sgqlc.types.Field( + "CustomerPaymentMethod", + graphql_name="customerPaymentMethod", + args=sgqlc.types.ArgDict((("show_revoked", sgqlc.types.Arg(Boolean, graphql_name="showRevoked", default=False)),)), + ) + delivery_method = sgqlc.types.Field("SubscriptionDeliveryMethod", graphql_name="deliveryMethod") + delivery_price = sgqlc.types.Field(sgqlc.types.non_null("MoneyV2"), graphql_name="deliveryPrice") + discounts = sgqlc.types.Field( + sgqlc.types.non_null("SubscriptionManualDiscountConnection"), + graphql_name="discounts", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + line_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="lineCount") + lines = sgqlc.types.Field( + sgqlc.types.non_null("SubscriptionLineConnection"), + graphql_name="lines", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + note = sgqlc.types.Field(String, graphql_name="note") + orders = sgqlc.types.Field( + sgqlc.types.non_null("OrderConnection"), + graphql_name="orders", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") + + +class Catalog(sgqlc.types.Interface): + __schema__ = shopify_schema + __field_names__ = ("id", "operations", "price_list", "publication", "status", "title") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + operations = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourceOperation))), graphql_name="operations" + ) + price_list = sgqlc.types.Field("PriceList", graphql_name="priceList") + publication = sgqlc.types.Field("Publication", graphql_name="publication") + status = sgqlc.types.Field(sgqlc.types.non_null(CatalogStatus), graphql_name="status") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + +class AbandonmentEmailStateUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("abandonment", "user_errors") + abandonment = sgqlc.types.Field("Abandonment", graphql_name="abandonment") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AbandonmentEmailStateUpdateUserError"))), graphql_name="userErrors" + ) + + +class AbandonmentUpdateActivitiesDeliveryStatusesPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("abandonment", "user_errors") + abandonment = sgqlc.types.Field("Abandonment", graphql_name="abandonment") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AbandonmentUpdateActivitiesDeliveryStatusesUserError"))), + graphql_name="userErrors", + ) + + +class AccessScope(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("description", "handle") + description = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="description") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + + +class AllDiscountItems(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("all_items",) + all_items = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="allItems") + + +class ApiVersion(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("display_name", "handle", "supported") + display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + supported = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supported") + + +class AppConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("App"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class AppCreditConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppCreditEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppCredit"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class AppCreditEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("AppCredit"), graphql_name="node") + + +class AppDiscountType(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("app", "app_bridge", "app_key", "description", "discount_class", "function_id", "target_type", "title") + app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") + app_bridge = sgqlc.types.Field(sgqlc.types.non_null("FunctionsAppBridge"), graphql_name="appBridge") + app_key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="appKey") + description = sgqlc.types.Field(String, graphql_name="description") + discount_class = sgqlc.types.Field(sgqlc.types.non_null(DiscountClass), graphql_name="discountClass") + function_id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="functionId") + target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + +class AppEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="node") + + +class AppFeedback(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("app", "link", "messages") + app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") + link = sgqlc.types.Field("Link", graphql_name="link") + messages = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="messages") + + +class AppInstallationConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppInstallationEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppInstallation"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class AppInstallationEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") @@ -5950,16 +7943,6 @@ class AppPlanV2(sgqlc.types.Type): pricing_details = sgqlc.types.Field(sgqlc.types.non_null("AppPricingDetails"), graphql_name="pricingDetails") -class AppPurchase(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("created_at", "name", "price", "status", "test") - created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - price = sgqlc.types.Field(sgqlc.types.non_null("MoneyV2"), graphql_name="price") - status = sgqlc.types.Field(sgqlc.types.non_null(AppPurchaseStatus), graphql_name="status") - test = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="test") - - class AppPurchaseOneTimeConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -5997,12 +7980,10 @@ class AppRevenueAttributionRecordConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppRevenueAttributionRecordEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppRevenueAttributionRecordEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppRevenueAttributionRecord"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppRevenueAttributionRecord"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -6059,12 +8040,7 @@ class AppSubscriptionCreatePayload(sgqlc.types.Type): class AppSubscriptionDiscount(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "duration_limit_in_intervals", - "price_after_discount", - "remaining_duration_in_intervals", - "value", - ) + __field_names__ = ("duration_limit_in_intervals", "price_after_discount", "remaining_duration_in_intervals", "value") duration_limit_in_intervals = sgqlc.types.Field(Int, graphql_name="durationLimitInIntervals") price_after_discount = sgqlc.types.Field(sgqlc.types.non_null("MoneyV2"), graphql_name="priceAfterDiscount") remaining_duration_in_intervals = sgqlc.types.Field(Int, graphql_name="remainingDurationInIntervals") @@ -6124,8 +8100,7 @@ class AppSubscriptionTrialExtendPayload(sgqlc.types.Type): __field_names__ = ("app_subscription", "user_errors") app_subscription = sgqlc.types.Field("AppSubscription", graphql_name="appSubscription") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppSubscriptionTrialExtendUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppSubscriptionTrialExtendUserError"))), graphql_name="userErrors" ) @@ -6171,8 +8146,7 @@ class AvailableChannelDefinitionsByChannel(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("channel_definitions", "channel_name") channel_definitions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ChannelDefinition"))), - graphql_name="channelDefinitions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ChannelDefinition"))), graphql_name="channelDefinitions" ) channel_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="channelName") @@ -6189,8 +8163,7 @@ class BulkOperationRunMutationPayload(sgqlc.types.Type): __field_names__ = ("bulk_operation", "user_errors") bulk_operation = sgqlc.types.Field("BulkOperation", graphql_name="bulkOperation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BulkMutationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BulkMutationUserError"))), graphql_name="userErrors" ) @@ -6211,10 +8184,19 @@ class BulkProductResourceFeedbackCreatePayload(sgqlc.types.Type): ) +class BundlesFeature(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("eligible_for_bundles", "ineligibility_reason", "sells_bundles") + eligible_for_bundles = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="eligibleForBundles") + ineligibility_reason = sgqlc.types.Field(String, graphql_name="ineligibilityReason") + sells_bundles = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="sellsBundles") + + class BuyerExperienceConfiguration(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("checkout_to_draft", "pay_now_only", "payment_terms_template") + __field_names__ = ("checkout_to_draft", "editable_shipping_address", "pay_now_only", "payment_terms_template") checkout_to_draft = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="checkoutToDraft") + editable_shipping_address = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="editableShippingAddress") pay_now_only = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="payNowOnly") payment_terms_template = sgqlc.types.Field("PaymentTermsTemplate", graphql_name="paymentTermsTemplate") @@ -6223,39 +8205,17 @@ class CalculatedDiscountAllocation(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("allocated_amount_set", "discount_application") allocated_amount_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="allocatedAmountSet") - discount_application = sgqlc.types.Field(sgqlc.types.non_null("CalculatedDiscountApplication"), graphql_name="discountApplication") - - -class CalculatedDiscountApplication(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ( - "allocation_method", - "applied_to", - "description", - "id", - "target_selection", - "target_type", - "value", - ) - allocation_method = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationAllocationMethod), graphql_name="allocationMethod") - applied_to = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationLevel), graphql_name="appliedTo") - description = sgqlc.types.Field(String, graphql_name="description") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - target_selection = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetSelection), graphql_name="targetSelection") - target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") - value = sgqlc.types.Field(sgqlc.types.non_null("PricingValue"), graphql_name="value") + discount_application = sgqlc.types.Field(sgqlc.types.non_null(CalculatedDiscountApplication), graphql_name="discountApplication") class CalculatedDiscountApplicationConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CalculatedDiscountApplicationEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CalculatedDiscountApplicationEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CalculatedDiscountApplication))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CalculatedDiscountApplication))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -6297,8 +8257,7 @@ class CalculatedDraftOrder(sgqlc.types.Type): ) applied_discount = sgqlc.types.Field("DraftOrderAppliedDiscount", graphql_name="appliedDiscount") available_shipping_rates = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShippingRate"))), - graphql_name="availableShippingRates", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShippingRate"))), graphql_name="availableShippingRates" ) billing_address_matches_shipping_address = sgqlc.types.Field( sgqlc.types.non_null(Boolean), graphql_name="billingAddressMatchesShippingAddress" @@ -6306,8 +8265,7 @@ class CalculatedDraftOrder(sgqlc.types.Type): currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") customer = sgqlc.types.Field("Customer", graphql_name="customer") line_items = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CalculatedDraftOrderLineItem"))), - graphql_name="lineItems", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CalculatedDraftOrderLineItem"))), graphql_name="lineItems" ) line_items_subtotal_price = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="lineItemsSubtotalPrice") market_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="marketName") @@ -6367,8 +8325,7 @@ class CalculatedDraftOrderLineItem(sgqlc.types.Type): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" ) custom_attributes_v2 = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TypedAttribute"))), - graphql_name="customAttributesV2", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TypedAttribute"))), graphql_name="customAttributesV2" ) discounted_total = sgqlc.types.Field(sgqlc.types.non_null("MoneyV2"), graphql_name="discountedTotal") discounted_total_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="discountedTotalSet") @@ -6439,8 +8396,7 @@ class CalculatedLineItem(sgqlc.types.Type): restocking = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="restocking") sku = sgqlc.types.Field(String, graphql_name="sku") staged_changes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderStagedChange"))), - graphql_name="stagedChanges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderStagedChange"))), graphql_name="stagedChanges" ) title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") uneditable_subtotal_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="uneditableSubtotalSet") @@ -6465,6 +8421,115 @@ class CalculatedLineItemEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null(CalculatedLineItem), graphql_name="node") +class CardPaymentDetails(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ( + "avs_result_code", + "bin", + "company", + "cvv_result_code", + "expiration_month", + "expiration_year", + "name", + "number", + "wallet", + ) + avs_result_code = sgqlc.types.Field(String, graphql_name="avsResultCode") + bin = sgqlc.types.Field(String, graphql_name="bin") + company = sgqlc.types.Field(String, graphql_name="company") + cvv_result_code = sgqlc.types.Field(String, graphql_name="cvvResultCode") + expiration_month = sgqlc.types.Field(Int, graphql_name="expirationMonth") + expiration_year = sgqlc.types.Field(Int, graphql_name="expirationYear") + name = sgqlc.types.Field(String, graphql_name="name") + number = sgqlc.types.Field(String, graphql_name="number") + wallet = sgqlc.types.Field(DigitalWallet, graphql_name="wallet") + + +class CartTransformConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CartTransformEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CartTransform"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class CartTransformCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cart_transform", "user_errors") + cart_transform = sgqlc.types.Field("CartTransform", graphql_name="cartTransform") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CartTransformCreateUserError"))), graphql_name="userErrors" + ) + + +class CartTransformDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CartTransformDeleteUserError"))), graphql_name="userErrors" + ) + + +class CartTransformEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("CartTransform"), graphql_name="node") + + +class CatalogConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info", "total_count") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CatalogEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Catalog))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + total_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="totalCount") + + +class CatalogContextUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("catalog", "user_errors") + catalog = sgqlc.types.Field(Catalog, graphql_name="catalog") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CatalogUserError"))), graphql_name="userErrors" + ) + + +class CatalogCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("catalog", "user_errors") + catalog = sgqlc.types.Field(Catalog, graphql_name="catalog") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CatalogUserError"))), graphql_name="userErrors" + ) + + +class CatalogDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CatalogUserError"))), graphql_name="userErrors" + ) + + +class CatalogEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(Catalog), graphql_name="node") + + +class CatalogUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("catalog", "user_errors") + catalog = sgqlc.types.Field(Catalog, graphql_name="catalog") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CatalogUserError"))), graphql_name="userErrors" + ) + + class ChannelConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -6507,8 +8572,7 @@ class CollectionAddProductsV2Payload(sgqlc.types.Type): __field_names__ = ("job", "user_errors") job = sgqlc.types.Field("Job", graphql_name="job") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CollectionAddProductsV2UserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CollectionAddProductsV2UserError"))), graphql_name="userErrors" ) @@ -6555,8 +8619,7 @@ class CollectionPublicationConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CollectionPublicationEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CollectionPublicationEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionPublication))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -6605,15 +8668,21 @@ class CollectionRule(sgqlc.types.Type): class CollectionRuleConditions(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("allowed_relations", "default_relation", "rule_type") + __field_names__ = ("allowed_relations", "default_relation", "rule_object", "rule_type") allowed_relations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionRuleRelation))), - graphql_name="allowedRelations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionRuleRelation))), graphql_name="allowedRelations" ) default_relation = sgqlc.types.Field(sgqlc.types.non_null(CollectionRuleRelation), graphql_name="defaultRelation") + rule_object = sgqlc.types.Field("CollectionRuleConditionsRuleObject", graphql_name="ruleObject") rule_type = sgqlc.types.Field(sgqlc.types.non_null(CollectionRuleColumn), graphql_name="ruleType") +class CollectionRuleMetafieldCondition(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("metafield_definition",) + metafield_definition = sgqlc.types.Field(sgqlc.types.non_null("MetafieldDefinition"), graphql_name="metafieldDefinition") + + class CollectionRuleProductCategoryCondition(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("value",) @@ -6660,20 +8729,12 @@ class CommentEventAttachment(sgqlc.types.Type): url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") -class CommentEventSubject(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("has_timeline_comment", "id") - has_timeline_comment = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="hasTimelineComment") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - - class CompaniesDeletePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("deleted_company_ids", "user_errors") deleted_company_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedCompanyIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6682,8 +8743,7 @@ class CompanyAddressDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_address_id", "user_errors") deleted_address_id = sgqlc.types.Field(ID, graphql_name="deletedAddressId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6692,8 +8752,7 @@ class CompanyAssignCustomerAsContactPayload(sgqlc.types.Type): __field_names__ = ("company_contact", "user_errors") company_contact = sgqlc.types.Field("CompanyContact", graphql_name="companyContact") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6702,8 +8761,7 @@ class CompanyAssignMainContactPayload(sgqlc.types.Type): __field_names__ = ("company", "user_errors") company = sgqlc.types.Field("Company", graphql_name="company") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6720,8 +8778,7 @@ class CompanyContactAssignRolePayload(sgqlc.types.Type): __field_names__ = ("company_contact_role_assignment", "user_errors") company_contact_role_assignment = sgqlc.types.Field("CompanyContactRoleAssignment", graphql_name="companyContactRoleAssignment") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6732,8 +8789,7 @@ class CompanyContactAssignRolesPayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignment")), graphql_name="roleAssignments" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6750,8 +8806,7 @@ class CompanyContactCreatePayload(sgqlc.types.Type): __field_names__ = ("company_contact", "user_errors") company_contact = sgqlc.types.Field("CompanyContact", graphql_name="companyContact") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6760,8 +8815,7 @@ class CompanyContactDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_company_contact_id", "user_errors") deleted_company_contact_id = sgqlc.types.Field(ID, graphql_name="deletedCompanyContactId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6772,13 +8826,21 @@ class CompanyContactEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("CompanyContact"), graphql_name="node") +class CompanyContactRemoveFromCompanyPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("removed_company_contact_id", "user_errors") + removed_company_contact_id = sgqlc.types.Field(ID, graphql_name="removedCompanyContactId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" + ) + + class CompanyContactRevokeRolePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("revoked_company_contact_role_assignment_id", "user_errors") revoked_company_contact_role_assignment_id = sgqlc.types.Field(ID, graphql_name="revokedCompanyContactRoleAssignmentId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6787,8 +8849,7 @@ class CompanyContactRevokeRolesPayload(sgqlc.types.Type): __field_names__ = ("revoked_role_assignment_ids", "user_errors") revoked_role_assignment_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="revokedRoleAssignmentIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6796,12 +8857,10 @@ class CompanyContactRoleAssignmentConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignmentEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignmentEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignment"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignment"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -6830,13 +8889,21 @@ class CompanyContactRoleEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("CompanyContactRole"), graphql_name="node") +class CompanyContactSendWelcomeEmailPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("company_contact", "user_errors") + company_contact = sgqlc.types.Field("CompanyContact", graphql_name="companyContact") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" + ) + + class CompanyContactUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("company_contact", "user_errors") company_contact = sgqlc.types.Field("CompanyContact", graphql_name="companyContact") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6845,8 +8912,7 @@ class CompanyContactsDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_company_contact_ids", "user_errors") deleted_company_contact_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedCompanyContactIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6855,8 +8921,7 @@ class CompanyCreatePayload(sgqlc.types.Type): __field_names__ = ("company", "user_errors") company = sgqlc.types.Field("Company", graphql_name="company") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6865,8 +8930,7 @@ class CompanyDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_company_id", "user_errors") deleted_company_id = sgqlc.types.Field(ID, graphql_name="deletedCompanyId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6882,8 +8946,7 @@ class CompanyLocationAssignAddressPayload(sgqlc.types.Type): __field_names__ = ("addresses", "user_errors") addresses = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("CompanyAddress")), graphql_name="addresses") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6894,8 +8957,7 @@ class CompanyLocationAssignRolesPayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null("CompanyContactRoleAssignment")), graphql_name="roleAssignments" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6904,8 +8966,7 @@ class CompanyLocationAssignTaxExemptionsPayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6922,8 +8983,7 @@ class CompanyLocationCreatePayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6932,8 +8992,7 @@ class CompanyLocationCreateTaxRegistrationPayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6942,8 +9001,7 @@ class CompanyLocationDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_company_location_id", "user_errors") deleted_company_location_id = sgqlc.types.Field(ID, graphql_name="deletedCompanyLocationId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6959,8 +9017,7 @@ class CompanyLocationRevokeRolesPayload(sgqlc.types.Type): __field_names__ = ("revoked_role_assignment_ids", "user_errors") revoked_role_assignment_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="revokedRoleAssignmentIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6969,8 +9026,7 @@ class CompanyLocationRevokeTaxExemptionsPayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6979,8 +9035,7 @@ class CompanyLocationRevokeTaxRegistrationPayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -6989,8 +9044,7 @@ class CompanyLocationUpdatePayload(sgqlc.types.Type): __field_names__ = ("company_location", "user_errors") company_location = sgqlc.types.Field("CompanyLocation", graphql_name="companyLocation") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -7001,8 +9055,7 @@ class CompanyLocationsDeletePayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedCompanyLocationIds" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -7011,8 +9064,7 @@ class CompanyRevokeMainContactPayload(sgqlc.types.Type): __field_names__ = ("company", "user_errors") company = sgqlc.types.Field("Company", graphql_name="company") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -7021,8 +9073,7 @@ class CompanyUpdatePayload(sgqlc.types.Type): __field_names__ = ("company", "user_errors") company = sgqlc.types.Field("Company", graphql_name="company") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BusinessCustomerUserError"))), graphql_name="userErrors" ) @@ -7046,12 +9097,10 @@ class CountryHarmonizedSystemCodeConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CountryHarmonizedSystemCodeEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CountryHarmonizedSystemCodeEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CountryHarmonizedSystemCode))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CountryHarmonizedSystemCode))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -7065,12 +9114,7 @@ class CountryHarmonizedSystemCodeEdge(sgqlc.types.Type): class CurrencyFormats(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "money_format", - "money_in_emails_format", - "money_with_currency_format", - "money_with_currency_in_emails_format", - ) + __field_names__ = ("money_format", "money_in_emails_format", "money_with_currency_format", "money_with_currency_in_emails_format") money_format = sgqlc.types.Field(sgqlc.types.non_null(FormattedString), graphql_name="moneyFormat") money_in_emails_format = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="moneyInEmailsFormat") money_with_currency_format = sgqlc.types.Field(sgqlc.types.non_null(FormattedString), graphql_name="moneyWithCurrencyFormat") @@ -7155,11 +9199,13 @@ class CustomerCreditCard(sgqlc.types.Type): class CustomerCreditCardBillingAddress(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("address1", "city", "country", "country_code", "province", "province_code", "zip") + __field_names__ = ("address1", "city", "country", "country_code", "first_name", "last_name", "province", "province_code", "zip") address1 = sgqlc.types.Field(String, graphql_name="address1") city = sgqlc.types.Field(String, graphql_name="city") country = sgqlc.types.Field(String, graphql_name="country") country_code = sgqlc.types.Field(CountryCode, graphql_name="countryCode") + first_name = sgqlc.types.Field(String, graphql_name="firstName") + last_name = sgqlc.types.Field(String, graphql_name="lastName") province = sgqlc.types.Field(String, graphql_name="province") province_code = sgqlc.types.Field(String, graphql_name="provinceCode") zip = sgqlc.types.Field(String, graphql_name="zip") @@ -7182,13 +9228,7 @@ class CustomerEdge(sgqlc.types.Type): class CustomerEmailAddress(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "email_address", - "marketing_state", - "marketing_unsubscribe_url", - "open_tracking_level", - "open_tracking_url", - ) + __field_names__ = ("email_address", "marketing_state", "marketing_unsubscribe_url", "open_tracking_level", "open_tracking_url") email_address = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="emailAddress") marketing_state = sgqlc.types.Field(sgqlc.types.non_null(CustomerEmailAddressMarketingState), graphql_name="marketingState") marketing_unsubscribe_url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="marketingUnsubscribeUrl") @@ -7228,27 +9268,172 @@ class CustomerJourney(sgqlc.types.Type): days_to_conversion = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="daysToConversion") first_visit = sgqlc.types.Field(sgqlc.types.non_null("CustomerVisit"), graphql_name="firstVisit") last_visit = sgqlc.types.Field("CustomerVisit", graphql_name="lastVisit") - moments = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerMoment"))), graphql_name="moments") + moments = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CustomerMoment))), graphql_name="moments") class CustomerJourneySummary(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("customer_order_index", "days_to_conversion", "first_visit", "last_visit", "moments", "moments_count", "ready") + customer_order_index = sgqlc.types.Field(Int, graphql_name="customerOrderIndex") + days_to_conversion = sgqlc.types.Field(Int, graphql_name="daysToConversion") + first_visit = sgqlc.types.Field("CustomerVisit", graphql_name="firstVisit") + last_visit = sgqlc.types.Field("CustomerVisit", graphql_name="lastVisit") + moments = sgqlc.types.Field( + "CustomerMomentConnection", + graphql_name="moments", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + moments_count = sgqlc.types.Field(Int, graphql_name="momentsCount") + ready = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="ready") + + +class CustomerMergeError(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("error_fields", "message") + error_fields = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CustomerMergeErrorFieldType))), graphql_name="errorFields" + ) + message = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="message") + + +class CustomerMergePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("job", "resulting_customer_id", "user_errors") + job = sgqlc.types.Field("Job", graphql_name="job") + resulting_customer_id = sgqlc.types.Field(ID, graphql_name="resultingCustomerId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerMergeUserError"))), graphql_name="userErrors" + ) + + +class CustomerMergePreview(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("alternate_fields", "blocking_fields", "customer_merge_errors", "default_fields", "resulting_customer_id") + alternate_fields = sgqlc.types.Field("CustomerMergePreviewAlternateFields", graphql_name="alternateFields") + blocking_fields = sgqlc.types.Field("CustomerMergePreviewBlockingFields", graphql_name="blockingFields") + customer_merge_errors = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(CustomerMergeError)), graphql_name="customerMergeErrors" + ) + default_fields = sgqlc.types.Field("CustomerMergePreviewDefaultFields", graphql_name="defaultFields") + resulting_customer_id = sgqlc.types.Field(ID, graphql_name="resultingCustomerId") + + +class CustomerMergePreviewAlternateFields(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("default_address", "email", "first_name", "last_name", "phone_number") + default_address = sgqlc.types.Field("MailingAddress", graphql_name="defaultAddress") + email = sgqlc.types.Field(CustomerEmailAddress, graphql_name="email") + first_name = sgqlc.types.Field(String, graphql_name="firstName") + last_name = sgqlc.types.Field(String, graphql_name="lastName") + phone_number = sgqlc.types.Field("CustomerPhoneNumber", graphql_name="phoneNumber") + + +class CustomerMergePreviewBlockingFields(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("note", "tags") + note = sgqlc.types.Field(String, graphql_name="note") + tags = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags") + + +class CustomerMergePreviewDefaultFields(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( - "customer_order_index", - "days_to_conversion", - "first_visit", - "last_visit", - "moments", - "moments_count", - "ready", + "addresses", + "default_address", + "discount_node_count", + "discount_nodes", + "display_name", + "draft_order_count", + "draft_orders", + "email", + "first_name", + "gift_card_count", + "gift_cards", + "last_name", + "metafield_count", + "note", + "order_count", + "orders", + "phone_number", + "tags", + ) + addresses = sgqlc.types.Field( + sgqlc.types.non_null("MailingAddressConnection"), + graphql_name="addresses", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + default_address = sgqlc.types.Field("MailingAddress", graphql_name="defaultAddress") + discount_node_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="discountNodeCount") + discount_nodes = sgqlc.types.Field( + sgqlc.types.non_null("DiscountNodeConnection"), + graphql_name="discountNodes", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(DiscountSortKeys, graphql_name="sortKey", default="CREATED_AT")), + ) + ), + ) + display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") + draft_order_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="draftOrderCount") + draft_orders = sgqlc.types.Field( + sgqlc.types.non_null("DraftOrderConnection"), + graphql_name="draftOrders", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(DraftOrderSortKeys, graphql_name="sortKey", default="UPDATED_AT")), + ) + ), + ) + email = sgqlc.types.Field(CustomerEmailAddress, graphql_name="email") + first_name = sgqlc.types.Field(String, graphql_name="firstName") + gift_card_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="giftCardCount") + gift_cards = sgqlc.types.Field( + sgqlc.types.non_null("GiftCardConnection"), + graphql_name="giftCards", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(GiftCardSortKeys, graphql_name="sortKey", default="CREATED_AT")), + ) + ), ) - customer_order_index = sgqlc.types.Field(Int, graphql_name="customerOrderIndex") - days_to_conversion = sgqlc.types.Field(Int, graphql_name="daysToConversion") - first_visit = sgqlc.types.Field("CustomerVisit", graphql_name="firstVisit") - last_visit = sgqlc.types.Field("CustomerVisit", graphql_name="lastVisit") - moments = sgqlc.types.Field( - "CustomerMomentConnection", - graphql_name="moments", + last_name = sgqlc.types.Field(String, graphql_name="lastName") + metafield_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="metafieldCount") + note = sgqlc.types.Field(String, graphql_name="note") + order_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="orderCount") + orders = sgqlc.types.Field( + sgqlc.types.non_null("OrderConnection"), + graphql_name="orders", args=sgqlc.types.ArgDict( ( ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -7256,17 +9441,34 @@ class CustomerJourneySummary(sgqlc.types.Type): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(OrderSortKeys, graphql_name="sortKey", default="PROCESSED_AT")), ) ), ) - moments_count = sgqlc.types.Field(Int, graphql_name="momentsCount") - ready = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="ready") + phone_number = sgqlc.types.Field("CustomerPhoneNumber", graphql_name="phoneNumber") + tags = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags") -class CustomerMoment(sgqlc.types.Interface): +class CustomerMergeRequest(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("occurred_at",) - occurred_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="occurredAt") + __field_names__ = ("customer_merge_errors", "job_id", "resulting_customer_id", "status") + customer_merge_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CustomerMergeError))), graphql_name="customerMergeErrors" + ) + job_id = sgqlc.types.Field(ID, graphql_name="jobId") + resulting_customer_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="resultingCustomerId") + status = sgqlc.types.Field(sgqlc.types.non_null(CustomerMergeRequestStatus), graphql_name="status") + + +class CustomerMergeable(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("error_fields", "is_mergeable", "merge_in_progress", "reason") + error_fields = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CustomerMergeErrorFieldType))), graphql_name="errorFields" + ) + is_mergeable = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isMergeable") + merge_in_progress = sgqlc.types.Field(CustomerMergeRequest, graphql_name="mergeInProgress") + reason = sgqlc.types.Field(String, graphql_name="reason") class CustomerMomentConnection(sgqlc.types.relay.Connection): @@ -7301,8 +9503,7 @@ class CustomerPaymentMethodConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethod"))), graphql_name="nodes" @@ -7310,6 +9511,16 @@ class CustomerPaymentMethodConnection(sgqlc.types.relay.Connection): page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") +class CustomerPaymentMethodCreateFromDuplicationDataPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("customer_payment_method", "user_errors") + customer_payment_method = sgqlc.types.Field("CustomerPaymentMethod", graphql_name="customerPaymentMethod") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodCreateFromDuplicationDataUserError"))), + graphql_name="userErrors", + ) + + class CustomerPaymentMethodCreditCardCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("customer_payment_method", "user_errors") @@ -7331,6 +9542,16 @@ class CustomerPaymentMethodEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("CustomerPaymentMethod"), graphql_name="node") +class CustomerPaymentMethodGetDuplicationDataPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("encrypted_duplication_data", "user_errors") + encrypted_duplication_data = sgqlc.types.Field(String, graphql_name="encryptedDuplicationData") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodGetDuplicationDataUserError"))), + graphql_name="userErrors", + ) + + class CustomerPaymentMethodGetUpdateUrlPayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("update_payment_method_url", "user_errors") @@ -7346,8 +9567,7 @@ class CustomerPaymentMethodPaypalBillingAgreementCreatePayload(sgqlc.types.Type) __field_names__ = ("customer_payment_method", "user_errors") customer_payment_method = sgqlc.types.Field("CustomerPaymentMethod", graphql_name="customerPaymentMethod") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), graphql_name="userErrors" ) @@ -7356,8 +9576,7 @@ class CustomerPaymentMethodPaypalBillingAgreementUpdatePayload(sgqlc.types.Type) __field_names__ = ("customer_payment_method", "user_errors") customer_payment_method = sgqlc.types.Field("CustomerPaymentMethod", graphql_name="customerPaymentMethod") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), graphql_name="userErrors" ) @@ -7366,8 +9585,7 @@ class CustomerPaymentMethodRemoteCreatePayload(sgqlc.types.Type): __field_names__ = ("customer_payment_method", "user_errors") customer_payment_method = sgqlc.types.Field("CustomerPaymentMethod", graphql_name="customerPaymentMethod") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodRemoteUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodRemoteUserError"))), graphql_name="userErrors" ) @@ -7376,8 +9594,7 @@ class CustomerPaymentMethodRemoteCreditCardCreatePayload(sgqlc.types.Type): __field_names__ = ("customer_payment_method", "user_errors") customer_payment_method = sgqlc.types.Field("CustomerPaymentMethod", graphql_name="customerPaymentMethod") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerPaymentMethodUserError"))), graphql_name="userErrors" ) @@ -7425,55 +9642,37 @@ class CustomerReplaceTaxExemptionsPayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") -class CustomerSegmentMember(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ( - "amount_spent", - "default_address", - "default_email_address", - "default_phone_number", - "display_name", - "first_name", - "id", - "last_name", - "last_order_id", - "note", - "number_of_orders", - ) - amount_spent = sgqlc.types.Field("MoneyV2", graphql_name="amountSpent") - default_address = sgqlc.types.Field("MailingAddress", graphql_name="defaultAddress") - default_email_address = sgqlc.types.Field(CustomerEmailAddress, graphql_name="defaultEmailAddress") - default_phone_number = sgqlc.types.Field(CustomerPhoneNumber, graphql_name="defaultPhoneNumber") - display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") - first_name = sgqlc.types.Field(String, graphql_name="firstName") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - last_name = sgqlc.types.Field(String, graphql_name="lastName") - last_order_id = sgqlc.types.Field(ID, graphql_name="lastOrderId") - note = sgqlc.types.Field(String, graphql_name="note") - number_of_orders = sgqlc.types.Field(UnsignedInt64, graphql_name="numberOfOrders") - - class CustomerSegmentMemberConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema - __field_names__ = ("edges", "page_info", "statistics") + __field_names__ = ("edges", "page_info", "statistics", "total_count") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerSegmentMemberEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerSegmentMemberEdge"))), graphql_name="edges" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") statistics = sgqlc.types.Field(sgqlc.types.non_null("SegmentStatistics"), graphql_name="statistics") + total_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="totalCount") class CustomerSegmentMemberEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(CustomerSegmentMember), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null("CustomerSegmentMember"), graphql_name="node") + + +class CustomerSegmentMembersQueryCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("customer_segment_members_query", "user_errors") + customer_segment_members_query = sgqlc.types.Field("CustomerSegmentMembersQuery", graphql_name="customerSegmentMembersQuery") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerSegmentMembersQueryUserError"))), graphql_name="userErrors" + ) class CustomerShopPayAgreement(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( + "billing_address", "expires_soon", "expiry_month", "expiry_year", @@ -7483,6 +9682,7 @@ class CustomerShopPayAgreement(sgqlc.types.Type): "masked_number", "name", ) + billing_address = sgqlc.types.Field(CustomerCreditCardBillingAddress, graphql_name="billingAddress") expires_soon = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="expiresSoon") expiry_month = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="expiryMonth") expiry_year = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="expiryYear") @@ -7507,8 +9707,7 @@ class CustomerSmsMarketingConsentUpdatePayload(sgqlc.types.Type): __field_names__ = ("customer", "user_errors") customer = sgqlc.types.Field("Customer", graphql_name="customer") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerSmsMarketingConsentError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerSmsMarketingConsentError"))), graphql_name="userErrors" ) @@ -7532,6 +9731,33 @@ class CustomerUpdatePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class CustomerVisitProductInfo(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("product", "quantity", "variant") + product = sgqlc.types.Field("Product", graphql_name="product") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + variant = sgqlc.types.Field("ProductVariant", graphql_name="variant") + + +class CustomerVisitProductInfoConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("CustomerVisitProductInfoEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CustomerVisitProductInfo))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class CustomerVisitProductInfoEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(CustomerVisitProductInfo), graphql_name="node") + + class DelegateAccessToken(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("access_scopes", "access_token", "created_at") @@ -7546,8 +9772,17 @@ class DelegateAccessTokenCreatePayload(sgqlc.types.Type): delegate_access_token = sgqlc.types.Field(DelegateAccessToken, graphql_name="delegateAccessToken") shop = sgqlc.types.Field(sgqlc.types.non_null("Shop"), graphql_name="shop") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DelegateAccessTokenCreateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DelegateAccessTokenCreateUserError"))), graphql_name="userErrors" + ) + + +class DelegateAccessTokenDestroyPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("shop", "status", "user_errors") + shop = sgqlc.types.Field(sgqlc.types.non_null("Shop"), graphql_name="shop") + status = sgqlc.types.Field(Boolean, graphql_name="status") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DelegateAccessTokenDestroyUserError"))), graphql_name="userErrors" ) @@ -7581,6 +9816,13 @@ class DeliveryAvailableService(sgqlc.types.Type): name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") +class DeliveryBrandedPromise(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("handle", "name") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + + class DeliveryCarrierServiceAndLocations(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("carrier_service", "locations") @@ -7611,6 +9853,61 @@ class DeliveryCountryCodesOrRestOfWorld(sgqlc.types.Type): rest_of_world = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="restOfWorld") +class DeliveryCustomizationActivationPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("ids", "user_errors") + ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="ids") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomizationError"))), graphql_name="userErrors" + ) + + +class DeliveryCustomizationConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomizationEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomization"))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class DeliveryCustomizationCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("delivery_customization", "user_errors") + delivery_customization = sgqlc.types.Field("DeliveryCustomization", graphql_name="deliveryCustomization") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomizationError"))), graphql_name="userErrors" + ) + + +class DeliveryCustomizationDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomizationError"))), graphql_name="userErrors" + ) + + +class DeliveryCustomizationEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("DeliveryCustomization"), graphql_name="node") + + +class DeliveryCustomizationUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("delivery_customization", "user_errors") + delivery_customization = sgqlc.types.Field("DeliveryCustomization", graphql_name="deliveryCustomization") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryCustomizationError"))), graphql_name="userErrors" + ) + + class DeliveryLegacyModeBlocked(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("blocked", "reasons") @@ -7618,6 +9915,13 @@ class DeliveryLegacyModeBlocked(sgqlc.types.Type): reasons = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryLegacyModeBlockedReason)), graphql_name="reasons") +class DeliveryLocalPickupSettings(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("instructions", "pickup_time") + instructions = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="instructions") + pickup_time = sgqlc.types.Field(sgqlc.types.non_null(DeliveryLocalPickupTime), graphql_name="pickupTime") + + class DeliveryLocationGroupZone(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("method_definition_counts", "method_definitions", "zone") @@ -7647,8 +9951,7 @@ class DeliveryLocationGroupZoneConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryLocationGroupZoneEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryLocationGroupZoneEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryLocationGroupZone))), graphql_name="nodes" @@ -7667,12 +9970,10 @@ class DeliveryMethodDefinitionConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinitionEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinition"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryMethodDefinition"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -7741,8 +10042,7 @@ class DeliveryProfileLocationGroup(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("countries_in_any_zone", "location_group", "location_group_zones") countries_in_any_zone = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryCountryAndZone))), - graphql_name="countriesInAnyZone", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryCountryAndZone))), graphql_name="countriesInAnyZone" ) location_group = sgqlc.types.Field(sgqlc.types.non_null("DeliveryLocationGroup"), graphql_name="locationGroup") location_group_zones = sgqlc.types.Field( @@ -7784,7 +10084,7 @@ class DiscountAllocation(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("allocated_amount_set", "discount_application") allocated_amount_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="allocatedAmountSet") - discount_application = sgqlc.types.Field(sgqlc.types.non_null("DiscountApplication"), graphql_name="discountApplication") + discount_application = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplication), graphql_name="discountApplication") class DiscountAmount(sgqlc.types.Type): @@ -7794,16 +10094,6 @@ class DiscountAmount(sgqlc.types.Type): applies_on_each_item = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="appliesOnEachItem") -class DiscountApplication(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("allocation_method", "index", "target_selection", "target_type", "value") - allocation_method = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationAllocationMethod), graphql_name="allocationMethod") - index = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="index") - target_selection = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetSelection), graphql_name="targetSelection") - target_type = sgqlc.types.Field(sgqlc.types.non_null(DiscountApplicationTargetType), graphql_name="targetType") - value = sgqlc.types.Field(sgqlc.types.non_null("PricingValue"), graphql_name="value") - - class DiscountApplicationConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -7834,7 +10124,9 @@ class DiscountAutomaticApp(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( "app_discount_type", + "async_usage_count", "combines_with", + "created_at", "discount_class", "discount_id", "ends_at", @@ -7842,9 +10134,12 @@ class DiscountAutomaticApp(sgqlc.types.Type): "starts_at", "status", "title", + "updated_at", ) app_discount_type = sgqlc.types.Field(sgqlc.types.non_null(AppDiscountType), graphql_name="appDiscountType") + async_usage_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="asyncUsageCount") combines_with = sgqlc.types.Field(sgqlc.types.non_null("DiscountCombinesWith"), graphql_name="combinesWith") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") discount_class = sgqlc.types.Field(sgqlc.types.non_null(DiscountClass), graphql_name="discountClass") discount_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="discountId") ends_at = sgqlc.types.Field(DateTime, graphql_name="endsAt") @@ -7852,6 +10147,7 @@ class DiscountAutomaticApp(sgqlc.types.Type): starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") status = sgqlc.types.Field(sgqlc.types.non_null(DiscountStatus), graphql_name="status") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") class DiscountAutomaticAppCreatePayload(sgqlc.types.Type): @@ -7887,6 +10183,7 @@ class DiscountAutomaticBasic(sgqlc.types.Type): "status", "summary", "title", + "updated_at", ) async_usage_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="asyncUsageCount") combines_with = sgqlc.types.Field(sgqlc.types.non_null("DiscountCombinesWith"), graphql_name="combinesWith") @@ -7900,6 +10197,7 @@ class DiscountAutomaticBasic(sgqlc.types.Type): status = sgqlc.types.Field(sgqlc.types.non_null(DiscountStatus), graphql_name="status") summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") class DiscountAutomaticBasicCreatePayload(sgqlc.types.Type): @@ -7986,8 +10284,7 @@ class DiscountAutomaticNodeConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountAutomaticNodeEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountAutomaticNodeEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountAutomaticNode"))), graphql_name="nodes" @@ -8033,6 +10330,7 @@ class DiscountCodeApp(sgqlc.types.Type): "status", "title", "total_sales", + "updated_at", "usage_limit", ) app_discount_type = sgqlc.types.Field(sgqlc.types.non_null(AppDiscountType), graphql_name="appDiscountType") @@ -8065,13 +10363,13 @@ class DiscountCodeApp(sgqlc.types.Type): has_timeline_comment = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="hasTimelineComment") recurring_cycle_limit = sgqlc.types.Field(Int, graphql_name="recurringCycleLimit") shareable_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), - graphql_name="shareableUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), graphql_name="shareableUrls" ) starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") status = sgqlc.types.Field(sgqlc.types.non_null(DiscountStatus), graphql_name="status") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") total_sales = sgqlc.types.Field("MoneyV2", graphql_name="totalSales") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") usage_limit = sgqlc.types.Field(Int, graphql_name="usageLimit") @@ -8116,6 +10414,7 @@ class DiscountCodeBasic(sgqlc.types.Type): "summary", "title", "total_sales", + "updated_at", "usage_limit", ) applies_once_per_customer = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="appliesOncePerCustomer") @@ -8147,8 +10446,7 @@ class DiscountCodeBasic(sgqlc.types.Type): minimum_requirement = sgqlc.types.Field("DiscountMinimumRequirement", graphql_name="minimumRequirement") recurring_cycle_limit = sgqlc.types.Field(Int, graphql_name="recurringCycleLimit") shareable_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), - graphql_name="shareableUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), graphql_name="shareableUrls" ) short_summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="shortSummary") starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") @@ -8156,6 +10454,7 @@ class DiscountCodeBasic(sgqlc.types.Type): summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") total_sales = sgqlc.types.Field("MoneyV2", graphql_name="totalSales") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") usage_limit = sgqlc.types.Field(Int, graphql_name="usageLimit") @@ -8225,6 +10524,7 @@ class DiscountCodeBxgy(sgqlc.types.Type): "summary", "title", "total_sales", + "updated_at", "usage_limit", "uses_per_order_limit", ) @@ -8256,14 +10556,14 @@ class DiscountCodeBxgy(sgqlc.types.Type): ends_at = sgqlc.types.Field(DateTime, graphql_name="endsAt") has_timeline_comment = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="hasTimelineComment") shareable_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), - graphql_name="shareableUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), graphql_name="shareableUrls" ) starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") status = sgqlc.types.Field(sgqlc.types.non_null(DiscountStatus), graphql_name="status") summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") total_sales = sgqlc.types.Field("MoneyV2", graphql_name="totalSales") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") usage_limit = sgqlc.types.Field(Int, graphql_name="usageLimit") uses_per_order_limit = sgqlc.types.Field(Int, graphql_name="usesPerOrderLimit") @@ -8330,6 +10630,7 @@ class DiscountCodeFreeShipping(sgqlc.types.Type): "summary", "title", "total_sales", + "updated_at", "usage_limit", ) applies_on_one_time_purchase = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="appliesOnOneTimePurchase") @@ -8366,8 +10667,7 @@ class DiscountCodeFreeShipping(sgqlc.types.Type): minimum_requirement = sgqlc.types.Field("DiscountMinimumRequirement", graphql_name="minimumRequirement") recurring_cycle_limit = sgqlc.types.Field(Int, graphql_name="recurringCycleLimit") shareable_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), - graphql_name="shareableUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountShareableUrl"))), graphql_name="shareableUrls" ) short_summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="shortSummary") starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") @@ -8375,6 +10675,7 @@ class DiscountCodeFreeShipping(sgqlc.types.Type): summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") total_sales = sgqlc.types.Field("MoneyV2", graphql_name="totalSales") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") usage_limit = sgqlc.types.Field(Int, graphql_name="usageLimit") @@ -8606,12 +10907,10 @@ class DiscountRedeemCodeBulkCreationCodeConnection(sgqlc.types.relay.Connection) __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountRedeemCodeBulkCreationCodeEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DiscountRedeemCodeBulkCreationCodeEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountRedeemCodeBulkCreationCode))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountRedeemCodeBulkCreationCode))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -8649,20 +10948,12 @@ class DiscountShareableUrl(sgqlc.types.Type): url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") -class DisplayableError(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("field", "message") - field = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="field") - message = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="message") - - class DisputeEvidenceUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("dispute_evidence", "user_errors") dispute_evidence = sgqlc.types.Field("ShopifyPaymentsDisputeEvidence", graphql_name="disputeEvidence") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DisputeEvidenceUpdateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DisputeEvidenceUpdateUserError"))), graphql_name="userErrors" ) @@ -8817,24 +11108,20 @@ class EditableProperty(sgqlc.types.Type): reason = sgqlc.types.Field(FormattedString, graphql_name="reason") -class Event(sgqlc.types.Interface): +class ErrorPosition(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "app_title", - "attribute_to_app", - "attribute_to_user", - "created_at", - "critical_alert", - "id", - "message", + __field_names__ = ("character", "line") + character = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="character") + line = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="line") + + +class EventBridgeServerPixelUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("server_pixel", "user_errors") + server_pixel = sgqlc.types.Field("ServerPixel", graphql_name="serverPixel") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsServerPixelUserError"))), graphql_name="userErrors" ) - app_title = sgqlc.types.Field(String, graphql_name="appTitle") - attribute_to_app = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="attributeToApp") - attribute_to_user = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="attributeToUser") - created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") - critical_alert = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="criticalAlert") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - message = sgqlc.types.Field(sgqlc.types.non_null(FormattedString), graphql_name="message") class EventBridgeWebhookSubscriptionCreatePayload(sgqlc.types.Type): @@ -8859,11 +11146,105 @@ class EventConnection(sgqlc.types.relay.Connection): page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") -class EventEdge(sgqlc.types.Type): +class EventEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(Event), graphql_name="node") + + +class ExchangeV2Additions(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("line_items", "subtotal_price_set", "tax_lines", "total_price_set") + line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ExchangeV2LineItem"))), graphql_name="lineItems" + ) + subtotal_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="subtotalPriceSet") + tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TaxLine"))), graphql_name="taxLines") + total_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalPriceSet") + + +class ExchangeV2Connection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ExchangeV2Edge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ExchangeV2"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class ExchangeV2Edge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ExchangeV2"), graphql_name="node") + + +class ExchangeV2LineItem(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ( + "custom_attributes", + "discounted_total_set", + "discounted_unit_price_set", + "fulfillment_service", + "gift_card", + "gift_cards", + "line_item", + "name", + "original_total_set", + "original_unit_price_set", + "quantity", + "requires_shipping", + "sku", + "tax_lines", + "taxable", + "title", + "variant", + "variant_title", + "vendor", + ) + custom_attributes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" + ) + discounted_total_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="discountedTotalSet") + discounted_unit_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="discountedUnitPriceSet") + fulfillment_service = sgqlc.types.Field("FulfillmentService", graphql_name="fulfillmentService") + gift_card = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="giftCard") + gift_cards = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("GiftCard"))), graphql_name="giftCards") + line_item = sgqlc.types.Field("LineItem", graphql_name="lineItem") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + original_total_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="originalTotalSet") + original_unit_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="originalUnitPriceSet") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + requires_shipping = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="requiresShipping") + sku = sgqlc.types.Field(String, graphql_name="sku") + tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TaxLine"))), graphql_name="taxLines") + taxable = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="taxable") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + variant = sgqlc.types.Field("ProductVariant", graphql_name="variant") + variant_title = sgqlc.types.Field(String, graphql_name="variantTitle") + vendor = sgqlc.types.Field(String, graphql_name="vendor") + + +class ExchangeV2Returns(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(Event), graphql_name="node") + __field_names__ = ( + "line_items", + "order_discount_amount_set", + "shipping_refund_amount_set", + "subtotal_price_set", + "tax_lines", + "tip_refund_amount_set", + "total_price_set", + ) + line_items = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ExchangeV2LineItem))), graphql_name="lineItems" + ) + order_discount_amount_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="orderDiscountAmountSet") + shipping_refund_amount_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="shippingRefundAmountSet") + subtotal_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="subtotalPriceSet") + tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TaxLine"))), graphql_name="taxLines") + tip_refund_amount_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="tipRefundAmountSet") + total_price_set = sgqlc.types.Field(sgqlc.types.non_null("MoneyBag"), graphql_name="totalPriceSet") class FailedRequirement(sgqlc.types.Type): @@ -8873,14 +11254,13 @@ class FailedRequirement(sgqlc.types.Type): message = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="message") -class File(sgqlc.types.Interface): +class FileAcknowledgeUpdateFailedPayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("alt", "created_at", "file_errors", "file_status", "preview") - alt = sgqlc.types.Field(String, graphql_name="alt") - created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") - file_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FileError"))), graphql_name="fileErrors") - file_status = sgqlc.types.Field(sgqlc.types.non_null(FileStatus), graphql_name="fileStatus") - preview = sgqlc.types.Field("MediaPreviewImage", graphql_name="preview") + __field_names__ = ("files", "user_errors") + files = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(File)), graphql_name="files") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FilesUserError"))), graphql_name="userErrors" + ) class FileConnection(sgqlc.types.relay.Connection): @@ -8983,6 +11363,13 @@ class FulfillmentEventConnection(sgqlc.types.relay.Connection): page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") +class FulfillmentEventCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_event", "user_errors") + fulfillment_event = sgqlc.types.Field("FulfillmentEvent", graphql_name="fulfillmentEvent") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + + class FulfillmentEventEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") @@ -8992,7 +11379,8 @@ class FulfillmentEventEdge(sgqlc.types.Type): class FulfillmentHold(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("reason", "reason_notes") + __field_names__ = ("held_by", "reason", "reason_notes") + held_by = sgqlc.types.Field(String, graphql_name="heldBy") reason = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentHoldReason), graphql_name="reason") reason_notes = sgqlc.types.Field(String, graphql_name="reasonNotes") @@ -9074,11 +11462,11 @@ class FulfillmentOrderEdge(sgqlc.types.Type): class FulfillmentOrderHoldPayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("fulfillment_order", "user_errors") + __field_names__ = ("fulfillment_order", "remaining_fulfillment_order", "user_errors") fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="fulfillmentOrder") + remaining_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="remainingFulfillmentOrder") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderHoldUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderHoldUserError"))), graphql_name="userErrors" ) @@ -9092,12 +11480,10 @@ class FulfillmentOrderLineItemConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItemEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItemEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItem"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItem"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -9116,6 +11502,15 @@ class FulfillmentOrderLineItemWarning(sgqlc.types.Type): title = sgqlc.types.Field(String, graphql_name="title") +class FulfillmentOrderLineItemsPreparedForPickupPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("user_errors",) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLineItemsPreparedForPickupUserError"))), + graphql_name="userErrors", + ) + + class FulfillmentOrderLocationForMove(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("location", "message", "movable") @@ -9128,12 +11523,10 @@ class FulfillmentOrderLocationForMoveConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLocationForMoveEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderLocationForMoveEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLocationForMove))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLocationForMove))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -9149,12 +11542,10 @@ class FulfillmentOrderMerchantRequestConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMerchantRequestEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMerchantRequestEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMerchantRequest"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMerchantRequest"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -9166,14 +11557,26 @@ class FulfillmentOrderMerchantRequestEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("FulfillmentOrderMerchantRequest"), graphql_name="node") -class FulfillmentOrderMovePayload(sgqlc.types.Type): +class FulfillmentOrderMergePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "moved_fulfillment_order", - "original_fulfillment_order", - "remaining_fulfillment_order", - "user_errors", + __field_names__ = ("fulfillment_order_merges", "user_errors") + fulfillment_order_merges = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMergeResult")), graphql_name="fulfillmentOrderMerges" ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderMergeUserError"))), graphql_name="userErrors" + ) + + +class FulfillmentOrderMergeResult(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order",) + fulfillment_order = sgqlc.types.Field(sgqlc.types.non_null("FulfillmentOrder"), graphql_name="fulfillmentOrder") + + +class FulfillmentOrderMovePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("moved_fulfillment_order", "original_fulfillment_order", "remaining_fulfillment_order", "user_errors") moved_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="movedFulfillmentOrder") original_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="originalFulfillmentOrder") remaining_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="remainingFulfillmentOrder") @@ -9206,8 +11609,7 @@ class FulfillmentOrderReleaseHoldPayload(sgqlc.types.Type): __field_names__ = ("fulfillment_order", "user_errors") fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="fulfillmentOrder") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderReleaseHoldUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderReleaseHoldUserError"))), graphql_name="userErrors" ) @@ -9216,11 +11618,29 @@ class FulfillmentOrderReschedulePayload(sgqlc.types.Type): __field_names__ = ("fulfillment_order", "user_errors") fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="fulfillmentOrder") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderRescheduleUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderRescheduleUserError"))), graphql_name="userErrors" + ) + + +class FulfillmentOrderSplitPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order_splits", "user_errors") + fulfillment_order_splits = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderSplitResult")), graphql_name="fulfillmentOrderSplits" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrderSplitUserError"))), graphql_name="userErrors" ) +class FulfillmentOrderSplitResult(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("fulfillment_order", "remaining_fulfillment_order", "replacement_fulfillment_order") + fulfillment_order = sgqlc.types.Field(sgqlc.types.non_null("FulfillmentOrder"), graphql_name="fulfillmentOrder") + remaining_fulfillment_order = sgqlc.types.Field(sgqlc.types.non_null("FulfillmentOrder"), graphql_name="remainingFulfillmentOrder") + replacement_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="replacementFulfillmentOrder") + + class FulfillmentOrderSubmitCancellationRequestPayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("fulfillment_order", "user_errors") @@ -9230,12 +11650,7 @@ class FulfillmentOrderSubmitCancellationRequestPayload(sgqlc.types.Type): class FulfillmentOrderSubmitFulfillmentRequestPayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "original_fulfillment_order", - "submitted_fulfillment_order", - "unsubmitted_fulfillment_order", - "user_errors", - ) + __field_names__ = ("original_fulfillment_order", "submitted_fulfillment_order", "unsubmitted_fulfillment_order", "user_errors") original_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="originalFulfillmentOrder") submitted_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="submittedFulfillmentOrder") unsubmitted_fulfillment_order = sgqlc.types.Field("FulfillmentOrder", graphql_name="unsubmittedFulfillmentOrder") @@ -9249,6 +11664,15 @@ class FulfillmentOrderSupportedAction(sgqlc.types.Type): external_url = sgqlc.types.Field(URL, graphql_name="externalUrl") +class FulfillmentOrdersReleaseHoldsPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("job", "user_errors") + job = sgqlc.types.Field("Job", graphql_name="job") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("FulfillmentOrdersReleaseHoldsUserError"))), graphql_name="userErrors" + ) + + class FulfillmentOrdersSetFulfillmentDeadlinePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("success", "user_errors") @@ -9282,7 +11706,6 @@ class FulfillmentService(sgqlc.types.Type): "permits_sku_sharing", "product_based", "service_name", - "shipping_methods", "type", ) callback_url = sgqlc.types.Field(URL, graphql_name="callbackUrl") @@ -9294,10 +11717,6 @@ class FulfillmentService(sgqlc.types.Type): permits_sku_sharing = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="permitsSkuSharing") product_based = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="productBased") service_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="serviceName") - shipping_methods = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShippingMethod"))), - graphql_name="shippingMethods", - ) type = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentServiceType), graphql_name="type") @@ -9346,12 +11765,7 @@ class FunctionsAppBridge(sgqlc.types.Type): class FunctionsErrorHistory(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "errors_first_occurred_at", - "first_occurred_at", - "has_been_shared_since_last_error", - "has_shared_recent_errors", - ) + __field_names__ = ("errors_first_occurred_at", "first_occurred_at", "has_been_shared_since_last_error", "has_shared_recent_errors") errors_first_occurred_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="errorsFirstOccurredAt") first_occurred_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="firstOccurredAt") has_been_shared_since_last_error = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="hasBeenSharedSinceLastError") @@ -9397,153 +11811,6 @@ class GiftCardUpdatePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") -class HasEvents(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("events",) - events = sgqlc.types.Field( - sgqlc.types.non_null(EventConnection), - graphql_name="events", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ("sort_key", sgqlc.types.Arg(EventSortKeys, graphql_name="sortKey", default="ID")), - ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), - ) - ), - ) - - -class HasLocalizationExtensions(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("localization_extensions",) - localization_extensions = sgqlc.types.Field( - sgqlc.types.non_null("LocalizationExtensionConnection"), - graphql_name="localizationExtensions", - args=sgqlc.types.ArgDict( - ( - ( - "country_codes", - sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(CountryCode)), - graphql_name="countryCodes", - default=None, - ), - ), - ( - "purposes", - sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(LocalizationExtensionPurpose)), - graphql_name="purposes", - default=None, - ), - ), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - - -class HasMetafieldDefinitions(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("metafield_definitions",) - metafield_definitions = sgqlc.types.Field( - sgqlc.types.non_null("MetafieldDefinitionConnection"), - graphql_name="metafieldDefinitions", - args=sgqlc.types.ArgDict( - ( - ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), - ( - "pinned_status", - sgqlc.types.Arg(MetafieldDefinitionPinnedStatus, graphql_name="pinnedStatus", default="ANY"), - ), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ("sort_key", sgqlc.types.Arg(MetafieldDefinitionSortKeys, graphql_name="sortKey", default="ID")), - ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), - ) - ), - ) - - -class HasMetafields(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("metafield", "metafields", "private_metafield", "private_metafields") - metafield = sgqlc.types.Field( - "Metafield", - graphql_name="metafield", - args=sgqlc.types.ArgDict( - ( - ("namespace", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="namespace", default=None)), - ("key", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="key", default=None)), - ) - ), - ) - metafields = sgqlc.types.Field( - sgqlc.types.non_null("MetafieldConnection"), - graphql_name="metafields", - args=sgqlc.types.ArgDict( - ( - ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - private_metafield = sgqlc.types.Field( - "PrivateMetafield", - graphql_name="privateMetafield", - args=sgqlc.types.ArgDict( - ( - ("namespace", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="namespace", default=None)), - ("key", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="key", default=None)), - ) - ), - ) - private_metafields = sgqlc.types.Field( - sgqlc.types.non_null("PrivateMetafieldConnection"), - graphql_name="privateMetafields", - args=sgqlc.types.ArgDict( - ( - ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - - -class HasPublishedTranslations(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("translations",) - translations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublishedTranslation"))), - graphql_name="translations", - args=sgqlc.types.ArgDict( - ( - ("locale", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="locale", default=None)), - ("market_id", sgqlc.types.Arg(ID, graphql_name="marketId", default=None)), - ) - ), - ) - - class ImageConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -9573,6 +11840,15 @@ class InventoryActivatePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class InventoryAdjustQuantitiesPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("inventory_adjustment_group", "user_errors") + inventory_adjustment_group = sgqlc.types.Field("InventoryAdjustmentGroup", graphql_name="inventoryAdjustmentGroup") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryAdjustQuantitiesUserError"))), graphql_name="userErrors" + ) + + class InventoryAdjustQuantityPayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("inventory_level", "user_errors") @@ -9593,11 +11869,21 @@ class InventoryBulkToggleActivationPayload(sgqlc.types.Type): inventory_item = sgqlc.types.Field("InventoryItem", graphql_name="inventoryItem") inventory_levels = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("InventoryLevel")), graphql_name="inventoryLevels") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryBulkToggleActivationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryBulkToggleActivationUserError"))), graphql_name="userErrors" ) +class InventoryChange(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("delta", "item", "ledger_document_uri", "location", "name", "quantity_after_change") + delta = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="delta") + item = sgqlc.types.Field("InventoryItem", graphql_name="item") + ledger_document_uri = sgqlc.types.Field(String, graphql_name="ledgerDocumentUri") + location = sgqlc.types.Field("Location", graphql_name="location") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + quantity_after_change = sgqlc.types.Field(Int, graphql_name="quantityAfterChange") + + class InventoryDeactivatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("user_errors",) @@ -9634,11 +11920,55 @@ class InventoryLevelConnection(sgqlc.types.relay.Connection): page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") -class InventoryLevelEdge(sgqlc.types.Type): +class InventoryLevelEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("InventoryLevel"), graphql_name="node") + + +class InventoryMoveQuantitiesPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("inventory_adjustment_group", "user_errors") + inventory_adjustment_group = sgqlc.types.Field("InventoryAdjustmentGroup", graphql_name="inventoryAdjustmentGroup") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryMoveQuantitiesUserError"))), graphql_name="userErrors" + ) + + +class InventoryProperties(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("quantity_names",) + quantity_names = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventoryQuantityName"))), graphql_name="quantityNames" + ) + + +class InventoryQuantity(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("name", "quantity", "updated_at") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + updated_at = sgqlc.types.Field(DateTime, graphql_name="updatedAt") + + +class InventoryQuantityName(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("InventoryLevel"), graphql_name="node") + __field_names__ = ("belongs_to", "comprises", "display_name", "is_in_use", "name") + belongs_to = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="belongsTo") + comprises = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="comprises") + display_name = sgqlc.types.Field(String, graphql_name="displayName") + is_in_use = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isInUse") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + + +class InventorySetOnHandQuantitiesPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("inventory_adjustment_group", "user_errors") + inventory_adjustment_group = sgqlc.types.Field("InventoryAdjustmentGroup", graphql_name="inventoryAdjustmentGroup") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("InventorySetOnHandQuantitiesUserError"))), graphql_name="userErrors" + ) class Job(sgqlc.types.Type): @@ -9649,12 +11979,6 @@ class Job(sgqlc.types.Type): query = sgqlc.types.Field("QueryRoot", graphql_name="query") -class LegacyInteroperability(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("legacy_resource_id",) - legacy_resource_id = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="legacyResourceId") - - class LimitedPendingOrderCount(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("at_max", "count") @@ -9677,6 +12001,14 @@ class LineItemEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("LineItem"), graphql_name="node") +class LineItemGroup(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("id", "quantity", "title") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + class LineItemMutableConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -9720,8 +12052,7 @@ class LocalizationExtensionConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocalizationExtensionEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocalizationExtensionEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(LocalizationExtension))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") @@ -9749,8 +12080,7 @@ class LocationAddPayload(sgqlc.types.Type): __field_names__ = ("location", "user_errors") location = sgqlc.types.Field("Location", graphql_name="location") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationAddUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationAddUserError"))), graphql_name="userErrors" ) @@ -9807,8 +12137,7 @@ class LocationDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_location_id", "location_delete_user_errors") deleted_location_id = sgqlc.types.Field(ID, graphql_name="deletedLocationId") location_delete_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationDeleteUserError"))), - graphql_name="locationDeleteUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationDeleteUserError"))), graphql_name="locationDeleteUserErrors" ) @@ -9824,24 +12153,33 @@ class LocationEditPayload(sgqlc.types.Type): __field_names__ = ("location", "user_errors") location = sgqlc.types.Field("Location", graphql_name="location") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationEditUserError"))), + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("LocationEditUserError"))), graphql_name="userErrors" + ) + + +class LocationLocalPickupDisablePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("location_id", "user_errors") + location_id = sgqlc.types.Field(ID, graphql_name="locationId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryLocationLocalPickupSettingsError"))), graphql_name="userErrors", ) -class LocationSuggestedAddress(sgqlc.types.Type): +class LocationLocalPickupEnablePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "address1", - "address2", - "city", - "country", - "country_code", - "formatted", - "province", - "province_code", - "zip", + __field_names__ = ("local_pickup_settings", "user_errors") + local_pickup_settings = sgqlc.types.Field(DeliveryLocalPickupSettings, graphql_name="localPickupSettings") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("DeliveryLocationLocalPickupSettingsError"))), + graphql_name="userErrors", ) + + +class LocationSuggestedAddress(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("address1", "address2", "city", "country", "country_code", "formatted", "province", "province_code", "zip") address1 = sgqlc.types.Field(String, graphql_name="address1") address2 = sgqlc.types.Field(String, graphql_name="address2") city = sgqlc.types.Field(String, graphql_name="city") @@ -9853,6 +12191,36 @@ class LocationSuggestedAddress(sgqlc.types.Type): zip = sgqlc.types.Field(String, graphql_name="zip") +class MailingAddressConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MailingAddressEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MailingAddress"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class MailingAddressEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("MailingAddress"), graphql_name="node") + + +class MarketCatalogConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketCatalogEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketCatalog"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class MarketCatalogEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("MarketCatalog"), graphql_name="node") + + class MarketConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -9882,8 +12250,7 @@ class MarketCurrencySettingsUpdatePayload(sgqlc.types.Type): __field_names__ = ("market", "user_errors") market = sgqlc.types.Field("Market", graphql_name="market") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketCurrencySettingsUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketCurrencySettingsUserError"))), graphql_name="userErrors" ) @@ -9915,8 +12282,7 @@ class MarketLocalizableResource(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("market_localizable_content", "market_localizations", "resource_id") market_localizable_content = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MarketLocalizableContent))), - graphql_name="marketLocalizableContent", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MarketLocalizableContent))), graphql_name="marketLocalizableContent" ) market_localizations = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketLocalization"))), @@ -9930,8 +12296,7 @@ class MarketLocalizableResourceConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketLocalizableResourceEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketLocalizableResourceEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MarketLocalizableResource))), graphql_name="nodes" @@ -9948,10 +12313,11 @@ class MarketLocalizableResourceEdge(sgqlc.types.Type): class MarketLocalization(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("key", "market", "outdated", "value") + __field_names__ = ("key", "market", "outdated", "updated_at", "value") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") market = sgqlc.types.Field(sgqlc.types.non_null("Market"), graphql_name="market") outdated = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="outdated") + updated_at = sgqlc.types.Field(DateTime, graphql_name="updatedAt") value = sgqlc.types.Field(String, graphql_name="value") @@ -9962,8 +12328,7 @@ class MarketLocalizationsRegisterPayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null(MarketLocalization)), graphql_name="marketLocalizations" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), graphql_name="userErrors" ) @@ -9974,18 +12339,10 @@ class MarketLocalizationsRemovePayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null(MarketLocalization)), graphql_name="marketLocalizations" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), graphql_name="userErrors" ) -class MarketRegion(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("id", "name") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - - class MarketRegionConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -10079,8 +12436,7 @@ class MarketingActivityCreateExternalPayload(sgqlc.types.Type): __field_names__ = ("marketing_activity", "user_errors") marketing_activity = sgqlc.types.Field("MarketingActivity", graphql_name="marketingActivity") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketingActivityUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketingActivityUserError"))), graphql_name="userErrors" ) @@ -10111,8 +12467,7 @@ class MarketingActivityUpdateExternalPayload(sgqlc.types.Type): __field_names__ = ("marketing_activity", "user_errors") marketing_activity = sgqlc.types.Field("MarketingActivity", graphql_name="marketingActivity") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketingActivityUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketingActivityUserError"))), graphql_name="userErrors" ) @@ -10195,21 +12550,6 @@ class MarketingEventEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("MarketingEvent"), graphql_name="node") -class Media(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("alt", "media_content_type", "media_errors", "media_warnings", "preview", "status") - alt = sgqlc.types.Field(String, graphql_name="alt") - media_content_type = sgqlc.types.Field(sgqlc.types.non_null(MediaContentType), graphql_name="mediaContentType") - media_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaError"))), graphql_name="mediaErrors" - ) - media_warnings = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaWarning"))), graphql_name="mediaWarnings" - ) - preview = sgqlc.types.Field("MediaPreviewImage", graphql_name="preview") - status = sgqlc.types.Field(sgqlc.types.non_null(MediaStatus), graphql_name="status") - - class MediaConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -10255,9 +12595,16 @@ class MediaWarning(sgqlc.types.Type): class MerchantApprovalSignals(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("identity_verified", "verified_by_shopify") + __field_names__ = ("identity_verified", "verified_by_shopify", "verified_by_shopify_tier") identity_verified = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="identityVerified") verified_by_shopify = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="verifiedByShopify") + verified_by_shopify_tier = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="verifiedByShopifyTier") + + +class MetafieldAccess(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("admin",) + admin = sgqlc.types.Field(MetafieldAdminAccess, graphql_name="admin") class MetafieldConnection(sgqlc.types.relay.Connection): @@ -10283,8 +12630,7 @@ class MetafieldDefinitionCreatePayload(sgqlc.types.Type): __field_names__ = ("created_definition", "user_errors") created_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="createdDefinition") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionCreateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionCreateUserError"))), graphql_name="userErrors" ) @@ -10293,8 +12639,7 @@ class MetafieldDefinitionDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_definition_id", "user_errors") deleted_definition_id = sgqlc.types.Field(ID, graphql_name="deletedDefinitionId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionDeleteUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionDeleteUserError"))), graphql_name="userErrors" ) @@ -10305,136 +12650,335 @@ class MetafieldDefinitionEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("MetafieldDefinition"), graphql_name="node") -class MetafieldDefinitionPinPayload(sgqlc.types.Type): +class MetafieldDefinitionPinPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("pinned_definition", "user_errors") + pinned_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="pinnedDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionPinUserError"))), graphql_name="userErrors" + ) + + +class MetafieldDefinitionSupportedValidation(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("name", "type") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + + +class MetafieldDefinitionType(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("category", "name", "supported_validations", "supports_definition_migrations") + category = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="category") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + supported_validations = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionSupportedValidation))), + graphql_name="supportedValidations", + ) + supports_definition_migrations = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supportsDefinitionMigrations") + + +class MetafieldDefinitionUnpinPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("unpinned_definition", "user_errors") + unpinned_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="unpinnedDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionUnpinUserError"))), graphql_name="userErrors" + ) + + +class MetafieldDefinitionUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("updated_definition", "user_errors", "validation_job") + updated_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="updatedDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionUpdateUserError"))), graphql_name="userErrors" + ) + validation_job = sgqlc.types.Field(Job, graphql_name="validationJob") + + +class MetafieldDefinitionValidation(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("name", "type", "value") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + value = sgqlc.types.Field(String, graphql_name="value") + + +class MetafieldDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + + +class MetafieldEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("Metafield"), graphql_name="node") + + +class MetafieldReferenceConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldReferenceEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of("MetafieldReference")), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class MetafieldReferenceEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field("MetafieldReference", graphql_name="node") + + +class MetafieldRelation(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("key", "name", "namespace", "referencer", "target") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + namespace = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="namespace") + referencer = sgqlc.types.Field(sgqlc.types.non_null("MetafieldReferencer"), graphql_name="referencer") + target = sgqlc.types.Field(sgqlc.types.non_null("MetafieldReference"), graphql_name="target") + + +class MetafieldRelationConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldRelationEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldRelation))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class MetafieldRelationEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(MetafieldRelation), graphql_name="node") + + +class MetafieldStorefrontVisibilityConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldStorefrontVisibilityEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldStorefrontVisibility"))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + + +class MetafieldStorefrontVisibilityCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("metafield_storefront_visibility", "user_errors") + metafield_storefront_visibility = sgqlc.types.Field("MetafieldStorefrontVisibility", graphql_name="metafieldStorefrontVisibility") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + + +class MetafieldStorefrontVisibilityDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_metafield_storefront_visibility_id", "user_errors") + deleted_metafield_storefront_visibility_id = sgqlc.types.Field(ID, graphql_name="deletedMetafieldStorefrontVisibilityId") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + + +class MetafieldStorefrontVisibilityEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("MetafieldStorefrontVisibility"), graphql_name="node") + + +class MetafieldsSetPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("metafields", "user_errors") + metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("Metafield")), graphql_name="metafields") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldsSetUserError"))), graphql_name="userErrors" + ) + + +class MetaobjectAccess(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("admin", "storefront") + admin = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectAdminAccess), graphql_name="admin") + storefront = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectStorefrontAccess), graphql_name="storefront") + + +class MetaobjectBulkDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("job", "user_errors") + job = sgqlc.types.Field(Job, graphql_name="job") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) + + +class MetaobjectCapabilities(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("publishable", "translatable") + publishable = sgqlc.types.Field(sgqlc.types.non_null("MetaobjectCapabilitiesPublishable"), graphql_name="publishable") + translatable = sgqlc.types.Field(sgqlc.types.non_null("MetaobjectCapabilitiesTranslatable"), graphql_name="translatable") + + +class MetaobjectCapabilitiesPublishable(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("enabled",) + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") + + +class MetaobjectCapabilitiesTranslatable(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("enabled",) + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") + + +class MetaobjectCapabilityData(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("pinned_definition", "user_errors") - pinned_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="pinnedDefinition") - user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionPinUserError"))), - graphql_name="userErrors", - ) + __field_names__ = ("publishable",) + publishable = sgqlc.types.Field("MetaobjectCapabilityDataPublishable", graphql_name="publishable") -class MetafieldDefinitionSupportedValidation(sgqlc.types.Type): +class MetaobjectCapabilityDataPublishable(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("name", "type") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + __field_names__ = ("status",) + status = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectStatus), graphql_name="status") -class MetafieldDefinitionType(sgqlc.types.Type): +class MetaobjectConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema - __field_names__ = ("category", "name", "supported_validations", "supports_definition_migrations") - category = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="category") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - supported_validations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionSupportedValidation))), - graphql_name="supportedValidations", - ) - supports_definition_migrations = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supportsDefinitionMigrations") + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Metaobject"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") -class MetafieldDefinitionUnpinPayload(sgqlc.types.Type): +class MetaobjectCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("unpinned_definition", "user_errors") - unpinned_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="unpinnedDefinition") + __field_names__ = ("metaobject", "user_errors") + metaobject = sgqlc.types.Field("Metaobject", graphql_name="metaobject") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionUnpinUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" ) -class MetafieldDefinitionUpdatePayload(sgqlc.types.Type): +class MetaobjectDefinitionConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema - __field_names__ = ("updated_definition", "user_errors") - updated_definition = sgqlc.types.Field("MetafieldDefinition", graphql_name="updatedDefinition") - user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldDefinitionUpdateUserError"))), - graphql_name="userErrors", + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectDefinitionEdge"))), graphql_name="edges" ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectDefinition"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") -class MetafieldDefinitionValidation(sgqlc.types.Type): +class MetaobjectDefinitionCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("name", "type", "value") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") - value = sgqlc.types.Field(String, graphql_name="value") + __field_names__ = ("metaobject_definition", "user_errors") + metaobject_definition = sgqlc.types.Field("MetaobjectDefinition", graphql_name="metaobjectDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) -class MetafieldDeletePayload(sgqlc.types.Type): +class MetaobjectDefinitionDeletePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("deleted_id", "user_errors") deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) -class MetafieldEdge(sgqlc.types.Type): +class MetaobjectDefinitionEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("Metafield"), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null("MetaobjectDefinition"), graphql_name="node") -class MetafieldReferenceConnection(sgqlc.types.relay.Connection): +class MetaobjectDefinitionUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldReferenceEdge"))), graphql_name="edges" + __field_names__ = ("metaobject_definition", "user_errors") + metaobject_definition = sgqlc.types.Field("MetaobjectDefinition", graphql_name="metaobjectDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" ) - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of("MetafieldReference")), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") -class MetafieldReferenceEdge(sgqlc.types.Type): +class MetaobjectDeletePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field("MetafieldReference", graphql_name="node") + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) -class MetafieldStorefrontVisibilityConnection(sgqlc.types.relay.Connection): +class MetaobjectEdge(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldStorefrontVisibilityEdge"))), - graphql_name="edges", - ) - nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldStorefrontVisibility"))), - graphql_name="nodes", - ) - page_info = sgqlc.types.Field(sgqlc.types.non_null("PageInfo"), graphql_name="pageInfo") + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("Metaobject"), graphql_name="node") -class MetafieldStorefrontVisibilityCreatePayload(sgqlc.types.Type): +class MetaobjectField(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("metafield_storefront_visibility", "user_errors") - metafield_storefront_visibility = sgqlc.types.Field("MetafieldStorefrontVisibility", graphql_name="metafieldStorefrontVisibility") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + __field_names__ = ("definition", "key", "reference", "references", "type", "value") + definition = sgqlc.types.Field(sgqlc.types.non_null("MetaobjectFieldDefinition"), graphql_name="definition") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + reference = sgqlc.types.Field("MetafieldReference", graphql_name="reference") + references = sgqlc.types.Field( + MetafieldReferenceConnection, + graphql_name="references", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ) + ), + ) + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + value = sgqlc.types.Field(String, graphql_name="value") -class MetafieldStorefrontVisibilityDeletePayload(sgqlc.types.Type): +class MetaobjectFieldDefinition(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("deleted_metafield_storefront_visibility_id", "user_errors") - deleted_metafield_storefront_visibility_id = sgqlc.types.Field(ID, graphql_name="deletedMetafieldStorefrontVisibilityId") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + __field_names__ = ("description", "key", "name", "required", "type", "validations") + description = sgqlc.types.Field(String, graphql_name="description") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + required = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="required") + type = sgqlc.types.Field(sgqlc.types.non_null(MetafieldDefinitionType), graphql_name="type") + validations = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidation))), graphql_name="validations" + ) -class MetafieldStorefrontVisibilityEdge(sgqlc.types.Type): +class MetaobjectUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("MetafieldStorefrontVisibility"), graphql_name="node") + __field_names__ = ("metaobject", "user_errors") + metaobject = sgqlc.types.Field("Metaobject", graphql_name="metaobject") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) -class MetafieldsSetPayload(sgqlc.types.Type): +class MetaobjectUpsertPayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("metafields", "user_errors") - metafields = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("Metafield")), graphql_name="metafields") + __field_names__ = ("metaobject", "user_errors") + metaobject = sgqlc.types.Field("Metaobject", graphql_name="metaobject") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetafieldsSetUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" ) @@ -10470,10 +13014,8 @@ class MoneyV2(sgqlc.types.Type): class Mutation(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( - "app_credit_create", + "abandonment_update_activities_delivery_statuses", "app_purchase_one_time_create", - "app_revenue_attribution_record_create", - "app_revenue_attribution_record_delete", "app_subscription_cancel", "app_subscription_create", "app_subscription_line_item_update", @@ -10483,6 +13025,12 @@ class Mutation(sgqlc.types.Type): "bulk_operation_run_mutation", "bulk_operation_run_query", "bulk_product_resource_feedback_create", + "cart_transform_create", + "cart_transform_delete", + "catalog_context_update", + "catalog_create", + "catalog_delete", + "catalog_update", "collection_add_products", "collection_add_products_v2", "collection_create", @@ -10498,8 +13046,10 @@ class Mutation(sgqlc.types.Type): "company_contact_assign_roles", "company_contact_create", "company_contact_delete", + "company_contact_remove_from_company", "company_contact_revoke_role", "company_contact_revoke_roles", + "company_contact_send_welcome_email", "company_contact_update", "company_contacts_delete", "company_create", @@ -10522,8 +13072,11 @@ class Mutation(sgqlc.types.Type): "customer_delete", "customer_email_marketing_consent_update", "customer_generate_account_activation_url", + "customer_merge", + "customer_payment_method_create_from_duplication_data", "customer_payment_method_credit_card_create", "customer_payment_method_credit_card_update", + "customer_payment_method_get_duplication_data", "customer_payment_method_get_update_url", "customer_payment_method_paypal_billing_agreement_create", "customer_payment_method_paypal_billing_agreement_update", @@ -10532,10 +13085,16 @@ class Mutation(sgqlc.types.Type): "customer_payment_method_send_update_email", "customer_remove_tax_exemptions", "customer_replace_tax_exemptions", + "customer_segment_members_query_create", "customer_sms_marketing_consent_update", "customer_update", "customer_update_default_address", "delegate_access_token_create", + "delegate_access_token_destroy", + "delivery_customization_activation", + "delivery_customization_create", + "delivery_customization_delete", + "delivery_customization_update", "delivery_profile_create", "delivery_profile_remove", "delivery_profile_update", @@ -10581,27 +13140,34 @@ class Mutation(sgqlc.types.Type): "draft_order_invoice_preview", "draft_order_invoice_send", "draft_order_update", + "event_bridge_server_pixel_update", "event_bridge_webhook_subscription_create", "event_bridge_webhook_subscription_update", + "file_acknowledge_update_failed", "file_create", "file_delete", "file_update", "flow_trigger_receive", "fulfillment_cancel", "fulfillment_create_v2", + "fulfillment_event_create", "fulfillment_order_accept_cancellation_request", "fulfillment_order_accept_fulfillment_request", "fulfillment_order_cancel", "fulfillment_order_close", "fulfillment_order_hold", + "fulfillment_order_line_items_prepared_for_pickup", + "fulfillment_order_merge", "fulfillment_order_move", "fulfillment_order_open", "fulfillment_order_reject_cancellation_request", "fulfillment_order_reject_fulfillment_request", "fulfillment_order_release_hold", "fulfillment_order_reschedule", + "fulfillment_order_split", "fulfillment_order_submit_cancellation_request", "fulfillment_order_submit_fulfillment_request", + "fulfillment_orders_release_holds", "fulfillment_orders_set_fulfillment_deadline", "fulfillment_service_create", "fulfillment_service_delete", @@ -10611,16 +13177,19 @@ class Mutation(sgqlc.types.Type): "gift_card_disable", "gift_card_update", "inventory_activate", - "inventory_adjust_quantity", - "inventory_bulk_adjust_quantity_at_location", + "inventory_adjust_quantities", "inventory_bulk_toggle_activation", "inventory_deactivate", "inventory_item_update", + "inventory_move_quantities", + "inventory_set_on_hand_quantities", "location_activate", "location_add", "location_deactivate", "location_delete", "location_edit", + "location_local_pickup_disable", + "location_local_pickup_enable", "market_create", "market_currency_settings_update", "market_delete", @@ -10643,9 +13212,15 @@ class Mutation(sgqlc.types.Type): "metafield_definition_unpin", "metafield_definition_update", "metafield_delete", - "metafield_storefront_visibility_create", - "metafield_storefront_visibility_delete", "metafields_set", + "metaobject_bulk_delete", + "metaobject_create", + "metaobject_definition_create", + "metaobject_definition_delete", + "metaobject_definition_update", + "metaobject_delete", + "metaobject_update", + "metaobject_upsert", "order_capture", "order_close", "order_create_mandate_payment", @@ -10660,35 +13235,34 @@ class Mutation(sgqlc.types.Type): "order_mark_as_paid", "order_open", "order_update", + "payment_customization_activation", + "payment_customization_create", + "payment_customization_delete", + "payment_customization_update", + "payment_reminder_send", "payment_terms_create", "payment_terms_delete", "payment_terms_update", "price_list_create", "price_list_delete", "price_list_fixed_prices_add", + "price_list_fixed_prices_by_product_update", "price_list_fixed_prices_delete", + "price_list_fixed_prices_update", "price_list_update", - "price_rule_activate", - "price_rule_create", - "price_rule_deactivate", - "price_rule_delete", - "price_rule_discount_code_create", - "price_rule_discount_code_update", - "price_rule_update", - "private_metafield_delete", - "private_metafield_upsert", - "product_append_images", "product_change_status", "product_create", "product_create_media", "product_delete", - "product_delete_images", + "product_delete_async", "product_delete_media", "product_duplicate", - "product_image_update", + "product_duplicate_async_v2", + "product_feed_create", + "product_feed_delete", + "product_full_sync", "product_join_selling_plan_groups", "product_leave_selling_plan_groups", - "product_reorder_images", "product_reorder_media", "product_update", "product_update_media", @@ -10698,18 +13272,36 @@ class Mutation(sgqlc.types.Type): "product_variant_detach_media", "product_variant_join_selling_plan_groups", "product_variant_leave_selling_plan_groups", + "product_variant_relationship_bulk_update", "product_variant_update", "product_variants_bulk_create", "product_variants_bulk_delete", "product_variants_bulk_reorder", "product_variants_bulk_update", + "pub_sub_server_pixel_update", "pub_sub_webhook_subscription_create", "pub_sub_webhook_subscription_update", + "publication_create", + "publication_delete", + "publication_update", "publishable_publish", "publishable_publish_to_current_channel", "publishable_unpublish", "publishable_unpublish_to_current_channel", + "quantity_rules_add", + "quantity_rules_delete", "refund_create", + "return_approve_request", + "return_cancel", + "return_close", + "return_create", + "return_decline_request", + "return_refund", + "return_reopen", + "return_request", + "reverse_delivery_create_with_shipping", + "reverse_delivery_shipping_update", + "reverse_fulfillment_order_dispose", "saved_search_create", "saved_search_delete", "saved_search_update", @@ -10726,6 +13318,8 @@ class Mutation(sgqlc.types.Type): "selling_plan_group_remove_product_variants", "selling_plan_group_remove_products", "selling_plan_group_update", + "server_pixel_create", + "server_pixel_delete", "shipping_package_delete", "shipping_package_make_default", "shipping_package_update", @@ -10733,8 +13327,10 @@ class Mutation(sgqlc.types.Type): "shop_locale_enable", "shop_locale_update", "shop_policy_update", + "shop_resource_feedback_create", "staged_uploads_create", "standard_metafield_definition_enable", + "standard_metaobject_definition_enable", "storefront_access_token_create", "storefront_access_token_delete", "subscription_billing_attempt_create", @@ -10744,7 +13340,9 @@ class Mutation(sgqlc.types.Type): "subscription_billing_cycle_edit_delete", "subscription_billing_cycle_edits_delete", "subscription_billing_cycle_schedule_edit", + "subscription_contract_atomic_create", "subscription_contract_create", + "subscription_contract_product_change", "subscription_contract_set_next_billing_date", "subscription_contract_update", "subscription_draft_commit", @@ -10760,6 +13358,7 @@ class Mutation(sgqlc.types.Type): "subscription_draft_update", "tags_add", "tags_remove", + "tax_app_configure", "translations_register", "translations_remove", "url_redirect_bulk_delete_all", @@ -10778,17 +13377,19 @@ class Mutation(sgqlc.types.Type): "webhook_subscription_delete", "webhook_subscription_update", ) - app_credit_create = sgqlc.types.Field( - AppCreditCreatePayload, - graphql_name="appCreditCreate", + abandonment_update_activities_delivery_statuses = sgqlc.types.Field( + AbandonmentUpdateActivitiesDeliveryStatusesPayload, + graphql_name="abandonmentUpdateActivitiesDeliveryStatuses", args=sgqlc.types.ArgDict( ( + ("abandonment_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="abandonmentId", default=None)), + ("marketing_activity_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="marketingActivityId", default=None)), ( - "description", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="description", default=None), + "delivery_status", + sgqlc.types.Arg(sgqlc.types.non_null(AbandonmentDeliveryState), graphql_name="deliveryStatus", default=None), ), - ("amount", sgqlc.types.Arg(sgqlc.types.non_null(MoneyInput), graphql_name="amount", default=None)), - ("test", sgqlc.types.Arg(Boolean, graphql_name="test", default=False)), + ("delivered_at", sgqlc.types.Arg(DateTime, graphql_name="deliveredAt", default=None)), + ("delivery_status_change_reason", sgqlc.types.Arg(String, graphql_name="deliveryStatusChangeReason", default=None)), ) ), ) @@ -10804,27 +13405,6 @@ class Mutation(sgqlc.types.Type): ) ), ) - app_revenue_attribution_record_create = sgqlc.types.Field( - AppRevenueAttributionRecordCreatePayload, - graphql_name="appRevenueAttributionRecordCreate", - args=sgqlc.types.ArgDict( - ( - ( - "app_revenue_attribution_record", - sgqlc.types.Arg( - sgqlc.types.non_null(AppRevenueAttributionRecordInput), - graphql_name="appRevenueAttributionRecord", - default=None, - ), - ), - ) - ), - ) - app_revenue_attribution_record_delete = sgqlc.types.Field( - AppRevenueAttributionRecordDeletePayload, - graphql_name="appRevenueAttributionRecordDelete", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) app_subscription_cancel = sgqlc.types.Field( AppSubscriptionCancelPayload, graphql_name="appSubscriptionCancel", @@ -10865,10 +13445,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "capped_amount", - sgqlc.types.Arg(sgqlc.types.non_null(MoneyInput), graphql_name="cappedAmount", default=None), - ), + ("capped_amount", sgqlc.types.Arg(sgqlc.types.non_null(MoneyInput), graphql_name="cappedAmount", default=None)), ) ), ) @@ -10892,10 +13469,8 @@ class Mutation(sgqlc.types.Type): sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="subscriptionLineItemId", default=None), ), ("price", sgqlc.types.Arg(sgqlc.types.non_null(MoneyInput), graphql_name="price", default=None)), - ( - "description", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="description", default=None), - ), + ("description", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="description", default=None)), + ("idempotency_key", sgqlc.types.Arg(String, graphql_name="idempotencyKey", default=None)), ) ), ) @@ -10910,10 +13485,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("mutation", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="mutation", default=None)), - ( - "staged_upload_path", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="stagedUploadPath", default=None), - ), + ("staged_upload_path", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="stagedUploadPath", default=None)), ("client_identifier", sgqlc.types.Arg(String, graphql_name="clientIdentifier", default=None)), ) ), @@ -10939,6 +13511,56 @@ class Mutation(sgqlc.types.Type): ) ), ) + cart_transform_create = sgqlc.types.Field( + CartTransformCreatePayload, + graphql_name="cartTransformCreate", + args=sgqlc.types.ArgDict( + (("function_id", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="functionId", default=None)),) + ), + ) + cart_transform_delete = sgqlc.types.Field( + CartTransformDeletePayload, + graphql_name="cartTransformDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + catalog_context_update = sgqlc.types.Field( + CatalogContextUpdatePayload, + graphql_name="catalogContextUpdate", + args=sgqlc.types.ArgDict( + ( + ("catalog_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="catalogId", default=None)), + ("contexts_to_add", sgqlc.types.Arg(CatalogContextInput, graphql_name="contextsToAdd", default=None)), + ("contexts_to_remove", sgqlc.types.Arg(CatalogContextInput, graphql_name="contextsToRemove", default=None)), + ) + ), + ) + catalog_create = sgqlc.types.Field( + CatalogCreatePayload, + graphql_name="catalogCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(CatalogCreateInput), graphql_name="input", default=None)),) + ), + ) + catalog_delete = sgqlc.types.Field( + CatalogDeletePayload, + graphql_name="catalogDelete", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("delete_dependent_resources", sgqlc.types.Arg(Boolean, graphql_name="deleteDependentResources", default=False)), + ) + ), + ) + catalog_update = sgqlc.types.Field( + CatalogUpdatePayload, + graphql_name="catalogUpdate", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(CatalogUpdateInput), graphql_name="input", default=None)), + ) + ), + ) collection_add_products = sgqlc.types.Field( CollectionAddProductsPayload, graphql_name="collectionAddProducts", @@ -10948,9 +13570,7 @@ class Mutation(sgqlc.types.Type): ( "product_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productIds", default=None ), ), ) @@ -10965,9 +13585,7 @@ class Mutation(sgqlc.types.Type): ( "product_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productIds", default=None ), ), ) @@ -10982,12 +13600,7 @@ class Mutation(sgqlc.types.Type): CollectionDeletePayload, graphql_name="collectionDelete", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CollectionDeleteInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(CollectionDeleteInput), graphql_name="input", default=None)),) ), ) collection_remove_products = sgqlc.types.Field( @@ -10999,9 +13612,7 @@ class Mutation(sgqlc.types.Type): ( "product_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productIds", default=None ), ), ) @@ -11016,9 +13627,7 @@ class Mutation(sgqlc.types.Type): ( "moves", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MoveInput))), - graphql_name="moves", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MoveInput))), graphql_name="moves", default=None ), ), ) @@ -11037,9 +13646,7 @@ class Mutation(sgqlc.types.Type): ( "company_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="companyIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="companyIds", default=None ), ), ) @@ -11066,10 +13673,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("company_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyId", default=None)), - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), ) ), ) @@ -11078,18 +13682,9 @@ class Mutation(sgqlc.types.Type): graphql_name="companyContactAssignRole", args=sgqlc.types.ArgDict( ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), - ( - "company_contact_role_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactRoleId", default=None), - ), - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), + ("company_contact_role_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactRoleId", default=None)), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), ) ), ) @@ -11098,10 +13693,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyContactAssignRoles", args=sgqlc.types.ArgDict( ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), ( "roles_to_assign", sgqlc.types.Arg( @@ -11119,10 +13711,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("company_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CompanyContactInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(CompanyContactInput), graphql_name="input", default=None)), ) ), ) @@ -11130,12 +13719,14 @@ class Mutation(sgqlc.types.Type): CompanyContactDeletePayload, graphql_name="companyContactDelete", args=sgqlc.types.ArgDict( - ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), - ) + (("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)),) + ), + ) + company_contact_remove_from_company = sgqlc.types.Field( + CompanyContactRemoveFromCompanyPayload, + graphql_name="companyContactRemoveFromCompany", + args=sgqlc.types.ArgDict( + (("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)),) ), ) company_contact_revoke_role = sgqlc.types.Field( @@ -11143,10 +13734,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyContactRevokeRole", args=sgqlc.types.ArgDict( ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), ( "company_contact_role_assignment_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactRoleAssignmentId", default=None), @@ -11159,10 +13747,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyContactRevokeRoles", args=sgqlc.types.ArgDict( ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), ( "role_assignment_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="roleAssignmentIds", default=None), @@ -11171,19 +13756,23 @@ class Mutation(sgqlc.types.Type): ) ), ) + company_contact_send_welcome_email = sgqlc.types.Field( + CompanyContactSendWelcomeEmailPayload, + graphql_name="companyContactSendWelcomeEmail", + args=sgqlc.types.ArgDict( + ( + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), + ("email", sgqlc.types.Arg(EmailInput, graphql_name="email", default=None)), + ) + ), + ) company_contact_update = sgqlc.types.Field( CompanyContactUpdatePayload, graphql_name="companyContactUpdate", args=sgqlc.types.ArgDict( ( - ( - "company_contact_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None), - ), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CompanyContactInput), graphql_name="input", default=None), - ), + ("company_contact_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyContactId", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(CompanyContactInput), graphql_name="input", default=None)), ) ), ) @@ -11195,9 +13784,7 @@ class Mutation(sgqlc.types.Type): ( "company_contact_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="companyContactIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="companyContactIds", default=None ), ), ) @@ -11221,10 +13808,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="locationId", default=None)), - ( - "address", - sgqlc.types.Arg(sgqlc.types.non_null(CompanyAddressInput), graphql_name="address", default=None), - ), + ("address", sgqlc.types.Arg(sgqlc.types.non_null(CompanyAddressInput), graphql_name="address", default=None)), ( "address_types", sgqlc.types.Arg( @@ -11241,10 +13825,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyLocationAssignRoles", args=sgqlc.types.ArgDict( ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), ( "roles_to_assign", sgqlc.types.Arg( @@ -11261,10 +13842,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyLocationAssignTaxExemptions", args=sgqlc.types.ArgDict( ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), ( "tax_exemptions", sgqlc.types.Arg( @@ -11282,10 +13860,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("company_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CompanyLocationInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(CompanyLocationInput), graphql_name="input", default=None)), ) ), ) @@ -11303,12 +13878,7 @@ class Mutation(sgqlc.types.Type): CompanyLocationDeletePayload, graphql_name="companyLocationDelete", args=sgqlc.types.ArgDict( - ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), - ) + (("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)),) ), ) company_location_revoke_roles = sgqlc.types.Field( @@ -11316,16 +13886,11 @@ class Mutation(sgqlc.types.Type): graphql_name="companyLocationRevokeRoles", args=sgqlc.types.ArgDict( ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), ( "roles_to_revoke", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="rolesToRevoke", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="rolesToRevoke", default=None ), ), ) @@ -11336,10 +13901,7 @@ class Mutation(sgqlc.types.Type): graphql_name="companyLocationRevokeTaxExemptions", args=sgqlc.types.ArgDict( ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), ( "tax_exemptions", sgqlc.types.Arg( @@ -11355,12 +13917,7 @@ class Mutation(sgqlc.types.Type): CompanyLocationRevokeTaxRegistrationPayload, graphql_name="companyLocationRevokeTaxRegistration", args=sgqlc.types.ArgDict( - ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), - ) + (("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)),) ), ) company_location_update = sgqlc.types.Field( @@ -11368,14 +13925,8 @@ class Mutation(sgqlc.types.Type): graphql_name="companyLocationUpdate", args=sgqlc.types.ArgDict( ( - ( - "company_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None), - ), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CompanyLocationUpdateInput), graphql_name="input", default=None), - ), + ("company_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="companyLocationId", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(CompanyLocationUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -11387,9 +13938,7 @@ class Mutation(sgqlc.types.Type): ( "company_location_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="companyLocationIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="companyLocationIds", default=None ), ), ) @@ -11445,21 +13994,45 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg( - sgqlc.types.non_null(CustomerEmailMarketingConsentUpdateInput), - graphql_name="input", - default=None, - ), + "input", + sgqlc.types.Arg(sgqlc.types.non_null(CustomerEmailMarketingConsentUpdateInput), graphql_name="input", default=None), + ), + ) + ), + ) + customer_generate_account_activation_url = sgqlc.types.Field( + CustomerGenerateAccountActivationUrlPayload, + graphql_name="customerGenerateAccountActivationUrl", + args=sgqlc.types.ArgDict((("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)),)), + ) + customer_merge = sgqlc.types.Field( + CustomerMergePayload, + graphql_name="customerMerge", + args=sgqlc.types.ArgDict( + ( + ("customer_one_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerOneId", default=None)), + ("customer_two_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerTwoId", default=None)), + ("override_fields", sgqlc.types.Arg(CustomerMergeOverrideFields, graphql_name="overrideFields", default=None)), + ) + ), + ) + customer_payment_method_create_from_duplication_data = sgqlc.types.Field( + CustomerPaymentMethodCreateFromDuplicationDataPayload, + graphql_name="customerPaymentMethodCreateFromDuplicationData", + args=sgqlc.types.ArgDict( + ( + ("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)), + ( + "billing_address", + sgqlc.types.Arg(sgqlc.types.non_null(MailingAddressInput), graphql_name="billingAddress", default=None), + ), + ( + "encrypted_duplication_data", + sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="encryptedDuplicationData", default=None), ), ) ), ) - customer_generate_account_activation_url = sgqlc.types.Field( - CustomerGenerateAccountActivationUrlPayload, - graphql_name="customerGenerateAccountActivationUrl", - args=sgqlc.types.ArgDict((("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)),)), - ) customer_payment_method_credit_card_create = sgqlc.types.Field( CustomerPaymentMethodCreditCardCreatePayload, graphql_name="customerPaymentMethodCreditCardCreate", @@ -11488,6 +14061,20 @@ class Mutation(sgqlc.types.Type): ) ), ) + customer_payment_method_get_duplication_data = sgqlc.types.Field( + CustomerPaymentMethodGetDuplicationDataPayload, + graphql_name="customerPaymentMethodGetDuplicationData", + args=sgqlc.types.ArgDict( + ( + ( + "customer_payment_method_id", + sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerPaymentMethodId", default=None), + ), + ("target_shop_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="targetShopId", default=None)), + ("target_customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="targetCustomerId", default=None)), + ) + ), + ) customer_payment_method_get_update_url = sgqlc.types.Field( CustomerPaymentMethodGetUpdateUrlPayload, graphql_name="customerPaymentMethodGetUpdateUrl", @@ -11507,10 +14094,7 @@ class Mutation(sgqlc.types.Type): ( ("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)), ("billing_address", sgqlc.types.Arg(MailingAddressInput, graphql_name="billingAddress", default=None)), - ( - "billing_agreement_id", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="billingAgreementId", default=None), - ), + ("billing_agreement_id", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="billingAgreementId", default=None)), ("inactive", sgqlc.types.Arg(Boolean, graphql_name="inactive", default=False)), ) ), @@ -11536,11 +14120,7 @@ class Mutation(sgqlc.types.Type): ("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)), ( "remote_reference", - sgqlc.types.Arg( - sgqlc.types.non_null(CustomerPaymentMethodRemoteInput), - graphql_name="remoteReference", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(CustomerPaymentMethodRemoteInput), graphql_name="remoteReference", default=None), ), ) ), @@ -11604,16 +14184,18 @@ class Mutation(sgqlc.types.Type): ) ), ) + customer_segment_members_query_create = sgqlc.types.Field( + CustomerSegmentMembersQueryCreatePayload, + graphql_name="customerSegmentMembersQueryCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(CustomerSegmentMembersQueryInput), graphql_name="input", default=None)),) + ), + ) customer_sms_marketing_consent_update = sgqlc.types.Field( CustomerSmsMarketingConsentUpdatePayload, graphql_name="customerSmsMarketingConsentUpdate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(CustomerSmsMarketingConsentUpdateInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(CustomerSmsMarketingConsentUpdateInput), graphql_name="input", default=None)),) ), ) customer_update = sgqlc.types.Field( @@ -11634,27 +14216,67 @@ class Mutation(sgqlc.types.Type): delegate_access_token_create = sgqlc.types.Field( DelegateAccessTokenCreatePayload, graphql_name="delegateAccessTokenCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(DelegateAccessTokenInput), graphql_name="input", default=None)),) + ), + ) + delegate_access_token_destroy = sgqlc.types.Field( + DelegateAccessTokenDestroyPayload, + graphql_name="delegateAccessTokenDestroy", + args=sgqlc.types.ArgDict( + (("access_token", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="accessToken", default=None)),) + ), + ) + delivery_customization_activation = sgqlc.types.Field( + DeliveryCustomizationActivationPayload, + graphql_name="deliveryCustomizationActivation", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(DelegateAccessTokenInput), graphql_name="input", default=None), + "ids", + sgqlc.types.Arg(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="ids", default=None), ), + ("enabled", sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="enabled", default=None)), ) ), ) - delivery_profile_create = sgqlc.types.Field( - "deliveryProfileCreatePayload", - graphql_name="deliveryProfileCreate", + delivery_customization_create = sgqlc.types.Field( + DeliveryCustomizationCreatePayload, + graphql_name="deliveryCustomizationCreate", + args=sgqlc.types.ArgDict( + ( + ( + "delivery_customization", + sgqlc.types.Arg(sgqlc.types.non_null(DeliveryCustomizationInput), graphql_name="deliveryCustomization", default=None), + ), + ) + ), + ) + delivery_customization_delete = sgqlc.types.Field( + DeliveryCustomizationDeletePayload, + graphql_name="deliveryCustomizationDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + delivery_customization_update = sgqlc.types.Field( + DeliveryCustomizationUpdatePayload, + graphql_name="deliveryCustomizationUpdate", args=sgqlc.types.ArgDict( ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( - "profile", - sgqlc.types.Arg(sgqlc.types.non_null(DeliveryProfileInput), graphql_name="profile", default=None), + "delivery_customization", + sgqlc.types.Arg(sgqlc.types.non_null(DeliveryCustomizationInput), graphql_name="deliveryCustomization", default=None), ), ) ), ) + delivery_profile_create = sgqlc.types.Field( + "deliveryProfileCreatePayload", + graphql_name="deliveryProfileCreate", + args=sgqlc.types.ArgDict( + (("profile", sgqlc.types.Arg(sgqlc.types.non_null(DeliveryProfileInput), graphql_name="profile", default=None)),) + ), + ) delivery_profile_remove = sgqlc.types.Field( "deliveryProfileRemovePayload", graphql_name="deliveryProfileRemove", @@ -11666,14 +14288,8 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "profile", - sgqlc.types.Arg(sgqlc.types.non_null(DeliveryProfileInput), graphql_name="profile", default=None), - ), - ( - "leave_legacy_mode_profiles", - sgqlc.types.Arg(Boolean, graphql_name="leaveLegacyModeProfiles", default=None), - ), + ("profile", sgqlc.types.Arg(sgqlc.types.non_null(DeliveryProfileInput), graphql_name="profile", default=None)), + ("leave_legacy_mode_profiles", sgqlc.types.Arg(Boolean, graphql_name="leaveLegacyModeProfiles", default=None)), ) ), ) @@ -11681,12 +14297,7 @@ class Mutation(sgqlc.types.Type): DeliverySettingUpdatePayload, graphql_name="deliverySettingUpdate", args=sgqlc.types.ArgDict( - ( - ( - "setting", - sgqlc.types.Arg(sgqlc.types.non_null(DeliverySettingInput), graphql_name="setting", default=None), - ), - ) + (("setting", sgqlc.types.Arg(sgqlc.types.non_null(DeliverySettingInput), graphql_name="setting", default=None)),) ), ) delivery_shipping_origin_assign = sgqlc.types.Field( @@ -11706,11 +14317,7 @@ class Mutation(sgqlc.types.Type): ( ( "automatic_app_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticAppInput), - graphql_name="automaticAppDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticAppInput), graphql_name="automaticAppDiscount", default=None), ), ) ), @@ -11723,11 +14330,7 @@ class Mutation(sgqlc.types.Type): ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( "automatic_app_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticAppInput), - graphql_name="automaticAppDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticAppInput), graphql_name="automaticAppDiscount", default=None), ), ) ), @@ -11739,11 +14342,7 @@ class Mutation(sgqlc.types.Type): ( ( "automatic_basic_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticBasicInput), - graphql_name="automaticBasicDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticBasicInput), graphql_name="automaticBasicDiscount", default=None), ), ) ), @@ -11756,11 +14355,7 @@ class Mutation(sgqlc.types.Type): ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( "automatic_basic_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticBasicInput), - graphql_name="automaticBasicDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticBasicInput), graphql_name="automaticBasicDiscount", default=None), ), ) ), @@ -11772,10 +14367,7 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -11786,11 +14378,7 @@ class Mutation(sgqlc.types.Type): ( ( "automatic_bxgy_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticBxgyInput), - graphql_name="automaticBxgyDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticBxgyInput), graphql_name="automaticBxgyDiscount", default=None), ), ) ), @@ -11803,11 +14391,7 @@ class Mutation(sgqlc.types.Type): ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( "automatic_bxgy_discount", - sgqlc.types.Arg( - sgqlc.types.non_null(DiscountAutomaticBxgyInput), - graphql_name="automaticBxgyDiscount", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(DiscountAutomaticBxgyInput), graphql_name="automaticBxgyDiscount", default=None), ), ) ), @@ -11884,10 +14468,7 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -11898,10 +14479,7 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -11912,10 +14490,7 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -11962,9 +14537,7 @@ class Mutation(sgqlc.types.Type): ( "free_shipping_code_discount", sgqlc.types.Arg( - sgqlc.types.non_null(DiscountCodeFreeShippingInput), - graphql_name="freeShippingCodeDiscount", - default=None, + sgqlc.types.non_null(DiscountCodeFreeShippingInput), graphql_name="freeShippingCodeDiscount", default=None ), ), ) @@ -11979,9 +14552,7 @@ class Mutation(sgqlc.types.Type): ( "free_shipping_code_discount", sgqlc.types.Arg( - sgqlc.types.non_null(DiscountCodeFreeShippingInput), - graphql_name="freeShippingCodeDiscount", - default=None, + sgqlc.types.non_null(DiscountCodeFreeShippingInput), graphql_name="freeShippingCodeDiscount", default=None ), ), ) @@ -11995,10 +14566,7 @@ class Mutation(sgqlc.types.Type): ("discount_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="discountId", default=None)), ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -12027,11 +14595,7 @@ class Mutation(sgqlc.types.Type): ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( "input", - sgqlc.types.Arg( - sgqlc.types.non_null(ShopifyPaymentsDisputeEvidenceUpdateInput), - graphql_name="input", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(ShopifyPaymentsDisputeEvidenceUpdateInput), graphql_name="input", default=None), ), ) ), @@ -12043,16 +14607,11 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ( "tags", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="tags", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags", default=None ), ), ) @@ -12065,10 +14624,7 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ) ), ) @@ -12079,16 +14635,11 @@ class Mutation(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(String, graphql_name="search", default=None)), ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ( - "ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None), - ), + ("ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="ids", default=None)), ( "tags", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="tags", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags", default=None ), ), ) @@ -12130,12 +14681,7 @@ class Mutation(sgqlc.types.Type): DraftOrderDeletePayload, graphql_name="draftOrderDelete", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(DraftOrderDeleteInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(DraftOrderDeleteInput), graphql_name="input", default=None)),) ), ) draft_order_duplicate = sgqlc.types.Field( @@ -12173,21 +14719,21 @@ class Mutation(sgqlc.types.Type): ) ), ) + event_bridge_server_pixel_update = sgqlc.types.Field( + EventBridgeServerPixelUpdatePayload, + graphql_name="eventBridgeServerPixelUpdate", + args=sgqlc.types.ArgDict((("arn", sgqlc.types.Arg(sgqlc.types.non_null(ARN), graphql_name="arn", default=None)),)), + ) event_bridge_webhook_subscription_create = sgqlc.types.Field( EventBridgeWebhookSubscriptionCreatePayload, graphql_name="eventBridgeWebhookSubscriptionCreate", args=sgqlc.types.ArgDict( ( - ( - "topic", - sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None), - ), + ("topic", sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None)), ( "webhook_subscription", sgqlc.types.Arg( - sgqlc.types.non_null(EventBridgeWebhookSubscriptionInput), - graphql_name="webhookSubscription", - default=None, + sgqlc.types.non_null(EventBridgeWebhookSubscriptionInput), graphql_name="webhookSubscription", default=None ), ), ) @@ -12202,9 +14748,21 @@ class Mutation(sgqlc.types.Type): ( "webhook_subscription", sgqlc.types.Arg( - sgqlc.types.non_null(EventBridgeWebhookSubscriptionInput), - graphql_name="webhookSubscription", - default=None, + sgqlc.types.non_null(EventBridgeWebhookSubscriptionInput), graphql_name="webhookSubscription", default=None + ), + ), + ) + ), + ) + file_acknowledge_update_failed = sgqlc.types.Field( + FileAcknowledgeUpdateFailedPayload, + graphql_name="fileAcknowledgeUpdateFailed", + args=sgqlc.types.ArgDict( + ( + ( + "file_ids", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="fileIds", default=None ), ), ) @@ -12218,9 +14776,7 @@ class Mutation(sgqlc.types.Type): ( "files", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FileCreateInput))), - graphql_name="files", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FileCreateInput))), graphql_name="files", default=None ), ), ) @@ -12234,9 +14790,7 @@ class Mutation(sgqlc.types.Type): ( "file_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="fileIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="fileIds", default=None ), ), ) @@ -12250,9 +14804,7 @@ class Mutation(sgqlc.types.Type): ( "files", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FileUpdateInput))), - graphql_name="files", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FileUpdateInput))), graphql_name="files", default=None ), ), ) @@ -12271,13 +14823,22 @@ class Mutation(sgqlc.types.Type): fulfillment_create_v2 = sgqlc.types.Field( FulfillmentCreateV2Payload, graphql_name="fulfillmentCreateV2", + args=sgqlc.types.ArgDict( + ( + ("fulfillment", sgqlc.types.Arg(sgqlc.types.non_null(FulfillmentV2Input), graphql_name="fulfillment", default=None)), + ("message", sgqlc.types.Arg(String, graphql_name="message", default=None)), + ) + ), + ) + fulfillment_event_create = sgqlc.types.Field( + FulfillmentEventCreatePayload, + graphql_name="fulfillmentEventCreate", args=sgqlc.types.ArgDict( ( ( - "fulfillment", - sgqlc.types.Arg(sgqlc.types.non_null(FulfillmentV2Input), graphql_name="fulfillment", default=None), + "fulfillment_event", + sgqlc.types.Arg(sgqlc.types.non_null(FulfillmentEventInput), graphql_name="fulfillmentEvent", default=None), ), - ("message", sgqlc.types.Arg(String, graphql_name="message", default=None)), ) ), ) @@ -12329,15 +14890,50 @@ class Mutation(sgqlc.types.Type): ) ), ) + fulfillment_order_line_items_prepared_for_pickup = sgqlc.types.Field( + FulfillmentOrderLineItemsPreparedForPickupPayload, + graphql_name="fulfillmentOrderLineItemsPreparedForPickup", + args=sgqlc.types.ArgDict( + ( + ( + "input", + sgqlc.types.Arg( + sgqlc.types.non_null(FulfillmentOrderLineItemsPreparedForPickupInput), graphql_name="input", default=None + ), + ), + ) + ), + ) + fulfillment_order_merge = sgqlc.types.Field( + FulfillmentOrderMergePayload, + graphql_name="fulfillmentOrderMerge", + args=sgqlc.types.ArgDict( + ( + ( + "fulfillment_order_merge_inputs", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderMergeInput))), + graphql_name="fulfillmentOrderMergeInputs", + default=None, + ), + ), + ) + ), + ) fulfillment_order_move = sgqlc.types.Field( FulfillmentOrderMovePayload, graphql_name="fulfillmentOrderMove", args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("new_location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="newLocationId", default=None)), ( - "new_location_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="newLocationId", default=None), + "fulfillment_order_line_items", + sgqlc.types.Arg( + sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemInput)), + graphql_name="fulfillmentOrderLineItems", + default=None, + ), ), ) ), @@ -12368,9 +14964,7 @@ class Mutation(sgqlc.types.Type): ( "line_items", sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(IncomingRequestLineItemInput)), - graphql_name="lineItems", - default=None, + sgqlc.types.list_of(sgqlc.types.non_null(IncomingRequestLineItemInput)), graphql_name="lineItems", default=None ), ), ) @@ -12379,7 +14973,12 @@ class Mutation(sgqlc.types.Type): fulfillment_order_release_hold = sgqlc.types.Field( FulfillmentOrderReleaseHoldPayload, graphql_name="fulfillmentOrderReleaseHold", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("external_id", sgqlc.types.Arg(String, graphql_name="externalId", default=None)), + ) + ), ) fulfillment_order_reschedule = sgqlc.types.Field( FulfillmentOrderReschedulePayload, @@ -12391,6 +14990,22 @@ class Mutation(sgqlc.types.Type): ) ), ) + fulfillment_order_split = sgqlc.types.Field( + FulfillmentOrderSplitPayload, + graphql_name="fulfillmentOrderSplit", + args=sgqlc.types.ArgDict( + ( + ( + "fulfillment_order_splits", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderSplitInput))), + graphql_name="fulfillmentOrderSplits", + default=None, + ), + ), + ) + ), + ) fulfillment_order_submit_cancellation_request = sgqlc.types.Field( FulfillmentOrderSubmitCancellationRequestPayload, graphql_name="fulfillmentOrderSubmitCancellationRequest", @@ -12421,6 +15036,19 @@ class Mutation(sgqlc.types.Type): ) ), ) + fulfillment_orders_release_holds = sgqlc.types.Field( + FulfillmentOrdersReleaseHoldsPayload, + graphql_name="fulfillmentOrdersReleaseHolds", + args=sgqlc.types.ArgDict( + ( + ( + "ids", + sgqlc.types.Arg(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="ids", default=None), + ), + ("external_id", sgqlc.types.Arg(String, graphql_name="externalId", default=None)), + ) + ), + ) fulfillment_orders_set_fulfillment_deadline = sgqlc.types.Field( FulfillmentOrdersSetFulfillmentDeadlinePayload, graphql_name="fulfillmentOrdersSetFulfillmentDeadline", @@ -12434,10 +15062,7 @@ class Mutation(sgqlc.types.Type): default=None, ), ), - ( - "fulfillment_deadline", - sgqlc.types.Arg(sgqlc.types.non_null(DateTime), graphql_name="fulfillmentDeadline", default=None), - ), + ("fulfillment_deadline", sgqlc.types.Arg(sgqlc.types.non_null(DateTime), graphql_name="fulfillmentDeadline", default=None)), ) ), ) @@ -12447,11 +15072,11 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("name", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="name", default=None)), - ("callback_url", sgqlc.types.Arg(URL, graphql_name="callbackUrl", default=None)), + ("callback_url", sgqlc.types.Arg(sgqlc.types.non_null(URL), graphql_name="callbackUrl", default=None)), ("tracking_support", sgqlc.types.Arg(Boolean, graphql_name="trackingSupport", default=False)), ( "fulfillment_orders_opt_in", - sgqlc.types.Arg(Boolean, graphql_name="fulfillmentOrdersOptIn", default=False), + sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="fulfillmentOrdersOptIn", default=None), ), ("permits_sku_sharing", sgqlc.types.Arg(Boolean, graphql_name="permitsSkuSharing", default=False)), ("inventory_management", sgqlc.types.Arg(Boolean, graphql_name="inventoryManagement", default=False)), @@ -12477,10 +15102,7 @@ class Mutation(sgqlc.types.Type): ("name", sgqlc.types.Arg(String, graphql_name="name", default=None)), ("callback_url", sgqlc.types.Arg(URL, graphql_name="callbackUrl", default=None)), ("tracking_support", sgqlc.types.Arg(Boolean, graphql_name="trackingSupport", default=None)), - ( - "fulfillment_orders_opt_in", - sgqlc.types.Arg(Boolean, graphql_name="fulfillmentOrdersOptIn", default=None), - ), + ("fulfillment_orders_opt_in", sgqlc.types.Arg(Boolean, graphql_name="fulfillmentOrdersOptIn", default=None)), ("permits_sku_sharing", sgqlc.types.Arg(Boolean, graphql_name="permitsSkuSharing", default=None)), ) ), @@ -12490,10 +15112,7 @@ class Mutation(sgqlc.types.Type): graphql_name="fulfillmentTrackingInfoUpdateV2", args=sgqlc.types.ArgDict( ( - ( - "fulfillment_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="fulfillmentId", default=None), - ), + ("fulfillment_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="fulfillmentId", default=None)), ( "tracking_info_input", sgqlc.types.Arg(sgqlc.types.non_null(FulfillmentTrackingInput), graphql_name="trackingInfoInput", default=None), @@ -12520,10 +15139,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(GiftCardUpdateInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(GiftCardUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -12532,42 +15148,18 @@ class Mutation(sgqlc.types.Type): graphql_name="inventoryActivate", args=sgqlc.types.ArgDict( ( - ( - "inventory_item_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None), - ), + ("inventory_item_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None)), ("location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="locationId", default=None)), ("available", sgqlc.types.Arg(Int, graphql_name="available", default=None)), + ("on_hand", sgqlc.types.Arg(Int, graphql_name="onHand", default=None)), ) ), ) - inventory_adjust_quantity = sgqlc.types.Field( - InventoryAdjustQuantityPayload, - graphql_name="inventoryAdjustQuantity", - args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(InventoryAdjustQuantityInput), graphql_name="input", default=None), - ), - ) - ), - ) - inventory_bulk_adjust_quantity_at_location = sgqlc.types.Field( - InventoryBulkAdjustQuantityAtLocationPayload, - graphql_name="inventoryBulkAdjustQuantityAtLocation", + inventory_adjust_quantities = sgqlc.types.Field( + InventoryAdjustQuantitiesPayload, + graphql_name="inventoryAdjustQuantities", args=sgqlc.types.ArgDict( - ( - ( - "inventory_item_adjustments", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(InventoryAdjustItemInput))), - graphql_name="inventoryItemAdjustments", - default=None, - ), - ), - ("location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="locationId", default=None)), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(InventoryAdjustQuantitiesInput), graphql_name="input", default=None)),) ), ) inventory_bulk_toggle_activation = sgqlc.types.Field( @@ -12575,10 +15167,7 @@ class Mutation(sgqlc.types.Type): graphql_name="inventoryBulkToggleActivation", args=sgqlc.types.ArgDict( ( - ( - "inventory_item_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None), - ), + ("inventory_item_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None)), ( "inventory_item_updates", sgqlc.types.Arg( @@ -12594,12 +15183,7 @@ class Mutation(sgqlc.types.Type): InventoryDeactivatePayload, graphql_name="inventoryDeactivate", args=sgqlc.types.ArgDict( - ( - ( - "inventory_level_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryLevelId", default=None), - ), - ) + (("inventory_level_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryLevelId", default=None)),) ), ) inventory_item_update = sgqlc.types.Field( @@ -12608,13 +15192,24 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(InventoryItemUpdateInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(InventoryItemUpdateInput), graphql_name="input", default=None)), ) ), ) + inventory_move_quantities = sgqlc.types.Field( + InventoryMoveQuantitiesPayload, + graphql_name="inventoryMoveQuantities", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(InventoryMoveQuantitiesInput), graphql_name="input", default=None)),) + ), + ) + inventory_set_on_hand_quantities = sgqlc.types.Field( + InventorySetOnHandQuantitiesPayload, + graphql_name="inventorySetOnHandQuantities", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(InventorySetOnHandQuantitiesInput), graphql_name="input", default=None)),) + ), + ) location_activate = sgqlc.types.Field( LocationActivatePayload, graphql_name="locationActivate", @@ -12650,6 +15245,25 @@ class Mutation(sgqlc.types.Type): ) ), ) + location_local_pickup_disable = sgqlc.types.Field( + LocationLocalPickupDisablePayload, + graphql_name="locationLocalPickupDisable", + args=sgqlc.types.ArgDict((("location_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="locationId", default=None)),)), + ) + location_local_pickup_enable = sgqlc.types.Field( + LocationLocalPickupEnablePayload, + graphql_name="locationLocalPickupEnable", + args=sgqlc.types.ArgDict( + ( + ( + "local_pickup_settings", + sgqlc.types.Arg( + sgqlc.types.non_null(DeliveryLocationLocalPickupEnableInput), graphql_name="localPickupSettings", default=None + ), + ), + ) + ), + ) market_create = sgqlc.types.Field( MarketCreatePayload, graphql_name="marketCreate", @@ -12663,10 +15277,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("market_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="marketId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MarketCurrencySettingsUpdateInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(MarketCurrencySettingsUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -12709,9 +15320,7 @@ class Mutation(sgqlc.types.Type): ( "market_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="marketIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="marketIds", default=None ), ), ) @@ -12784,36 +15393,21 @@ class Mutation(sgqlc.types.Type): MarketingActivityCreatePayload, graphql_name="marketingActivityCreate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityCreateInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityCreateInput), graphql_name="input", default=None)),) ), ) marketing_activity_create_external = sgqlc.types.Field( MarketingActivityCreateExternalPayload, graphql_name="marketingActivityCreateExternal", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityCreateExternalInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityCreateExternalInput), graphql_name="input", default=None)),) ), ) marketing_activity_update = sgqlc.types.Field( MarketingActivityUpdatePayload, graphql_name="marketingActivityUpdate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityUpdateInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityUpdateInput), graphql_name="input", default=None)),) ), ) marketing_activity_update_external = sgqlc.types.Field( @@ -12821,10 +15415,7 @@ class Mutation(sgqlc.types.Type): graphql_name="marketingActivityUpdateExternal", args=sgqlc.types.ArgDict( ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityUpdateExternalInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(MarketingActivityUpdateExternalInput), graphql_name="input", default=None)), ("marketing_activity_id", sgqlc.types.Arg(ID, graphql_name="marketingActivityId", default=None)), ("remote_id", sgqlc.types.Arg(String, graphql_name="remoteId", default=None)), ("utm", sgqlc.types.Arg(UTMInput, graphql_name="utm", default=None)), @@ -12836,10 +15427,7 @@ class Mutation(sgqlc.types.Type): graphql_name="marketingEngagementCreate", args=sgqlc.types.ArgDict( ( - ( - "marketing_activity_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="marketingActivityId", default=None), - ), + ("marketing_activity_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="marketingActivityId", default=None)), ( "marketing_engagement", sgqlc.types.Arg(sgqlc.types.non_null(MarketingEngagementInput), graphql_name="marketingEngagement", default=None), @@ -12851,12 +15439,7 @@ class Mutation(sgqlc.types.Type): MetafieldDefinitionCreatePayload, graphql_name="metafieldDefinitionCreate", args=sgqlc.types.ArgDict( - ( - ( - "definition", - sgqlc.types.Arg(sgqlc.types.non_null(MetafieldDefinitionInput), graphql_name="definition", default=None), - ), - ) + (("definition", sgqlc.types.Arg(sgqlc.types.non_null(MetafieldDefinitionInput), graphql_name="definition", default=None)),) ), ) metafield_definition_delete = sgqlc.types.Field( @@ -12865,10 +15448,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "delete_all_associated_metafields", - sgqlc.types.Arg(Boolean, graphql_name="deleteAllAssociatedMetafields", default=False), - ), + ("delete_all_associated_metafields", sgqlc.types.Arg(Boolean, graphql_name="deleteAllAssociatedMetafields", default=False)), ) ), ) @@ -12901,48 +15481,95 @@ class Mutation(sgqlc.types.Type): metafield_delete = sgqlc.types.Field( MetafieldDeletePayload, graphql_name="metafieldDelete", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(MetafieldDeleteInput), graphql_name="input", default=None)),) + ), + ) + metafields_set = sgqlc.types.Field( + MetafieldsSetPayload, + graphql_name="metafieldsSet", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MetafieldDeleteInput), graphql_name="input", default=None), + "metafields", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldsSetInput))), + graphql_name="metafields", + default=None, + ), ), ) ), ) - metafield_storefront_visibility_create = sgqlc.types.Field( - MetafieldStorefrontVisibilityCreatePayload, - graphql_name="metafieldStorefrontVisibilityCreate", + metaobject_bulk_delete = sgqlc.types.Field( + MetaobjectBulkDeletePayload, + graphql_name="metaobjectBulkDelete", + args=sgqlc.types.ArgDict( + (("where", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectBulkDeleteWhereCondition), graphql_name="where", default=None)),) + ), + ) + metaobject_create = sgqlc.types.Field( + MetaobjectCreatePayload, + graphql_name="metaobjectCreate", + args=sgqlc.types.ArgDict( + (("metaobject", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectCreateInput), graphql_name="metaobject", default=None)),) + ), + ) + metaobject_definition_create = sgqlc.types.Field( + MetaobjectDefinitionCreatePayload, + graphql_name="metaobjectDefinitionCreate", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(MetafieldStorefrontVisibilityInput), graphql_name="input", default=None), + "definition", + sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectDefinitionCreateInput), graphql_name="definition", default=None), ), ) ), ) - metafield_storefront_visibility_delete = sgqlc.types.Field( - MetafieldStorefrontVisibilityDeletePayload, - graphql_name="metafieldStorefrontVisibilityDelete", + metaobject_definition_delete = sgqlc.types.Field( + MetaobjectDefinitionDeletePayload, + graphql_name="metaobjectDefinitionDelete", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) - metafields_set = sgqlc.types.Field( - MetafieldsSetPayload, - graphql_name="metafieldsSet", + metaobject_definition_update = sgqlc.types.Field( + MetaobjectDefinitionUpdatePayload, + graphql_name="metaobjectDefinitionUpdate", args=sgqlc.types.ArgDict( ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ( - "metafields", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldsSetInput))), - graphql_name="metafields", - default=None, - ), + "definition", + sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectDefinitionUpdateInput), graphql_name="definition", default=None), ), ) ), ) + metaobject_delete = sgqlc.types.Field( + MetaobjectDeletePayload, + graphql_name="metaobjectDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + metaobject_update = sgqlc.types.Field( + MetaobjectUpdatePayload, + graphql_name="metaobjectUpdate", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("metaobject", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectUpdateInput), graphql_name="metaobject", default=None)), + ) + ), + ) + metaobject_upsert = sgqlc.types.Field( + MetaobjectUpsertPayload, + graphql_name="metaobjectUpsert", + args=sgqlc.types.ArgDict( + ( + ("handle", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectHandleInput), graphql_name="handle", default=None)), + ("metaobject", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectUpsertInput), graphql_name="metaobject", default=None)), + ) + ), + ) order_capture = sgqlc.types.Field( "OrderCapturePayload", graphql_name="orderCapture", @@ -12962,10 +15589,7 @@ class Mutation(sgqlc.types.Type): ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ("payment_schedule_id", sgqlc.types.Arg(ID, graphql_name="paymentScheduleId", default=None)), - ( - "idempotency_key", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="idempotencyKey", default=None), - ), + ("idempotency_key", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="idempotencyKey", default=None)), ("mandate_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="mandateId", default=None)), ("auto_capture", sgqlc.types.Arg(Boolean, graphql_name="autoCapture", default=True)), ) @@ -12993,10 +15617,7 @@ class Mutation(sgqlc.types.Type): ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), ("line_item_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="lineItemId", default=None)), - ( - "discount", - sgqlc.types.Arg(sgqlc.types.non_null(OrderEditAppliedDiscountInput), graphql_name="discount", default=None), - ), + ("discount", sgqlc.types.Arg(sgqlc.types.non_null(OrderEditAppliedDiscountInput), graphql_name="discount", default=None)), ) ), ) @@ -13035,10 +15656,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "discount_application_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="discountApplicationId", default=None), - ), + ("discount_application_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="discountApplicationId", default=None)), ) ), ) @@ -13068,12 +15686,7 @@ class Mutation(sgqlc.types.Type): "OrderMarkAsPaidPayload", graphql_name="orderMarkAsPaid", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(OrderMarkAsPaidInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(OrderMarkAsPaidInput), graphql_name="input", default=None)),) ), ) order_open = sgqlc.types.Field( @@ -13086,6 +15699,56 @@ class Mutation(sgqlc.types.Type): graphql_name="orderUpdate", args=sgqlc.types.ArgDict((("input", sgqlc.types.Arg(sgqlc.types.non_null(OrderInput), graphql_name="input", default=None)),)), ) + payment_customization_activation = sgqlc.types.Field( + "PaymentCustomizationActivationPayload", + graphql_name="paymentCustomizationActivation", + args=sgqlc.types.ArgDict( + ( + ( + "ids", + sgqlc.types.Arg(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="ids", default=None), + ), + ("enabled", sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="enabled", default=None)), + ) + ), + ) + payment_customization_create = sgqlc.types.Field( + "PaymentCustomizationCreatePayload", + graphql_name="paymentCustomizationCreate", + args=sgqlc.types.ArgDict( + ( + ( + "payment_customization", + sgqlc.types.Arg(sgqlc.types.non_null(PaymentCustomizationInput), graphql_name="paymentCustomization", default=None), + ), + ) + ), + ) + payment_customization_delete = sgqlc.types.Field( + "PaymentCustomizationDeletePayload", + graphql_name="paymentCustomizationDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + payment_customization_update = sgqlc.types.Field( + "PaymentCustomizationUpdatePayload", + graphql_name="paymentCustomizationUpdate", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ( + "payment_customization", + sgqlc.types.Arg(sgqlc.types.non_null(PaymentCustomizationInput), graphql_name="paymentCustomization", default=None), + ), + ) + ), + ) + payment_reminder_send = sgqlc.types.Field( + "PaymentReminderSendPayload", + graphql_name="paymentReminderSend", + args=sgqlc.types.ArgDict( + (("payment_schedule_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="paymentScheduleId", default=None)),) + ), + ) payment_terms_create = sgqlc.types.Field( "PaymentTermsCreatePayload", graphql_name="paymentTermsCreate", @@ -13094,11 +15757,7 @@ class Mutation(sgqlc.types.Type): ("reference_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="referenceId", default=None)), ( "payment_terms_attributes", - sgqlc.types.Arg( - sgqlc.types.non_null(PaymentTermsCreateInput), - graphql_name="paymentTermsAttributes", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(PaymentTermsCreateInput), graphql_name="paymentTermsAttributes", default=None), ), ) ), @@ -13107,36 +15766,21 @@ class Mutation(sgqlc.types.Type): "PaymentTermsDeletePayload", graphql_name="paymentTermsDelete", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PaymentTermsDeleteInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(PaymentTermsDeleteInput), graphql_name="input", default=None)),) ), ) payment_terms_update = sgqlc.types.Field( "PaymentTermsUpdatePayload", graphql_name="paymentTermsUpdate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PaymentTermsUpdateInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(PaymentTermsUpdateInput), graphql_name="input", default=None)),) ), ) price_list_create = sgqlc.types.Field( "PriceListCreatePayload", graphql_name="priceListCreate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PriceListCreateInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(PriceListCreateInput), graphql_name="input", default=None)),) ), ) price_list_delete = sgqlc.types.Field( @@ -13161,137 +15805,70 @@ class Mutation(sgqlc.types.Type): ) ), ) - price_list_fixed_prices_delete = sgqlc.types.Field( - "PriceListFixedPricesDeletePayload", - graphql_name="priceListFixedPricesDelete", + price_list_fixed_prices_by_product_update = sgqlc.types.Field( + "PriceListFixedPricesByProductUpdatePayload", + graphql_name="priceListFixedPricesByProductUpdate", args=sgqlc.types.ArgDict( ( - ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), ( - "variant_ids", + "prices_to_add", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="variantIds", - default=None, + sgqlc.types.list_of(sgqlc.types.non_null(PriceListProductPriceInput)), graphql_name="pricesToAdd", default=None ), ), - ) - ), - ) - price_list_update = sgqlc.types.Field( - "PriceListUpdatePayload", - graphql_name="priceListUpdate", - args=sgqlc.types.ArgDict( - ( - ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PriceListUpdateInput), graphql_name="input", default=None), - ), - ) - ), - ) - price_rule_activate = sgqlc.types.Field( - "PriceRuleActivatePayload", - graphql_name="priceRuleActivate", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) - price_rule_create = sgqlc.types.Field( - "PriceRuleCreatePayload", - graphql_name="priceRuleCreate", - args=sgqlc.types.ArgDict( - ( - ( - "price_rule", - sgqlc.types.Arg(sgqlc.types.non_null(PriceRuleInput), graphql_name="priceRule", default=None), - ), ( - "price_rule_discount_code", - sgqlc.types.Arg(PriceRuleDiscountCodeInput, graphql_name="priceRuleDiscountCode", default=None), + "prices_to_delete_by_product_ids", + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="pricesToDeleteByProductIds", default=None), ), + ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), ) ), ) - price_rule_deactivate = sgqlc.types.Field( - "PriceRuleDeactivatePayload", - graphql_name="priceRuleDeactivate", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) - price_rule_delete = sgqlc.types.Field( - "PriceRuleDeletePayload", - graphql_name="priceRuleDelete", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) - price_rule_discount_code_create = sgqlc.types.Field( - "PriceRuleDiscountCodeCreatePayload", - graphql_name="priceRuleDiscountCodeCreate", - args=sgqlc.types.ArgDict( - ( - ("price_rule_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceRuleId", default=None)), - ("code", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="code", default=None)), - ) - ), - ) - price_rule_discount_code_update = sgqlc.types.Field( - "PriceRuleDiscountCodeUpdatePayload", - graphql_name="priceRuleDiscountCodeUpdate", - args=sgqlc.types.ArgDict( - ( - ("price_rule_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceRuleId", default=None)), - ("code", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="code", default=None)), - ) - ), - ) - price_rule_update = sgqlc.types.Field( - "PriceRuleUpdatePayload", - graphql_name="priceRuleUpdate", + price_list_fixed_prices_delete = sgqlc.types.Field( + "PriceListFixedPricesDeletePayload", + graphql_name="priceListFixedPricesDelete", args=sgqlc.types.ArgDict( ( - ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "price_rule", - sgqlc.types.Arg(sgqlc.types.non_null(PriceRuleInput), graphql_name="priceRule", default=None), - ), + ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), ( - "price_rule_discount_code", - sgqlc.types.Arg(PriceRuleDiscountCodeInput, graphql_name="priceRuleDiscountCode", default=None), + "variant_ids", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="variantIds", default=None + ), ), ) ), ) - private_metafield_delete = sgqlc.types.Field( - "PrivateMetafieldDeletePayload", - graphql_name="privateMetafieldDelete", + price_list_fixed_prices_update = sgqlc.types.Field( + "PriceListFixedPricesUpdatePayload", + graphql_name="priceListFixedPricesUpdate", args=sgqlc.types.ArgDict( ( + ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PrivateMetafieldDeleteInput), graphql_name="input", default=None), + "prices_to_add", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(PriceListPriceInput))), + graphql_name="pricesToAdd", + default=None, + ), ), - ) - ), - ) - private_metafield_upsert = sgqlc.types.Field( - "PrivateMetafieldUpsertPayload", - graphql_name="privateMetafieldUpsert", - args=sgqlc.types.ArgDict( - ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(PrivateMetafieldInput), graphql_name="input", default=None), + "variant_ids_to_delete", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="variantIdsToDelete", default=None + ), ), ) ), ) - product_append_images = sgqlc.types.Field( - "ProductAppendImagesPayload", - graphql_name="productAppendImages", + price_list_update = sgqlc.types.Field( + "PriceListUpdatePayload", + graphql_name="priceListUpdate", args=sgqlc.types.ArgDict( ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(ProductAppendImagesInput), graphql_name="input", default=None), - ), + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(PriceListUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -13311,10 +15888,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("input", sgqlc.types.Arg(sgqlc.types.non_null(ProductInput), graphql_name="input", default=None)), - ( - "media", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CreateMediaInput)), graphql_name="media", default=None), - ), + ("media", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CreateMediaInput)), graphql_name="media", default=None)), ) ), ) @@ -13342,22 +15916,10 @@ class Mutation(sgqlc.types.Type): (("input", sgqlc.types.Arg(sgqlc.types.non_null(ProductDeleteInput), graphql_name="input", default=None)),) ), ) - product_delete_images = sgqlc.types.Field( - "ProductDeleteImagesPayload", - graphql_name="productDeleteImages", - args=sgqlc.types.ArgDict( - ( - ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "image_ids", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="imageIds", - default=None, - ), - ), - ) - ), + product_delete_async = sgqlc.types.Field( + "ProductDeleteAsyncPayload", + graphql_name="productDeleteAsync", + args=sgqlc.types.ArgDict((("product_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productId", default=None)),)), ) product_delete_media = sgqlc.types.Field( "ProductDeleteMediaPayload", @@ -13368,9 +15930,7 @@ class Mutation(sgqlc.types.Type): ( "media_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="mediaIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="mediaIds", default=None ), ), ) @@ -13388,13 +15948,31 @@ class Mutation(sgqlc.types.Type): ) ), ) - product_image_update = sgqlc.types.Field( - "ProductImageUpdatePayload", - graphql_name="productImageUpdate", + product_duplicate_async_v2 = sgqlc.types.Field( + "ProductDuplicateAsyncV2Payload", + graphql_name="productDuplicateAsyncV2", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(ProductDuplicateAsyncInput), graphql_name="input", default=None)),) + ), + ) + product_feed_create = sgqlc.types.Field( + "ProductFeedCreatePayload", + graphql_name="productFeedCreate", + args=sgqlc.types.ArgDict((("input", sgqlc.types.Arg(ProductFeedInput, graphql_name="input", default=None)),)), + ) + product_feed_delete = sgqlc.types.Field( + "ProductFeedDeletePayload", + graphql_name="productFeedDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + product_full_sync = sgqlc.types.Field( + "ProductFullSyncPayload", + graphql_name="productFullSync", args=sgqlc.types.ArgDict( ( - ("product_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productId", default=None)), - ("image", sgqlc.types.Arg(sgqlc.types.non_null(ImageInput), graphql_name="image", default=None)), + ("before_updated_at", sgqlc.types.Arg(DateTime, graphql_name="beforeUpdatedAt", default=None)), + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("updated_at_since", sgqlc.types.Arg(DateTime, graphql_name="updatedAtSince", default=None)), ) ), ) @@ -13432,23 +16010,6 @@ class Mutation(sgqlc.types.Type): ) ), ) - product_reorder_images = sgqlc.types.Field( - "ProductReorderImagesPayload", - graphql_name="productReorderImages", - args=sgqlc.types.ArgDict( - ( - ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "moves", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MoveInput))), - graphql_name="moves", - default=None, - ), - ), - ) - ), - ) product_reorder_media = sgqlc.types.Field( "ProductReorderMediaPayload", graphql_name="productReorderMedia", @@ -13458,9 +16019,7 @@ class Mutation(sgqlc.types.Type): ( "moves", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MoveInput))), - graphql_name="moves", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MoveInput))), graphql_name="moves", default=None ), ), ) @@ -13469,7 +16028,12 @@ class Mutation(sgqlc.types.Type): product_update = sgqlc.types.Field( "ProductUpdatePayload", graphql_name="productUpdate", - args=sgqlc.types.ArgDict((("input", sgqlc.types.Arg(sgqlc.types.non_null(ProductInput), graphql_name="input", default=None)),)), + args=sgqlc.types.ArgDict( + ( + ("input", sgqlc.types.Arg(sgqlc.types.non_null(ProductInput), graphql_name="input", default=None)), + ("media", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CreateMediaInput)), graphql_name="media", default=None)), + ) + ), ) product_update_media = sgqlc.types.Field( "ProductUpdateMediaPayload", @@ -13568,6 +16132,22 @@ class Mutation(sgqlc.types.Type): ) ), ) + product_variant_relationship_bulk_update = sgqlc.types.Field( + "ProductVariantRelationshipBulkUpdatePayload", + graphql_name="productVariantRelationshipBulkUpdate", + args=sgqlc.types.ArgDict( + ( + ( + "input", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductVariantRelationshipUpdateInput))), + graphql_name="input", + default=None, + ), + ), + ) + ), + ) product_variant_update = sgqlc.types.Field( "ProductVariantUpdatePayload", graphql_name="productVariantUpdate", @@ -13589,6 +16169,7 @@ class Mutation(sgqlc.types.Type): ), ), ("product_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productId", default=None)), + ("media", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CreateMediaInput)), graphql_name="media", default=None)), ) ), ) @@ -13600,9 +16181,7 @@ class Mutation(sgqlc.types.Type): ( "variants_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="variantsIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="variantsIds", default=None ), ), ("product_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productId", default=None)), @@ -13640,6 +16219,18 @@ class Mutation(sgqlc.types.Type): ), ), ("product_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productId", default=None)), + ("media", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CreateMediaInput)), graphql_name="media", default=None)), + ("allow_partial_updates", sgqlc.types.Arg(Boolean, graphql_name="allowPartialUpdates", default=False)), + ) + ), + ) + pub_sub_server_pixel_update = sgqlc.types.Field( + "PubSubServerPixelUpdatePayload", + graphql_name="pubSubServerPixelUpdate", + args=sgqlc.types.ArgDict( + ( + ("pub_sub_project", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="pubSubProject", default=None)), + ("pub_sub_topic", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="pubSubTopic", default=None)), ) ), ) @@ -13648,17 +16239,10 @@ class Mutation(sgqlc.types.Type): graphql_name="pubSubWebhookSubscriptionCreate", args=sgqlc.types.ArgDict( ( - ( - "topic", - sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None), - ), + ("topic", sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None)), ( "webhook_subscription", - sgqlc.types.Arg( - sgqlc.types.non_null(PubSubWebhookSubscriptionInput), - graphql_name="webhookSubscription", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(PubSubWebhookSubscriptionInput), graphql_name="webhookSubscription", default=None), ), ) ), @@ -13669,10 +16253,29 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "webhook_subscription", - sgqlc.types.Arg(PubSubWebhookSubscriptionInput, graphql_name="webhookSubscription", default=None), - ), + ("webhook_subscription", sgqlc.types.Arg(PubSubWebhookSubscriptionInput, graphql_name="webhookSubscription", default=None)), + ) + ), + ) + publication_create = sgqlc.types.Field( + "PublicationCreatePayload", + graphql_name="publicationCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(PublicationCreateInput), graphql_name="input", default=None)),) + ), + ) + publication_delete = sgqlc.types.Field( + "PublicationDeletePayload", + graphql_name="publicationDelete", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + publication_update = sgqlc.types.Field( + "PublicationUpdatePayload", + graphql_name="publicationUpdate", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(PublicationUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -13720,47 +16323,175 @@ class Mutation(sgqlc.types.Type): graphql_name="publishableUnpublishToCurrentChannel", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + quantity_rules_add = sgqlc.types.Field( + "QuantityRulesAddPayload", + graphql_name="quantityRulesAdd", + args=sgqlc.types.ArgDict( + ( + ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), + ( + "quantity_rules", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(QuantityRuleInput))), + graphql_name="quantityRules", + default=None, + ), + ), + ) + ), + ) + quantity_rules_delete = sgqlc.types.Field( + "QuantityRulesDeletePayload", + graphql_name="quantityRulesDelete", + args=sgqlc.types.ArgDict( + ( + ("price_list_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="priceListId", default=None)), + ( + "variant_ids", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="variantIds", default=None + ), + ), + ) + ), + ) refund_create = sgqlc.types.Field( "RefundCreatePayload", graphql_name="refundCreate", args=sgqlc.types.ArgDict((("input", sgqlc.types.Arg(sgqlc.types.non_null(RefundInput), graphql_name="input", default=None)),)), ) - saved_search_create = sgqlc.types.Field( - "SavedSearchCreatePayload", - graphql_name="savedSearchCreate", + return_approve_request = sgqlc.types.Field( + "ReturnApproveRequestPayload", + graphql_name="returnApproveRequest", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(ReturnApproveRequestInput), graphql_name="input", default=None)),) + ), + ) + return_cancel = sgqlc.types.Field( + "ReturnCancelPayload", + graphql_name="returnCancel", + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ("notify_customer", sgqlc.types.Arg(Boolean, graphql_name="notifyCustomer", default=False)), + ) + ), + ) + return_close = sgqlc.types.Field( + "ReturnClosePayload", + graphql_name="returnClose", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + return_create = sgqlc.types.Field( + "ReturnCreatePayload", + graphql_name="returnCreate", + args=sgqlc.types.ArgDict( + (("return_input", sgqlc.types.Arg(sgqlc.types.non_null(ReturnInput), graphql_name="returnInput", default=None)),) + ), + ) + return_decline_request = sgqlc.types.Field( + "ReturnDeclineRequestPayload", + graphql_name="returnDeclineRequest", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(ReturnDeclineRequestInput), graphql_name="input", default=None)),) + ), + ) + return_refund = sgqlc.types.Field( + "ReturnRefundPayload", + graphql_name="returnRefund", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchCreateInput), graphql_name="input", default=None), + "return_refund_input", + sgqlc.types.Arg(sgqlc.types.non_null(ReturnRefundInput), graphql_name="returnRefundInput", default=None), ), ) ), ) - saved_search_delete = sgqlc.types.Field( - "SavedSearchDeletePayload", - graphql_name="savedSearchDelete", + return_reopen = sgqlc.types.Field( + "ReturnReopenPayload", + graphql_name="returnReopen", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + return_request = sgqlc.types.Field( + "ReturnRequestPayload", + graphql_name="returnRequest", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(ReturnRequestInput), graphql_name="input", default=None)),) + ), + ) + reverse_delivery_create_with_shipping = sgqlc.types.Field( + "ReverseDeliveryCreateWithShippingPayload", + graphql_name="reverseDeliveryCreateWithShipping", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchDeleteInput), graphql_name="input", default=None), + "reverse_fulfillment_order_id", + sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="reverseFulfillmentOrderId", default=None), + ), + ( + "reverse_delivery_line_items", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ReverseDeliveryLineItemInput))), + graphql_name="reverseDeliveryLineItems", + default=None, + ), ), + ("tracking_input", sgqlc.types.Arg(ReverseDeliveryTrackingInput, graphql_name="trackingInput", default=None)), + ("label_input", sgqlc.types.Arg(ReverseDeliveryLabelInput, graphql_name="labelInput", default=None)), + ("notify_customer", sgqlc.types.Arg(Boolean, graphql_name="notifyCustomer", default=True)), ) ), ) - saved_search_update = sgqlc.types.Field( - "SavedSearchUpdatePayload", - graphql_name="savedSearchUpdate", + reverse_delivery_shipping_update = sgqlc.types.Field( + "ReverseDeliveryShippingUpdatePayload", + graphql_name="reverseDeliveryShippingUpdate", + args=sgqlc.types.ArgDict( + ( + ("reverse_delivery_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="reverseDeliveryId", default=None)), + ("tracking_input", sgqlc.types.Arg(ReverseDeliveryTrackingInput, graphql_name="trackingInput", default=None)), + ("label_input", sgqlc.types.Arg(ReverseDeliveryLabelInput, graphql_name="labelInput", default=None)), + ("notify_customer", sgqlc.types.Arg(Boolean, graphql_name="notifyCustomer", default=True)), + ) + ), + ) + reverse_fulfillment_order_dispose = sgqlc.types.Field( + "ReverseFulfillmentOrderDisposePayload", + graphql_name="reverseFulfillmentOrderDispose", args=sgqlc.types.ArgDict( ( ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchUpdateInput), graphql_name="input", default=None), + "disposition_inputs", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ReverseFulfillmentOrderDisposeInput))), + graphql_name="dispositionInputs", + default=None, + ), ), ) ), ) + saved_search_create = sgqlc.types.Field( + "SavedSearchCreatePayload", + graphql_name="savedSearchCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchCreateInput), graphql_name="input", default=None)),) + ), + ) + saved_search_delete = sgqlc.types.Field( + "SavedSearchDeletePayload", + graphql_name="savedSearchDelete", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchDeleteInput), graphql_name="input", default=None)),) + ), + ) + saved_search_update = sgqlc.types.Field( + "SavedSearchUpdatePayload", + graphql_name="savedSearchUpdate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(SavedSearchUpdateInput), graphql_name="input", default=None)),) + ), + ) script_tag_create = sgqlc.types.Field( "ScriptTagCreatePayload", graphql_name="scriptTagCreate", @@ -13816,9 +16547,7 @@ class Mutation(sgqlc.types.Type): ( "product_variant_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productVariantIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productVariantIds", default=None ), ), ) @@ -13833,9 +16562,7 @@ class Mutation(sgqlc.types.Type): ( "product_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productIds", default=None ), ), ) @@ -13846,10 +16573,7 @@ class Mutation(sgqlc.types.Type): graphql_name="sellingPlanGroupCreate", args=sgqlc.types.ArgDict( ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SellingPlanGroupInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SellingPlanGroupInput), graphql_name="input", default=None)), ("resources", sgqlc.types.Arg(SellingPlanGroupResourceInput, graphql_name="resources", default=None)), ) ), @@ -13868,9 +16592,7 @@ class Mutation(sgqlc.types.Type): ( "product_variant_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productVariantIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productVariantIds", default=None ), ), ) @@ -13885,9 +16607,7 @@ class Mutation(sgqlc.types.Type): ( "product_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="productIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="productIds", default=None ), ), ) @@ -13899,10 +16619,12 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ("input", sgqlc.types.Arg(SellingPlanGroupInput, graphql_name="input", default=None)), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SellingPlanGroupInput), graphql_name="input", default=None)), ) ), ) + server_pixel_create = sgqlc.types.Field("ServerPixelCreatePayload", graphql_name="serverPixelCreate") + server_pixel_delete = sgqlc.types.Field("ServerPixelDeletePayload", graphql_name="serverPixelDelete") shipping_package_delete = sgqlc.types.Field( "ShippingPackageDeletePayload", graphql_name="shippingPackageDelete", @@ -13916,7 +16638,15 @@ class Mutation(sgqlc.types.Type): shipping_package_update = sgqlc.types.Field( "ShippingPackageUpdatePayload", graphql_name="shippingPackageUpdate", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + args=sgqlc.types.ArgDict( + ( + ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), + ( + "shipping_package", + sgqlc.types.Arg(sgqlc.types.non_null(CustomShippingPackageInput), graphql_name="shippingPackage", default=None), + ), + ) + ), ) shop_locale_disable = sgqlc.types.Field( "ShopLocaleDisablePayload", @@ -13942,10 +16672,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("locale", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="locale", default=None)), - ( - "shop_locale", - sgqlc.types.Arg(sgqlc.types.non_null(ShopLocaleInput), graphql_name="shopLocale", default=None), - ), + ("shop_locale", sgqlc.types.Arg(sgqlc.types.non_null(ShopLocaleInput), graphql_name="shopLocale", default=None)), ) ), ) @@ -13953,12 +16680,14 @@ class Mutation(sgqlc.types.Type): "ShopPolicyUpdatePayload", graphql_name="shopPolicyUpdate", args=sgqlc.types.ArgDict( - ( - ( - "shop_policy", - sgqlc.types.Arg(sgqlc.types.non_null(ShopPolicyInput), graphql_name="shopPolicy", default=None), - ), - ) + (("shop_policy", sgqlc.types.Arg(sgqlc.types.non_null(ShopPolicyInput), graphql_name="shopPolicy", default=None)),) + ), + ) + shop_resource_feedback_create = sgqlc.types.Field( + "ShopResourceFeedbackCreatePayload", + graphql_name="shopResourceFeedbackCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(ResourceFeedbackCreateInput), graphql_name="input", default=None)),) ), ) staged_uploads_create = sgqlc.types.Field( @@ -13982,43 +16711,33 @@ class Mutation(sgqlc.types.Type): graphql_name="standardMetafieldDefinitionEnable", args=sgqlc.types.ArgDict( ( - ( - "owner_type", - sgqlc.types.Arg(sgqlc.types.non_null(MetafieldOwnerType), graphql_name="ownerType", default=None), - ), + ("owner_type", sgqlc.types.Arg(sgqlc.types.non_null(MetafieldOwnerType), graphql_name="ownerType", default=None)), ("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)), ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), ("key", sgqlc.types.Arg(String, graphql_name="key", default=None)), ("pin", sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="pin", default=False)), - ( - "visible_to_storefront_api", - sgqlc.types.Arg(Boolean, graphql_name="visibleToStorefrontApi", default=None), - ), + ("visible_to_storefront_api", sgqlc.types.Arg(Boolean, graphql_name="visibleToStorefrontApi", default=None)), + ("use_as_collection_condition", sgqlc.types.Arg(Boolean, graphql_name="useAsCollectionCondition", default=False)), ) ), ) + standard_metaobject_definition_enable = sgqlc.types.Field( + "StandardMetaobjectDefinitionEnablePayload", + graphql_name="standardMetaobjectDefinitionEnable", + args=sgqlc.types.ArgDict((("type", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="type", default=None)),)), + ) storefront_access_token_create = sgqlc.types.Field( "StorefrontAccessTokenCreatePayload", graphql_name="storefrontAccessTokenCreate", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(StorefrontAccessTokenInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(StorefrontAccessTokenInput), graphql_name="input", default=None)),) ), ) storefront_access_token_delete = sgqlc.types.Field( "StorefrontAccessTokenDeletePayload", graphql_name="storefrontAccessTokenDelete", args=sgqlc.types.ArgDict( - ( - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(StorefrontAccessTokenDeleteInput), graphql_name="input", default=None), - ), - ) + (("input", sgqlc.types.Arg(sgqlc.types.non_null(StorefrontAccessTokenDeleteInput), graphql_name="input", default=None)),) ), ) subscription_billing_attempt_create = sgqlc.types.Field( @@ -14033,9 +16752,7 @@ class Mutation(sgqlc.types.Type): ( "subscription_billing_attempt_input", sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingAttemptInput), - graphql_name="subscriptionBillingAttemptInput", - default=None, + sgqlc.types.non_null(SubscriptionBillingAttemptInput), graphql_name="subscriptionBillingAttemptInput", default=None ), ), ) @@ -14070,11 +16787,7 @@ class Mutation(sgqlc.types.Type): ( ( "billing_cycle_input", - sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCycleInput), - graphql_name="billingCycleInput", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionBillingCycleInput), graphql_name="billingCycleInput", default=None), ), ) ), @@ -14086,11 +16799,7 @@ class Mutation(sgqlc.types.Type): ( ( "billing_cycle_input", - sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCycleInput), - graphql_name="billingCycleInput", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionBillingCycleInput), graphql_name="billingCycleInput", default=None), ), ) ), @@ -14104,9 +16813,7 @@ class Mutation(sgqlc.types.Type): ( "target_selection", sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCyclesTargetSelection), - graphql_name="targetSelection", - default=None, + sgqlc.types.non_null(SubscriptionBillingCyclesTargetSelection), graphql_name="targetSelection", default=None ), ), ) @@ -14119,31 +16826,42 @@ class Mutation(sgqlc.types.Type): ( ( "billing_cycle_input", - sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCycleInput), - graphql_name="billingCycleInput", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionBillingCycleInput), graphql_name="billingCycleInput", default=None), ), ( "input", - sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCycleScheduleEditInput), - graphql_name="input", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionBillingCycleScheduleEditInput), graphql_name="input", default=None), ), ) ), ) + subscription_contract_atomic_create = sgqlc.types.Field( + "SubscriptionContractAtomicCreatePayload", + graphql_name="subscriptionContractAtomicCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionContractAtomicCreateInput), graphql_name="input", default=None)),) + ), + ) subscription_contract_create = sgqlc.types.Field( "SubscriptionContractCreatePayload", graphql_name="subscriptionContractCreate", + args=sgqlc.types.ArgDict( + (("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionContractCreateInput), graphql_name="input", default=None)),) + ), + ) + subscription_contract_product_change = sgqlc.types.Field( + "SubscriptionContractProductChangePayload", + graphql_name="subscriptionContractProductChange", args=sgqlc.types.ArgDict( ( + ( + "subscription_contract_id", + sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="subscriptionContractId", default=None), + ), + ("line_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="lineId", default=None)), ( "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionContractCreateInput), graphql_name="input", default=None), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionContractProductChangeInput), graphql_name="input", default=None), ), ) ), @@ -14174,10 +16892,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionManualDiscountInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionManualDiscountInput), graphql_name="input", default=None)), ) ), ) @@ -14208,10 +16923,7 @@ class Mutation(sgqlc.types.Type): ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), ("discount_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="discountId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionManualDiscountInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionManualDiscountInput), graphql_name="input", default=None)), ) ), ) @@ -14221,10 +16933,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionFreeShippingDiscountInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionFreeShippingDiscountInput), graphql_name="input", default=None)), ) ), ) @@ -14235,10 +16944,7 @@ class Mutation(sgqlc.types.Type): ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), ("discount_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="discountId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionFreeShippingDiscountInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionFreeShippingDiscountInput), graphql_name="input", default=None)), ) ), ) @@ -14248,10 +16954,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionLineInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionLineInput), graphql_name="input", default=None)), ) ), ) @@ -14272,10 +16975,7 @@ class Mutation(sgqlc.types.Type): ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), ("line_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="lineId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionLineUpdateInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionLineUpdateInput), graphql_name="input", default=None)), ) ), ) @@ -14285,10 +16985,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("draft_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="draftId", default=None)), - ( - "input", - sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionDraftInput), graphql_name="input", default=None), - ), + ("input", sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionDraftInput), graphql_name="input", default=None)), ) ), ) @@ -14301,9 +16998,7 @@ class Mutation(sgqlc.types.Type): ( "tags", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="tags", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags", default=None ), ), ) @@ -14318,14 +17013,17 @@ class Mutation(sgqlc.types.Type): ( "tags", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="tags", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags", default=None ), ), ) ), ) + tax_app_configure = sgqlc.types.Field( + "TaxAppConfigurePayload", + graphql_name="taxAppConfigure", + args=sgqlc.types.ArgDict((("ready", sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="ready", default=None)),)), + ) translations_register = sgqlc.types.Field( "TranslationsRegisterPayload", graphql_name="translationsRegister", @@ -14360,15 +17058,10 @@ class Mutation(sgqlc.types.Type): ( "locales", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="locales", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="locales", default=None ), ), - ( - "market_ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="marketIds", default=None), - ), + ("market_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="marketIds", default=None)), ) ), ) @@ -14380,11 +17073,7 @@ class Mutation(sgqlc.types.Type): ( ( "ids", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="ids", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="ids", default=None), ), ) ), @@ -14393,12 +17082,7 @@ class Mutation(sgqlc.types.Type): "UrlRedirectBulkDeleteBySavedSearchPayload", graphql_name="urlRedirectBulkDeleteBySavedSearch", args=sgqlc.types.ArgDict( - ( - ( - "saved_search_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="savedSearchId", default=None), - ), - ) + (("saved_search_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="savedSearchId", default=None)),) ), ) url_redirect_bulk_delete_by_search = sgqlc.types.Field( @@ -14410,12 +17094,7 @@ class Mutation(sgqlc.types.Type): "UrlRedirectCreatePayload", graphql_name="urlRedirectCreate", args=sgqlc.types.ArgDict( - ( - ( - "url_redirect", - sgqlc.types.Arg(sgqlc.types.non_null(UrlRedirectInput), graphql_name="urlRedirect", default=None), - ), - ) + (("url_redirect", sgqlc.types.Arg(sgqlc.types.non_null(UrlRedirectInput), graphql_name="urlRedirect", default=None)),) ), ) url_redirect_delete = sgqlc.types.Field( @@ -14439,10 +17118,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "url_redirect", - sgqlc.types.Arg(sgqlc.types.non_null(UrlRedirectInput), graphql_name="urlRedirect", default=None), - ), + ("url_redirect", sgqlc.types.Arg(sgqlc.types.non_null(UrlRedirectInput), graphql_name="urlRedirect", default=None)), ) ), ) @@ -14450,12 +17126,7 @@ class Mutation(sgqlc.types.Type): "WebPixelCreatePayload", graphql_name="webPixelCreate", args=sgqlc.types.ArgDict( - ( - ( - "web_pixel", - sgqlc.types.Arg(sgqlc.types.non_null(WebPixelInput), graphql_name="webPixel", default=None), - ), - ) + (("web_pixel", sgqlc.types.Arg(sgqlc.types.non_null(WebPixelInput), graphql_name="webPixel", default=None)),) ), ) web_pixel_delete = sgqlc.types.Field( @@ -14469,10 +17140,7 @@ class Mutation(sgqlc.types.Type): args=sgqlc.types.ArgDict( ( ("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)), - ( - "web_pixel", - sgqlc.types.Arg(sgqlc.types.non_null(WebPixelInput), graphql_name="webPixel", default=None), - ), + ("web_pixel", sgqlc.types.Arg(sgqlc.types.non_null(WebPixelInput), graphql_name="webPixel", default=None)), ) ), ) @@ -14481,10 +17149,7 @@ class Mutation(sgqlc.types.Type): graphql_name="webhookSubscriptionCreate", args=sgqlc.types.ArgDict( ( - ( - "topic", - sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None), - ), + ("topic", sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic", default=None)), ( "webhook_subscription", sgqlc.types.Arg(sgqlc.types.non_null(WebhookSubscriptionInput), graphql_name="webhookSubscription", default=None), @@ -14514,15 +17179,9 @@ class Mutation(sgqlc.types.Type): class MutationsStagedUploadTargetGenerateUploadParameter(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("name", "value") - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - value = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="value") - - -class Navigable(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("default_cursor",) - default_cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="defaultCursor") + __field_names__ = ("name", "value") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + value = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="value") class NavigationItem(sgqlc.types.Type): @@ -14533,18 +17192,6 @@ class NavigationItem(sgqlc.types.Type): url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") -class Node(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("id",) - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - - -class OnlineStorePreviewable(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("online_store_preview_url",) - online_store_preview_url = sgqlc.types.Field(URL, graphql_name="onlineStorePreviewUrl") - - class OrderApp(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("icon", "id", "name") @@ -14581,8 +17228,7 @@ class OrderCreateMandatePaymentPayload(sgqlc.types.Type): job = sgqlc.types.Field(Job, graphql_name="job") payment_reference_id = sgqlc.types.Field(String, graphql_name="paymentReferenceId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderCreateMandatePaymentUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderCreateMandatePaymentUserError"))), graphql_name="userErrors" ) @@ -14653,8 +17299,7 @@ class OrderInvoiceSendPayload(sgqlc.types.Type): __field_names__ = ("order", "user_errors") order = sgqlc.types.Field("Order", graphql_name="order") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderInvoiceSendUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderInvoiceSendUserError"))), graphql_name="userErrors" ) @@ -14793,6 +17438,83 @@ class PageInfo(sgqlc.types.Type): start_cursor = sgqlc.types.Field(String, graphql_name="startCursor") +class ParseError(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("code", "message", "range") + code = sgqlc.types.Field(sgqlc.types.non_null(ParseErrorCode), graphql_name="code") + message = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="message") + range = sgqlc.types.Field("ParseErrorRange", graphql_name="range") + + +class ParseErrorRange(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("end", "start") + end = sgqlc.types.Field(sgqlc.types.non_null(ErrorPosition), graphql_name="end") + start = sgqlc.types.Field(sgqlc.types.non_null(ErrorPosition), graphql_name="start") + + +class PaymentCustomizationActivationPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("ids", "user_errors") + ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="ids") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomizationError"))), graphql_name="userErrors" + ) + + +class PaymentCustomizationConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomizationEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomization"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class PaymentCustomizationCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("payment_customization", "user_errors") + payment_customization = sgqlc.types.Field("PaymentCustomization", graphql_name="paymentCustomization") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomizationError"))), graphql_name="userErrors" + ) + + +class PaymentCustomizationDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomizationError"))), graphql_name="userErrors" + ) + + +class PaymentCustomizationEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("PaymentCustomization"), graphql_name="node") + + +class PaymentCustomizationUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("payment_customization", "user_errors") + payment_customization = sgqlc.types.Field("PaymentCustomization", graphql_name="paymentCustomization") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentCustomizationError"))), graphql_name="userErrors" + ) + + +class PaymentReminderSendPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("success", "user_errors") + success = sgqlc.types.Field(Boolean, graphql_name="success") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentReminderSendUserError"))), graphql_name="userErrors" + ) + + class PaymentScheduleConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -14812,8 +17534,7 @@ class PaymentSettings(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("supported_digital_wallets",) supported_digital_wallets = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DigitalWallet))), - graphql_name="supportedDigitalWallets", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DigitalWallet))), graphql_name="supportedDigitalWallets" ) @@ -14822,8 +17543,7 @@ class PaymentTermsCreatePayload(sgqlc.types.Type): __field_names__ = ("payment_terms", "user_errors") payment_terms = sgqlc.types.Field("PaymentTerms", graphql_name="paymentTerms") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsCreateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsCreateUserError"))), graphql_name="userErrors" ) @@ -14832,8 +17552,7 @@ class PaymentTermsDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_id", "user_errors") deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsDeleteUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsDeleteUserError"))), graphql_name="userErrors" ) @@ -14842,11 +17561,25 @@ class PaymentTermsUpdatePayload(sgqlc.types.Type): __field_names__ = ("payment_terms", "user_errors") payment_terms = sgqlc.types.Field("PaymentTerms", graphql_name="paymentTerms") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsUpdateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsUpdateUserError"))), graphql_name="userErrors" ) +class PolarisVizDataPoint(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("key", "value") + key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") + value = sgqlc.types.Field(String, graphql_name="value") + + +class PolarisVizDataSeries(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("data", "is_comparison", "name") + data = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(PolarisVizDataPoint))), graphql_name="data") + is_comparison = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isComparison") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + + class PriceListAdjustment(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("type", "value") @@ -14854,6 +17587,12 @@ class PriceListAdjustment(sgqlc.types.Type): value = sgqlc.types.Field(sgqlc.types.non_null(Float), graphql_name="value") +class PriceListAdjustmentSettings(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("compare_at_mode",) + compare_at_mode = sgqlc.types.Field(sgqlc.types.non_null(PriceListCompareAtMode), graphql_name="compareAtMode") + + class PriceListConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -14862,13 +17601,6 @@ class PriceListConnection(sgqlc.types.relay.Connection): page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class PriceListContextRule(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("countries", "market") - countries = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CountryCode))), graphql_name="countries") - market = sgqlc.types.Field("Market", graphql_name="market") - - class PriceListCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("price_list", "user_errors") @@ -14899,7 +17631,20 @@ class PriceListFixedPricesAddPayload(sgqlc.types.Type): __field_names__ = ("prices", "user_errors") prices = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPrice")), graphql_name="prices") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPriceUserError"))), + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPriceUserError"))), graphql_name="userErrors" + ) + + +class PriceListFixedPricesByProductUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("price_list", "prices_to_add_products", "prices_to_delete_products", "user_errors") + price_list = sgqlc.types.Field("PriceList", graphql_name="priceList") + prices_to_add_products = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("Product")), graphql_name="pricesToAddProducts") + prices_to_delete_products = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("Product")), graphql_name="pricesToDeleteProducts" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListFixedPricesByProductBulkUpdateUserError"))), graphql_name="userErrors", ) @@ -14911,15 +17656,28 @@ class PriceListFixedPricesDeletePayload(sgqlc.types.Type): sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedFixedPriceVariantIds" ) user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPriceUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPriceUserError"))), graphql_name="userErrors" + ) + + +class PriceListFixedPricesUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_fixed_price_variant_ids", "price_list", "prices_added", "user_errors") + deleted_fixed_price_variant_ids = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedFixedPriceVariantIds" + ) + price_list = sgqlc.types.Field("PriceList", graphql_name="priceList") + prices_added = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPrice")), graphql_name="pricesAdded") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceListPriceUserError"))), graphql_name="userErrors" ) class PriceListParent(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("adjustment",) + __field_names__ = ("adjustment", "settings") adjustment = sgqlc.types.Field(sgqlc.types.non_null(PriceListAdjustment), graphql_name="adjustment") + settings = sgqlc.types.Field(sgqlc.types.non_null(PriceListAdjustmentSettings), graphql_name="settings") class PriceListPrice(sgqlc.types.Type): @@ -14960,8 +17718,7 @@ class PriceRuleActivatePayload(sgqlc.types.Type): __field_names__ = ("price_rule", "price_rule_user_errors") price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -14979,8 +17736,7 @@ class PriceRuleCreatePayload(sgqlc.types.Type): price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_discount_code = sgqlc.types.Field("PriceRuleDiscountCode", graphql_name="priceRuleDiscountCode") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -15012,8 +17768,7 @@ class PriceRuleDeactivatePayload(sgqlc.types.Type): __field_names__ = ("price_rule", "price_rule_user_errors") price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -15022,8 +17777,7 @@ class PriceRuleDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_price_rule_id", "price_rule_user_errors", "shop") deleted_price_rule_id = sgqlc.types.Field(ID, graphql_name="deletedPriceRuleId") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) shop = sgqlc.types.Field(sgqlc.types.non_null("Shop"), graphql_name="shop") @@ -15032,8 +17786,7 @@ class PriceRuleDiscountCodeConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleDiscountCodeEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleDiscountCodeEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleDiscountCode"))), graphql_name="nodes" @@ -15047,8 +17800,7 @@ class PriceRuleDiscountCodeCreatePayload(sgqlc.types.Type): price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_discount_code = sgqlc.types.Field("PriceRuleDiscountCode", graphql_name="priceRuleDiscountCode") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -15065,8 +17817,7 @@ class PriceRuleDiscountCodeUpdatePayload(sgqlc.types.Type): price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_discount_code = sgqlc.types.Field("PriceRuleDiscountCode", graphql_name="priceRuleDiscountCode") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -15235,8 +17986,7 @@ class PriceRuleUpdatePayload(sgqlc.types.Type): price_rule = sgqlc.types.Field("PriceRule", graphql_name="priceRule") price_rule_discount_code = sgqlc.types.Field("PriceRuleDiscountCode", graphql_name="priceRuleDiscountCode") price_rule_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), - graphql_name="priceRuleUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PriceRuleUserError"))), graphql_name="priceRuleUserErrors" ) @@ -15301,8 +18051,7 @@ class ProductChangeStatusPayload(sgqlc.types.Type): __field_names__ = ("product", "user_errors") product = sgqlc.types.Field("Product", graphql_name="product") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductChangeStatusUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductChangeStatusUserError"))), graphql_name="userErrors" ) @@ -15316,7 +18065,8 @@ class ProductConnection(sgqlc.types.relay.Connection): class ProductContextualPricing(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("max_variant_pricing", "min_variant_pricing", "price_range") + __field_names__ = ("fixed_quantity_rules_count", "max_variant_pricing", "min_variant_pricing", "price_range") + fixed_quantity_rules_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="fixedQuantityRulesCount") max_variant_pricing = sgqlc.types.Field("ProductVariantContextualPricing", graphql_name="maxVariantPricing") min_variant_pricing = sgqlc.types.Field("ProductVariantContextualPricing", graphql_name="minVariantPricing") price_range = sgqlc.types.Field(sgqlc.types.non_null("ProductPriceRangeV2"), graphql_name="priceRange") @@ -15327,8 +18077,7 @@ class ProductCreateMediaPayload(sgqlc.types.Type): __field_names__ = ("media", "media_user_errors", "product") media = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(Media)), graphql_name="media") media_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), - graphql_name="mediaUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), graphql_name="mediaUserErrors" ) product = sgqlc.types.Field("Product", graphql_name="product") @@ -15341,6 +18090,16 @@ class ProductCreatePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class ProductDeleteAsyncPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("delete_product_id", "job", "user_errors") + delete_product_id = sgqlc.types.Field(ID, graphql_name="deleteProductId") + job = sgqlc.types.Field(Job, graphql_name="job") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductDeleteUserError"))), graphql_name="userErrors" + ) + + class ProductDeleteImagesPayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("deleted_image_ids", "product", "user_errors") @@ -15357,8 +18116,7 @@ class ProductDeleteMediaPayload(sgqlc.types.Type): deleted_media_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedMediaIds") deleted_product_image_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedProductImageIds") media_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), - graphql_name="mediaUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), graphql_name="mediaUserErrors" ) product = sgqlc.types.Field("Product", graphql_name="product") @@ -15371,6 +18129,33 @@ class ProductDeletePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class ProductDuplicateAsyncPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("duplicated_product_id", "job", "user_errors") + duplicated_product_id = sgqlc.types.Field(ID, graphql_name="duplicatedProductId") + job = sgqlc.types.Field(Job, graphql_name="job") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductDuplicateUserError"))), graphql_name="userErrors" + ) + + +class ProductDuplicateAsyncV2Payload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("duplicated_product_id", "product_duplicate_job_id", "user_errors") + duplicated_product_id = sgqlc.types.Field(ID, graphql_name="duplicatedProductId") + product_duplicate_job_id = sgqlc.types.Field(ID, graphql_name="productDuplicateJobId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductDuplicateUserError"))), graphql_name="userErrors" + ) + + +class ProductDuplicateJob(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("done", "id") + done = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="done") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + + class ProductDuplicatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("image_job", "new_product", "shop", "user_errors") @@ -15387,6 +18172,47 @@ class ProductEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("Product"), graphql_name="node") +class ProductFeedConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductFeedEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductFeed"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ProductFeedCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("product_feed", "user_errors") + product_feed = sgqlc.types.Field("ProductFeed", graphql_name="productFeed") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductFeedCreateUserError"))), graphql_name="userErrors" + ) + + +class ProductFeedDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductFeedDeleteUserError"))), graphql_name="userErrors" + ) + + +class ProductFeedEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ProductFeed"), graphql_name="node") + + +class ProductFullSyncPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("user_errors",) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductFullSyncUserError"))), graphql_name="userErrors" + ) + + class ProductImageUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("image", "user_errors") @@ -15399,8 +18225,7 @@ class ProductJoinSellingPlanGroupsPayload(sgqlc.types.Type): __field_names__ = ("product", "user_errors") product = sgqlc.types.Field("Product", graphql_name="product") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -15409,8 +18234,7 @@ class ProductLeaveSellingPlanGroupsPayload(sgqlc.types.Type): __field_names__ = ("product", "user_errors") product = sgqlc.types.Field("Product", graphql_name="product") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -15474,8 +18298,7 @@ class ProductReorderMediaPayload(sgqlc.types.Type): __field_names__ = ("job", "media_user_errors") job = sgqlc.types.Field(Job, graphql_name="job") media_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), - graphql_name="mediaUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), graphql_name="mediaUserErrors" ) @@ -15502,8 +18325,7 @@ class ProductUpdateMediaPayload(sgqlc.types.Type): __field_names__ = ("media", "media_user_errors", "product") media = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(Media)), graphql_name="media") media_user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), - graphql_name="mediaUserErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MediaUserError"))), graphql_name="mediaUserErrors" ) product = sgqlc.types.Field("Product", graphql_name="product") @@ -15525,6 +18347,25 @@ class ProductVariantAppendMediaPayload(sgqlc.types.Type): ) +class ProductVariantComponentConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantComponentEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantComponent"))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ProductVariantComponentEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ProductVariantComponent"), graphql_name="node") + + class ProductVariantConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -15535,9 +18376,10 @@ class ProductVariantConnection(sgqlc.types.relay.Connection): class ProductVariantContextualPricing(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("compare_at_price", "price") + __field_names__ = ("compare_at_price", "price", "quantity_rule") compare_at_price = sgqlc.types.Field(MoneyV2, graphql_name="compareAtPrice") price = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="price") + quantity_rule = sgqlc.types.Field(sgqlc.types.non_null("QuantityRule"), graphql_name="quantityRule") class ProductVariantCreatePayload(sgqlc.types.Type): @@ -15578,8 +18420,7 @@ class ProductVariantJoinSellingPlanGroupsPayload(sgqlc.types.Type): __field_names__ = ("product_variant", "user_errors") product_variant = sgqlc.types.Field("ProductVariant", graphql_name="productVariant") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -15588,8 +18429,7 @@ class ProductVariantLeaveSellingPlanGroupsPayload(sgqlc.types.Type): __field_names__ = ("product_variant", "user_errors") product_variant = sgqlc.types.Field("ProductVariant", graphql_name="productVariant") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -15604,8 +18444,7 @@ class ProductVariantPricePairConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantPricePairEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantPricePairEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductVariantPricePair))), graphql_name="nodes" @@ -15620,6 +18459,18 @@ class ProductVariantPricePairEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null(ProductVariantPricePair), graphql_name="node") +class ProductVariantRelationshipBulkUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("parent_product_variants", "user_errors") + parent_product_variants = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("ProductVariant")), graphql_name="parentProductVariants" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantRelationshipBulkUpdateUserError"))), + graphql_name="userErrors", + ) + + class ProductVariantUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("product", "product_variant", "user_errors") @@ -15634,8 +18485,7 @@ class ProductVariantsBulkCreatePayload(sgqlc.types.Type): product = sgqlc.types.Field("Product", graphql_name="product") product_variants = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariant")), graphql_name="productVariants") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkCreateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkCreateUserError"))), graphql_name="userErrors" ) @@ -15644,8 +18494,7 @@ class ProductVariantsBulkDeletePayload(sgqlc.types.Type): __field_names__ = ("product", "user_errors") product = sgqlc.types.Field("Product", graphql_name="product") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkDeleteUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkDeleteUserError"))), graphql_name="userErrors" ) @@ -15654,8 +18503,7 @@ class ProductVariantsBulkReorderPayload(sgqlc.types.Type): __field_names__ = ("product", "user_errors") product = sgqlc.types.Field("Product", graphql_name="product") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkReorderUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkReorderUserError"))), graphql_name="userErrors" ) @@ -15665,8 +18513,16 @@ class ProductVariantsBulkUpdatePayload(sgqlc.types.Type): product = sgqlc.types.Field("Product", graphql_name="product") product_variants = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariant")), graphql_name="productVariants") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkUpdateUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ProductVariantsBulkUpdateUserError"))), graphql_name="userErrors" + ) + + +class PubSubServerPixelUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("server_pixel", "user_errors") + server_pixel = sgqlc.types.Field("ServerPixel", graphql_name="serverPixel") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsServerPixelUserError"))), graphql_name="userErrors" ) @@ -15691,85 +18547,44 @@ class PubSubWebhookSubscriptionUpdatePayload(sgqlc.types.Type): class PublicationConnection(sgqlc.types.relay.Connection): - __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublicationEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Publication"))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") - - -class PublicationEdge(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="node") - - -class Publishable(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ( - "available_publication_count", - "publication_count", - "published_on_current_publication", - "published_on_publication", - "resource_publications", - "resource_publications_v2", - "unpublished_publications", - ) - available_publication_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="availablePublicationCount") - publication_count = sgqlc.types.Field( - sgqlc.types.non_null(Int), - graphql_name="publicationCount", - args=sgqlc.types.ArgDict((("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)),)), - ) - published_on_current_publication = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="publishedOnCurrentPublication") - published_on_publication = sgqlc.types.Field( - sgqlc.types.non_null(Boolean), - graphql_name="publishedOnPublication", - args=sgqlc.types.ArgDict( - (("publication_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="publicationId", default=None)),) - ), - ) - resource_publications = sgqlc.types.Field( - sgqlc.types.non_null("ResourcePublicationConnection"), - graphql_name="resourcePublications", - args=sgqlc.types.ArgDict( - ( - ("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - resource_publications_v2 = sgqlc.types.Field( - sgqlc.types.non_null("ResourcePublicationV2Connection"), - graphql_name="resourcePublicationsV2", - args=sgqlc.types.ArgDict( - ( - ("only_published", sgqlc.types.Arg(Boolean, graphql_name="onlyPublished", default=True)), - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublicationEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Publication"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class PublicationCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("publication", "user_errors") + publication = sgqlc.types.Field("Publication", graphql_name="publication") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublicationUserError"))), graphql_name="userErrors" ) - unpublished_publications = sgqlc.types.Field( - sgqlc.types.non_null(PublicationConnection), - graphql_name="unpublishedPublications", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), + + +class PublicationDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_id", "user_errors") + deleted_id = sgqlc.types.Field(ID, graphql_name="deletedId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublicationUserError"))), graphql_name="userErrors" + ) + + +class PublicationEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="node") + + +class PublicationUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("publication", "user_errors") + publication = sgqlc.types.Field("Publication", graphql_name="publication") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PublicationUserError"))), graphql_name="userErrors" ) @@ -15805,15 +18620,6 @@ class PublishableUnpublishToCurrentChannelPayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") -class PublishedTranslation(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("key", "locale", "market_id", "value") - key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") - locale = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="locale") - market_id = sgqlc.types.Field(ID, graphql_name="marketId") - value = sgqlc.types.Field(String, graphql_name="value") - - class PurchasingCompany(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("company", "contact", "location") @@ -15822,9 +18628,58 @@ class PurchasingCompany(sgqlc.types.Type): location = sgqlc.types.Field(sgqlc.types.non_null("CompanyLocation"), graphql_name="location") +class QuantityRule(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("increment", "is_default", "maximum", "minimum", "origin_type", "product_variant") + increment = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="increment") + is_default = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isDefault") + maximum = sgqlc.types.Field(Int, graphql_name="maximum") + minimum = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="minimum") + origin_type = sgqlc.types.Field(sgqlc.types.non_null(QuantityRuleOriginType), graphql_name="originType") + product_variant = sgqlc.types.Field(sgqlc.types.non_null("ProductVariant"), graphql_name="productVariant") + + +class QuantityRuleConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info", "total_count") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("QuantityRuleEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(QuantityRule))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + total_count = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="totalCount") + + +class QuantityRuleEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(QuantityRule), graphql_name="node") + + +class QuantityRulesAddPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("quantity_rules", "user_errors") + quantity_rules = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(QuantityRule)), graphql_name="quantityRules") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("QuantityRuleUserError"))), graphql_name="userErrors" + ) + + +class QuantityRulesDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_quantity_rules_variant_ids", "user_errors") + deleted_quantity_rules_variant_ids = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedQuantityRulesVariantIds" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("QuantityRuleUserError"))), graphql_name="userErrors" + ) + + class QueryRoot(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( + "abandonment", + "abandonment_by_abandoned_checkout_id", "app", "app_by_handle", "app_by_key", @@ -15838,6 +18693,10 @@ class QueryRoot(sgqlc.types.Type): "available_carrier_services", "available_locales", "carrier_service", + "cart_transforms", + "catalog", + "catalog_operations", + "catalogs", "checkout_profile", "checkout_profiles", "code_discount_node", @@ -15859,11 +18718,16 @@ class QueryRoot(sgqlc.types.Type): "current_app_installation", "current_bulk_operation", "customer", + "customer_merge_job_status", + "customer_merge_preview", "customer_payment_method", "customer_segment_members", + "customer_segment_members_query", "customer_segment_membership", "customers", "deletion_events", + "delivery_customization", + "delivery_customizations", "delivery_profile", "delivery_profiles", "delivery_settings", @@ -15883,6 +18747,7 @@ class QueryRoot(sgqlc.types.Type): "files", "fulfillment", "fulfillment_order", + "fulfillment_orders", "fulfillment_service", "gift_card", "gift_cards", @@ -15890,6 +18755,7 @@ class QueryRoot(sgqlc.types.Type): "inventory_item", "inventory_items", "inventory_level", + "inventory_properties", "job", "location", "locations", @@ -15909,25 +18775,30 @@ class QueryRoot(sgqlc.types.Type): "metafield_definition", "metafield_definition_types", "metafield_definitions", - "metafield_storefront_visibilities", - "metafield_storefront_visibility", + "metaobject", + "metaobject_by_handle", + "metaobject_definition", + "metaobject_definition_by_type", + "metaobject_definitions", + "metaobjects", "node", "nodes", "order", "order_payment_status", "order_saved_searches", "orders", + "payment_customization", + "payment_customizations", "payment_terms_templates", "price_list", "price_lists", - "price_rule", "price_rule_saved_searches", - "price_rules", "primary_market", - "private_metafield", - "private_metafields", "product", "product_by_handle", + "product_duplicate_job", + "product_feed", + "product_feeds", "product_resource_feedback", "product_saved_searches", "product_variant", @@ -15937,6 +18808,11 @@ class QueryRoot(sgqlc.types.Type): "publication", "publications", "refund", + "return_", + "returnable_fulfillment", + "returnable_fulfillments", + "reverse_delivery", + "reverse_fulfillment_order", "script_tag", "script_tags", "segment", @@ -15948,12 +18824,18 @@ class QueryRoot(sgqlc.types.Type): "segments", "selling_plan_group", "selling_plan_groups", + "server_pixel", "shop", + "shop_billing_preferences", "shop_locales", + "shopify_function", + "shopify_functions", "shopify_payments_account", + "shopifyql_query", "staff_member", "standard_metafield_definition_templates", "subscription_billing_attempt", + "subscription_billing_attempts", "subscription_billing_cycle", "subscription_billing_cycles", "subscription_contract", @@ -15971,10 +18853,20 @@ class QueryRoot(sgqlc.types.Type): "webhook_subscription", "webhook_subscriptions", ) + abandonment = sgqlc.types.Field( + "Abandonment", + graphql_name="abandonment", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + abandonment_by_abandoned_checkout_id = sgqlc.types.Field( + "Abandonment", + graphql_name="abandonmentByAbandonedCheckoutId", + args=sgqlc.types.ArgDict( + (("abandoned_checkout_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="abandonedCheckoutId", default=None)),) + ), + ) app = sgqlc.types.Field( - "App", - graphql_name="app", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)), + "App", graphql_name="app", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)) ) app_by_handle = sgqlc.types.Field( "App", @@ -15994,8 +18886,7 @@ class QueryRoot(sgqlc.types.Type): ), ) app_discount_types = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppDiscountType))), - graphql_name="appDiscountTypes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppDiscountType))), graphql_name="appDiscountTypes" ) app_installation = sgqlc.types.Field( "AppInstallation", @@ -16064,6 +18955,43 @@ class QueryRoot(sgqlc.types.Type): graphql_name="carrierService", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + cart_transforms = sgqlc.types.Field( + sgqlc.types.non_null(CartTransformConnection), + graphql_name="cartTransforms", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + catalog = sgqlc.types.Field( + Catalog, + graphql_name="catalog", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + catalog_operations = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourceOperation))), graphql_name="catalogOperations" + ) + catalogs = sgqlc.types.Field( + sgqlc.types.non_null(CatalogConnection), + graphql_name="catalogs", + args=sgqlc.types.ArgDict( + ( + ("type", sgqlc.types.Arg(CatalogType, graphql_name="type", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(CatalogSortKeys, graphql_name="sortKey", default="ID")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) checkout_profile = sgqlc.types.Field( "CheckoutProfile", graphql_name="checkoutProfile", @@ -16134,8 +19062,7 @@ class QueryRoot(sgqlc.types.Type): args=sgqlc.types.ArgDict((("handle", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="handle", default=None)),)), ) collection_rules_conditions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionRuleConditions))), - graphql_name="collectionRulesConditions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CollectionRuleConditions))), graphql_name="collectionRulesConditions" ) collection_saved_searches = sgqlc.types.Field( sgqlc.types.non_null("SavedSearchConnection"), @@ -16228,6 +19155,22 @@ class QueryRoot(sgqlc.types.Type): graphql_name="customer", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + customer_merge_job_status = sgqlc.types.Field( + CustomerMergeRequest, + graphql_name="customerMergeJobStatus", + args=sgqlc.types.ArgDict((("job_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="jobId", default=None)),)), + ) + customer_merge_preview = sgqlc.types.Field( + sgqlc.types.non_null(CustomerMergePreview), + graphql_name="customerMergePreview", + args=sgqlc.types.ArgDict( + ( + ("customer_one_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerOneId", default=None)), + ("customer_two_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerTwoId", default=None)), + ("override_fields", sgqlc.types.Arg(CustomerMergeOverrideFields, graphql_name="overrideFields", default=None)), + ) + ), + ) customer_payment_method = sgqlc.types.Field( "CustomerPaymentMethod", graphql_name="customerPaymentMethod", @@ -16245,6 +19188,7 @@ class QueryRoot(sgqlc.types.Type): ( ("segment_id", sgqlc.types.Arg(ID, graphql_name="segmentId", default=None)), ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ("query_id", sgqlc.types.Arg(ID, graphql_name="queryId", default=None)), ("timezone", sgqlc.types.Arg(String, graphql_name="timezone", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), ("sort_key", sgqlc.types.Arg(String, graphql_name="sortKey", default=None)), @@ -16255,6 +19199,11 @@ class QueryRoot(sgqlc.types.Type): ) ), ) + customer_segment_members_query = sgqlc.types.Field( + "CustomerSegmentMembersQuery", + graphql_name="customerSegmentMembersQuery", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) customer_segment_membership = sgqlc.types.Field( sgqlc.types.non_null("SegmentMembershipResponse"), graphql_name="customerSegmentMembership", @@ -16263,9 +19212,7 @@ class QueryRoot(sgqlc.types.Type): ( "segment_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="segmentIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="segmentIds", default=None ), ), ("customer_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="customerId", default=None)), @@ -16295,9 +19242,7 @@ class QueryRoot(sgqlc.types.Type): ( "subject_types", sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(DeletionEventSubjectType)), - graphql_name="subjectTypes", - default=None, + sgqlc.types.list_of(sgqlc.types.non_null(DeletionEventSubjectType)), graphql_name="subjectTypes", default=None ), ), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -16310,6 +19255,25 @@ class QueryRoot(sgqlc.types.Type): ) ), ) + delivery_customization = sgqlc.types.Field( + "DeliveryCustomization", + graphql_name="deliveryCustomization", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + delivery_customizations = sgqlc.types.Field( + sgqlc.types.non_null(DeliveryCustomizationConnection), + graphql_name="deliveryCustomizations", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) delivery_profile = sgqlc.types.Field( "DeliveryProfile", graphql_name="deliveryProfile", @@ -16469,6 +19433,22 @@ class QueryRoot(sgqlc.types.Type): graphql_name="fulfillmentOrder", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + fulfillment_orders = sgqlc.types.Field( + sgqlc.types.non_null(FulfillmentOrderConnection), + graphql_name="fulfillmentOrders", + args=sgqlc.types.ArgDict( + ( + ("include_closed", sgqlc.types.Arg(Boolean, graphql_name="includeClosed", default=False)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(FulfillmentOrderSortKeys, graphql_name="sortKey", default="ID")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) fulfillment_service = sgqlc.types.Field( FulfillmentService, graphql_name="fulfillmentService", @@ -16524,15 +19504,14 @@ class QueryRoot(sgqlc.types.Type): graphql_name="inventoryLevel", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + inventory_properties = sgqlc.types.Field(sgqlc.types.non_null(InventoryProperties), graphql_name="inventoryProperties") job = sgqlc.types.Field( Job, graphql_name="job", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) location = sgqlc.types.Field( - "Location", - graphql_name="location", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)), + "Location", graphql_name="location", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)) ) locations = sgqlc.types.Field( sgqlc.types.non_null(LocationConnection), @@ -16587,12 +19566,7 @@ class QueryRoot(sgqlc.types.Type): "Market", graphql_name="marketByGeography", args=sgqlc.types.ArgDict( - ( - ( - "country_code", - sgqlc.types.Arg(sgqlc.types.non_null(CountryCode), graphql_name="countryCode", default=None), - ), - ) + (("country_code", sgqlc.types.Arg(sgqlc.types.non_null(CountryCode), graphql_name="countryCode", default=None)),) ), ) market_localizable_resource = sgqlc.types.Field( @@ -16625,9 +19599,7 @@ class QueryRoot(sgqlc.types.Type): ( "resource_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="resourceIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="resourceIds", default=None ), ), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -16647,10 +19619,7 @@ class QueryRoot(sgqlc.types.Type): "marketing_activity_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="marketingActivityIds", default=()), ), - ( - "remote_ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="remoteIds", default=()), - ), + ("remote_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="remoteIds", default=())), ("utm", sgqlc.types.Arg(UTMInput, graphql_name="utm", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), @@ -16712,8 +19681,7 @@ class QueryRoot(sgqlc.types.Type): args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) metafield_definition_types = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionType))), - graphql_name="metafieldDefinitionTypes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionType))), graphql_name="metafieldDefinitionTypes" ) metafield_definitions = sgqlc.types.Field( sgqlc.types.non_null(MetafieldDefinitionConnection), @@ -16722,14 +19690,8 @@ class QueryRoot(sgqlc.types.Type): ( ("key", sgqlc.types.Arg(String, graphql_name="key", default=None)), ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), - ( - "owner_type", - sgqlc.types.Arg(sgqlc.types.non_null(MetafieldOwnerType), graphql_name="ownerType", default=None), - ), - ( - "pinned_status", - sgqlc.types.Arg(MetafieldDefinitionPinnedStatus, graphql_name="pinnedStatus", default="ANY"), - ), + ("owner_type", sgqlc.types.Arg(sgqlc.types.non_null(MetafieldOwnerType), graphql_name="ownerType", default=None)), + ("pinned_status", sgqlc.types.Arg(MetafieldDefinitionPinnedStatus, graphql_name="pinnedStatus", default="ANY")), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -16740,12 +19702,33 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - metafield_storefront_visibilities = sgqlc.types.Field( - sgqlc.types.non_null(MetafieldStorefrontVisibilityConnection), - graphql_name="metafieldStorefrontVisibilities", + metaobject = sgqlc.types.Field( + "Metaobject", + graphql_name="metaobject", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + metaobject_by_handle = sgqlc.types.Field( + "Metaobject", + graphql_name="metaobjectByHandle", + args=sgqlc.types.ArgDict( + (("handle", sgqlc.types.Arg(sgqlc.types.non_null(MetaobjectHandleInput), graphql_name="handle", default=None)),) + ), + ) + metaobject_definition = sgqlc.types.Field( + "MetaobjectDefinition", + graphql_name="metaobjectDefinition", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + metaobject_definition_by_type = sgqlc.types.Field( + "MetaobjectDefinition", + graphql_name="metaobjectDefinitionByType", + args=sgqlc.types.ArgDict((("type", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="type", default=None)),)), + ) + metaobject_definitions = sgqlc.types.Field( + sgqlc.types.non_null(MetaobjectDefinitionConnection), + graphql_name="metaobjectDefinitions", args=sgqlc.types.ArgDict( ( - ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -16754,10 +19737,21 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - metafield_storefront_visibility = sgqlc.types.Field( - "MetafieldStorefrontVisibility", - graphql_name="metafieldStorefrontVisibility", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + metaobjects = sgqlc.types.Field( + sgqlc.types.non_null(MetaobjectConnection), + graphql_name="metaobjects", + args=sgqlc.types.ArgDict( + ( + ("type", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="type", default=None)), + ("sort_key", sgqlc.types.Arg(String, graphql_name="sortKey", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), ) node = sgqlc.types.Field( Node, @@ -16771,11 +19765,7 @@ class QueryRoot(sgqlc.types.Type): ( ( "ids", - sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="ids", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="ids", default=None), ), ) ), @@ -16790,10 +19780,7 @@ class QueryRoot(sgqlc.types.Type): graphql_name="orderPaymentStatus", args=sgqlc.types.ArgDict( ( - ( - "payment_reference_id", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="paymentReferenceId", default=None), - ), + ("payment_reference_id", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="paymentReferenceId", default=None)), ("order_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="orderId", default=None)), ) ), @@ -16827,6 +19814,25 @@ class QueryRoot(sgqlc.types.Type): ) ), ) + payment_customization = sgqlc.types.Field( + "PaymentCustomization", + graphql_name="paymentCustomization", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + payment_customizations = sgqlc.types.Field( + sgqlc.types.non_null(PaymentCustomizationConnection), + graphql_name="paymentCustomizations", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) payment_terms_templates = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("PaymentTermsTemplate"))), graphql_name="paymentTermsTemplates", @@ -16844,7 +19850,6 @@ class QueryRoot(sgqlc.types.Type): graphql_name="priceLists", args=sgqlc.types.ArgDict( ( - ("match_rule", sgqlc.types.Arg(PriceListContext, graphql_name="matchRule", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -16854,11 +19859,6 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - price_rule = sgqlc.types.Field( - "PriceRule", - graphql_name="priceRule", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) price_rule_saved_searches = sgqlc.types.Field( sgqlc.types.non_null("SavedSearchConnection"), graphql_name="priceRuleSavedSearches", @@ -16872,35 +19872,32 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - price_rules = sgqlc.types.Field( - sgqlc.types.non_null(PriceRuleConnection), - graphql_name="priceRules", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ("sort_key", sgqlc.types.Arg(PriceRuleSortKeys, graphql_name="sortKey", default="ID")), - ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), - ("saved_search_id", sgqlc.types.Arg(ID, graphql_name="savedSearchId", default=None)), - ) - ), - ) primary_market = sgqlc.types.Field(sgqlc.types.non_null("Market"), graphql_name="primaryMarket") - private_metafield = sgqlc.types.Field( - "PrivateMetafield", - graphql_name="privateMetafield", + product = sgqlc.types.Field( + "Product", + graphql_name="product", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + product_by_handle = sgqlc.types.Field( + "Product", + graphql_name="productByHandle", + args=sgqlc.types.ArgDict((("handle", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="handle", default=None)),)), + ) + product_duplicate_job = sgqlc.types.Field( + sgqlc.types.non_null(ProductDuplicateJob), + graphql_name="productDuplicateJob", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + product_feed = sgqlc.types.Field( + "ProductFeed", + graphql_name="productFeed", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) - private_metafields = sgqlc.types.Field( - sgqlc.types.non_null(PrivateMetafieldConnection), - graphql_name="privateMetafields", + product_feeds = sgqlc.types.Field( + sgqlc.types.non_null(ProductFeedConnection), + graphql_name="productFeeds", args=sgqlc.types.ArgDict( ( - ("namespace", sgqlc.types.Arg(String, graphql_name="namespace", default=None)), - ("owner", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="owner", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -16909,16 +19906,6 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - product = sgqlc.types.Field( - "Product", - graphql_name="product", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), - ) - product_by_handle = sgqlc.types.Field( - "Product", - graphql_name="productByHandle", - args=sgqlc.types.ArgDict((("handle", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="handle", default=None)),)), - ) product_resource_feedback = sgqlc.types.Field( ProductResourceFeedback, graphql_name="productResourceFeedback", @@ -16977,16 +19964,46 @@ class QueryRoot(sgqlc.types.Type): public_api_versions = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ApiVersion))), graphql_name="publicApiVersions" ) - publication = sgqlc.types.Field( - "Publication", - graphql_name="publication", + publication = sgqlc.types.Field( + "Publication", + graphql_name="publication", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + publications = sgqlc.types.Field( + sgqlc.types.non_null(PublicationConnection), + graphql_name="publications", + args=sgqlc.types.ArgDict( + ( + ("catalog_type", sgqlc.types.Arg(CatalogType, graphql_name="catalogType", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + refund = sgqlc.types.Field( + "Refund", + graphql_name="refund", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + return_ = sgqlc.types.Field( + "Return", + graphql_name="return", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + returnable_fulfillment = sgqlc.types.Field( + "ReturnableFulfillment", + graphql_name="returnableFulfillment", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) - publications = sgqlc.types.Field( - sgqlc.types.non_null(PublicationConnection), - graphql_name="publications", + returnable_fulfillments = sgqlc.types.Field( + sgqlc.types.non_null("ReturnableFulfillmentConnection"), + graphql_name="returnableFulfillments", args=sgqlc.types.ArgDict( ( + ("order_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="orderId", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -16995,9 +20012,14 @@ class QueryRoot(sgqlc.types.Type): ) ), ) - refund = sgqlc.types.Field( - "Refund", - graphql_name="refund", + reverse_delivery = sgqlc.types.Field( + "ReverseDelivery", + graphql_name="reverseDelivery", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + reverse_fulfillment_order = sgqlc.types.Field( + "ReverseFulfillmentOrder", + graphql_name="reverseFulfillmentOrder", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) script_tag = sgqlc.types.Field( @@ -17068,6 +20090,7 @@ class QueryRoot(sgqlc.types.Type): ( ("search", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="search", default=None)), ("filter_query_name", sgqlc.types.Arg(String, graphql_name="filterQueryName", default=None)), + ("function_parameter_query_name", sgqlc.types.Arg(String, graphql_name="functionParameterQueryName", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -17110,17 +20133,42 @@ class QueryRoot(sgqlc.types.Type): ) ), ) + server_pixel = sgqlc.types.Field("ServerPixel", graphql_name="serverPixel") shop = sgqlc.types.Field(sgqlc.types.non_null("Shop"), graphql_name="shop") + shop_billing_preferences = sgqlc.types.Field(sgqlc.types.non_null("ShopBillingPreferences"), graphql_name="shopBillingPreferences") shop_locales = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopLocale"))), graphql_name="shopLocales", args=sgqlc.types.ArgDict((("published", sgqlc.types.Arg(Boolean, graphql_name="published", default=False)),)), ) + shopify_function = sgqlc.types.Field( + "ShopifyFunction", + graphql_name="shopifyFunction", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="id", default=None)),)), + ) + shopify_functions = sgqlc.types.Field( + sgqlc.types.non_null("ShopifyFunctionConnection"), + graphql_name="shopifyFunctions", + args=sgqlc.types.ArgDict( + ( + ("api_type", sgqlc.types.Arg(String, graphql_name="apiType", default=None)), + ("use_creation_ui", sgqlc.types.Arg(Boolean, graphql_name="useCreationUi", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) shopify_payments_account = sgqlc.types.Field("ShopifyPaymentsAccount", graphql_name="shopifyPaymentsAccount") + shopifyql_query = sgqlc.types.Field( + ShopifyqlResponse, + graphql_name="shopifyqlQuery", + args=sgqlc.types.ArgDict((("query", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="query", default=None)),)), + ) staff_member = sgqlc.types.Field( - "StaffMember", - graphql_name="staffMember", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)), + "StaffMember", graphql_name="staffMember", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)) ) standard_metafield_definition_templates = sgqlc.types.Field( sgqlc.types.non_null("StandardMetafieldDefinitionTemplateConnection"), @@ -17140,6 +20188,21 @@ class QueryRoot(sgqlc.types.Type): graphql_name="subscriptionBillingAttempt", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), ) + subscription_billing_attempts = sgqlc.types.Field( + sgqlc.types.non_null("SubscriptionBillingAttemptConnection"), + graphql_name="subscriptionBillingAttempts", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(SubscriptionBillingAttemptsSortKeys, graphql_name="sortKey", default="CREATED_AT")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) subscription_billing_cycle = sgqlc.types.Field( "SubscriptionBillingCycle", graphql_name="subscriptionBillingCycle", @@ -17147,11 +20210,7 @@ class QueryRoot(sgqlc.types.Type): ( ( "billing_cycle_input", - sgqlc.types.Arg( - sgqlc.types.non_null(SubscriptionBillingCycleInput), - graphql_name="billingCycleInput", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.non_null(SubscriptionBillingCycleInput), graphql_name="billingCycleInput", default=None), ), ) ), @@ -17165,17 +20224,13 @@ class QueryRoot(sgqlc.types.Type): ( "billing_cycles_date_range_selector", sgqlc.types.Arg( - SubscriptionBillingCyclesDateRangeSelector, - graphql_name="billingCyclesDateRangeSelector", - default=None, + SubscriptionBillingCyclesDateRangeSelector, graphql_name="billingCyclesDateRangeSelector", default=None ), ), ( "billing_cycles_index_range_selector", sgqlc.types.Arg( - SubscriptionBillingCyclesIndexRangeSelector, - graphql_name="billingCyclesIndexRangeSelector", - default=None, + SubscriptionBillingCyclesIndexRangeSelector, graphql_name="billingCyclesIndexRangeSelector", default=None ), ), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -17183,10 +20238,7 @@ class QueryRoot(sgqlc.types.Type): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX"), - ), + ("sort_key", sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX")), ) ), ) @@ -17205,6 +20257,7 @@ class QueryRoot(sgqlc.types.Type): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), ) ), ) @@ -17257,9 +20310,7 @@ class QueryRoot(sgqlc.types.Type): ( "resource_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="resourceIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="resourceIds", default=None ), ), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -17310,9 +20361,7 @@ class QueryRoot(sgqlc.types.Type): ), ) web_pixel = sgqlc.types.Field( - "WebPixel", - graphql_name="webPixel", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + "WebPixel", graphql_name="webPixel", args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(ID, graphql_name="id", default=None)),)) ) webhook_subscription = sgqlc.types.Field( "WebhookSubscription", @@ -17329,19 +20378,14 @@ class QueryRoot(sgqlc.types.Type): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(WebhookSubscriptionSortKeys, graphql_name="sortKey", default="CREATED_AT"), - ), + ("sort_key", sgqlc.types.Arg(WebhookSubscriptionSortKeys, graphql_name="sortKey", default="CREATED_AT")), ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), ("callback_url", sgqlc.types.Arg(URL, graphql_name="callbackUrl", default=None)), ("format", sgqlc.types.Arg(WebhookSubscriptionFormat, graphql_name="format", default=None)), ( "topics", sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(WebhookSubscriptionTopic)), - graphql_name="topics", - default=None, + sgqlc.types.list_of(sgqlc.types.non_null(WebhookSubscriptionTopic)), graphql_name="topics", default=None ), ), ) @@ -17349,147 +20393,454 @@ class QueryRoot(sgqlc.types.Type): ) -class RefundCreatePayload(sgqlc.types.Type): +class RefundConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("RefundEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Refund"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class RefundCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("order", "refund", "user_errors") + order = sgqlc.types.Field("Order", graphql_name="order") + refund = sgqlc.types.Field("Refund", graphql_name="refund") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + + +class RefundDuty(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("amount_set", "original_duty") + amount_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="amountSet") + original_duty = sgqlc.types.Field("Duty", graphql_name="originalDuty") + + +class RefundEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("Refund"), graphql_name="node") + + +class RefundLineItem(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("line_item", "location", "price_set", "quantity", "restock_type", "restocked", "subtotal_set", "total_tax_set") + line_item = sgqlc.types.Field(sgqlc.types.non_null("LineItem"), graphql_name="lineItem") + location = sgqlc.types.Field("Location", graphql_name="location") + price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="priceSet") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + restock_type = sgqlc.types.Field(sgqlc.types.non_null(RefundLineItemRestockType), graphql_name="restockType") + restocked = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="restocked") + subtotal_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="subtotalSet") + total_tax_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalTaxSet") + + +class RefundLineItemConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("RefundLineItemEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(RefundLineItem))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class RefundLineItemEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(RefundLineItem), graphql_name="node") + + +class ResourceAlert(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("actions", "content", "dismissible_handle", "icon", "severity", "title") + actions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourceAlertAction"))), graphql_name="actions" + ) + content = sgqlc.types.Field(sgqlc.types.non_null(HTML), graphql_name="content") + dismissible_handle = sgqlc.types.Field(String, graphql_name="dismissibleHandle") + icon = sgqlc.types.Field(ResourceAlertIcon, graphql_name="icon") + severity = sgqlc.types.Field(sgqlc.types.non_null(ResourceAlertSeverity), graphql_name="severity") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + +class ResourceAlertAction(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("primary", "show", "title", "url") + primary = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="primary") + show = sgqlc.types.Field(String, graphql_name="show") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") + + +class ResourceFeedback(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("details", "summary") + details = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppFeedback))), graphql_name="details") + summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") + + +class ResourceLimit(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("available", "quantity_available", "quantity_limit", "quantity_used") + available = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="available") + quantity_available = sgqlc.types.Field(Int, graphql_name="quantityAvailable") + quantity_limit = sgqlc.types.Field(Int, graphql_name="quantityLimit") + quantity_used = sgqlc.types.Field(Int, graphql_name="quantityUsed") + + +class ResourcePublication(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("is_published", "publication", "publish_date", "publishable") + is_published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isPublished") + publication = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="publication") + publish_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="publishDate") + publishable = sgqlc.types.Field(sgqlc.types.non_null(Publishable), graphql_name="publishable") + + +class ResourcePublicationConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourcePublicationEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourcePublication))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ResourcePublicationEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(ResourcePublication), graphql_name="node") + + +class ResourcePublicationV2(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("is_published", "publication", "publish_date", "publishable") + is_published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isPublished") + publication = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="publication") + publish_date = sgqlc.types.Field(DateTime, graphql_name="publishDate") + publishable = sgqlc.types.Field(sgqlc.types.non_null(Publishable), graphql_name="publishable") + + +class ResourcePublicationV2Connection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourcePublicationV2Edge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourcePublicationV2))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ResourcePublicationV2Edge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(ResourcePublicationV2), graphql_name="node") + + +class ReturnApproveRequestPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnCancelPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnClosePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Return"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ReturnCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnDecline(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("note", "reason") + note = sgqlc.types.Field(String, graphql_name="note") + reason = sgqlc.types.Field(sgqlc.types.non_null(ReturnDeclineReason), graphql_name="reason") + + +class ReturnDeclineRequestPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("Return"), graphql_name="node") + + +class ReturnLineItemConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnLineItemEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnLineItem"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ReturnLineItemEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ReturnLineItem"), graphql_name="node") + + +class ReturnRefundPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("refund", "user_errors") + refund = sgqlc.types.Field("Refund", graphql_name="refund") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnReopenPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnRequestPayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("return_", "user_errors") + return_ = sgqlc.types.Field("Return", graphql_name="return") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReturnableFulfillmentConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema - __field_names__ = ("order", "refund", "user_errors") - order = sgqlc.types.Field("Order", graphql_name="order") - refund = sgqlc.types.Field("Refund", graphql_name="refund") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnableFulfillmentEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnableFulfillment"))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class RefundDuty(sgqlc.types.Type): +class ReturnableFulfillmentEdge(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("amount_set", "original_duty") - amount_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="amountSet") - original_duty = sgqlc.types.Field("Duty", graphql_name="originalDuty") + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ReturnableFulfillment"), graphql_name="node") -class RefundLineItem(sgqlc.types.Type): +class ReturnableFulfillmentLineItem(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "line_item", - "location", - "price_set", - "quantity", - "restock_type", - "restocked", - "subtotal_set", - "total_tax_set", - ) - line_item = sgqlc.types.Field(sgqlc.types.non_null("LineItem"), graphql_name="lineItem") - location = sgqlc.types.Field("Location", graphql_name="location") - price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="priceSet") + __field_names__ = ("fulfillment_line_item", "quantity") + fulfillment_line_item = sgqlc.types.Field(sgqlc.types.non_null("FulfillmentLineItem"), graphql_name="fulfillmentLineItem") quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") - restock_type = sgqlc.types.Field(sgqlc.types.non_null(RefundLineItemRestockType), graphql_name="restockType") - restocked = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="restocked") - subtotal_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="subtotalSet") - total_tax_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalTaxSet") -class RefundLineItemConnection(sgqlc.types.relay.Connection): +class ReturnableFulfillmentLineItemConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("RefundLineItemEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(RefundLineItem))), graphql_name="nodes") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnableFulfillmentLineItemEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ReturnableFulfillmentLineItem))), graphql_name="nodes" + ) page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class RefundLineItemEdge(sgqlc.types.Type): +class ReturnableFulfillmentLineItemEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(RefundLineItem), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null(ReturnableFulfillmentLineItem), graphql_name="node") -class ResourceAlert(sgqlc.types.Type): +class ReverseDeliveryConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema - __field_names__ = ("actions", "content", "dismissible_handle", "icon", "severity", "title") - actions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourceAlertAction"))), graphql_name="actions" - ) - content = sgqlc.types.Field(sgqlc.types.non_null(HTML), graphql_name="content") - dismissible_handle = sgqlc.types.Field(String, graphql_name="dismissibleHandle") - icon = sgqlc.types.Field(ResourceAlertIcon, graphql_name="icon") - severity = sgqlc.types.Field(sgqlc.types.non_null(ResourceAlertSeverity), graphql_name="severity") - title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseDeliveryEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseDelivery"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class ResourceAlertAction(sgqlc.types.Type): +class ReverseDeliveryCreateWithShippingPayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("primary", "show", "title", "url") - primary = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="primary") - show = sgqlc.types.Field(String, graphql_name="show") - title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") - url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") + __field_names__ = ("reverse_delivery", "user_errors") + reverse_delivery = sgqlc.types.Field("ReverseDelivery", graphql_name="reverseDelivery") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) -class ResourceFeedback(sgqlc.types.Type): +class ReverseDeliveryDisposePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("details", "summary") - details = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppFeedback))), graphql_name="details") - summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") + __field_names__ = ("reverse_delivery_line_items", "user_errors") + reverse_delivery_line_items = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("ReverseDeliveryLineItem")), graphql_name="reverseDeliveryLineItems" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) -class ResourceLimit(sgqlc.types.Type): +class ReverseDeliveryEdge(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("available", "quantity_available", "quantity_limit", "quantity_used") - available = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="available") - quantity_available = sgqlc.types.Field(Int, graphql_name="quantityAvailable") - quantity_limit = sgqlc.types.Field(Int, graphql_name="quantityLimit") - quantity_used = sgqlc.types.Field(Int, graphql_name="quantityUsed") + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ReverseDelivery"), graphql_name="node") -class ResourcePublication(sgqlc.types.Type): +class ReverseDeliveryLabelV2(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("is_published", "publication", "publish_date", "publishable") - is_published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isPublished") - publication = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="publication") - publish_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="publishDate") - publishable = sgqlc.types.Field(sgqlc.types.non_null(Publishable), graphql_name="publishable") + __field_names__ = ("created_at", "public_file_url", "updated_at") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + public_file_url = sgqlc.types.Field(URL, graphql_name="publicFileUrl") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") -class ResourcePublicationConnection(sgqlc.types.relay.Connection): +class ReverseDeliveryLineItemConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourcePublicationEdge"))), graphql_name="edges" + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseDeliveryLineItemEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseDeliveryLineItem"))), graphql_name="nodes" ) - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourcePublication))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class ResourcePublicationEdge(sgqlc.types.Type): +class ReverseDeliveryLineItemEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(ResourcePublication), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null("ReverseDeliveryLineItem"), graphql_name="node") -class ResourcePublicationV2(sgqlc.types.Type): +class ReverseDeliveryShippingDeliverable(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("is_published", "publication", "publish_date", "publishable") - is_published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isPublished") - publication = sgqlc.types.Field(sgqlc.types.non_null("Publication"), graphql_name="publication") - publish_date = sgqlc.types.Field(DateTime, graphql_name="publishDate") - publishable = sgqlc.types.Field(sgqlc.types.non_null(Publishable), graphql_name="publishable") + __field_names__ = ("label", "tracking") + label = sgqlc.types.Field(ReverseDeliveryLabelV2, graphql_name="label") + tracking = sgqlc.types.Field("ReverseDeliveryTrackingV2", graphql_name="tracking") -class ResourcePublicationV2Connection(sgqlc.types.relay.Connection): +class ReverseDeliveryShippingUpdatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("reverse_delivery", "user_errors") + reverse_delivery = sgqlc.types.Field("ReverseDelivery", graphql_name="reverseDelivery") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReverseDeliveryTrackingV2(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("carrier_name", "number", "url") + carrier_name = sgqlc.types.Field(String, graphql_name="carrierName") + number = sgqlc.types.Field(String, graphql_name="number") + url = sgqlc.types.Field(URL, graphql_name="url") + + +class ReverseFulfillmentOrderConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ResourcePublicationV2Edge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrderEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrder"))), graphql_name="nodes" ) - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ResourcePublicationV2))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class ResourcePublicationV2Edge(sgqlc.types.Type): +class ReverseFulfillmentOrderDisposePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("reverse_fulfillment_order_line_items", "user_errors") + reverse_fulfillment_order_line_items = sgqlc.types.Field( + sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrderLineItem")), graphql_name="reverseFulfillmentOrderLineItems" + ) + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReturnUserError"))), graphql_name="userErrors" + ) + + +class ReverseFulfillmentOrderEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(ResourcePublicationV2), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null("ReverseFulfillmentOrder"), graphql_name="node") + + +class ReverseFulfillmentOrderLineItemConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrderLineItemEdge"))), graphql_name="edges" + ) + nodes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrderLineItem"))), graphql_name="nodes" + ) + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ReverseFulfillmentOrderLineItemEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null("ReverseFulfillmentOrderLineItem"), graphql_name="node") + + +class ReverseFulfillmentOrderThirdPartyConfirmation(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("status",) + status = sgqlc.types.Field(sgqlc.types.non_null(ReverseFulfillmentOrderThirdPartyConfirmationStatus), graphql_name="status") + + +class RowCount(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("count", "exceeds_max") + count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="count") + exceeds_max = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="exceedsMax") class SEO(sgqlc.types.Type): @@ -17499,30 +20850,6 @@ class SEO(sgqlc.types.Type): title = sgqlc.types.Field(String, graphql_name="title") -class Sale(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ( - "action_type", - "id", - "line_type", - "quantity", - "taxes", - "total_amount", - "total_discount_amount_after_taxes", - "total_discount_amount_before_taxes", - "total_tax_amount", - ) - action_type = sgqlc.types.Field(sgqlc.types.non_null(SaleActionType), graphql_name="actionType") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - line_type = sgqlc.types.Field(sgqlc.types.non_null(SaleLineType), graphql_name="lineType") - quantity = sgqlc.types.Field(Int, graphql_name="quantity") - taxes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SaleTax"))), graphql_name="taxes") - total_amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalAmount") - total_discount_amount_after_taxes = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalDiscountAmountAfterTaxes") - total_discount_amount_before_taxes = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalDiscountAmountBeforeTaxes") - total_tax_amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalTaxAmount") - - class SaleConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -17546,29 +20873,6 @@ class SaleTax(sgqlc.types.Type): tax_line = sgqlc.types.Field(sgqlc.types.non_null("TaxLine"), graphql_name="taxLine") -class SalesAgreement(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("app", "happened_at", "id", "reason", "sales", "user") - app = sgqlc.types.Field("App", graphql_name="app") - happened_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="happenedAt") - id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") - reason = sgqlc.types.Field(sgqlc.types.non_null(OrderActionType), graphql_name="reason") - sales = sgqlc.types.Field( - sgqlc.types.non_null(SaleConnection), - graphql_name="sales", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - user = sgqlc.types.Field("StaffMember", graphql_name="user") - - class SalesAgreementConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") @@ -17668,8 +20972,7 @@ class SearchFilterOptions(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("product_availability",) product_availability = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FilterOption))), - graphql_name="productAvailability", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FilterOption))), graphql_name="productAvailability" ) @@ -17697,34 +21000,6 @@ class SearchResultEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null(SearchResult), graphql_name="node") -class SegmentAssociationFilterValue(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("localized_name", "query_name") - localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") - - -class SegmentAssociationFilterValueConnection(sgqlc.types.relay.Connection): - __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentAssociationFilterValueEdge"))), - graphql_name="edges", - ) - nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentAssociationFilterValue))), - graphql_name="nodes", - ) - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") - - -class SegmentAssociationFilterValueEdge(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(SegmentAssociationFilterValue), graphql_name="node") - - class SegmentAttributeStatistics(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("average", "sum") @@ -17733,101 +21008,42 @@ class SegmentAttributeStatistics(sgqlc.types.Type): class SegmentConnection(sgqlc.types.relay.Connection): - __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentEdge"))), graphql_name="edges") - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Segment"))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") - - -class SegmentCreatePayload(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("segment", "user_errors") - segment = sgqlc.types.Field("Segment", graphql_name="segment") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") - - -class SegmentDeletePayload(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("deleted_segment_id", "user_errors") - deleted_segment_id = sgqlc.types.Field(ID, graphql_name="deletedSegmentId") - user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") - - -class SegmentEdge(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null("Segment"), graphql_name="node") - - -class SegmentEnumFilterValue(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("localized_name", "query_name") - localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") - - -class SegmentEnumFilterValueConnection(sgqlc.types.relay.Connection): - __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentEnumFilterValueEdge"))), - graphql_name="edges", - ) - nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentEnumFilterValue))), graphql_name="nodes") - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") - - -class SegmentEnumFilterValueEdge(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(SegmentEnumFilterValue), graphql_name="node") - - -class SegmentEventFilterParameter(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("localized_description", "localized_name", "optional", "parameter_type", "query_name") - localized_description = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedDescription") - localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - optional = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="optional") - parameter_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="parameterType") - query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Segment"))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") -class SegmentEventFilterValue(sgqlc.types.Type): +class SegmentCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("localized_name", "query_name") - localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") + __field_names__ = ("segment", "user_errors") + segment = sgqlc.types.Field("Segment", graphql_name="segment") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") -class SegmentEventFilterValueConnection(sgqlc.types.relay.Connection): +class SegmentDeletePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentEventFilterValueEdge"))), - graphql_name="edges", - ) - nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentEventFilterValue))), graphql_name="nodes" - ) - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + __field_names__ = ("deleted_segment_id", "user_errors") + deleted_segment_id = sgqlc.types.Field(ID, graphql_name="deletedSegmentId") + user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") -class SegmentEventFilterValueEdge(sgqlc.types.Type): +class SegmentEdge(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("cursor", "node") cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(SegmentEventFilterValue), graphql_name="node") + node = sgqlc.types.Field(sgqlc.types.non_null("Segment"), graphql_name="node") -class SegmentFilter(sgqlc.types.Interface): +class SegmentEventFilterParameter(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("localized_name", "multi_value", "query_name") + __field_names__ = ("accepts_multiple_values", "localized_description", "localized_name", "optional", "parameter_type", "query_name") + accepts_multiple_values = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="acceptsMultipleValues") + localized_description = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedDescription") localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - multi_value = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="multiValue") + optional = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="optional") + parameter_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="parameterType") query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") @@ -17886,47 +21102,14 @@ class SegmentMigrationEdge(sgqlc.types.Type): class SegmentStatistics(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("attribute_statistics", "total_count") + __field_names__ = ("attribute_statistics",) attribute_statistics = sgqlc.types.Field( sgqlc.types.non_null(SegmentAttributeStatistics), graphql_name="attributeStatistics", args=sgqlc.types.ArgDict( - ( - ( - "attribute_name", - sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="attributeName", default=None), - ), - ) + (("attribute_name", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="attributeName", default=None)),) ), ) - total_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="totalCount") - - -class SegmentStringFilterValue(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("localized_name", "query_name") - localized_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="localizedName") - query_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="queryName") - - -class SegmentStringFilterValueConnection(sgqlc.types.relay.Connection): - __schema__ = shopify_schema - __field_names__ = ("edges", "nodes", "page_info") - edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SegmentStringFilterValueEdge"))), - graphql_name="edges", - ) - nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentStringFilterValue))), graphql_name="nodes" - ) - page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") - - -class SegmentStringFilterValueEdge(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ("cursor", "node") - cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") - node = sgqlc.types.Field(sgqlc.types.non_null(SegmentStringFilterValue), graphql_name="node") class SegmentUpdatePayload(sgqlc.types.Type): @@ -18020,14 +21203,7 @@ class SellingPlanFixedBillingPolicy(sgqlc.types.Type): class SellingPlanFixedDeliveryPolicy(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "anchors", - "cutoff", - "fulfillment_exact_time", - "fulfillment_trigger", - "intent", - "pre_anchor_behavior", - ) + __field_names__ = ("anchors", "cutoff", "fulfillment_exact_time", "fulfillment_trigger", "intent", "pre_anchor_behavior") anchors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SellingPlanAnchor))), graphql_name="anchors") cutoff = sgqlc.types.Field(Int, graphql_name="cutoff") fulfillment_exact_time = sgqlc.types.Field(DateTime, graphql_name="fulfillmentExactTime") @@ -18043,8 +21219,7 @@ class SellingPlanGroupAddProductVariantsPayload(sgqlc.types.Type): __field_names__ = ("selling_plan_group", "user_errors") selling_plan_group = sgqlc.types.Field("SellingPlanGroup", graphql_name="sellingPlanGroup") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18053,8 +21228,7 @@ class SellingPlanGroupAddProductsPayload(sgqlc.types.Type): __field_names__ = ("selling_plan_group", "user_errors") selling_plan_group = sgqlc.types.Field("SellingPlanGroup", graphql_name="sellingPlanGroup") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18071,8 +21245,7 @@ class SellingPlanGroupCreatePayload(sgqlc.types.Type): __field_names__ = ("selling_plan_group", "user_errors") selling_plan_group = sgqlc.types.Field("SellingPlanGroup", graphql_name="sellingPlanGroup") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18081,8 +21254,7 @@ class SellingPlanGroupDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_selling_plan_group_id", "user_errors") deleted_selling_plan_group_id = sgqlc.types.Field(ID, graphql_name="deletedSellingPlanGroupId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18098,8 +21270,7 @@ class SellingPlanGroupRemoveProductVariantsPayload(sgqlc.types.Type): __field_names__ = ("removed_product_variant_ids", "user_errors") removed_product_variant_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="removedProductVariantIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18108,8 +21279,7 @@ class SellingPlanGroupRemoveProductsPayload(sgqlc.types.Type): __field_names__ = ("removed_product_ids", "user_errors") removed_product_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="removedProductIds") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18119,8 +21289,7 @@ class SellingPlanGroupUpdatePayload(sgqlc.types.Type): deleted_selling_plan_ids = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="deletedSellingPlanIds") selling_plan_group = sgqlc.types.Field("SellingPlanGroup", graphql_name="sellingPlanGroup") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanGroupUserError"))), graphql_name="userErrors" ) @@ -18130,13 +21299,6 @@ class SellingPlanInventoryPolicy(sgqlc.types.Type): reserve = sgqlc.types.Field(sgqlc.types.non_null(SellingPlanReserve), graphql_name="reserve") -class SellingPlanPricingPolicyBase(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("adjustment_type", "adjustment_value") - adjustment_type = sgqlc.types.Field(sgqlc.types.non_null(SellingPlanPricingPolicyAdjustmentType), graphql_name="adjustmentType") - adjustment_value = sgqlc.types.Field(sgqlc.types.non_null("SellingPlanPricingPolicyAdjustmentValue"), graphql_name="adjustmentValue") - - class SellingPlanPricingPolicyPercentageValue(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("percentage",) @@ -18168,6 +21330,24 @@ class SellingPlanRecurringDeliveryPolicy(sgqlc.types.Type): ) +class ServerPixelCreatePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("server_pixel", "user_errors") + server_pixel = sgqlc.types.Field("ServerPixel", graphql_name="serverPixel") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsServerPixelUserError"))), graphql_name="userErrors" + ) + + +class ServerPixelDeletePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("deleted_server_pixel_id", "user_errors") + deleted_server_pixel_id = sgqlc.types.Field(ID, graphql_name="deletedServerPixelId") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsServerPixelUserError"))), graphql_name="userErrors" + ) + + class ShippingLine(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( @@ -18191,8 +21371,7 @@ class ShippingLine(sgqlc.types.Type): custom = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="custom") delivery_category = sgqlc.types.Field(String, graphql_name="deliveryCategory") discount_allocations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), - graphql_name="discountAllocations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), graphql_name="discountAllocations" ) discounted_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedPriceSet") id = sgqlc.types.Field(ID, graphql_name="id") @@ -18276,11 +21455,18 @@ class ShopAlertAction(sgqlc.types.Type): url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="url") +class ShopBillingPreferences(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("currency",) + currency = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currency") + + class ShopFeatures(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ( "avalara_avatax", "branding", + "bundles", "captcha", "captcha_external_domains", "dynamic_remarketing", @@ -18303,6 +21489,7 @@ class ShopFeatures(sgqlc.types.Type): ) avalara_avatax = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="avalaraAvatax") branding = sgqlc.types.Field(sgqlc.types.non_null(ShopBranding), graphql_name="branding") + bundles = sgqlc.types.Field(sgqlc.types.non_null(BundlesFeature), graphql_name="bundles") captcha = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="captcha") captcha_external_domains = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="captchaExternalDomains") dynamic_remarketing = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="dynamicRemarketing") @@ -18317,8 +21504,7 @@ class ShopFeatures(sgqlc.types.Type): live_view = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="liveView") onboarding_visual = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="onboardingVisual") paypal_express_subscription_gateway_status = sgqlc.types.Field( - sgqlc.types.non_null(PaypalExpressSubscriptionsGatewayStatus), - graphql_name="paypalExpressSubscriptionGatewayStatus", + sgqlc.types.non_null(PaypalExpressSubscriptionsGatewayStatus), graphql_name="paypalExpressSubscriptionGatewayStatus" ) reports = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="reports") sells_subscriptions = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="sellsSubscriptions") @@ -18332,8 +21518,7 @@ class ShopLocale(sgqlc.types.Type): __field_names__ = ("locale", "market_web_presences", "name", "primary", "published") locale = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="locale") market_web_presences = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketWebPresence"))), - graphql_name="marketWebPresences", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MarketWebPresence"))), graphql_name="marketWebPresences" ) name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") primary = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="primary") @@ -18374,37 +21559,77 @@ class ShopPolicyUpdatePayload(sgqlc.types.Type): __field_names__ = ("shop_policy", "user_errors") shop_policy = sgqlc.types.Field("ShopPolicy", graphql_name="shopPolicy") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopPolicyUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopPolicyUserError"))), graphql_name="userErrors" ) -class ShopResourceLimits(sgqlc.types.Type): +class ShopResourceFeedbackCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "location_limit", - "max_product_options", - "max_product_variants", - "redirect_limit_reached", - "sku_resource_limits", + __field_names__ = ("feedback", "user_errors") + feedback = sgqlc.types.Field(AppFeedback, graphql_name="feedback") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopResourceFeedbackCreateUserError"))), graphql_name="userErrors" ) + + +class ShopResourceLimits(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("location_limit", "max_product_options", "max_product_variants", "redirect_limit_reached") location_limit = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="locationLimit") max_product_options = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="maxProductOptions") max_product_variants = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="maxProductVariants") redirect_limit_reached = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="redirectLimitReached") - sku_resource_limits = sgqlc.types.Field(sgqlc.types.non_null(ResourceLimit), graphql_name="skuResourceLimits") + + +class ShopifyFunction(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ( + "api_type", + "api_version", + "app", + "app_bridge", + "app_key", + "description", + "id", + "input_query", + "title", + "use_creation_ui", + ) + api_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="apiType") + api_version = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="apiVersion") + app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") + app_bridge = sgqlc.types.Field(sgqlc.types.non_null(FunctionsAppBridge), graphql_name="appBridge") + app_key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="appKey") + description = sgqlc.types.Field(String, graphql_name="description") + id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="id") + input_query = sgqlc.types.Field(String, graphql_name="inputQuery") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + use_creation_ui = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="useCreationUi") + + +class ShopifyFunctionConnection(sgqlc.types.relay.Connection): + __schema__ = shopify_schema + __field_names__ = ("edges", "nodes", "page_info") + edges = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyFunctionEdge"))), graphql_name="edges") + nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ShopifyFunction))), graphql_name="nodes") + page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") + + +class ShopifyFunctionEdge(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("cursor", "node") + cursor = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="cursor") + node = sgqlc.types.Field(sgqlc.types.non_null(ShopifyFunction), graphql_name="node") class ShopifyPaymentsBankAccountConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsBankAccountEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsBankAccountEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsBankAccount"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsBankAccount"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -18416,19 +21641,11 @@ class ShopifyPaymentsBankAccountEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("ShopifyPaymentsBankAccount"), graphql_name="node") -class ShopifyPaymentsChargeStatementDescriptor(sgqlc.types.Interface): - __schema__ = shopify_schema - __field_names__ = ("default", "prefix") - default = sgqlc.types.Field(String, graphql_name="default") - prefix = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="prefix") - - class ShopifyPaymentsDisputeConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsDisputeEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsDisputeEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsDispute"))), graphql_name="nodes" @@ -18474,8 +21691,7 @@ class ShopifyPaymentsPayoutConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsPayoutEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsPayoutEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsPayout"))), graphql_name="nodes" @@ -18578,8 +21794,7 @@ class StagedMediaUploadTarget(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("parameters", "resource_url", "url") parameters = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StagedUploadParameter"))), - graphql_name="parameters", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StagedUploadParameter"))), graphql_name="parameters" ) resource_url = sgqlc.types.Field(URL, graphql_name="resourceUrl") url = sgqlc.types.Field(URL, graphql_name="url") @@ -18640,12 +21855,10 @@ class StandardMetafieldDefinitionTemplateConnection(sgqlc.types.relay.Connection __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StandardMetafieldDefinitionTemplateEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StandardMetafieldDefinitionTemplateEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StandardMetafieldDefinitionTemplate"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StandardMetafieldDefinitionTemplate"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -18657,6 +21870,15 @@ class StandardMetafieldDefinitionTemplateEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("StandardMetafieldDefinitionTemplate"), graphql_name="node") +class StandardMetaobjectDefinitionEnablePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("metaobject_definition", "user_errors") + metaobject_definition = sgqlc.types.Field("MetaobjectDefinition", graphql_name="metaobjectDefinition") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("MetaobjectUserError"))), graphql_name="userErrors" + ) + + class StandardizedProductType(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("product_taxonomy_node",) @@ -18667,8 +21889,7 @@ class StorefrontAccessTokenConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StorefrontAccessTokenEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StorefrontAccessTokenEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("StorefrontAccessToken"))), graphql_name="nodes" @@ -18724,12 +21945,10 @@ class SubscriptionBillingAttemptConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingAttemptEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingAttemptEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingAttempt"))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingAttempt"))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -18739,8 +21958,7 @@ class SubscriptionBillingAttemptCreatePayload(sgqlc.types.Type): __field_names__ = ("subscription_billing_attempt", "user_errors") subscription_billing_attempt = sgqlc.types.Field("SubscriptionBillingAttempt", graphql_name="subscriptionBillingAttempt") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BillingAttemptUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("BillingAttemptUserError"))), graphql_name="userErrors" ) @@ -18793,8 +22011,7 @@ class SubscriptionBillingCycleConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionBillingCycle))), graphql_name="nodes" @@ -18807,8 +22024,7 @@ class SubscriptionBillingCycleContractDraftCommitPayload(sgqlc.types.Type): __field_names__ = ("contract", "user_errors") contract = sgqlc.types.Field("SubscriptionBillingCycleEditedContract", graphql_name="contract") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -18817,8 +22033,7 @@ class SubscriptionBillingCycleContractDraftConcatenatePayload(sgqlc.types.Type): __field_names__ = ("draft", "user_errors") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -18827,8 +22042,7 @@ class SubscriptionBillingCycleContractEditPayload(sgqlc.types.Type): __field_names__ = ("draft", "user_errors") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -18844,8 +22058,7 @@ class SubscriptionBillingCycleEditDeletePayload(sgqlc.types.Type): __field_names__ = ("billing_cycles", "user_errors") billing_cycles = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionBillingCycle)), graphql_name="billingCycles") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), graphql_name="userErrors" ) @@ -18854,8 +22067,7 @@ class SubscriptionBillingCycleEditsDeletePayload(sgqlc.types.Type): __field_names__ = ("billing_cycles", "user_errors") billing_cycles = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionBillingCycle)), graphql_name="billingCycles") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), graphql_name="userErrors" ) @@ -18864,8 +22076,7 @@ class SubscriptionBillingCycleScheduleEditPayload(sgqlc.types.Type): __field_names__ = ("billing_cycle", "user_errors") billing_cycle = sgqlc.types.Field(SubscriptionBillingCycle, graphql_name="billingCycle") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionBillingCycleUserError"))), graphql_name="userErrors" ) @@ -18879,88 +22090,20 @@ class SubscriptionBillingPolicy(sgqlc.types.Type): min_cycles = sgqlc.types.Field(Int, graphql_name="minCycles") -class SubscriptionContractBase(sgqlc.types.Interface): +class SubscriptionContractAtomicCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "app", - "app_admin_url", - "currency_code", - "custom_attributes", - "customer", - "customer_payment_method", - "delivery_method", - "delivery_price", - "discounts", - "line_count", - "lines", - "note", - "orders", - "updated_at", - ) - app = sgqlc.types.Field("App", graphql_name="app") - app_admin_url = sgqlc.types.Field(URL, graphql_name="appAdminUrl") - currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") - custom_attributes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" - ) - customer = sgqlc.types.Field("Customer", graphql_name="customer") - customer_payment_method = sgqlc.types.Field( - "CustomerPaymentMethod", - graphql_name="customerPaymentMethod", - args=sgqlc.types.ArgDict((("show_revoked", sgqlc.types.Arg(Boolean, graphql_name="showRevoked", default=False)),)), - ) - delivery_method = sgqlc.types.Field("SubscriptionDeliveryMethod", graphql_name="deliveryMethod") - delivery_price = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="deliveryPrice") - discounts = sgqlc.types.Field( - sgqlc.types.non_null("SubscriptionManualDiscountConnection"), - graphql_name="discounts", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - line_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="lineCount") - lines = sgqlc.types.Field( - sgqlc.types.non_null("SubscriptionLineConnection"), - graphql_name="lines", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), - ) - note = sgqlc.types.Field(String, graphql_name="note") - orders = sgqlc.types.Field( - sgqlc.types.non_null(OrderConnection), - graphql_name="orders", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ) - ), + __field_names__ = ("contract", "user_errors") + contract = sgqlc.types.Field("SubscriptionContract", graphql_name="contract") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) - updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") class SubscriptionContractConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionContractEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionContractEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionContract"))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -18971,8 +22114,7 @@ class SubscriptionContractCreatePayload(sgqlc.types.Type): __field_names__ = ("draft", "user_errors") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -18983,13 +22125,22 @@ class SubscriptionContractEdge(sgqlc.types.Type): node = sgqlc.types.Field(sgqlc.types.non_null("SubscriptionContract"), graphql_name="node") +class SubscriptionContractProductChangePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("contract", "line_updated", "user_errors") + contract = sgqlc.types.Field("SubscriptionContract", graphql_name="contract") + line_updated = sgqlc.types.Field("SubscriptionLine", graphql_name="lineUpdated") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" + ) + + class SubscriptionContractSetNextBillingDatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("contract", "user_errors") contract = sgqlc.types.Field("SubscriptionContract", graphql_name="contract") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionContractUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionContractUserError"))), graphql_name="userErrors" ) @@ -18998,8 +22149,7 @@ class SubscriptionContractUpdatePayload(sgqlc.types.Type): __field_names__ = ("draft", "user_errors") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19057,8 +22207,7 @@ class SubscriptionDeliveryMethodShipping(sgqlc.types.Type): class SubscriptionDeliveryMethodShippingOption(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("carrier_service", "code", "description", "presentment_title", "title") - carrier_service = sgqlc.types.Field("DeliveryCarrierService", graphql_name="carrierService") + __field_names__ = ("code", "description", "presentment_title", "title") code = sgqlc.types.Field(String, graphql_name="code") description = sgqlc.types.Field(String, graphql_name="description") presentment_title = sgqlc.types.Field(String, graphql_name="presentmentTitle") @@ -19075,8 +22224,7 @@ class SubscriptionDeliveryOptionResultSuccess(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("delivery_options",) delivery_options = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDeliveryOption"))), - graphql_name="deliveryOptions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDeliveryOption"))), graphql_name="deliveryOptions" ) @@ -19099,8 +22247,7 @@ class SubscriptionDiscountConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDiscountEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDiscountEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDiscount"))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -19150,8 +22297,7 @@ class SubscriptionDraftCommitPayload(sgqlc.types.Type): __field_names__ = ("contract", "user_errors") contract = sgqlc.types.Field("SubscriptionContract", graphql_name="contract") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19161,8 +22307,7 @@ class SubscriptionDraftDiscountAddPayload(sgqlc.types.Type): discount_added = sgqlc.types.Field("SubscriptionManualDiscount", graphql_name="discountAdded") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19172,8 +22317,7 @@ class SubscriptionDraftDiscountCodeApplyPayload(sgqlc.types.Type): applied_discount = sgqlc.types.Field(SubscriptionAppliedCodeDiscount, graphql_name="appliedDiscount") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19183,8 +22327,7 @@ class SubscriptionDraftDiscountRemovePayload(sgqlc.types.Type): discount_removed = sgqlc.types.Field("SubscriptionDiscount", graphql_name="discountRemoved") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19194,8 +22337,7 @@ class SubscriptionDraftDiscountUpdatePayload(sgqlc.types.Type): discount_updated = sgqlc.types.Field("SubscriptionManualDiscount", graphql_name="discountUpdated") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19205,8 +22347,7 @@ class SubscriptionDraftFreeShippingDiscountAddPayload(sgqlc.types.Type): discount_added = sgqlc.types.Field("SubscriptionManualDiscount", graphql_name="discountAdded") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19216,8 +22357,7 @@ class SubscriptionDraftFreeShippingDiscountUpdatePayload(sgqlc.types.Type): discount_updated = sgqlc.types.Field("SubscriptionManualDiscount", graphql_name="discountUpdated") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19227,8 +22367,7 @@ class SubscriptionDraftLineAddPayload(sgqlc.types.Type): draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") line_added = sgqlc.types.Field("SubscriptionLine", graphql_name="lineAdded") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19241,8 +22380,7 @@ class SubscriptionDraftLineRemovePayload(sgqlc.types.Type): draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") line_removed = sgqlc.types.Field("SubscriptionLine", graphql_name="lineRemoved") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19252,8 +22390,7 @@ class SubscriptionDraftLineUpdatePayload(sgqlc.types.Type): draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") line_updated = sgqlc.types.Field("SubscriptionLine", graphql_name="lineUpdated") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19262,8 +22399,7 @@ class SubscriptionDraftUpdatePayload(sgqlc.types.Type): __field_names__ = ("draft", "user_errors") draft = sgqlc.types.Field("SubscriptionDraft", graphql_name="draft") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionDraftUserError"))), graphql_name="userErrors" ) @@ -19293,8 +22429,7 @@ class SubscriptionLine(sgqlc.types.Type): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" ) discount_allocations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionDiscountAllocation))), - graphql_name="discountAllocations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionDiscountAllocation))), graphql_name="discountAllocations" ) id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") line_discounted_price = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="lineDiscountedPrice") @@ -19398,12 +22533,10 @@ class SubscriptionManualDiscountConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionManualDiscountEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SubscriptionManualDiscountEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionManualDiscount))), - graphql_name="nodes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionManualDiscount))), graphql_name="nodes" ) page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -19417,16 +22550,7 @@ class SubscriptionManualDiscountEdge(sgqlc.types.Type): class SubscriptionPickupOption(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ( - "code", - "description", - "location", - "phone_required", - "pickup_time", - "presentment_title", - "price", - "title", - ) + __field_names__ = ("code", "description", "location", "phone_required", "pickup_time", "presentment_title", "price", "title") code = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="code") description = sgqlc.types.Field(String, graphql_name="description") location = sgqlc.types.Field(sgqlc.types.non_null("Location"), graphql_name="location") @@ -19442,23 +22566,13 @@ class SubscriptionPricingPolicy(sgqlc.types.Type): __field_names__ = ("base_price", "cycle_discounts") base_price = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="basePrice") cycle_discounts = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionCyclePriceAdjustment))), - graphql_name="cycleDiscounts", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionCyclePriceAdjustment))), graphql_name="cycleDiscounts" ) class SubscriptionShippingOption(sgqlc.types.Type): - __schema__ = shopify_schema - __field_names__ = ( - "carrier_service", - "code", - "description", - "phone_required", - "presentment_title", - "price", - "title", - ) - carrier_service = sgqlc.types.Field("DeliveryCarrierService", graphql_name="carrierService") + __schema__ = shopify_schema + __field_names__ = ("code", "description", "phone_required", "presentment_title", "price", "title") code = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="code") description = sgqlc.types.Field(String, graphql_name="description") phone_required = sgqlc.types.Field(Boolean, graphql_name="phoneRequired") @@ -19477,8 +22591,7 @@ class SubscriptionShippingOptionResultSuccess(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("shipping_options",) shipping_options = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionShippingOption))), - graphql_name="shippingOptions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SubscriptionShippingOption))), graphql_name="shippingOptions" ) @@ -19529,14 +22642,63 @@ class SuggestedRefund(sgqlc.types.Type): shipping = sgqlc.types.Field(sgqlc.types.non_null(ShippingRefund), graphql_name="shipping") subtotal_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="subtotalSet") suggested_transactions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SuggestedOrderTransaction))), - graphql_name="suggestedTransactions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SuggestedOrderTransaction))), graphql_name="suggestedTransactions" ) total_cart_discount_amount_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalCartDiscountAmountSet") total_duties_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalDutiesSet") total_tax_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalTaxSet") +class SuggestedReturnRefund(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ( + "amount", + "discounted_subtotal", + "maximum_refundable", + "refund_duties", + "shipping", + "subtotal", + "suggested_transactions", + "total_cart_discount_amount", + "total_duties", + "total_tax", + ) + amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="amount") + discounted_subtotal = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedSubtotal") + maximum_refundable = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="maximumRefundable") + refund_duties = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(RefundDuty))), graphql_name="refundDuties" + ) + shipping = sgqlc.types.Field(sgqlc.types.non_null(ShippingRefund), graphql_name="shipping") + subtotal = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="subtotal") + suggested_transactions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SuggestedOrderTransaction))), graphql_name="suggestedTransactions" + ) + total_cart_discount_amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalCartDiscountAmount") + total_duties = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalDuties") + total_tax = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalTax") + + +class TableData(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("columns", "row_data", "unformatted_data") + columns = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TableDataColumn"))), graphql_name="columns") + row_data = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))))), + graphql_name="rowData", + ) + unformatted_data = sgqlc.types.Field(sgqlc.types.non_null(JSON), graphql_name="unformattedData") + + +class TableDataColumn(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("compared_to", "data_type", "display_name", "name") + compared_to = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="comparedTo") + data_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="dataType") + display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + + class TagsAddPayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("node", "user_errors") @@ -19551,6 +22713,21 @@ class TagsRemovePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class TaxAppConfiguration(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("state",) + state = sgqlc.types.Field(sgqlc.types.non_null(TaxPartnerState), graphql_name="state") + + +class TaxAppConfigurePayload(sgqlc.types.Type): + __schema__ = shopify_schema + __field_names__ = ("tax_app_configuration", "user_errors") + tax_app_configuration = sgqlc.types.Field(TaxAppConfiguration, graphql_name="taxAppConfiguration") + user_errors = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TaxAppConfigureUserError"))), graphql_name="userErrors" + ) + + class TaxLine(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("channel_liable", "price_set", "rate", "rate_percentage", "title") @@ -19587,10 +22764,11 @@ class TenderTransactionEdge(sgqlc.types.Type): class TranslatableContent(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("digest", "key", "locale", "value") + __field_names__ = ("digest", "key", "locale", "type", "value") digest = sgqlc.types.Field(String, graphql_name="digest") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") locale = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="locale") + type = sgqlc.types.Field(sgqlc.types.non_null(LocalizableContentType), graphql_name="type") value = sgqlc.types.Field(String, graphql_name="value") @@ -19599,8 +22777,7 @@ class TranslatableResource(sgqlc.types.Type): __field_names__ = ("resource_id", "translatable_content", "translations") resource_id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="resourceId") translatable_content = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TranslatableContent))), - graphql_name="translatableContent", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TranslatableContent))), graphql_name="translatableContent" ) translations = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Translation"))), @@ -19619,8 +22796,7 @@ class TranslatableResourceConnection(sgqlc.types.relay.Connection): __schema__ = shopify_schema __field_names__ = ("edges", "nodes", "page_info") edges = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslatableResourceEdge"))), - graphql_name="edges", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslatableResourceEdge"))), graphql_name="edges" ) nodes = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TranslatableResource))), graphql_name="nodes") page_info = sgqlc.types.Field(sgqlc.types.non_null(PageInfo), graphql_name="pageInfo") @@ -19635,11 +22811,12 @@ class TranslatableResourceEdge(sgqlc.types.Type): class Translation(sgqlc.types.Type): __schema__ = shopify_schema - __field_names__ = ("key", "locale", "market", "outdated", "value") + __field_names__ = ("key", "locale", "market", "outdated", "updated_at", "value") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") locale = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="locale") market = sgqlc.types.Field("Market", graphql_name="market") outdated = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="outdated") + updated_at = sgqlc.types.Field(DateTime, graphql_name="updatedAt") value = sgqlc.types.Field(String, graphql_name="value") @@ -19648,8 +22825,7 @@ class TranslationsRegisterPayload(sgqlc.types.Type): __field_names__ = ("translations", "user_errors") translations = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(Translation)), graphql_name="translations") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), graphql_name="userErrors" ) @@ -19658,8 +22834,7 @@ class TranslationsRemovePayload(sgqlc.types.Type): __field_names__ = ("translations", "user_errors") translations = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(Translation)), graphql_name="translations") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("TranslationUserError"))), graphql_name="userErrors" ) @@ -19692,8 +22867,7 @@ class UrlRedirectBulkDeleteByIdsPayload(sgqlc.types.Type): __field_names__ = ("job", "user_errors") job = sgqlc.types.Field(Job, graphql_name="job") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectBulkDeleteByIdsUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectBulkDeleteByIdsUserError"))), graphql_name="userErrors" ) @@ -19712,8 +22886,7 @@ class UrlRedirectBulkDeleteBySearchPayload(sgqlc.types.Type): __field_names__ = ("job", "user_errors") job = sgqlc.types.Field(Job, graphql_name="job") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectBulkDeleteBySearchUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectBulkDeleteBySearchUserError"))), graphql_name="userErrors" ) @@ -19730,8 +22903,7 @@ class UrlRedirectCreatePayload(sgqlc.types.Type): __field_names__ = ("url_redirect", "user_errors") url_redirect = sgqlc.types.Field("UrlRedirect", graphql_name="urlRedirect") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), graphql_name="userErrors" ) @@ -19740,8 +22912,7 @@ class UrlRedirectDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_url_redirect_id", "user_errors") deleted_url_redirect_id = sgqlc.types.Field(ID, graphql_name="deletedUrlRedirectId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), graphql_name="userErrors" ) @@ -19757,8 +22928,7 @@ class UrlRedirectImportCreatePayload(sgqlc.types.Type): __field_names__ = ("url_redirect_import", "user_errors") url_redirect_import = sgqlc.types.Field("UrlRedirectImport", graphql_name="urlRedirectImport") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectImportUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectImportUserError"))), graphql_name="userErrors" ) @@ -19774,8 +22944,7 @@ class UrlRedirectImportSubmitPayload(sgqlc.types.Type): __field_names__ = ("job", "user_errors") job = sgqlc.types.Field(Job, graphql_name="job") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectImportUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectImportUserError"))), graphql_name="userErrors" ) @@ -19784,8 +22953,7 @@ class UrlRedirectUpdatePayload(sgqlc.types.Type): __field_names__ = ("url_redirect", "user_errors") url_redirect = sgqlc.types.Field("UrlRedirect", graphql_name="urlRedirect") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UrlRedirectUserError"))), graphql_name="userErrors" ) @@ -19832,8 +23000,7 @@ class WebPixelCreatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("user_errors", "web_pixel") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), graphql_name="userErrors" ) web_pixel = sgqlc.types.Field("WebPixel", graphql_name="webPixel") @@ -19843,8 +23010,7 @@ class WebPixelDeletePayload(sgqlc.types.Type): __field_names__ = ("deleted_web_pixel_id", "user_errors") deleted_web_pixel_id = sgqlc.types.Field(ID, graphql_name="deletedWebPixelId") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), graphql_name="userErrors" ) @@ -19852,8 +23018,7 @@ class WebPixelUpdatePayload(sgqlc.types.Type): __schema__ = shopify_schema __field_names__ = ("user_errors", "web_pixel") user_errors = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), - graphql_name="userErrors", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ErrorsWebPixelUserError"))), graphql_name="userErrors" ) web_pixel = sgqlc.types.Field("WebPixel", graphql_name="webPixel") @@ -19943,6 +23108,123 @@ class deliveryProfileUpdatePayload(sgqlc.types.Type): user_errors = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("UserError"))), graphql_name="userErrors") +class AbandonedCheckout(sgqlc.types.Type, Navigable, Node): + __schema__ = shopify_schema + __field_names__ = ("abandoned_checkout_url", "line_items_quantity", "total_price_set") + abandoned_checkout_url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="abandonedCheckoutUrl") + line_items_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="lineItemsQuantity") + total_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalPriceSet") + + +class Abandonment(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "abandoned_checkout_payload", + "abandonment_type", + "app", + "cart_url", + "created_at", + "customer", + "customer_has_no_order_since_abandonment", + "days_since_last_abandonment_email", + "email_sent_at", + "email_state", + "hours_since_last_abandoned_checkout", + "inventory_available", + "is_from_online_store", + "is_from_shop_app", + "is_from_shop_pay", + "is_most_significant_abandonment", + "last_browse_abandonment_date", + "last_cart_abandonment_date", + "last_checkout_abandonment_date", + "most_recent_step", + "products_added_to_cart", + "products_viewed", + "visit_started_at", + ) + abandoned_checkout_payload = sgqlc.types.Field(AbandonedCheckout, graphql_name="abandonedCheckoutPayload") + abandonment_type = sgqlc.types.Field(sgqlc.types.non_null(AbandonmentAbandonmentType), graphql_name="abandonmentType") + app = sgqlc.types.Field(sgqlc.types.non_null("App"), graphql_name="app") + cart_url = sgqlc.types.Field(URL, graphql_name="cartUrl") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + customer = sgqlc.types.Field(sgqlc.types.non_null("Customer"), graphql_name="customer") + customer_has_no_order_since_abandonment = sgqlc.types.Field( + sgqlc.types.non_null(Boolean), graphql_name="customerHasNoOrderSinceAbandonment" + ) + days_since_last_abandonment_email = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="daysSinceLastAbandonmentEmail") + email_sent_at = sgqlc.types.Field(DateTime, graphql_name="emailSentAt") + email_state = sgqlc.types.Field(AbandonmentEmailState, graphql_name="emailState") + hours_since_last_abandoned_checkout = sgqlc.types.Field(Float, graphql_name="hoursSinceLastAbandonedCheckout") + inventory_available = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="inventoryAvailable") + is_from_online_store = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isFromOnlineStore") + is_from_shop_app = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isFromShopApp") + is_from_shop_pay = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isFromShopPay") + is_most_significant_abandonment = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isMostSignificantAbandonment") + last_browse_abandonment_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="lastBrowseAbandonmentDate") + last_cart_abandonment_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="lastCartAbandonmentDate") + last_checkout_abandonment_date = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="lastCheckoutAbandonmentDate") + most_recent_step = sgqlc.types.Field(sgqlc.types.non_null(AbandonmentAbandonmentType), graphql_name="mostRecentStep") + products_added_to_cart = sgqlc.types.Field( + sgqlc.types.non_null(CustomerVisitProductInfoConnection), + graphql_name="productsAddedToCart", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + products_viewed = sgqlc.types.Field( + sgqlc.types.non_null(CustomerVisitProductInfoConnection), + graphql_name="productsViewed", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + visit_started_at = sgqlc.types.Field(DateTime, graphql_name="visitStartedAt") + + +class AbandonmentEmailStateUpdateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(AbandonmentEmailStateUpdateUserErrorCode, graphql_name="code") + + +class AbandonmentUpdateActivitiesDeliveryStatusesUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(AbandonmentUpdateActivitiesDeliveryStatusesUserErrorCode, graphql_name="code") + + +class AddAllProductsOperation(sgqlc.types.Type, Node, ResourceOperation): + __schema__ = shopify_schema + __field_names__ = () + + +class AdditionalFee(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("name", "price", "tax_lines") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + price = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="price") + tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TaxLine))), graphql_name="taxLines") + + +class AdditionalFeeSale(sgqlc.types.Type, Sale): + __schema__ = shopify_schema + __field_names__ = ("additional_fee",) + additional_fee = sgqlc.types.Field(sgqlc.types.non_null("SaleAdditionalFee"), graphql_name="additionalFee") + + class AdjustmentSale(sgqlc.types.Type, Sale): __schema__ = shopify_schema __field_names__ = () @@ -19985,8 +23267,7 @@ class App(sgqlc.types.Type, Node): app_store_app_url = sgqlc.types.Field(URL, graphql_name="appStoreAppUrl") app_store_developer_url = sgqlc.types.Field(URL, graphql_name="appStoreDeveloperUrl") available_access_scopes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AccessScope))), - graphql_name="availableAccessScopes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AccessScope))), graphql_name="availableAccessScopes" ) banner = sgqlc.types.Field(sgqlc.types.non_null("Image"), graphql_name="banner") description = sgqlc.types.Field(String, graphql_name="description") @@ -19994,8 +23275,7 @@ class App(sgqlc.types.Type, Node): developer_type = sgqlc.types.Field(sgqlc.types.non_null(AppDeveloperType), graphql_name="developerType") embedded = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="embedded") failed_requirements = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FailedRequirement))), - graphql_name="failedRequirements", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FailedRequirement))), graphql_name="failedRequirements" ) features = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="features") feedback = sgqlc.types.Field(AppFeedback, graphql_name="feedback") @@ -20011,8 +23291,7 @@ class App(sgqlc.types.Type, Node): public_category = sgqlc.types.Field(sgqlc.types.non_null(AppPublicCategory), graphql_name="publicCategory") published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="published") requested_access_scopes = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AccessScope))), - graphql_name="requestedAccessScopes", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AccessScope))), graphql_name="requestedAccessScopes" ) screenshots = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Image"))), graphql_name="screenshots") shopify_developed = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="shopifyDeveloped") @@ -20021,6 +23300,24 @@ class App(sgqlc.types.Type, Node): webhook_api_version = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="webhookApiVersion") +class AppCatalog(sgqlc.types.Type, Catalog, Node): + __schema__ = shopify_schema + __field_names__ = ("apps",) + apps = sgqlc.types.Field( + sgqlc.types.non_null(AppConnection), + graphql_name="apps", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + class AppCredit(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ("amount", "created_at", "description", "test") @@ -20048,8 +23345,7 @@ class AppInstallation(sgqlc.types.Type, HasMetafields, Node): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AccessScope))), graphql_name="accessScopes" ) active_subscriptions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppSubscription"))), - graphql_name="activeSubscriptions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("AppSubscription"))), graphql_name="activeSubscriptions" ) all_subscriptions = sgqlc.types.Field( sgqlc.types.non_null(AppSubscriptionConnection), @@ -20106,10 +23402,7 @@ class AppInstallation(sgqlc.types.Type, HasMetafields, Node): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(AppRevenueAttributionRecordSortKeys, graphql_name="sortKey", default="CREATED_AT"), - ), + ("sort_key", sgqlc.types.Arg(AppRevenueAttributionRecordSortKeys, graphql_name="sortKey", default="CREATED_AT")), ) ), ) @@ -20146,21 +23439,11 @@ class AppRevenueAttributionRecordDeleteUserError(sgqlc.types.Type, DisplayableEr class AppSubscription(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "created_at", - "current_period_end", - "line_items", - "name", - "return_url", - "status", - "test", - "trial_days", - ) + __field_names__ = ("created_at", "current_period_end", "line_items", "name", "return_url", "status", "test", "trial_days") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") current_period_end = sgqlc.types.Field(DateTime, graphql_name="currentPeriodEnd") line_items = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppSubscriptionLineItem))), - graphql_name="lineItems", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AppSubscriptionLineItem))), graphql_name="lineItems" ) name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") return_url = sgqlc.types.Field(sgqlc.types.non_null(URL), graphql_name="returnUrl") @@ -20177,9 +23460,10 @@ class AppSubscriptionTrialExtendUserError(sgqlc.types.Type, DisplayableError): class AppUsageRecord(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("created_at", "description", "price", "subscription_line_item") + __field_names__ = ("created_at", "description", "idempotency_key", "price", "subscription_line_item") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") description = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="description") + idempotency_key = sgqlc.types.Field(String, graphql_name="idempotencyKey") price = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="price") subscription_line_item = sgqlc.types.Field(sgqlc.types.non_null(AppSubscriptionLineItem), graphql_name="subscriptionLineItem") @@ -20351,6 +23635,35 @@ class CalculatedScriptDiscountApplication(sgqlc.types.Type, CalculatedDiscountAp __field_names__ = () +class CartTransform(sgqlc.types.Type, HasMetafields, Node): + __schema__ = shopify_schema + __field_names__ = ("function_id",) + function_id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="functionId") + + +class CartTransformCreateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CartTransformCreateUserErrorCode, graphql_name="code") + + +class CartTransformDeleteUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CartTransformDeleteUserErrorCode, graphql_name="code") + + +class CatalogCsvOperation(sgqlc.types.Type, Node, ResourceOperation): + __schema__ = shopify_schema + __field_names__ = () + + +class CatalogUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CatalogUserErrorCode, graphql_name="code") + + class Channel(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( @@ -20427,9 +23740,10 @@ class Channel(sgqlc.types.Type, Node): class ChannelDefinition(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("channel_name", "handle", "sub_channel_name", "svg_icon") + __field_names__ = ("channel_name", "handle", "is_marketplace", "sub_channel_name", "svg_icon") channel_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="channelName") handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + is_marketplace = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isMarketplace") sub_channel_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="subChannelName") svg_icon = sgqlc.types.Field(String, graphql_name="svgIcon") @@ -20444,8 +23758,9 @@ class ChannelInformation(sgqlc.types.Type, Node): class CheckoutProfile(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("created_at", "is_published", "name", "updated_at") + __field_names__ = ("created_at", "edited_at", "is_published", "name", "updated_at") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + edited_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="editedAt") is_published = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isPublished") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") @@ -20495,10 +23810,7 @@ class Collection(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, HasPu ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(ProductCollectionSortKeys, graphql_name="sortKey", default="COLLECTION_DEFAULT"), - ), + ("sort_key", sgqlc.types.Arg(ProductCollectionSortKeys, graphql_name="sortKey", default="COLLECTION_DEFAULT")), ) ), ) @@ -20521,8 +23833,7 @@ class CommentEvent(sgqlc.types.Type, Event, Node): __schema__ = shopify_schema __field_names__ = ("attachments", "author", "can_delete", "can_edit", "edited", "embed", "raw_message", "subject") attachments = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CommentEventAttachment))), - graphql_name="attachments", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CommentEventAttachment))), graphql_name="attachments" ) author = sgqlc.types.Field(sgqlc.types.non_null("StaffMember"), graphql_name="author") can_delete = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="canDelete") @@ -20533,7 +23844,7 @@ class CommentEvent(sgqlc.types.Type, Event, Node): subject = sgqlc.types.Field(sgqlc.types.non_null(CommentEventSubject), graphql_name="subject") -class Company(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigable, Node): +class Company(sgqlc.types.Type, CommentEventSubject, HasEvents, HasMetafieldDefinitions, HasMetafields, Navigable, Node): __schema__ = shopify_schema __field_names__ = ( "contact_count", @@ -20748,10 +24059,7 @@ class CompanyContact(sgqlc.types.Type, Node): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(CompanyContactRoleAssignmentSortKeys, graphql_name="sortKey", default="ID"), - ), + ("sort_key", sgqlc.types.Arg(CompanyContactRoleAssignmentSortKeys, graphql_name="sortKey", default="ID")), ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), ) ), @@ -20778,16 +24086,18 @@ class CompanyContactRoleAssignment(sgqlc.types.Type, Node): updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") -class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigable, Node): +class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, HasMetafieldDefinitions, HasMetafields, Navigable, Node): __schema__ = shopify_schema __field_names__ = ( "billing_address", "buyer_experience_configuration", + "catalogs", "company", "created_at", "currency", "draft_orders", "external_id", + "in_catalog", "locale", "market", "name", @@ -20804,6 +24114,19 @@ class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigabl ) billing_address = sgqlc.types.Field(CompanyAddress, graphql_name="billingAddress") buyer_experience_configuration = sgqlc.types.Field(BuyerExperienceConfiguration, graphql_name="buyerExperienceConfiguration") + catalogs = sgqlc.types.Field( + sgqlc.types.non_null(CatalogConnection), + graphql_name="catalogs", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) company = sgqlc.types.Field(sgqlc.types.non_null(Company), graphql_name="company") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") currency = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currency") @@ -20823,6 +24146,11 @@ class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigabl ), ) external_id = sgqlc.types.Field(String, graphql_name="externalId") + in_catalog = sgqlc.types.Field( + sgqlc.types.non_null(Boolean), + graphql_name="inCatalog", + args=sgqlc.types.ArgDict((("catalog_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="catalogId", default=None)),)), + ) locale = sgqlc.types.Field(String, graphql_name="locale") market = sgqlc.types.Field(sgqlc.types.non_null("Market"), graphql_name="market") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") @@ -20853,10 +24181,7 @@ class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigabl ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(CompanyContactRoleAssignmentSortKeys, graphql_name="sortKey", default="ID"), - ), + ("sort_key", sgqlc.types.Arg(CompanyContactRoleAssignmentSortKeys, graphql_name="sortKey", default="ID")), ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), ) ), @@ -20870,20 +24195,32 @@ class CompanyLocation(sgqlc.types.Type, CommentEventSubject, HasEvents, Navigabl updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") -class Customer( - sgqlc.types.Type, - CommentEventSubject, - HasEvents, - HasMetafieldDefinitions, - HasMetafields, - LegacyInteroperability, - Node, -): +class CompanyLocationCatalog(sgqlc.types.Type, Catalog, Node): + __schema__ = shopify_schema + __field_names__ = ("company_locations", "company_locations_count") + company_locations = sgqlc.types.Field( + sgqlc.types.non_null(CompanyLocationConnection), + graphql_name="companyLocations", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("sort_key", sgqlc.types.Arg(CompanyLocationSortKeys, graphql_name="sortKey", default="ID")), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) + company_locations_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="companyLocationsCount") + + +class Customer(sgqlc.types.Type, CommentEventSubject, HasEvents, HasMetafieldDefinitions, HasMetafields, LegacyInteroperability, Node): __schema__ = shopify_schema __field_names__ = ( "addresses", "amount_spent", - "average_order_amount_v2", "can_delete", "company_contact_profiles", "created_at", @@ -20898,6 +24235,7 @@ class Customer( "lifetime_duration", "locale", "market", + "mergeable", "multipass_identifier", "note", "number_of_orders", @@ -20923,11 +24261,9 @@ class Customer( args=sgqlc.types.ArgDict((("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)),)), ) amount_spent = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="amountSpent") - average_order_amount_v2 = sgqlc.types.Field(MoneyV2, graphql_name="averageOrderAmountV2") can_delete = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="canDelete") company_contact_profiles = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CompanyContact))), - graphql_name="companyContactProfiles", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CompanyContact))), graphql_name="companyContactProfiles" ) created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") default_address = sgqlc.types.Field("MailingAddress", graphql_name="defaultAddress") @@ -20941,6 +24277,7 @@ class Customer( lifetime_duration = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="lifetimeDuration") locale = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="locale") market = sgqlc.types.Field("Market", graphql_name="market") + mergeable = sgqlc.types.Field(sgqlc.types.non_null(CustomerMergeable), graphql_name="mergeable") multipass_identifier = sgqlc.types.Field(String, graphql_name="multipassIdentifier") note = sgqlc.types.Field(String, graphql_name="note") number_of_orders = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="numberOfOrders") @@ -21010,6 +24347,12 @@ class CustomerEmailMarketingConsentUpdateUserError(sgqlc.types.Type, Displayable code = sgqlc.types.Field(CustomerEmailMarketingConsentUpdateUserErrorCode, graphql_name="code") +class CustomerMergeUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CustomerMergeErrorCode, graphql_name="code") + + class CustomerPaymentMethod(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ("customer", "instrument", "revoked_at", "revoked_reason", "subscription_contracts") @@ -21032,6 +24375,18 @@ class CustomerPaymentMethod(sgqlc.types.Type, Node): ) +class CustomerPaymentMethodCreateFromDuplicationDataUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CustomerPaymentMethodCreateFromDuplicationDataUserErrorCode, graphql_name="code") + + +class CustomerPaymentMethodGetDuplicationDataUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CustomerPaymentMethodGetDuplicationDataUserErrorCode, graphql_name="code") + + class CustomerPaymentMethodGetUpdateUrlUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -21050,6 +24405,48 @@ class CustomerPaymentMethodUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(CustomerPaymentMethodUserErrorCode, graphql_name="code") +class CustomerSegmentMember(sgqlc.types.Type, HasMetafields): + __schema__ = shopify_schema + __field_names__ = ( + "amount_spent", + "default_address", + "default_email_address", + "default_phone_number", + "display_name", + "first_name", + "id", + "last_name", + "last_order_id", + "mergeable", + "note", + "number_of_orders", + ) + amount_spent = sgqlc.types.Field(MoneyV2, graphql_name="amountSpent") + default_address = sgqlc.types.Field("MailingAddress", graphql_name="defaultAddress") + default_email_address = sgqlc.types.Field(CustomerEmailAddress, graphql_name="defaultEmailAddress") + default_phone_number = sgqlc.types.Field(CustomerPhoneNumber, graphql_name="defaultPhoneNumber") + display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") + first_name = sgqlc.types.Field(String, graphql_name="firstName") + id = sgqlc.types.Field(sgqlc.types.non_null(ID), graphql_name="id") + last_name = sgqlc.types.Field(String, graphql_name="lastName") + last_order_id = sgqlc.types.Field(ID, graphql_name="lastOrderId") + mergeable = sgqlc.types.Field(sgqlc.types.non_null(CustomerMergeable), graphql_name="mergeable") + note = sgqlc.types.Field(String, graphql_name="note") + number_of_orders = sgqlc.types.Field(UnsignedInt64, graphql_name="numberOfOrders") + + +class CustomerSegmentMembersQuery(sgqlc.types.Type, JobResult, Node): + __schema__ = shopify_schema + __field_names__ = ("current_count",) + current_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="currentCount") + + +class CustomerSegmentMembersQueryUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(CustomerSegmentMembersQueryUserErrorCode, graphql_name="code") + + class CustomerSmsMarketingConsentError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -21088,6 +24485,12 @@ class DelegateAccessTokenCreateUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(DelegateAccessTokenCreateUserErrorCode, graphql_name="code") +class DelegateAccessTokenDestroyUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(DelegateAccessTokenDestroyUserErrorCode, graphql_name="code") + + class DeliveryCarrierService(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ("available_services_for_countries", "formatted_name", "icon", "name") @@ -21096,22 +24499,12 @@ class DeliveryCarrierService(sgqlc.types.Type, Node): graphql_name="availableServicesForCountries", args=sgqlc.types.ArgDict( ( - ( - "origins", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="origins", default=None), - ), + ("origins", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="origins", default=None)), ( "country_codes", - sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(CountryCode)), - graphql_name="countryCodes", - default=None, - ), - ), - ( - "rest_of_world", - sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="restOfWorld", default=None), + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(CountryCode)), graphql_name="countryCodes", default=None), ), + ("rest_of_world", sgqlc.types.Arg(sgqlc.types.non_null(Boolean), graphql_name="restOfWorld", default=None)), ) ), ) @@ -21139,9 +24532,25 @@ class DeliveryCountry(sgqlc.types.Type, Node): translated_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="translatedName") +class DeliveryCustomization(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, Node): + __schema__ = shopify_schema + __field_names__ = ("enabled", "error_history", "function_id", "shopify_function", "title") + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") + error_history = sgqlc.types.Field(FunctionsErrorHistory, graphql_name="errorHistory") + function_id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="functionId") + shopify_function = sgqlc.types.Field(sgqlc.types.non_null(ShopifyFunction), graphql_name="shopifyFunction") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + +class DeliveryCustomizationError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(DeliveryCustomizationErrorCode, graphql_name="code") + + class DeliveryLocationGroup(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("locations",) + __field_names__ = ("locations", "locations_count") locations = sgqlc.types.Field( sgqlc.types.non_null(LocationConnection), graphql_name="locations", @@ -21159,11 +24568,19 @@ class DeliveryLocationGroup(sgqlc.types.Type, Node): ) ), ) + locations_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="locationsCount") + + +class DeliveryLocationLocalPickupSettingsError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(DeliveryLocationLocalPickupSettingsErrorCode, graphql_name="code") class DeliveryMethod(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("max_delivery_date_time", "method_type", "min_delivery_date_time") + __field_names__ = ("branded_promise", "max_delivery_date_time", "method_type", "min_delivery_date_time") + branded_promise = sgqlc.types.Field(DeliveryBrandedPromise, graphql_name="brandedPromise") max_delivery_date_time = sgqlc.types.Field(DateTime, graphql_name="maxDeliveryDateTime") method_type = sgqlc.types.Field(sgqlc.types.non_null(DeliveryMethodType), graphql_name="methodType") min_delivery_date_time = sgqlc.types.Field(DateTime, graphql_name="minDeliveryDateTime") @@ -21175,8 +24592,7 @@ class DeliveryMethodDefinition(sgqlc.types.Type, Node): active = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="active") description = sgqlc.types.Field(String, graphql_name="description") method_conditions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryCondition))), - graphql_name="methodConditions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryCondition))), graphql_name="methodConditions" ) name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") rate_provider = sgqlc.types.Field(sgqlc.types.non_null("DeliveryRateProvider"), graphql_name="rateProvider") @@ -21184,19 +24600,12 @@ class DeliveryMethodDefinition(sgqlc.types.Type, Node): class DeliveryParticipant(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "adapt_to_new_services_flag", - "carrier_service", - "fixed_fee", - "participant_services", - "percentage_of_rate_fee", - ) + __field_names__ = ("adapt_to_new_services_flag", "carrier_service", "fixed_fee", "participant_services", "percentage_of_rate_fee") adapt_to_new_services_flag = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="adaptToNewServicesFlag") carrier_service = sgqlc.types.Field(sgqlc.types.non_null(DeliveryCarrierService), graphql_name="carrierService") fixed_fee = sgqlc.types.Field(MoneyV2, graphql_name="fixedFee") participant_services = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryParticipantService))), - graphql_name="participantServices", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryParticipantService))), graphql_name="participantServices" ) percentage_of_rate_fee = sgqlc.types.Field(sgqlc.types.non_null(Float), graphql_name="percentageOfRateFee") @@ -21215,6 +24624,7 @@ class DeliveryProfile(sgqlc.types.Type, Node): "profile_location_groups", "selling_plan_groups", "unassigned_locations", + "unassigned_locations_paginated", "zone_country_count", ) active_method_definitions_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="activeMethodDefinitionsCount") @@ -21240,6 +24650,7 @@ class DeliveryProfile(sgqlc.types.Type, Node): profile_location_groups = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DeliveryProfileLocationGroup))), graphql_name="profileLocationGroups", + args=sgqlc.types.ArgDict((("location_group_id", sgqlc.types.Arg(ID, graphql_name="locationGroupId", default=None)),)), ) selling_plan_groups = sgqlc.types.Field( sgqlc.types.non_null(SellingPlanGroupConnection), @@ -21257,6 +24668,19 @@ class DeliveryProfile(sgqlc.types.Type, Node): unassigned_locations = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Location"))), graphql_name="unassignedLocations" ) + unassigned_locations_paginated = sgqlc.types.Field( + sgqlc.types.non_null(LocationConnection), + graphql_name="unassignedLocationsPaginated", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) zone_country_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="zoneCountryCount") @@ -21316,6 +24740,7 @@ class DiscountAutomaticBxgy(sgqlc.types.Type, HasEvents, Node): "status", "summary", "title", + "updated_at", "uses_per_order_limit", ) async_usage_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="asyncUsageCount") @@ -21329,6 +24754,7 @@ class DiscountAutomaticBxgy(sgqlc.types.Type, HasEvents, Node): status = sgqlc.types.Field(sgqlc.types.non_null(DiscountStatus), graphql_name="status") summary = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="summary") title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") uses_per_order_limit = sgqlc.types.Field(Int, graphql_name="usesPerOrderLimit") @@ -21404,14 +24830,7 @@ class Domain(sgqlc.types.Type, Node): class DraftOrder( - sgqlc.types.Type, - CommentEventSubject, - HasEvents, - HasLocalizationExtensions, - HasMetafields, - LegacyInteroperability, - Navigable, - Node, + sgqlc.types.Type, CommentEventSubject, HasEvents, HasLocalizationExtensions, HasMetafields, LegacyInteroperability, Navigable, Node ): __schema__ = shopify_schema __field_names__ = ( @@ -21436,6 +24855,7 @@ class DraftOrder( "order", "payment_terms", "phone", + "po_number", "presentment_currency_code", "purchasing_entity", "ready", @@ -21498,6 +24918,7 @@ class DraftOrder( order = sgqlc.types.Field("Order", graphql_name="order") payment_terms = sgqlc.types.Field("PaymentTerms", graphql_name="paymentTerms") phone = sgqlc.types.Field(String, graphql_name="phone") + po_number = sgqlc.types.Field(String, graphql_name="poNumber") presentment_currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="presentmentCurrencyCode") purchasing_entity = sgqlc.types.Field("PurchasingEntity", graphql_name="purchasingEntity") ready = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="ready") @@ -21563,8 +24984,7 @@ class DraftOrderLineItem(sgqlc.types.Type, Node): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" ) custom_attributes_v2 = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TypedAttribute))), - graphql_name="customAttributesV2", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TypedAttribute))), graphql_name="customAttributesV2" ) discounted_total = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="discountedTotal") discounted_total_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedTotalSet") @@ -21615,12 +25035,48 @@ class DutySale(sgqlc.types.Type, Sale): duty = sgqlc.types.Field(sgqlc.types.non_null(Duty), graphql_name="duty") +class ErrorsServerPixelUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ErrorsServerPixelUserErrorCode, graphql_name="code") + + class ErrorsWebPixelUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) code = sgqlc.types.Field(ErrorsWebPixelUserErrorCode, graphql_name="code") +class ExchangeV2(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "additions", + "completed_at", + "created_at", + "location", + "note", + "refunds", + "returns", + "staff_member", + "total_amount_processed_set", + "total_price_set", + "transactions", + ) + additions = sgqlc.types.Field(sgqlc.types.non_null(ExchangeV2Additions), graphql_name="additions") + completed_at = sgqlc.types.Field(DateTime, graphql_name="completedAt") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + location = sgqlc.types.Field("Location", graphql_name="location") + note = sgqlc.types.Field(String, graphql_name="note") + refunds = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("Refund"))), graphql_name="refunds") + returns = sgqlc.types.Field(sgqlc.types.non_null(ExchangeV2Returns), graphql_name="returns") + staff_member = sgqlc.types.Field("StaffMember", graphql_name="staffMember") + total_amount_processed_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalAmountProcessedSet") + total_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalPriceSet") + transactions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("OrderTransaction"))), graphql_name="transactions" + ) + + class ExternalVideo(sgqlc.types.Type, Media, Node): __schema__ = shopify_schema __field_names__ = ("embed_url", "host", "origin_url") @@ -21720,9 +25176,30 @@ class Fulfillment(sgqlc.types.Type, LegacyInteroperability, Node): class FulfillmentEvent(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("happened_at", "status") + __field_names__ = ( + "address1", + "city", + "country", + "estimated_delivery_at", + "happened_at", + "latitude", + "longitude", + "message", + "province", + "status", + "zip", + ) + address1 = sgqlc.types.Field(String, graphql_name="address1") + city = sgqlc.types.Field(String, graphql_name="city") + country = sgqlc.types.Field(String, graphql_name="country") + estimated_delivery_at = sgqlc.types.Field(DateTime, graphql_name="estimatedDeliveryAt") happened_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="happenedAt") + latitude = sgqlc.types.Field(Float, graphql_name="latitude") + longitude = sgqlc.types.Field(Float, graphql_name="longitude") + message = sgqlc.types.Field(String, graphql_name="message") + province = sgqlc.types.Field(String, graphql_name="province") status = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentEventStatus), graphql_name="status") + zip = sgqlc.types.Field(String, graphql_name="zip") class FulfillmentLineItem(sgqlc.types.Type, Node): @@ -21738,6 +25215,7 @@ class FulfillmentOrder(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( "assigned_location", + "created_at", "delivery_method", "destination", "fulfill_at", @@ -21752,15 +25230,16 @@ class FulfillmentOrder(sgqlc.types.Type, Node): "request_status", "status", "supported_actions", + "updated_at", ) assigned_location = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentOrderAssignedLocation), graphql_name="assignedLocation") + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") delivery_method = sgqlc.types.Field(DeliveryMethod, graphql_name="deliveryMethod") destination = sgqlc.types.Field("FulfillmentOrderDestination", graphql_name="destination") fulfill_at = sgqlc.types.Field(DateTime, graphql_name="fulfillAt") fulfill_by = sgqlc.types.Field(DateTime, graphql_name="fulfillBy") fulfillment_holds = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentHold))), - graphql_name="fulfillmentHolds", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentHold))), graphql_name="fulfillmentHolds" ) fulfillments = sgqlc.types.Field( sgqlc.types.non_null(FulfillmentConnection), @@ -21820,9 +25299,9 @@ class FulfillmentOrder(sgqlc.types.Type, Node): request_status = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentOrderRequestStatus), graphql_name="requestStatus") status = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentOrderStatus), graphql_name="status") supported_actions = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderSupportedAction))), - graphql_name="supportedActions", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderSupportedAction))), graphql_name="supportedActions" ) + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") class FulfillmentOrderDestination(sgqlc.types.Type, Node): @@ -21861,19 +25340,46 @@ class FulfillmentOrderHoldUserError(sgqlc.types.Type, DisplayableError): class FulfillmentOrderLineItem(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("line_item", "remaining_quantity", "total_quantity", "warnings") - line_item = sgqlc.types.Field(sgqlc.types.non_null("LineItem"), graphql_name="lineItem") + __field_names__ = ( + "image", + "inventory_item_id", + "original_unit_price_set", + "product_title", + "remaining_quantity", + "requires_shipping", + "sku", + "total_quantity", + "variant_title", + "vendor", + "warnings", + "weight", + ) + image = sgqlc.types.Field("Image", graphql_name="image") + inventory_item_id = sgqlc.types.Field(ID, graphql_name="inventoryItemId") + original_unit_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="originalUnitPriceSet") + product_title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="productTitle") remaining_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="remainingQuantity") + requires_shipping = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="requiresShipping") + sku = sgqlc.types.Field(String, graphql_name="sku") total_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="totalQuantity") + variant_title = sgqlc.types.Field(String, graphql_name="variantTitle") + vendor = sgqlc.types.Field(String, graphql_name="vendor") warnings = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemWarning))), - graphql_name="warnings", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentOrderLineItemWarning))), graphql_name="warnings" ) + weight = sgqlc.types.Field(Weight, graphql_name="weight") + + +class FulfillmentOrderLineItemsPreparedForPickupUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(FulfillmentOrderLineItemsPreparedForPickupUserErrorCode, graphql_name="code") class FulfillmentOrderMerchantRequest(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("kind", "message", "request_options", "response_data", "sent_at") + __field_names__ = ("fulfillment_order", "kind", "message", "request_options", "response_data", "sent_at") + fulfillment_order = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentOrder), graphql_name="fulfillmentOrder") kind = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentOrderMerchantRequestKind), graphql_name="kind") message = sgqlc.types.Field(String, graphql_name="message") request_options = sgqlc.types.Field(JSON, graphql_name="requestOptions") @@ -21881,6 +25387,12 @@ class FulfillmentOrderMerchantRequest(sgqlc.types.Type, Node): sent_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="sentAt") +class FulfillmentOrderMergeUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(FulfillmentOrderMergeUserErrorCode, graphql_name="code") + + class FulfillmentOrderReleaseHoldUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -21893,6 +25405,18 @@ class FulfillmentOrderRescheduleUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(FulfillmentOrderRescheduleUserErrorCode, graphql_name="code") +class FulfillmentOrderSplitUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(FulfillmentOrderSplitUserErrorCode, graphql_name="code") + + +class FulfillmentOrdersReleaseHoldsUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(FulfillmentOrdersReleaseHoldsUserErrorCode, graphql_name="code") + + class FulfillmentOrdersSetFulfillmentDeadlineUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -21961,6 +25485,39 @@ class Image(sgqlc.types.Type, HasMetafields): width = sgqlc.types.Field(Int, graphql_name="width") +class InventoryAdjustQuantitiesUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(InventoryAdjustQuantitiesUserErrorCode, graphql_name="code") + + +class InventoryAdjustmentGroup(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("app", "changes", "created_at", "reason", "reference_document_uri", "staff_member") + app = sgqlc.types.Field(App, graphql_name="app") + changes = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(InventoryChange))), + graphql_name="changes", + args=sgqlc.types.ArgDict( + ( + ( + "inventory_item_ids", + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="inventoryItemIds", default=None), + ), + ("location_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationIds", default=None)), + ( + "quantity_names", + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(String)), graphql_name="quantityNames", default=None), + ), + ) + ), + ) + created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") + reason = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="reason") + reference_document_uri = sgqlc.types.Field(String, graphql_name="referenceDocumentUri") + staff_member = sgqlc.types.Field("StaffMember", graphql_name="staffMember") + + class InventoryBulkToggleActivationUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -22038,28 +25595,41 @@ class InventoryItem(sgqlc.types.Type, LegacyInteroperability, Node): class InventoryLevel(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "available", - "can_deactivate", - "created_at", - "deactivation_alert", - "deactivation_alert_html", - "incoming", - "item", - "location", - "updated_at", - ) - available = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="available") + __field_names__ = ("can_deactivate", "created_at", "deactivation_alert", "item", "location", "quantities", "updated_at") can_deactivate = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="canDeactivate") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") deactivation_alert = sgqlc.types.Field(String, graphql_name="deactivationAlert") - deactivation_alert_html = sgqlc.types.Field(FormattedString, graphql_name="deactivationAlertHtml") - incoming = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="incoming") item = sgqlc.types.Field(sgqlc.types.non_null(InventoryItem), graphql_name="item") location = sgqlc.types.Field(sgqlc.types.non_null("Location"), graphql_name="location") + quantities = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(InventoryQuantity))), + graphql_name="quantities", + args=sgqlc.types.ArgDict( + ( + ( + "names", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="names", default=None + ), + ), + ) + ), + ) updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") +class InventoryMoveQuantitiesUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(InventoryMoveQuantitiesUserErrorCode, graphql_name="code") + + +class InventorySetOnHandQuantitiesUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(InventorySetOnHandQuantitiesUserErrorCode, graphql_name="code") + + class LineItem(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( @@ -22071,6 +25641,7 @@ class LineItem(sgqlc.types.Type, Node): "discounted_unit_price_set", "duties", "image", + "line_item_group", "merchant_editable", "name", "non_fulfillable_quantity", @@ -22101,13 +25672,13 @@ class LineItem(sgqlc.types.Type, Node): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" ) discount_allocations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), - graphql_name="discountAllocations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), graphql_name="discountAllocations" ) discounted_total_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedTotalSet") discounted_unit_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedUnitPriceSet") duties = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Duty))), graphql_name="duties") image = sgqlc.types.Field(Image, graphql_name="image") + line_item_group = sgqlc.types.Field(LineItemGroup, graphql_name="lineItemGroup") merchant_editable = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="merchantEditable") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") non_fulfillable_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="nonFulfillableQuantity") @@ -22175,8 +25746,7 @@ class LineItemMutable(sgqlc.types.Type, Node): sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(Attribute))), graphql_name="customAttributes" ) discount_allocations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), - graphql_name="discountAllocations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(DiscountAllocation))), graphql_name="discountAllocations" ) discounted_total_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedTotalSet") discounted_unit_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="discountedUnitPriceSet") @@ -22235,6 +25805,7 @@ class Location(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, LegacyI "inventory_level", "inventory_levels", "is_active", + "local_pickup_settings_v2", "name", "ships_inventory", "suggested_addresses", @@ -22253,12 +25824,7 @@ class Location(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, LegacyI InventoryLevel, graphql_name="inventoryLevel", args=sgqlc.types.ArgDict( - ( - ( - "inventory_item_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None), - ), - ) + (("inventory_item_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="inventoryItemId", default=None)),) ), ) inventory_levels = sgqlc.types.Field( @@ -22276,11 +25842,11 @@ class Location(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, LegacyI ), ) is_active = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="isActive") + local_pickup_settings_v2 = sgqlc.types.Field(DeliveryLocalPickupSettings, graphql_name="localPickupSettingsV2") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") ships_inventory = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="shipsInventory") suggested_addresses = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(LocationSuggestedAddress))), - graphql_name="suggestedAddresses", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(LocationSuggestedAddress))), graphql_name="suggestedAddresses" ) @@ -22334,6 +25900,7 @@ class MailingAddress(sgqlc.types.Type, Node): "phone", "province", "province_code", + "time_zone", "zip", ) address1 = sgqlc.types.Field(String, graphql_name="address1") @@ -22362,6 +25929,7 @@ class MailingAddress(sgqlc.types.Type, Node): phone = sgqlc.types.Field(String, graphql_name="phone") province = sgqlc.types.Field(String, graphql_name="province") province_code = sgqlc.types.Field(String, graphql_name="provinceCode") + time_zone = sgqlc.types.Field(String, graphql_name="timeZone") zip = sgqlc.types.Field(String, graphql_name="zip") @@ -22372,11 +25940,25 @@ class ManualDiscountApplication(sgqlc.types.Type, DiscountApplication): title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") -class Market(sgqlc.types.Type, Node): +class Market(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, Node): __schema__ = shopify_schema - __field_names__ = ("currency_settings", "enabled", "name", "price_list", "primary", "regions", "web_presence") + __field_names__ = ("catalogs", "currency_settings", "enabled", "handle", "name", "price_list", "primary", "regions", "web_presence") + catalogs = sgqlc.types.Field( + sgqlc.types.non_null(MarketCatalogConnection), + graphql_name="catalogs", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) currency_settings = sgqlc.types.Field(sgqlc.types.non_null(MarketCurrencySettings), graphql_name="currencySettings") enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") price_list = sgqlc.types.Field("PriceList", graphql_name="priceList") primary = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="primary") @@ -22396,6 +25978,24 @@ class Market(sgqlc.types.Type, Node): web_presence = sgqlc.types.Field("MarketWebPresence", graphql_name="webPresence") +class MarketCatalog(sgqlc.types.Type, Catalog, Node): + __schema__ = shopify_schema + __field_names__ = ("markets",) + markets = sgqlc.types.Field( + sgqlc.types.non_null(MarketConnection), + graphql_name="markets", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + class MarketCurrencySettingsUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -22404,8 +26004,9 @@ class MarketCurrencySettingsUserError(sgqlc.types.Type, DisplayableError): class MarketRegionCountry(sgqlc.types.Type, MarketRegion, Node): __schema__ = shopify_schema - __field_names__ = ("code",) + __field_names__ = ("code", "currency") code = sgqlc.types.Field(sgqlc.types.non_null(CountryCode), graphql_name="code") + currency = sgqlc.types.Field(sgqlc.types.non_null(CurrencySetting), graphql_name="currency") class MarketUserError(sgqlc.types.Type, DisplayableError): @@ -22424,8 +26025,7 @@ class MarketWebPresence(sgqlc.types.Type, Node): domain = sgqlc.types.Field(Domain, graphql_name="domain") market = sgqlc.types.Field(sgqlc.types.non_null(Market), graphql_name="market") root_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MarketWebPresenceRootUrl))), - graphql_name="rootUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MarketWebPresenceRootUrl))), graphql_name="rootUrls" ) subfolder_suffix = sgqlc.types.Field(String, graphql_name="subfolderSuffix") @@ -22516,7 +26116,7 @@ class MarketingEvent(sgqlc.types.Type, LegacyInteroperability, Node): utm_source = sgqlc.types.Field(String, graphql_name="utmSource") -class MediaImage(sgqlc.types.Type, File, Media, Node): +class MediaImage(sgqlc.types.Type, File, HasMetafields, Media, Node): __schema__ = shopify_schema __field_names__ = ("image", "mime_type", "original_source") image = sgqlc.types.Field(Image, graphql_name="image") @@ -22574,6 +26174,7 @@ class Metafield(sgqlc.types.Type, LegacyInteroperability, Node): class MetafieldDefinition(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( + "access", "description", "key", "metafields", @@ -22584,10 +26185,12 @@ class MetafieldDefinition(sgqlc.types.Type, Node): "pinned_position", "standard_template", "type", + "use_as_collection_condition", "validation_status", "validations", "visible_to_storefront_api", ) + access = sgqlc.types.Field(sgqlc.types.non_null(MetafieldAccess), graphql_name="access") description = sgqlc.types.Field(String, graphql_name="description") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") metafields = sgqlc.types.Field( @@ -22595,10 +26198,7 @@ class MetafieldDefinition(sgqlc.types.Type, Node): graphql_name="metafields", args=sgqlc.types.ArgDict( ( - ( - "validation_status", - sgqlc.types.Arg(MetafieldValidationStatus, graphql_name="validationStatus", default="ANY"), - ), + ("validation_status", sgqlc.types.Arg(MetafieldValidationStatus, graphql_name="validationStatus", default="ANY")), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -22611,12 +26211,7 @@ class MetafieldDefinition(sgqlc.types.Type, Node): sgqlc.types.non_null(Int), graphql_name="metafieldsCount", args=sgqlc.types.ArgDict( - ( - ( - "validation_status", - sgqlc.types.Arg(MetafieldValidationStatus, graphql_name="validationStatus", default=None), - ), - ) + (("validation_status", sgqlc.types.Arg(MetafieldValidationStatus, graphql_name="validationStatus", default=None)),) ), ) name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") @@ -22625,10 +26220,10 @@ class MetafieldDefinition(sgqlc.types.Type, Node): pinned_position = sgqlc.types.Field(Int, graphql_name="pinnedPosition") standard_template = sgqlc.types.Field("StandardMetafieldDefinitionTemplate", graphql_name="standardTemplate") type = sgqlc.types.Field(sgqlc.types.non_null(MetafieldDefinitionType), graphql_name="type") + use_as_collection_condition = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="useAsCollectionCondition") validation_status = sgqlc.types.Field(sgqlc.types.non_null(MetafieldDefinitionValidationStatus), graphql_name="validationStatus") validations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidation))), - graphql_name="validations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidation))), graphql_name="validations" ) visible_to_storefront_api = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="visibleToStorefrontApi") @@ -22680,6 +26275,94 @@ class MetafieldsSetUserError(sgqlc.types.Type, DisplayableError): element_index = sgqlc.types.Field(Int, graphql_name="elementIndex") +class Metaobject(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "capabilities", + "created_by", + "definition", + "display_name", + "field", + "fields", + "handle", + "referenced_by", + "type", + "updated_at", + ) + capabilities = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectCapabilityData), graphql_name="capabilities") + created_by = sgqlc.types.Field(sgqlc.types.non_null(App), graphql_name="createdBy") + definition = sgqlc.types.Field(sgqlc.types.non_null("MetaobjectDefinition"), graphql_name="definition") + display_name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="displayName") + field = sgqlc.types.Field( + MetaobjectField, + graphql_name="field", + args=sgqlc.types.ArgDict((("key", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="key", default=None)),)), + ) + fields = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetaobjectField))), graphql_name="fields") + handle = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="handle") + referenced_by = sgqlc.types.Field( + sgqlc.types.non_null(MetafieldRelationConnection), + graphql_name="referencedBy", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") + + +class MetaobjectDefinition(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "access", + "capabilities", + "description", + "display_name_key", + "field_definitions", + "metaobjects", + "metaobjects_count", + "name", + "type", + ) + access = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectAccess), graphql_name="access") + capabilities = sgqlc.types.Field(sgqlc.types.non_null(MetaobjectCapabilities), graphql_name="capabilities") + description = sgqlc.types.Field(String, graphql_name="description") + display_name_key = sgqlc.types.Field(String, graphql_name="displayNameKey") + field_definitions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetaobjectFieldDefinition))), graphql_name="fieldDefinitions" + ) + metaobjects = sgqlc.types.Field( + sgqlc.types.non_null(MetaobjectConnection), + graphql_name="metaobjects", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + metaobjects_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="metaobjectsCount") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="type") + + +class MetaobjectUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code", "element_index", "element_key") + code = sgqlc.types.Field(MetaobjectUserErrorCode, graphql_name="code") + element_index = sgqlc.types.Field(Int, graphql_name="elementIndex") + element_key = sgqlc.types.Field(String, graphql_name="elementKey") + + class Model3d(sgqlc.types.Type, Media, Node): __schema__ = shopify_schema __field_names__ = ("bounding_box", "filename", "original_source", "sources") @@ -22716,6 +26399,7 @@ class Order( ): __schema__ = shopify_schema __field_names__ = ( + "additional_fees", "agreements", "alerts", "app", @@ -22731,6 +26415,7 @@ class Order( "client_ip", "closed", "closed_at", + "confirmation_number", "confirmed", "created_at", "currency_code", @@ -22738,6 +26423,7 @@ class Order( "current_subtotal_line_items_quantity", "current_subtotal_price_set", "current_tax_lines", + "current_total_additional_fees_set", "current_total_discounts_set", "current_total_duties_set", "current_total_price_set", @@ -22758,6 +26444,7 @@ class Order( "edited", "email", "estimated_taxes", + "exchange_v2s", "fulfillable", "fulfillment_orders", "fulfillments", @@ -22770,6 +26457,7 @@ class Order( "net_payment_set", "non_fulfillable_line_items", "note", + "original_total_additional_fees_set", "original_total_duties_set", "original_total_price_set", "payment_collection_details", @@ -22777,6 +26465,7 @@ class Order( "payment_terms", "phone", "physical_location", + "po_number", "presentment_currency_code", "processed_at", "publication", @@ -22787,6 +26476,8 @@ class Order( "registered_source_url", "requires_shipping", "restockable", + "return_status", + "returns", "risk_level", "risks", "shipping_address", @@ -22797,6 +26488,7 @@ class Order( "subtotal_price_set", "suggested_refund", "tags", + "tax_exempt", "tax_lines", "taxes_included", "test", @@ -22815,6 +26507,9 @@ class Order( "unpaid", "updated_at", ) + additional_fees = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AdditionalFee))), graphql_name="additionalFees" + ) agreements = sgqlc.types.Field( sgqlc.types.non_null(SalesAgreementConnection), graphql_name="agreements", @@ -22845,6 +26540,7 @@ class Order( client_ip = sgqlc.types.Field(String, graphql_name="clientIp") closed = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="closed") closed_at = sgqlc.types.Field(DateTime, graphql_name="closedAt") + confirmation_number = sgqlc.types.Field(String, graphql_name="confirmationNumber") confirmed = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="confirmed") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currencyCode") @@ -22854,6 +26550,7 @@ class Order( current_tax_lines = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TaxLine))), graphql_name="currentTaxLines" ) + current_total_additional_fees_set = sgqlc.types.Field(MoneyBag, graphql_name="currentTotalAdditionalFeesSet") current_total_discounts_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="currentTotalDiscountsSet") current_total_duties_set = sgqlc.types.Field(MoneyBag, graphql_name="currentTotalDutiesSet") current_total_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="currentTotalPriceSet") @@ -22894,6 +26591,20 @@ class Order( edited = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="edited") email = sgqlc.types.Field(String, graphql_name="email") estimated_taxes = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="estimatedTaxes") + exchange_v2s = sgqlc.types.Field( + sgqlc.types.non_null(ExchangeV2Connection), + graphql_name="exchangeV2s", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) fulfillable = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="fulfillable") fulfillment_orders = sgqlc.types.Field( sgqlc.types.non_null(FulfillmentOrderConnection), @@ -22950,6 +26661,7 @@ class Order( ), ) note = sgqlc.types.Field(String, graphql_name="note") + original_total_additional_fees_set = sgqlc.types.Field(MoneyBag, graphql_name="originalTotalAdditionalFeesSet") original_total_duties_set = sgqlc.types.Field(MoneyBag, graphql_name="originalTotalDutiesSet") original_total_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="originalTotalPriceSet") payment_collection_details = sgqlc.types.Field( @@ -22961,6 +26673,7 @@ class Order( payment_terms = sgqlc.types.Field("PaymentTerms", graphql_name="paymentTerms") phone = sgqlc.types.Field(String, graphql_name="phone") physical_location = sgqlc.types.Field(Location, graphql_name="physicalLocation") + po_number = sgqlc.types.Field(String, graphql_name="poNumber") presentment_currency_code = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="presentmentCurrencyCode") processed_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="processedAt") publication = sgqlc.types.Field("Publication", graphql_name="publication") @@ -22975,6 +26688,21 @@ class Order( registered_source_url = sgqlc.types.Field(URL, graphql_name="registeredSourceUrl") requires_shipping = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="requiresShipping") restockable = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="restockable") + return_status = sgqlc.types.Field(sgqlc.types.non_null(OrderReturnStatus), graphql_name="returnStatus") + returns = sgqlc.types.Field( + sgqlc.types.non_null(ReturnConnection), + graphql_name="returns", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ("query", sgqlc.types.Arg(String, graphql_name="query", default=None)), + ) + ), + ) risk_level = sgqlc.types.Field(sgqlc.types.non_null(OrderRiskLevel), graphql_name="riskLevel") risks = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(OrderRisk))), @@ -23009,24 +26737,19 @@ class Order( ( "refund_line_items", sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(RefundLineItemInput)), - graphql_name="refundLineItems", - default=None, + sgqlc.types.list_of(sgqlc.types.non_null(RefundLineItemInput)), graphql_name="refundLineItems", default=None ), ), ( "refund_duties", - sgqlc.types.Arg( - sgqlc.types.list_of(sgqlc.types.non_null(RefundDutyInput)), - graphql_name="refundDuties", - default=None, - ), + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(RefundDutyInput)), graphql_name="refundDuties", default=None), ), ("suggest_full_refund", sgqlc.types.Arg(Boolean, graphql_name="suggestFullRefund", default=False)), ) ), ) tags = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="tags") + tax_exempt = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="taxExempt") tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TaxLine))), graphql_name="taxLines") taxes_included = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="taxesIncluded") test = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="test") @@ -23103,7 +26826,9 @@ class OrderTransaction(sgqlc.types.Type, Node): "maximum_refundable_v2", "order", "parent_transaction", + "payment_details", "payment_icon", + "payment_id", "processed_at", "receipt_json", "settlement_currency", @@ -23128,7 +26853,9 @@ class OrderTransaction(sgqlc.types.Type, Node): maximum_refundable_v2 = sgqlc.types.Field(MoneyV2, graphql_name="maximumRefundableV2") order = sgqlc.types.Field(Order, graphql_name="order") parent_transaction = sgqlc.types.Field("OrderTransaction", graphql_name="parentTransaction") + payment_details = sgqlc.types.Field("PaymentDetails", graphql_name="paymentDetails") payment_icon = sgqlc.types.Field(Image, graphql_name="paymentIcon") + payment_id = sgqlc.types.Field(String, graphql_name="paymentId") processed_at = sgqlc.types.Field(DateTime, graphql_name="processedAt") receipt_json = sgqlc.types.Field(JSON, graphql_name="receiptJson") settlement_currency = sgqlc.types.Field(CurrencyCode, graphql_name="settlementCurrency") @@ -23140,32 +26867,59 @@ class OrderTransaction(sgqlc.types.Type, Node): user = sgqlc.types.Field("StaffMember", graphql_name="user") +class PaymentCustomization(sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, Node): + __schema__ = shopify_schema + __field_names__ = ("enabled", "error_history", "function_id", "shopify_function", "title") + enabled = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="enabled") + error_history = sgqlc.types.Field(FunctionsErrorHistory, graphql_name="errorHistory") + function_id = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="functionId") + shopify_function = sgqlc.types.Field(sgqlc.types.non_null(ShopifyFunction), graphql_name="shopifyFunction") + title = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="title") + + +class PaymentCustomizationError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(PaymentCustomizationErrorCode, graphql_name="code") + + class PaymentMandate(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ("payment_instrument",) payment_instrument = sgqlc.types.Field(sgqlc.types.non_null("PaymentInstrument"), graphql_name="paymentInstrument") +class PaymentReminderSendUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(PaymentReminderSendUserErrorCode, graphql_name="code") + + class PaymentSchedule(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("amount", "completed_at", "due_at", "issued_at") + __field_names__ = ("amount", "completed_at", "due_at", "issued_at", "payment_terms") amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="amount") completed_at = sgqlc.types.Field(DateTime, graphql_name="completedAt") due_at = sgqlc.types.Field(DateTime, graphql_name="dueAt") issued_at = sgqlc.types.Field(DateTime, graphql_name="issuedAt") + payment_terms = sgqlc.types.Field(sgqlc.types.non_null("PaymentTerms"), graphql_name="paymentTerms") class PaymentTerms(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( + "draft_order", "due_in_days", + "order", "overdue", "payment_schedules", "payment_terms_name", "payment_terms_type", "translated_name", ) + draft_order = sgqlc.types.Field(DraftOrder, graphql_name="draftOrder") due_in_days = sgqlc.types.Field(Int, graphql_name="dueInDays") + order = sgqlc.types.Field(Order, graphql_name="order") overdue = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="overdue") payment_schedules = sgqlc.types.Field( sgqlc.types.non_null(PaymentScheduleConnection), @@ -23213,11 +26967,19 @@ class PaymentTermsUpdateUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(PaymentTermsUpdateUserErrorCode, graphql_name="code") +class PolarisVizResponse(sgqlc.types.Type, ShopifyqlResponse): + __schema__ = shopify_schema + __field_names__ = ("data", "viz_type") + data = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(PolarisVizDataSeries))), graphql_name="data") + viz_type = sgqlc.types.Field(sgqlc.types.non_null(VisualizationType), graphql_name="vizType") + + class PriceList(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("context_rule", "currency", "name", "parent", "prices") - context_rule = sgqlc.types.Field(PriceListContextRule, graphql_name="contextRule") + __field_names__ = ("catalog", "currency", "fixed_prices_count", "name", "parent", "prices", "quantity_rules") + catalog = sgqlc.types.Field(Catalog, graphql_name="catalog") currency = sgqlc.types.Field(sgqlc.types.non_null(CurrencyCode), graphql_name="currency") + fixed_prices_count = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="fixedPricesCount") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") parent = sgqlc.types.Field(PriceListParent, graphql_name="parent") prices = sgqlc.types.Field( @@ -23234,6 +26996,26 @@ class PriceList(sgqlc.types.Type, Node): ) ), ) + quantity_rules = sgqlc.types.Field( + sgqlc.types.non_null(QuantityRuleConnection), + graphql_name="quantityRules", + args=sgqlc.types.ArgDict( + ( + ("origin_type", sgqlc.types.Arg(QuantityRuleOriginType, graphql_name="originType", default=None)), + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + + +class PriceListFixedPricesByProductBulkUpdateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(PriceListFixedPricesByProductBulkUpdateUserErrorCode, graphql_name="code") class PriceListPriceUserError(sgqlc.types.Type, DisplayableError): @@ -23318,8 +27100,7 @@ class PriceRule(sgqlc.types.Type, CommentEventSubject, HasEvents, LegacyInterope PriceRulePrerequisiteToEntitlementQuantityRatio, graphql_name="prerequisiteToEntitlementQuantityRatio" ) shareable_urls = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(PriceRuleShareableUrl))), - graphql_name="shareableUrls", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(PriceRuleShareableUrl))), graphql_name="shareableUrls" ) shipping_entitlements = sgqlc.types.Field(sgqlc.types.non_null(PriceRuleShippingLineEntitlements), graphql_name="shippingEntitlements") starts_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="startsAt") @@ -23395,6 +27176,7 @@ class Product( "product_category", "product_type", "published_at", + "published_in_context", "requires_selling_plan", "resource_publication_on_current_publication", "selling_plan_group_count", @@ -23430,12 +27212,7 @@ class Product( sgqlc.types.non_null(ProductContextualPricing), graphql_name="contextualPricing", args=sgqlc.types.ArgDict( - ( - ( - "context", - sgqlc.types.Arg(sgqlc.types.non_null(ContextualPricingContext), graphql_name="context", default=None), - ), - ) + (("context", sgqlc.types.Arg(sgqlc.types.non_null(ContextualPricingContext), graphql_name="context", default=None)),) ), ) created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") @@ -23497,6 +27274,13 @@ class Product( product_category = sgqlc.types.Field(ProductCategory, graphql_name="productCategory") product_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="productType") published_at = sgqlc.types.Field(DateTime, graphql_name="publishedAt") + published_in_context = sgqlc.types.Field( + sgqlc.types.non_null(Boolean), + graphql_name="publishedInContext", + args=sgqlc.types.ArgDict( + (("context", sgqlc.types.Arg(sgqlc.types.non_null(ContextualPublicationContext), graphql_name="context", default=None)),) + ), + ) requires_selling_plan = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="requiresSellingPlan") resource_publication_on_current_publication = sgqlc.types.Field( ResourcePublicationV2, graphql_name="resourcePublicationOnCurrentPublication" @@ -23547,6 +27331,44 @@ class ProductChangeStatusUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(ProductChangeStatusUserErrorCode, graphql_name="code") +class ProductDeleteUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductDeleteUserErrorCode, graphql_name="code") + + +class ProductDuplicateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductDuplicateUserErrorCode, graphql_name="code") + + +class ProductFeed(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("country", "language", "status") + country = sgqlc.types.Field(CountryCode, graphql_name="country") + language = sgqlc.types.Field(LanguageCode, graphql_name="language") + status = sgqlc.types.Field(sgqlc.types.non_null(ProductFeedStatus), graphql_name="status") + + +class ProductFeedCreateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductFeedCreateUserErrorCode, graphql_name="code") + + +class ProductFeedDeleteUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductFeedDeleteUserErrorCode, graphql_name="code") + + +class ProductFullSyncUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductFullSyncUserErrorCode, graphql_name="code") + + class ProductOption(sgqlc.types.Type, HasPublishedTranslations, Node): __schema__ = shopify_schema __field_names__ = ("name", "position", "values") @@ -23571,13 +27393,7 @@ class ProductTaxonomyNode(sgqlc.types.Type, Node): class ProductVariant( - sgqlc.types.Type, - HasMetafieldDefinitions, - HasMetafields, - HasPublishedTranslations, - LegacyInteroperability, - Navigable, - Node, + sgqlc.types.Type, HasMetafieldDefinitions, HasMetafields, HasPublishedTranslations, LegacyInteroperability, Navigable, Node ): __schema__ = shopify_schema __field_names__ = ( @@ -23597,6 +27413,8 @@ class ProductVariant( "position", "price", "product", + "product_variant_components", + "requires_components", "selected_options", "sellable_online_quantity", "selling_plan_group_count", @@ -23616,12 +27434,7 @@ class ProductVariant( sgqlc.types.non_null(ProductVariantContextualPricing), graphql_name="contextualPricing", args=sgqlc.types.ArgDict( - ( - ( - "context", - sgqlc.types.Arg(sgqlc.types.non_null(ContextualPricingContext), graphql_name="context", default=None), - ), - ) + (("context", sgqlc.types.Arg(sgqlc.types.non_null(ContextualPricingContext), graphql_name="context", default=None)),) ), ) created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") @@ -23648,6 +27461,20 @@ class ProductVariant( position = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="position") price = sgqlc.types.Field(sgqlc.types.non_null(Money), graphql_name="price") product = sgqlc.types.Field(sgqlc.types.non_null(Product), graphql_name="product") + product_variant_components = sgqlc.types.Field( + sgqlc.types.non_null(ProductVariantComponentConnection), + graphql_name="productVariantComponents", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + requires_components = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="requiresComponents") selected_options = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SelectedOption))), graphql_name="selectedOptions" ) @@ -23675,6 +27502,19 @@ class ProductVariant( weight_unit = sgqlc.types.Field(sgqlc.types.non_null(WeightUnit), graphql_name="weightUnit") +class ProductVariantComponent(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("product_variant", "quantity") + product_variant = sgqlc.types.Field(sgqlc.types.non_null(ProductVariant), graphql_name="productVariant") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + + +class ProductVariantRelationshipBulkUpdateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ProductVariantRelationshipBulkUpdateUserErrorCode, graphql_name="code") + + class ProductVariantsBulkCreateUserError(sgqlc.types.Type, DisplayableError): __schema__ = shopify_schema __field_names__ = ("code",) @@ -23714,16 +27554,18 @@ class PubSubWebhookSubscriptionUpdateUserError(sgqlc.types.Type, DisplayableErro class Publication(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( - "app", + "auto_publish", + "catalog", "collection_publications_v3", "collections", "has_collection", - "name", + "operation", "product_publications_v3", "products", "supports_future_publishing", ) - app = sgqlc.types.Field(sgqlc.types.non_null(App), graphql_name="app") + auto_publish = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="autoPublish") + catalog = sgqlc.types.Field(Catalog, graphql_name="catalog") collection_publications_v3 = sgqlc.types.Field( sgqlc.types.non_null(ResourcePublicationConnection), graphql_name="collectionPublicationsV3", @@ -23750,15 +27592,231 @@ class Publication(sgqlc.types.Type, Node): ) ), ) - has_collection = sgqlc.types.Field( - sgqlc.types.non_null(Boolean), - graphql_name="hasCollection", - args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + has_collection = sgqlc.types.Field( + sgqlc.types.non_null(Boolean), + graphql_name="hasCollection", + args=sgqlc.types.ArgDict((("id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="id", default=None)),)), + ) + operation = sgqlc.types.Field("PublicationOperation", graphql_name="operation") + product_publications_v3 = sgqlc.types.Field( + sgqlc.types.non_null(ResourcePublicationConnection), + graphql_name="productPublicationsV3", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + products = sgqlc.types.Field( + sgqlc.types.non_null(ProductConnection), + graphql_name="products", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + supports_future_publishing = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supportsFuturePublishing") + + +class PublicationResourceOperation(sgqlc.types.Type, Node, ResourceOperation): + __schema__ = shopify_schema + __field_names__ = () + + +class PublicationUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(PublicationUserErrorCode, graphql_name="code") + + +class QuantityRuleUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(QuantityRuleUserErrorCode, graphql_name="code") + + +class Refund(sgqlc.types.Type, LegacyInteroperability, Node): + __schema__ = shopify_schema + __field_names__ = ( + "created_at", + "duties", + "note", + "order", + "refund_line_items", + "return_", + "staff_member", + "total_refunded_set", + "transactions", + "updated_at", + ) + created_at = sgqlc.types.Field(DateTime, graphql_name="createdAt") + duties = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(RefundDuty)), graphql_name="duties") + note = sgqlc.types.Field(String, graphql_name="note") + order = sgqlc.types.Field(sgqlc.types.non_null(Order), graphql_name="order") + refund_line_items = sgqlc.types.Field( + sgqlc.types.non_null(RefundLineItemConnection), + graphql_name="refundLineItems", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + return_ = sgqlc.types.Field("Return", graphql_name="return") + staff_member = sgqlc.types.Field("StaffMember", graphql_name="staffMember") + total_refunded_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalRefundedSet") + transactions = sgqlc.types.Field( + sgqlc.types.non_null(OrderTransactionConnection), + graphql_name="transactions", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") + + +class RefundAgreement(sgqlc.types.Type, SalesAgreement): + __schema__ = shopify_schema + __field_names__ = ("refund",) + refund = sgqlc.types.Field(sgqlc.types.non_null(Refund), graphql_name="refund") + + +class Return(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "decline", + "name", + "order", + "refunds", + "return_line_items", + "reverse_fulfillment_orders", + "status", + "suggested_refund", + "total_quantity", + ) + decline = sgqlc.types.Field(ReturnDecline, graphql_name="decline") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + order = sgqlc.types.Field(sgqlc.types.non_null(Order), graphql_name="order") + refunds = sgqlc.types.Field( + sgqlc.types.non_null(RefundConnection), + graphql_name="refunds", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + return_line_items = sgqlc.types.Field( + sgqlc.types.non_null(ReturnLineItemConnection), + graphql_name="returnLineItems", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + reverse_fulfillment_orders = sgqlc.types.Field( + sgqlc.types.non_null(ReverseFulfillmentOrderConnection), + graphql_name="reverseFulfillmentOrders", + args=sgqlc.types.ArgDict( + ( + ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), + ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), + ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), + ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), + ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), + ) + ), + ) + status = sgqlc.types.Field(sgqlc.types.non_null(ReturnStatus), graphql_name="status") + suggested_refund = sgqlc.types.Field( + SuggestedReturnRefund, + graphql_name="suggestedRefund", + args=sgqlc.types.ArgDict( + ( + ( + "return_refund_line_items", + sgqlc.types.Arg( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ReturnRefundLineItemInput))), + graphql_name="returnRefundLineItems", + default=None, + ), + ), + ("refund_shipping", sgqlc.types.Arg(RefundShippingInput, graphql_name="refundShipping", default=None)), + ( + "refund_duties", + sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(RefundDutyInput)), graphql_name="refundDuties", default=None), + ), + ) + ), ) - name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") - product_publications_v3 = sgqlc.types.Field( - sgqlc.types.non_null(ResourcePublicationConnection), - graphql_name="productPublicationsV3", + total_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="totalQuantity") + + +class ReturnLineItem(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "customer_note", + "fulfillment_line_item", + "quantity", + "refundable_quantity", + "refunded_quantity", + "return_reason", + "return_reason_note", + "total_weight", + "with_code_discounted_total_price_set", + ) + customer_note = sgqlc.types.Field(String, graphql_name="customerNote") + fulfillment_line_item = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentLineItem), graphql_name="fulfillmentLineItem") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + refundable_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="refundableQuantity") + refunded_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="refundedQuantity") + return_reason = sgqlc.types.Field(sgqlc.types.non_null(ReturnReason), graphql_name="returnReason") + return_reason_note = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="returnReasonNote") + total_weight = sgqlc.types.Field(Weight, graphql_name="totalWeight") + with_code_discounted_total_price_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="withCodeDiscountedTotalPriceSet") + + +class ReturnUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ReturnErrorCode, graphql_name="code") + + +class ReturnableFulfillment(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("fulfillment", "returnable_fulfillment_line_items") + fulfillment = sgqlc.types.Field(sgqlc.types.non_null(Fulfillment), graphql_name="fulfillment") + returnable_fulfillment_line_items = sgqlc.types.Field( + sgqlc.types.non_null(ReturnableFulfillmentLineItemConnection), + graphql_name="returnableFulfillmentLineItems", args=sgqlc.types.ArgDict( ( ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -23769,9 +27827,15 @@ class Publication(sgqlc.types.Type, Node): ) ), ) - products = sgqlc.types.Field( - sgqlc.types.non_null(ProductConnection), - graphql_name="products", + + +class ReverseDelivery(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("deliverable", "reverse_delivery_line_items", "reverse_fulfillment_order") + deliverable = sgqlc.types.Field("ReverseDeliveryDeliverable", graphql_name="deliverable") + reverse_delivery_line_items = sgqlc.types.Field( + sgqlc.types.non_null(ReverseDeliveryLineItemConnection), + graphql_name="reverseDeliveryLineItems", args=sgqlc.types.ArgDict( ( ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -23782,29 +27846,27 @@ class Publication(sgqlc.types.Type, Node): ) ), ) - supports_future_publishing = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="supportsFuturePublishing") + reverse_fulfillment_order = sgqlc.types.Field(sgqlc.types.non_null("ReverseFulfillmentOrder"), graphql_name="reverseFulfillmentOrder") -class Refund(sgqlc.types.Type, LegacyInteroperability, Node): +class ReverseDeliveryLineItem(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "created_at", - "duties", - "note", - "order", - "refund_line_items", - "staff_member", - "total_refunded_set", - "transactions", - "updated_at", + __field_names__ = ("dispositions", "quantity", "reverse_fulfillment_order_line_item") + dispositions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ReverseFulfillmentOrderDisposition"))), graphql_name="dispositions" ) - created_at = sgqlc.types.Field(DateTime, graphql_name="createdAt") - duties = sgqlc.types.Field(sgqlc.types.list_of(sgqlc.types.non_null(RefundDuty)), graphql_name="duties") - note = sgqlc.types.Field(String, graphql_name="note") - order = sgqlc.types.Field(sgqlc.types.non_null(Order), graphql_name="order") - refund_line_items = sgqlc.types.Field( - sgqlc.types.non_null(RefundLineItemConnection), - graphql_name="refundLineItems", + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + reverse_fulfillment_order_line_item = sgqlc.types.Field( + sgqlc.types.non_null("ReverseFulfillmentOrderLineItem"), graphql_name="reverseFulfillmentOrderLineItem" + ) + + +class ReverseFulfillmentOrder(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("line_items", "order", "reverse_deliveries", "status", "third_party_confirmation") + line_items = sgqlc.types.Field( + sgqlc.types.non_null(ReverseFulfillmentOrderLineItemConnection), + graphql_name="lineItems", args=sgqlc.types.ArgDict( ( ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -23815,11 +27877,10 @@ class Refund(sgqlc.types.Type, LegacyInteroperability, Node): ) ), ) - staff_member = sgqlc.types.Field("StaffMember", graphql_name="staffMember") - total_refunded_set = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="totalRefundedSet") - transactions = sgqlc.types.Field( - sgqlc.types.non_null(OrderTransactionConnection), - graphql_name="transactions", + order = sgqlc.types.Field(sgqlc.types.non_null(Order), graphql_name="order") + reverse_deliveries = sgqlc.types.Field( + sgqlc.types.non_null(ReverseDeliveryConnection), + graphql_name="reverseDeliveries", args=sgqlc.types.ArgDict( ( ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), @@ -23830,13 +27891,34 @@ class Refund(sgqlc.types.Type, LegacyInteroperability, Node): ) ), ) - updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") + status = sgqlc.types.Field(sgqlc.types.non_null(ReverseFulfillmentOrderStatus), graphql_name="status") + third_party_confirmation = sgqlc.types.Field(ReverseFulfillmentOrderThirdPartyConfirmation, graphql_name="thirdPartyConfirmation") -class RefundAgreement(sgqlc.types.Type, SalesAgreement): +class ReverseFulfillmentOrderDisposition(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ("refund",) - refund = sgqlc.types.Field(sgqlc.types.non_null(Refund), graphql_name="refund") + __field_names__ = ("location", "quantity", "type") + location = sgqlc.types.Field(Location, graphql_name="location") + quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="quantity") + type = sgqlc.types.Field(sgqlc.types.non_null(ReverseFulfillmentOrderDispositionType), graphql_name="type") + + +class ReverseFulfillmentOrderLineItem(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("dispositions", "fulfillment_line_item", "total_quantity") + dispositions = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ReverseFulfillmentOrderDisposition))), graphql_name="dispositions" + ) + fulfillment_line_item = sgqlc.types.Field(sgqlc.types.non_null(FulfillmentLineItem), graphql_name="fulfillmentLineItem") + total_quantity = sgqlc.types.Field(sgqlc.types.non_null(Int), graphql_name="totalQuantity") + + +class SaleAdditionalFee(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("name", "price", "tax_lines") + name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") + price = sgqlc.types.Field(sgqlc.types.non_null(MoneyBag), graphql_name="price") + tax_lines = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(TaxLine))), graphql_name="taxLines") class SavedSearch(sgqlc.types.Type, LegacyInteroperability, Node): @@ -23876,19 +27958,7 @@ class Segment(sgqlc.types.Type, Node): class SegmentAssociationFilter(sgqlc.types.Type, SegmentFilter): __schema__ = shopify_schema - __field_names__ = ("values",) - values = sgqlc.types.Field( - sgqlc.types.non_null(SegmentAssociationFilterValueConnection), - graphql_name="values", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ) - ), - ) + __field_names__ = () class SegmentBooleanFilter(sgqlc.types.Type, SegmentFilter): @@ -23903,41 +27973,16 @@ class SegmentDateFilter(sgqlc.types.Type, SegmentFilter): class SegmentEnumFilter(sgqlc.types.Type, SegmentFilter): __schema__ = shopify_schema - __field_names__ = ("values",) - values = sgqlc.types.Field( - sgqlc.types.non_null(SegmentEnumFilterValueConnection), - graphql_name="values", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ) - ), - ) + __field_names__ = () class SegmentEventFilter(sgqlc.types.Type, SegmentFilter): __schema__ = shopify_schema - __field_names__ = ("parameters", "return_value_type", "values") + __field_names__ = ("parameters", "return_value_type") parameters = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentEventFilterParameter))), - graphql_name="parameters", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(SegmentEventFilterParameter))), graphql_name="parameters" ) return_value_type = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="returnValueType") - values = sgqlc.types.Field( - sgqlc.types.non_null(SegmentEventFilterValueConnection), - graphql_name="values", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ) - ), - ) class SegmentFloatFilter(sgqlc.types.Type, SegmentFilter): @@ -23952,22 +27997,10 @@ class SegmentIntegerFilter(sgqlc.types.Type, SegmentFilter): class SegmentStringFilter(sgqlc.types.Type, SegmentFilter): __schema__ = shopify_schema - __field_names__ = ("values",) - values = sgqlc.types.Field( - sgqlc.types.non_null(SegmentStringFilterValueConnection), - graphql_name="values", - args=sgqlc.types.ArgDict( - ( - ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), - ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), - ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), - ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), - ) - ), - ) + __field_names__ = () -class SellingPlan(sgqlc.types.Type, Node): +class SellingPlan(sgqlc.types.Type, HasPublishedTranslations, Node): __schema__ = shopify_schema __field_names__ = ( "billing_policy", @@ -23991,8 +28024,7 @@ class SellingPlan(sgqlc.types.Type, Node): options = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="options") position = sgqlc.types.Field(Int, graphql_name="position") pricing_policies = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanPricingPolicy"))), - graphql_name="pricingPolicies", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("SellingPlanPricingPolicy"))), graphql_name="pricingPolicies" ) @@ -24002,7 +28034,7 @@ class SellingPlanFixedPricingPolicy(sgqlc.types.Type, SellingPlanPricingPolicyBa created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") -class SellingPlanGroup(sgqlc.types.Type, Node): +class SellingPlanGroup(sgqlc.types.Type, HasPublishedTranslations, Node): __schema__ = shopify_schema __field_names__ = ( "app_id", @@ -24032,12 +28064,7 @@ class SellingPlanGroup(sgqlc.types.Type, Node): sgqlc.types.non_null(Boolean), graphql_name="appliesToProductVariant", args=sgqlc.types.ArgDict( - ( - ( - "product_variant_id", - sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productVariantId", default=None), - ), - ) + (("product_variant_id", sgqlc.types.Arg(sgqlc.types.non_null(ID), graphql_name="productVariantId", default=None)),) ), ) applies_to_product_variants = sgqlc.types.Field( @@ -24113,6 +28140,13 @@ class SellingPlanRecurringPricingPolicy(sgqlc.types.Type, SellingPlanPricingPoli created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") +class ServerPixel(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ("status", "webhook_endpoint_address") + status = sgqlc.types.Field(ServerPixelStatus, graphql_name="status") + webhook_endpoint_address = sgqlc.types.Field(String, graphql_name="webhookEndpointAddress") + + class ShippingLineSale(sgqlc.types.Type, Sale): __schema__ = shopify_schema __field_names__ = ("shipping_line",) @@ -24181,22 +28215,15 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): ) alerts = sgqlc.types.Field(sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ShopAlert))), graphql_name="alerts") all_product_categories = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductCategory))), - graphql_name="allProductCategories", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ProductCategory))), graphql_name="allProductCategories" ) assigned_fulfillment_orders = sgqlc.types.Field( sgqlc.types.non_null(FulfillmentOrderConnection), graphql_name="assignedFulfillmentOrders", args=sgqlc.types.ArgDict( ( - ( - "assignment_status", - sgqlc.types.Arg(FulfillmentOrderAssignmentStatus, graphql_name="assignmentStatus", default=None), - ), - ( - "location_ids", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationIds", default=None), - ), + ("assignment_status", sgqlc.types.Arg(FulfillmentOrderAssignmentStatus, graphql_name="assignmentStatus", default=None)), + ("location_ids", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(ID)), graphql_name="locationIds", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -24219,7 +28246,7 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): ) ), ) - billing_address = sgqlc.types.Field(sgqlc.types.non_null(MailingAddress), graphql_name="billingAddress") + billing_address = sgqlc.types.Field(sgqlc.types.non_null("ShopAddress"), graphql_name="billingAddress") channel_definitions_for_installed_channels = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(AvailableChannelDefinitionsByChannel))), graphql_name="channelDefinitionsForInstalledChannels", @@ -24256,13 +28283,11 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): ) email = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="email") enabled_presentment_currencies = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CurrencyCode))), - graphql_name="enabledPresentmentCurrencies", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(CurrencyCode))), graphql_name="enabledPresentmentCurrencies" ) features = sgqlc.types.Field(sgqlc.types.non_null(ShopFeatures), graphql_name="features") fulfillment_services = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentService))), - graphql_name="fulfillmentServices", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(FulfillmentService))), graphql_name="fulfillmentServices" ) iana_timezone = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="ianaTimezone") limited_pending_order_count = sgqlc.types.Field(sgqlc.types.non_null(LimitedPendingOrderCount), graphql_name="limitedPendingOrderCount") @@ -24270,8 +28295,7 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): myshopify_domain = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="myshopifyDomain") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") navigation_settings = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(NavigationItem))), - graphql_name="navigationSettings", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(NavigationItem))), graphql_name="navigationSettings" ) order_number_format_prefix = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="orderNumberFormatPrefix") order_number_format_suffix = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="orderNumberFormatSuffix") @@ -24326,10 +28350,7 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): args=sgqlc.types.ArgDict( ( ("query", sgqlc.types.Arg(sgqlc.types.non_null(String), graphql_name="query", default=None)), - ( - "types", - sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(SearchResultType)), graphql_name="types", default=None), - ), + ("types", sgqlc.types.Arg(sgqlc.types.list_of(sgqlc.types.non_null(SearchResultType)), graphql_name="types", default=None)), ("first", sgqlc.types.Arg(sgqlc.types.non_null(Int), graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ) @@ -24384,9 +28405,7 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): ( "image_ids", sgqlc.types.Arg( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), - graphql_name="imageIds", - default=None, + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(ID))), graphql_name="imageIds", default=None ), ), ) @@ -24396,6 +28415,46 @@ class Shop(sgqlc.types.Type, HasMetafields, HasPublishedTranslations, Node): weight_unit = sgqlc.types.Field(sgqlc.types.non_null(WeightUnit), graphql_name="weightUnit") +class ShopAddress(sgqlc.types.Type, Node): + __schema__ = shopify_schema + __field_names__ = ( + "address1", + "address2", + "city", + "company", + "coordinates_validated", + "country", + "country_code_v2", + "formatted", + "formatted_area", + "latitude", + "longitude", + "phone", + "province", + "province_code", + "zip", + ) + address1 = sgqlc.types.Field(String, graphql_name="address1") + address2 = sgqlc.types.Field(String, graphql_name="address2") + city = sgqlc.types.Field(String, graphql_name="city") + company = sgqlc.types.Field(String, graphql_name="company") + coordinates_validated = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="coordinatesValidated") + country = sgqlc.types.Field(String, graphql_name="country") + country_code_v2 = sgqlc.types.Field(CountryCode, graphql_name="countryCodeV2") + formatted = sgqlc.types.Field( + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), + graphql_name="formatted", + args=sgqlc.types.ArgDict((("with_company", sgqlc.types.Arg(Boolean, graphql_name="withCompany", default=True)),)), + ) + formatted_area = sgqlc.types.Field(String, graphql_name="formattedArea") + latitude = sgqlc.types.Field(Float, graphql_name="latitude") + longitude = sgqlc.types.Field(Float, graphql_name="longitude") + phone = sgqlc.types.Field(String, graphql_name="phone") + province = sgqlc.types.Field(String, graphql_name="province") + province_code = sgqlc.types.Field(String, graphql_name="provinceCode") + zip = sgqlc.types.Field(String, graphql_name="zip") + + class ShopPolicy(sgqlc.types.Type, HasPublishedTranslations, Node): __schema__ = shopify_schema __field_names__ = ("body", "type", "url") @@ -24410,6 +28469,12 @@ class ShopPolicyUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(ShopPolicyErrorCode, graphql_name="code") +class ShopResourceFeedbackCreateUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(ShopResourceFeedbackCreateUserErrorCode, graphql_name="code") + + class ShopifyPaymentsAccount(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ( @@ -24473,10 +28538,7 @@ class ShopifyPaymentsAccount(sgqlc.types.Type, Node): graphql_name="payouts", args=sgqlc.types.ArgDict( ( - ( - "transaction_type", - sgqlc.types.Arg(ShopifyPaymentsPayoutTransactionType, graphql_name="transactionType", default=None), - ), + ("transaction_type", sgqlc.types.Arg(ShopifyPaymentsPayoutTransactionType, graphql_name="transactionType", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -24490,8 +28552,7 @@ class ShopifyPaymentsAccount(sgqlc.types.Type, Node): graphql_name="permittedVerificationDocuments", ) verifications = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsVerification"))), - graphql_name="verifications", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsVerification"))), graphql_name="verifications" ) @@ -24519,10 +28580,7 @@ class ShopifyPaymentsBankAccount(sgqlc.types.Type, Node): graphql_name="payouts", args=sgqlc.types.ArgDict( ( - ( - "transaction_type", - sgqlc.types.Arg(ShopifyPaymentsPayoutTransactionType, graphql_name="transactionType", default=None), - ), + ("transaction_type", sgqlc.types.Arg(ShopifyPaymentsPayoutTransactionType, graphql_name="transactionType", default=None)), ("first", sgqlc.types.Arg(Int, graphql_name="first", default=None)), ("after", sgqlc.types.Arg(String, graphql_name="after", default=None)), ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), @@ -24607,8 +28665,7 @@ class ShopifyPaymentsDisputeEvidence(sgqlc.types.Type, Node): graphql_name="disputeFileUploads", ) fulfillments = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsDisputeFulfillment"))), - graphql_name="fulfillments", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null("ShopifyPaymentsDisputeFulfillment"))), graphql_name="fulfillments" ) product_description = sgqlc.types.Field(String, graphql_name="productDescription") refund_policy_disclosure = sgqlc.types.Field(String, graphql_name="refundPolicyDisclosure") @@ -24707,16 +28764,7 @@ class StandardMetafieldDefinitionEnableUserError(sgqlc.types.Type, DisplayableEr class StandardMetafieldDefinitionTemplate(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "description", - "key", - "name", - "namespace", - "owner_types", - "type", - "validations", - "visible_to_storefront_api", - ) + __field_names__ = ("description", "key", "name", "namespace", "owner_types", "type", "validations", "visible_to_storefront_api") description = sgqlc.types.Field(String, graphql_name="description") key = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="key") name = sgqlc.types.Field(sgqlc.types.non_null(String), graphql_name="name") @@ -24726,8 +28774,7 @@ class StandardMetafieldDefinitionTemplate(sgqlc.types.Type, Node): ) type = sgqlc.types.Field(sgqlc.types.non_null(MetafieldDefinitionType), graphql_name="type") validations = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidation))), - graphql_name="validations", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(MetafieldDefinitionValidation))), graphql_name="validations" ) visible_to_storefront_api = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="visibleToStorefrontApi") @@ -24783,10 +28830,7 @@ class SubscriptionBillingCycleEditedContract(sgqlc.types.Type, SubscriptionContr ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX"), - ), + ("sort_key", sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX")), ) ), ) @@ -24809,6 +28853,7 @@ class SubscriptionContract(sgqlc.types.Type, Node, SubscriptionContractBase): "last_payment_status", "next_billing_date", "origin_order", + "revision_id", "status", ) billing_attempts = sgqlc.types.Field( @@ -24830,6 +28875,7 @@ class SubscriptionContract(sgqlc.types.Type, Node, SubscriptionContractBase): last_payment_status = sgqlc.types.Field(SubscriptionContractLastPaymentStatus, graphql_name="lastPaymentStatus") next_billing_date = sgqlc.types.Field(DateTime, graphql_name="nextBillingDate") origin_order = sgqlc.types.Field(Order, graphql_name="originOrder") + revision_id = sgqlc.types.Field(sgqlc.types.non_null(UnsignedInt64), graphql_name="revisionId") status = sgqlc.types.Field(sgqlc.types.non_null(SubscriptionContractSubscriptionStatus), graphql_name="status") @@ -24877,10 +28923,7 @@ class SubscriptionDraft(sgqlc.types.Type, Node): ("last", sgqlc.types.Arg(Int, graphql_name="last", default=None)), ("before", sgqlc.types.Arg(String, graphql_name="before", default=None)), ("reverse", sgqlc.types.Arg(Boolean, graphql_name="reverse", default=False)), - ( - "sort_key", - sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX"), - ), + ("sort_key", sgqlc.types.Arg(SubscriptionBillingCyclesSortKeys, graphql_name="sortKey", default="CYCLE_INDEX")), ) ), ) @@ -25007,17 +29050,20 @@ class SubscriptionDraftUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(SubscriptionDraftErrorCode, graphql_name="code") +class TableResponse(sgqlc.types.Type, ShopifyqlResponse): + __schema__ = shopify_schema + __field_names__ = () + + +class TaxAppConfigureUserError(sgqlc.types.Type, DisplayableError): + __schema__ = shopify_schema + __field_names__ = ("code",) + code = sgqlc.types.Field(TaxAppConfigureUserErrorCode, graphql_name="code") + + class TenderTransaction(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "amount", - "payment_method", - "processed_at", - "remote_reference", - "test", - "transaction_details", - "user", - ) + __field_names__ = ("amount", "payment_method", "processed_at", "remote_reference", "test", "transaction_details", "user") amount = sgqlc.types.Field(sgqlc.types.non_null(MoneyV2), graphql_name="amount") payment_method = sgqlc.types.Field(String, graphql_name="paymentMethod") processed_at = sgqlc.types.Field(DateTime, graphql_name="processedAt") @@ -25051,6 +29097,11 @@ class TranslationUserError(sgqlc.types.Type, DisplayableError): code = sgqlc.types.Field(TranslationErrorCode, graphql_name="code") +class UnknownSale(sgqlc.types.Type, Sale): + __schema__ = shopify_schema + __field_names__ = () + + class UrlRedirect(sgqlc.types.Type, Node): __schema__ = shopify_schema __field_names__ = ("path", "target") @@ -25078,23 +29129,14 @@ class UrlRedirectBulkDeleteBySearchUserError(sgqlc.types.Type, DisplayableError) class UrlRedirectImport(sgqlc.types.Type, Node): __schema__ = shopify_schema - __field_names__ = ( - "count", - "created_count", - "failed_count", - "finished", - "finished_at", - "preview_redirects", - "updated_count", - ) + __field_names__ = ("count", "created_count", "failed_count", "finished", "finished_at", "preview_redirects", "updated_count") count = sgqlc.types.Field(Int, graphql_name="count") created_count = sgqlc.types.Field(Int, graphql_name="createdCount") failed_count = sgqlc.types.Field(Int, graphql_name="failedCount") finished = sgqlc.types.Field(sgqlc.types.non_null(Boolean), graphql_name="finished") finished_at = sgqlc.types.Field(DateTime, graphql_name="finishedAt") preview_redirects = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(UrlRedirectImportPreview))), - graphql_name="previewRedirects", + sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(UrlRedirectImportPreview))), graphql_name="previewRedirects" ) updated_count = sgqlc.types.Field(Int, graphql_name="updatedCount") @@ -25133,16 +29175,8 @@ class WebPixel(sgqlc.types.Type, Node): class WebhookSubscription(sgqlc.types.Type, LegacyInteroperability, Node): __schema__ = shopify_schema - __field_names__ = ( - "created_at", - "endpoint", - "format", - "include_fields", - "metafield_namespaces", - "private_metafield_namespaces", - "topic", - "updated_at", - ) + __field_names__ = ("api_version", "created_at", "endpoint", "format", "include_fields", "metafield_namespaces", "topic", "updated_at") + api_version = sgqlc.types.Field(sgqlc.types.non_null(ApiVersion), graphql_name="apiVersion") created_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="createdAt") endpoint = sgqlc.types.Field(sgqlc.types.non_null("WebhookSubscriptionEndpoint"), graphql_name="endpoint") format = sgqlc.types.Field(sgqlc.types.non_null(WebhookSubscriptionFormat), graphql_name="format") @@ -25152,10 +29186,6 @@ class WebhookSubscription(sgqlc.types.Type, LegacyInteroperability, Node): metafield_namespaces = sgqlc.types.Field( sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), graphql_name="metafieldNamespaces" ) - private_metafield_namespaces = sgqlc.types.Field( - sgqlc.types.non_null(sgqlc.types.list_of(sgqlc.types.non_null(String))), - graphql_name="privateMetafieldNamespaces", - ) topic = sgqlc.types.Field(sgqlc.types.non_null(WebhookSubscriptionTopic), graphql_name="topic") updated_at = sgqlc.types.Field(sgqlc.types.non_null(DateTime), graphql_name="updatedAt") @@ -25175,7 +29205,12 @@ class AppSubscriptionDiscountValue(sgqlc.types.Union): class CollectionRuleConditionObject(sgqlc.types.Union): __schema__ = shopify_schema - __types__ = (CollectionRuleProductCategoryCondition, CollectionRuleTextCondition) + __types__ = (CollectionRuleMetafieldCondition, CollectionRuleProductCategoryCondition, CollectionRuleTextCondition) + + +class CollectionRuleConditionsRuleObject(sgqlc.types.Union): + __schema__ = shopify_schema + __types__ = (CollectionRuleMetafieldCondition,) class CommentEventEmbed(sgqlc.types.Union): @@ -25258,7 +29293,33 @@ class DiscountShippingDestinationSelection(sgqlc.types.Union): class MetafieldReference(sgqlc.types.Union): __schema__ = shopify_schema - __types__ = (Collection, GenericFile, MediaImage, OnlineStorePage, Product, ProductVariant, Video) + __types__ = (Collection, GenericFile, MediaImage, Metaobject, OnlineStorePage, Product, ProductVariant, Video) + + +class MetafieldReferencer(sgqlc.types.Union): + __schema__ = shopify_schema + __types__ = ( + AppInstallation, + Collection, + Customer, + DeliveryCustomization, + DiscountAutomaticNode, + DiscountCodeNode, + DiscountNode, + DraftOrder, + FulfillmentOrder, + Location, + Market, + Metaobject, + OnlineStoreArticle, + OnlineStoreBlog, + OnlineStorePage, + Order, + PaymentCustomization, + Product, + ProductVariant, + Shop, + ) class OrderStagedChange(sgqlc.types.Union): @@ -25273,6 +29334,11 @@ class OrderStagedChange(sgqlc.types.Union): ) +class PaymentDetails(sgqlc.types.Union): + __schema__ = shopify_schema + __types__ = (CardPaymentDetails,) + + class PaymentInstrument(sgqlc.types.Union): __schema__ = shopify_schema __types__ = (VaultCreditCard, VaultPaypalBillingAgreement) @@ -25288,11 +29354,21 @@ class PricingValue(sgqlc.types.Union): __types__ = (MoneyV2, PricingPercentageValue) +class PublicationOperation(sgqlc.types.Union): + __schema__ = shopify_schema + __types__ = (AddAllProductsOperation, CatalogCsvOperation, PublicationResourceOperation) + + class PurchasingEntity(sgqlc.types.Union): __schema__ = shopify_schema __types__ = (Customer, PurchasingCompany) +class ReverseDeliveryDeliverable(sgqlc.types.Union): + __schema__ = shopify_schema + __types__ = (ReverseDeliveryShippingDeliverable,) + + class SellingPlanBillingPolicy(sgqlc.types.Union): __schema__ = shopify_schema __types__ = (SellingPlanFixedBillingPolicy, SellingPlanRecurringBillingPolicy) @@ -25320,11 +29396,7 @@ class SellingPlanPricingPolicyAdjustmentValue(sgqlc.types.Union): class SubscriptionDeliveryMethod(sgqlc.types.Union): __schema__ = shopify_schema - __types__ = ( - SubscriptionDeliveryMethodLocalDelivery, - SubscriptionDeliveryMethodPickup, - SubscriptionDeliveryMethodShipping, - ) + __types__ = (SubscriptionDeliveryMethodLocalDelivery, SubscriptionDeliveryMethodPickup, SubscriptionDeliveryMethodShipping) class SubscriptionDeliveryOption(sgqlc.types.Union): diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/source.py b/airbyte-integrations/connectors/source-shopify/source_shopify/source.py index 8225aa5f08c6..7c584865f1c0 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/source.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/source.py @@ -3,932 +3,68 @@ # -import logging -from abc import ABC, abstractmethod -from functools import cached_property -from typing import Any, Dict, Iterable, List, Mapping, MutableMapping, Optional, Tuple, Union -from urllib.parse import parse_qsl, urlparse +from typing import Any, List, Mapping, Tuple -import requests from airbyte_cdk import AirbyteLogger +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 import HttpStream -from requests.exceptions import ConnectionError, InvalidURL, JSONDecodeError, RequestException, SSLError +from requests.exceptions import ConnectionError, RequestException, SSLError from .auth import MissingAccessTokenError, ShopifyAuthenticator -from .graphql import get_query_products -from .transform import DataTypeEnforcer -from .utils import SCOPES_MAPPING, ApiTypeEnum -from .utils import EagerlyCachedStreamState as stream_state_cache -from .utils import ShopifyAccessScopesError, ShopifyBadJsonError, ShopifyConnectionError, ShopifyNonRetryableErrors -from .utils import ShopifyRateLimiter as limiter -from .utils import ShopifyWrongShopNameError - - -class ShopifyStream(HttpStream, ABC): - - # define default logger - logger = logging.getLogger("airbyte") - - # Latest Stable Release - api_version = "2023-07" - # Page size - limit = 250 - - primary_key = "id" - order_field = "updated_at" - filter_field = "updated_at_min" - - raise_on_http_errors = True - max_retries = 5 - - def __init__(self, config: Dict): - super().__init__(authenticator=config["authenticator"]) - self._transformer = DataTypeEnforcer(self.get_json_schema()) - self.config = config - - @property - @abstractmethod - def data_field(self) -> str: - """The name of the field in the response which contains the data""" - - @property - def url_base(self) -> str: - return f"https://{self.config['shop']}.myshopify.com/admin/api/{self.api_version}/" - - @property - def default_filter_field_value(self) -> Union[int, str]: - # certain streams are using `since_id` field as `filter_field`, which requires to use `int` type, - # but many other use `str` values for this, we determine what to use based on `filter_field` value - # by default, we use the user defined `Start Date` as initial value, or 0 for `id`-dependent streams. - return 0 if self.filter_field == "since_id" else (self.config.get("start_date") or "") - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - next_page = response.links.get("next", None) - if next_page: - return dict(parse_qsl(urlparse(next_page.get("url")).query)) - else: - return None - - def request_params(self, next_page_token: Mapping[str, Any] = None, **kwargs) -> MutableMapping[str, Any]: - params = {"limit": self.limit} - if next_page_token: - params.update(**next_page_token) - else: - params["order"] = f"{self.order_field} asc" - params[self.filter_field] = self.default_filter_field_value - if self.config.get("end_date") and self.filter_field == "updated_at_min": - params["updated_at_max"] = self.config.get("end_date") - return params - - @limiter.balance_rate_limit() - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - if response.status_code is requests.codes.OK: - try: - json_response = response.json() - records = json_response.get(self.data_field, []) if self.data_field is not None else json_response - yield from self.produce_records(records) - except RequestException as e: - self.logger.warning(f"Unexpected error in `parse_ersponse`: {e}, the actual response data: {response.text}") - yield {} - - def produce_records(self, records: Union[Iterable[Mapping[str, Any]], Mapping[str, Any]] = None) -> Iterable[Mapping[str, Any]]: - # transform method was implemented according to issue 4841 - # Shopify API returns price fields as a string and it should be converted to number - # this solution designed to convert string into number, but in future can be modified for general purpose - if isinstance(records, dict): - # for cases when we have a single record as dict - # add shop_url to the record to make querying easy - records["shop_url"] = self.config["shop"] - yield self._transformer.transform(records) - else: - # for other cases - for record in records: - # add shop_url to the record to make querying easy - record["shop_url"] = self.config["shop"] - yield self._transformer.transform(record) - - def should_retry(self, response: requests.Response) -> bool: - known_errors = ShopifyNonRetryableErrors(self.name) - status = response.status_code - if status in known_errors.keys(): - setattr(self, "raise_on_http_errors", False) - self.logger.warning(known_errors.get(status)) - return False - else: - return super().should_retry(response) - - -class ShopifyDeletedEventsStream(ShopifyStream): - - data_field = "events" - primary_key = "id" - cursor_field = "deleted_at" - - @property - def availability_strategy(self) -> None: - """ - No need to apply the `availability strategy` for this service stream. - """ - return None - - def __init__(self, config: Dict, deleted_events_api_name: str): - self.deleted_events_api_name = deleted_events_api_name - super().__init__(config) - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - def get_json_schema(self) -> None: - """ - No need to apply the `schema` for this service stream. - """ - return {} - - def produce_deleted_records_from_events(self, delete_events: Iterable[Mapping[str, Any]] = []) -> None: - for event in delete_events: - yield { - "id": event["subject_id"], - self.cursor_field: event["created_at"], - "updated_at": event["created_at"], - "deleted_message": event["message"], - "deleted_description": event["description"], - "shop_url": event["shop_url"], - } - - def read_records(self, stream_state: Mapping[str, Any] = None, **kwargs): - delete_events = super().read_records(stream_state=stream_state, **kwargs) - yield from self.produce_deleted_records_from_events(delete_events) - - def request_params( - self, - stream_state: Mapping[str, Any] = None, - next_page_token: Mapping[str, Any] = None, - **kwargs, - ) -> Mapping[str, Any]: - params = {} - - if not next_page_token: - params.update(**{"filter": self.deleted_events_api_name, "verb": "destroy"}) - if stream_state: - state = stream_state.get("deleted", {}).get(self.cursor_field) - if state: - params["created_at_min"] = state - else: - # `filter` and `verb` cannot be passed, when `page_info` is present. - # See https://shopify.dev/api/usage/pagination-rest - params.update(**next_page_token) - - return params - - -class IncrementalShopifyStream(ShopifyStream, ABC): - - # Setting the check point interval to the limit of the records output - @property - def state_checkpoint_interval(self) -> int: - return super().limit - - # Setting the default cursor field for all streams - cursor_field = "updated_at" - deleted_cursor_field = "deleted_at" - - @property - def default_state_comparison_value(self) -> Union[int, str]: - # certain streams are using `id` field as `cursor_field`, which requires to use `int` type, - # but many other use `str` values for this, we determine what to use based on `cursor_field` value - return 0 if self.cursor_field == "id" else "" - - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - last_record_value = latest_record.get(self.cursor_field) or self.default_state_comparison_value - current_state_value = current_stream_state.get(self.cursor_field) or self.default_state_comparison_value - return {self.cursor_field: max(last_record_value, current_state_value)} - - @stream_state_cache.cache_stream_state - def request_params(self, stream_state: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, **kwargs): - params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) - # If there is a next page token then we should only send pagination-related parameters. - if not next_page_token: - params["order"] = f"{self.order_field} asc" - if stream_state: - params[self.filter_field] = stream_state.get(self.cursor_field) - return params - - # Parse the `stream_slice` with respect to `stream_state` for `Incremental refresh` - # cases where we slice the stream, the endpoints for those classes don't accept any other filtering, - # but they provide us with the updated_at field in most cases, so we used that as incremental filtering during the order slicing. - def filter_records_newer_than_state(self, stream_state: Mapping[str, Any] = None, records_slice: Iterable[Mapping] = None) -> Iterable: - # Getting records >= state - if stream_state: - state_value = stream_state.get(self.cursor_field) - for record in records_slice: - if self.cursor_field in record: - record_value = record.get(self.cursor_field, self.default_state_comparison_value) - if record_value: - if record_value >= state_value: - yield record - else: - # old entities could have cursor field in place, but set to null - self.logger.warning( - f"Stream `{self.name}`, Record ID: `{record.get(self.primary_key)}` cursor value is: {record_value}, record is emitted without state comparison" - ) - yield record - else: - # old entities could miss the cursor field - self.logger.warning( - f"Stream `{self.name}`, Record ID: `{record.get(self.primary_key)}` missing cursor field: {self.cursor_field}, record is emitted without state comparison" - ) - yield record - else: - yield from records_slice - - -class IncrementalShopifyStreamWithDeletedEvents(IncrementalShopifyStream): - @property - @abstractmethod - def deleted_events_api_name(self) -> str: - """ - The string value of the Shopify Events Object to pull: - - articles -> Article - blogs -> Blog - custom_collections -> Collection - orders -> Order - pages -> Page - price_rules -> PriceRule - products -> Product - - """ - - @property - def deleted_events(self) -> ShopifyDeletedEventsStream: - """ - The Events stream instance to fetch the `destroyed` records for specified `deleted_events_api_name`, like: `Product`. - See more in `ShopifyDeletedEventsStream` class. - """ - return ShopifyDeletedEventsStream(self.config, self.deleted_events_api_name) - - @property - def default_deleted_state_comparison_value(self) -> Union[int, str]: - """ - Set the default STATE comparison value for cases when the deleted record doesn't have it's value. - We expect the `deleted_at` cursor field for destroyed records would be always type of String. - """ - return "" - - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - """ - We extend the stream state with `deleted` property to store the `destroyed` records STATE separetely from the Stream State. - """ - state = super().get_updated_state(current_stream_state, latest_record) - # add `deleted` property to each stream supports `deleted events`, - # to povide the `Incremental` sync mode, for the `Incremental Delete` records. - last_deleted_record_value = latest_record.get(self.deleted_cursor_field) or self.default_deleted_state_comparison_value - current_deleted_state_value = current_stream_state.get(self.deleted_cursor_field) or self.default_deleted_state_comparison_value - state["deleted"] = {self.deleted_cursor_field: max(last_deleted_record_value, current_deleted_state_value)} - return state - - def read_records( - self, - stream_state: Mapping[str, Any] = None, - stream_slice: Optional[Mapping[str, Any]] = None, - **kwargs, - ) -> Iterable[Mapping[str, Any]]: - """Override to fetch deleted records for supported streams""" - # main records stream - yield from super().read_records(stream_state=stream_state, stream_slice=stream_slice, **kwargs) - # fetch deleted events after the Stream data is pulled - yield from self.deleted_events.read_records(stream_state=stream_state, **kwargs) - - -class ShopifySubstream(IncrementalShopifyStream): - """ - ShopifySubstream - provides slicing functionality for streams using parts of data from parent stream. - For example: - - `Refunds Orders` is the entity of `Orders`, - - `OrdersRisks` is the entity of `Orders`, - - `DiscountCodes` is the entity of `PriceRules`, etc. - - :: @ parent_stream - defines the parent stream object to read from - :: @ slice_key - defines the name of the property in stream slices dict. - :: @ nested_record - the name of the field inside of parent stream record. Default is `id`. - :: @ nested_record_field_name - the name of the field inside of nested_record. - :: @ nested_substream - the name of the nested entity inside of parent stream, helps to reduce the number of - API Calls, if present, see `OrderRefunds` stream for more. - """ - - parent_stream_class: object = None - slice_key: str = None - nested_record: str = "id" - nested_record_field_name: str = None - nested_substream = None - nested_substream_list_field_id = None - - @cached_property - def parent_stream(self) -> object: - """ - Returns the instance of parent stream, if the substream has a `parent_stream_class` dependency. - """ - return self.parent_stream_class(self.config) if self.parent_stream_class else None - - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - """UPDATING THE STATE OBJECT: - Stream: Transactions - Parent Stream: Orders - Returns: - { - {...}, - "transactions": { - "created_at": "2022-03-03T03:47:45-08:00", - "orders": { - "updated_at": "2022-03-03T03:47:46-08:00" - } - }, - {...}, - } - """ - updated_state = super().get_updated_state(current_stream_state, latest_record) - # add parent_stream_state to `updated_state` - updated_state[self.parent_stream.name] = stream_state_cache.cached_state.get(self.parent_stream.name) - return updated_state - - def request_params(self, next_page_token: Mapping[str, Any] = None, **kwargs) -> MutableMapping[str, Any]: - params = {"limit": self.limit} - if next_page_token: - params.update(**next_page_token) - return params - - def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: - """ - Reading the parent stream for slices with structure: - EXAMPLE: for given nested_record as `id` of Orders, - - Outputs: - [ - {slice_key: 123}, - {slice_key: 456}, - {...}, - {slice_key: 999 - ] - """ - sorted_substream_slices = [] - - # reading parent nested stream_state from child stream state - parent_stream_state = stream_state.get(self.parent_stream.name) if stream_state else {} - - # reading the parent stream - for record in self.parent_stream.read_records(stream_state=parent_stream_state, **kwargs): - # updating the `stream_state` with the state of it's parent stream - # to have the child stream sync independently from the parent stream - stream_state_cache.cached_state[self.parent_stream.name] = self.parent_stream.get_updated_state({}, record) - # to limit the number of API Calls and reduce the time of data fetch, - # we can pull the ready data for child_substream, if nested data is present, - # and corresponds to the data of child_substream we need. - if self.nested_substream and self.nested_substream_list_field_id: - if record.get(self.nested_substream): - sorted_substream_slices.extend( - [ - { - self.slice_key: sub_record[self.nested_substream_list_field_id], - self.cursor_field: record[self.nested_substream][0].get( - self.cursor_field, self.default_state_comparison_value - ), - } - for sub_record in record[self.nested_record] - ] - ) - elif self.nested_substream: - if record.get(self.nested_substream): - sorted_substream_slices.append( - { - self.slice_key: record[self.nested_record], - self.cursor_field: record[self.nested_substream][0].get(self.cursor_field, self.default_state_comparison_value), - } - ) - else: - # avoid checking `deleted` records for substreams, a.k.a `Metafields` streams, - # since `deleted` records are not available, thus we avoid HTTP-400 errors. - if self.deleted_cursor_field not in record: - yield {self.slice_key: record[self.nested_record]} - - # output slice from sorted list to avoid filtering older records - if self.nested_substream: - if len(sorted_substream_slices) > 0: - # sort by cursor_field - sorted_substream_slices.sort(key=lambda x: x.get(self.cursor_field)) - for sorted_slice in sorted_substream_slices: - yield {self.slice_key: sorted_slice[self.slice_key]} - - def read_records( - self, - stream_state: Mapping[str, Any] = None, - stream_slice: Optional[Mapping[str, Any]] = None, - **kwargs, - ) -> Iterable[Mapping[str, Any]]: - """Reading child streams records for each `id`""" - - slice_data = stream_slice.get(self.slice_key) - # sometimes the stream_slice.get(self.slice_key) has the list of records, - # to avoid data exposition inside the logs, we should get the data we need correctly out of stream_slice. - if isinstance(slice_data, list) and self.nested_record_field_name is not None and len(slice_data) > 0: - slice_data = slice_data[0].get(self.nested_record_field_name) - - self.logger.info(f"Reading {self.name} for {self.slice_key}: {slice_data}") - records = super().read_records(stream_slice=stream_slice, **kwargs) - yield from self.filter_records_newer_than_state(stream_state=stream_state, records_slice=records) - - -class MetafieldShopifySubstream(ShopifySubstream): - slice_key = "id" - data_field = "metafields" - - parent_stream_class: object = None - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - object_id = stream_slice[self.slice_key] - return f"{self.parent_stream_class.data_field}/{object_id}/{self.data_field}.json" - - -class Articles(IncrementalShopifyStreamWithDeletedEvents): - data_field = "articles" - cursor_field = "id" - order_field = "id" - filter_field = "since_id" - deleted_events_api_name = "Article" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldArticles(MetafieldShopifySubstream): - parent_stream_class: object = Articles - - -class Blogs(IncrementalShopifyStreamWithDeletedEvents): - cursor_field = "id" - order_field = "id" - data_field = "blogs" - filter_field = "since_id" - deleted_events_api_name = "Blog" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldBlogs(MetafieldShopifySubstream): - parent_stream_class: object = Blogs - - -class Customers(IncrementalShopifyStream): - data_field = "customers" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldCustomers(MetafieldShopifySubstream): - parent_stream_class: object = Customers - - -class Orders(IncrementalShopifyStreamWithDeletedEvents): - data_field = "orders" - deleted_events_api_name = "Order" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - def request_params( - self, stream_state: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, **kwargs - ) -> MutableMapping[str, Any]: - params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) - if not next_page_token: - params["status"] = "any" - return params - - -class Disputes(IncrementalShopifyStream): - data_field = "disputes" - filter_field = "since_id" - cursor_field = "id" - order_field = "id" - - def path(self, **kwargs) -> str: - return f"shopify_payments/{self.data_field}.json" - - -class MetafieldOrders(MetafieldShopifySubstream): - parent_stream_class: object = Orders - - -class DraftOrders(IncrementalShopifyStream): - data_field = "draft_orders" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldDraftOrders(MetafieldShopifySubstream): - parent_stream_class: object = DraftOrders - - -class Products(IncrementalShopifyStreamWithDeletedEvents): - use_cache = True - data_field = "products" - deleted_events_api_name = "Product" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class ProductsGraphQl(IncrementalShopifyStream): - filter_field = "updatedAt" - cursor_field = "updatedAt" - data_field = "graphql" - http_method = "POST" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - def request_params( - self, - stream_state: Optional[Mapping[str, Any]] = None, - next_page_token: Optional[Mapping[str, Any]] = None, - **kwargs, - ) -> MutableMapping[str, Any]: - return {} - - def request_body_json( - self, - stream_state: Mapping[str, Any], - stream_slice: Optional[Mapping[str, Any]] = None, - next_page_token: Optional[Mapping[str, Any]] = None, - ) -> Optional[Mapping]: - state_value = stream_state.get(self.filter_field) - if state_value: - filter_value = state_value - else: - filter_value = self.default_filter_field_value - query = get_query_products( - first=self.limit, filter_field=self.filter_field, filter_value=filter_value, next_page_token=next_page_token - ) - return {"query": query} - - @staticmethod - def next_page_token(response: requests.Response) -> Optional[Mapping[str, Any]]: - page_info = response.json()["data"]["products"]["pageInfo"] - has_next_page = page_info["hasNextPage"] - if has_next_page: - return page_info["endCursor"] - else: - return None - - @limiter.balance_rate_limit(api_type=ApiTypeEnum.graphql.value) - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - if response.status_code is requests.codes.OK: - try: - json_response = response.json()["data"]["products"]["nodes"] - yield from self.produce_records(json_response) - except RequestException as e: - self.logger.warning(f"Unexpected error in `parse_ersponse`: {e}, the actual response data: {response.text}") - yield {} - - -class MetafieldProducts(MetafieldShopifySubstream): - parent_stream_class: object = Products - - -class ProductImages(ShopifySubstream): - parent_stream_class: object = Products - cursor_field = "id" - slice_key = "product_id" - data_field = "images" - nested_substream = "images" - filter_field = "since_id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - product_id = stream_slice[self.slice_key] - return f"products/{product_id}/{self.data_field}.json" - - -class MetafieldProductImages(MetafieldShopifySubstream): - parent_stream_class: object = Products - nested_record = "images" - slice_key = "images" - nested_substream = "images" - nested_substream_list_field_id = "id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - image_id = stream_slice[self.slice_key] - return f"product_images/{image_id}/{self.data_field}.json" - - -class ProductVariants(ShopifySubstream): - parent_stream_class: object = Products - cursor_field = "id" - slice_key = "product_id" - data_field = "variants" - nested_substream = "variants" - filter_field = "since_id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - product_id = stream_slice[self.slice_key] - return f"products/{product_id}/{self.data_field}.json" - - -class MetafieldProductVariants(MetafieldShopifySubstream): - parent_stream_class: object = Products - nested_record = "variants" - slice_key = "variants" - nested_substream = "variants" - nested_substream_list_field_id = "id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - variant_id = stream_slice[self.slice_key] - return f"variants/{variant_id}/{self.data_field}.json" - - -class AbandonedCheckouts(IncrementalShopifyStream): - data_field = "checkouts" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - def request_params( - self, stream_state: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, **kwargs - ) -> MutableMapping[str, Any]: - params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) - # If there is a next page token then we should only send pagination-related parameters. - if not next_page_token: - params["status"] = "any" - return params - - -class CustomCollections(IncrementalShopifyStreamWithDeletedEvents): - data_field = "custom_collections" - deleted_events_api_name = "Collection" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class SmartCollections(IncrementalShopifyStream): - data_field = "smart_collections" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldSmartCollections(MetafieldShopifySubstream): - parent_stream_class: object = SmartCollections - - -class Collects(IncrementalShopifyStream): - """ - Collects stream does not support Incremental Refresh based on datetime fields, only `since_id` is supported: - https://shopify.dev/docs/admin-api/rest/reference/products/collect - - The Collect stream is the link between Products and Collections, if the Collection is created for Products, - the `collect` record is created, it's reasonable to Full Refresh all collects. As for Incremental refresh - - we would use the since_id specificaly for this stream. - """ - - data_field = "collects" - cursor_field = "id" - order_field = "id" - filter_field = "since_id" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class Collections(ShopifySubstream): - parent_stream_class: object = Collects - nested_record = "collection_id" - slice_key = "collection_id" - data_field = "collection" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - collection_id = stream_slice[self.slice_key] - return f"collections/{collection_id}.json" - - -class MetafieldCollections(MetafieldShopifySubstream): - parent_stream_class: object = Collects - slice_key = "collection_id" - nested_record = "collection_id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - object_id = stream_slice[self.slice_key] - return f"collections/{object_id}/{self.data_field}.json" - - -class BalanceTransactions(IncrementalShopifyStream): - - """ - PaymentsTransactions stream does not support Incremental Refresh based on datetime fields, only `since_id` is supported: - https://shopify.dev/api/admin-rest/2021-07/resources/transactions - """ - - data_field = "transactions" - cursor_field = "id" - order_field = "id" - filter_field = "since_id" - - def path(self, **kwargs) -> str: - return f"shopify_payments/balance/{self.data_field}.json" - - -class OrderRefunds(ShopifySubstream): - parent_stream_class: object = Orders - slice_key = "order_id" - data_field = "refunds" - cursor_field = "created_at" - # we pull out the records that we already know has the refunds data from Orders object - nested_substream = "refunds" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - order_id = stream_slice["order_id"] - return f"orders/{order_id}/{self.data_field}.json" - - -class OrderRisks(ShopifySubstream): - parent_stream_class: object = Orders - slice_key = "order_id" - data_field = "risks" - cursor_field = "id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - order_id = stream_slice["order_id"] - return f"orders/{order_id}/{self.data_field}.json" - - -class Transactions(ShopifySubstream): - parent_stream_class: object = Orders - slice_key = "order_id" - data_field = "transactions" - cursor_field = "created_at" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - order_id = stream_slice["order_id"] - return f"orders/{order_id}/{self.data_field}.json" - - -class TenderTransactions(IncrementalShopifyStream): - data_field = "tender_transactions" - cursor_field = "processed_at" - filter_field = "processed_at_min" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class Pages(IncrementalShopifyStreamWithDeletedEvents): - data_field = "pages" - deleted_events_api_name = "Page" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldPages(MetafieldShopifySubstream): - parent_stream_class: object = Pages - - -class PriceRules(IncrementalShopifyStreamWithDeletedEvents): - data_field = "price_rules" - deleted_events_api_name = "PriceRule" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class DiscountCodes(ShopifySubstream): - parent_stream_class: object = PriceRules - slice_key = "price_rule_id" - data_field = "discount_codes" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - price_rule_id = stream_slice["price_rule_id"] - return f"price_rules/{price_rule_id}/{self.data_field}.json" - - -class Locations(ShopifyStream): - """ - The location API does not support any form of filtering. - https://shopify.dev/api/admin-rest/2021-07/resources/location - - Therefore, only FULL_REFRESH mode is supported. - """ - - data_field = "locations" - - def path(self, **kwargs): - return f"{self.data_field}.json" - - -class MetafieldLocations(MetafieldShopifySubstream): - parent_stream_class: object = Locations - - -class InventoryLevels(ShopifySubstream): - parent_stream_class: object = Locations - slice_key = "location_id" - data_field = "inventory_levels" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - location_id = stream_slice["location_id"] - return f"locations/{location_id}/{self.data_field}.json" - - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - records_stream = super().parse_response(response, **kwargs) - - def generate_key(record): - record.update({"id": "|".join((str(record.get("location_id", "")), str(record.get("inventory_item_id", ""))))}) - return record - - # associate the surrogate key - yield from map(generate_key, records_stream) - - -class InventoryItems(ShopifySubstream): - parent_stream_class: object = Products - slice_key = "id" - nested_record = "variants" - nested_record_field_name = "inventory_item_id" - data_field = "inventory_items" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - ids = ",".join(str(x[self.nested_record_field_name]) for x in stream_slice[self.slice_key]) - return f"inventory_items.json?ids={ids}" - - -class FulfillmentOrders(ShopifySubstream): - parent_stream_class: object = Orders - slice_key = "order_id" - data_field = "fulfillment_orders" - cursor_field = "id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - order_id = stream_slice[self.slice_key] - return f"orders/{order_id}/{self.data_field}.json" - - -class Fulfillments(ShopifySubstream): - parent_stream_class: object = Orders - slice_key = "order_id" - data_field = "fulfillments" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - order_id = stream_slice[self.slice_key] - return f"orders/{order_id}/{self.data_field}.json" - - -class Shop(ShopifyStream): - data_field = "shop" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class MetafieldShops(IncrementalShopifyStream): - data_field = "metafields" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class CustomerSavedSearch(IncrementalShopifyStream): - api_version = "2022-01" - cursor_field = "id" - order_field = "id" - data_field = "customer_saved_searches" - filter_field = "since_id" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" - - -class CustomerAddress(ShopifySubstream): - parent_stream_class: object = Customers - slice_key = "id" - data_field = "addresses" - cursor_field = "id" - - def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: - customer_id = stream_slice[self.slice_key] - return f"customers/{customer_id}/{self.data_field}.json" - - -class Countries(ShopifyStream): - data_field = "countries" - - def path(self, **kwargs) -> str: - return f"{self.data_field}.json" +from .scopes import ShopifyScopes +from .streams.streams import ( + AbandonedCheckouts, + Articles, + BalanceTransactions, + Blogs, + Collections, + Collects, + Countries, + CustomCollections, + CustomerAddress, + Customers, + CustomerSavedSearch, + DiscountCodes, + Disputes, + DraftOrders, + FulfillmentOrders, + Fulfillments, + InventoryItems, + InventoryLevels, + Locations, + MetafieldArticles, + MetafieldBlogs, + MetafieldCollections, + MetafieldCustomers, + MetafieldDraftOrders, + MetafieldLocations, + MetafieldOrders, + MetafieldPages, + MetafieldProductImages, + MetafieldProducts, + MetafieldProductVariants, + MetafieldShops, + MetafieldSmartCollections, + OrderRefunds, + OrderRisks, + Orders, + Pages, + PriceRules, + ProductImages, + Products, + ProductsGraphQl, + ProductVariants, + Shop, + SmartCollections, + TenderTransactions, + Transactions, + TransactionsGraphql, +) class ConnectionCheckTest: - def __init__(self, config: Mapping[str, Any]): + def __init__(self, config: Mapping[str, Any]) -> None: self.config = config # use `Shop` as a test stream for connection check self.test_stream = Shop(self.config) @@ -953,7 +89,7 @@ def test_connection(self) -> tuple[bool, str]: return False, "The `Shopify Store` name is missing. Make sure it's entered and valid." try: - response = list(self.test_stream.read_records(sync_mode=None)) + response = list(self.test_stream.read_records(sync_mode=SyncMode.full_refresh)) # check for the shop_id is present in the response shop_id = response[0].get("id") if shop_id is not None: @@ -969,8 +105,38 @@ def test_connection(self) -> tuple[bool, str]: except MissingAccessTokenError: return False, self.describe_error("missing_token_error") + def get_shop_id(self) -> str: + """ + We need to have the `shop_id` value available to have it passed elsewhere and fill-in the missing data. + By the time this method is tiggered, we are sure we've passed the `Connection Checks` and have the `shop_id` value. + """ + response = list(self.test_stream.read_records(sync_mode=SyncMode.full_refresh)) + shop_id = response[0].get("id") + if shop_id: + return shop_id + else: + raise Exception(f"Couldn't get `shop_id`. Actual `response`: {response}.") + class SourceShopify(AbstractSource): + @property + def continue_sync_on_stream_failure(self) -> bool: + return True + + @property + def raise_exception_on_missing_stream(self) -> bool: + return False + + @staticmethod + def get_shop_name(config) -> str: + split_pattern = ".myshopify.com" + shop_name = config.get("shop") + return shop_name.split(split_pattern)[0] if split_pattern in shop_name else shop_name + + @staticmethod + def format_stream_name(name) -> str: + return "".join(x.capitalize() for x in name.split("_")) + def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, any]: """ Testing connection availability for the connector. @@ -979,6 +145,16 @@ def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> config["authenticator"] = ShopifyAuthenticator(config) return ConnectionCheckTest(config).test_connection() + def select_transactions_stream(self, config: Mapping[str, Any]) -> Stream: + """ + Allow the Customer to decide which API type to use when it comes to the `Transactions` stream. + """ + should_fetch_user_id = config.get("fetch_transactions_user_id") + if should_fetch_user_id: + return Transactions(config) + else: + return TransactionsGraphql(config) + def streams(self, config: Mapping[str, Any]) -> List[Stream]: """ Mapping a input config of the user input configuration as defined in the connector spec. @@ -986,16 +162,12 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: """ config["shop"] = self.get_shop_name(config) config["authenticator"] = ShopifyAuthenticator(config) - user_scopes = self.get_user_scopes(config) - always_permitted_streams = ["MetafieldShops", "Shop", "Countries"] - permitted_streams = [ - stream - for user_scope in user_scopes - if user_scope["handle"] in SCOPES_MAPPING - for stream in SCOPES_MAPPING.get(user_scope["handle"]) - ] + always_permitted_streams - - # before adding stream to stream_instances list, please add it to SCOPES_MAPPING + # add `shop_id` int value + config["shop_id"] = ConnectionCheckTest(config).get_shop_id() + # define scopes checker + scopes_manager: ShopifyScopes = ShopifyScopes(config) + # get the list of the permitted streams, based on the authenticated user scopes + permitted_streams = scopes_manager.get_permitted_streams() stream_instances = [ AbandonedCheckouts(config), Articles(config), @@ -1038,41 +210,12 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: Shop(config), SmartCollections(config), TenderTransactions(config), - Transactions(config), + self.select_transactions_stream(config), CustomerSavedSearch(config), CustomerAddress(config), Countries(config), ] - return [stream_instance for stream_instance in stream_instances if self.format_name(stream_instance.name) in permitted_streams] - - @staticmethod - def get_user_scopes(config): - session = requests.Session() - url = f"https://{config['shop']}.myshopify.com/admin/oauth/access_scopes.json" - headers = config["authenticator"].get_auth_header() - - try: - response = session.get(url, headers=headers).json() - access_scopes = response.get("access_scopes") - except InvalidURL: - raise ShopifyWrongShopNameError(url) - except JSONDecodeError as json_error: - raise ShopifyBadJsonError(json_error) - except (SSLError, ConnectionError) as con_error: - raise ShopifyConnectionError(con_error) - - if access_scopes: - return access_scopes - else: - raise ShopifyAccessScopesError(response) - - @staticmethod - def get_shop_name(config): - split_pattern = ".myshopify.com" - shop_name = config.get("shop") - return shop_name.split(split_pattern)[0] if split_pattern in shop_name else shop_name - - @staticmethod - def format_name(name): - return "".join(x.capitalize() for x in name.split("_")) + return [ + stream_instance for stream_instance in stream_instances if self.format_stream_name(stream_instance.name) in permitted_streams + ] diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/spec.json b/airbyte-integrations/connectors/source-shopify/source_shopify/spec.json index 03629c443fa2..4f965d55addf 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/spec.json +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/spec.json @@ -85,6 +85,18 @@ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "format": "date", "order": 3 + }, + "bulk_window_in_days": { + "type": "integer", + "title": "GraphQL BULK Date Range in Days", + "description": "Defines what would be a date range per single BULK Job", + "default": 30 + }, + "fetch_transactions_user_id": { + "type": "boolean", + "title": "Add `user_id` to Transactions (slower)", + "description": "Defines which API type (REST/BULK) to use to fetch `Transactions` data. If you are a `Shopify Plus` user, leave the default value to speed up the fetch.", + "default": false } } }, diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/streams/base_streams.py b/airbyte-integrations/connectors/source-shopify/source_shopify/streams/base_streams.py new file mode 100644 index 000000000000..6f423a54ec31 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/streams/base_streams.py @@ -0,0 +1,722 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import logging +from abc import ABC, abstractmethod +from functools import cached_property +from typing import Any, Dict, Iterable, Mapping, MutableMapping, Optional, Union +from urllib.parse import parse_qsl, urlparse + +import pendulum as pdm +import requests +from airbyte_cdk.sources.streams.http import HttpStream +from requests.exceptions import RequestException +from source_shopify.shopify_graphql.bulk.job import ShopifyBulkManager +from source_shopify.shopify_graphql.bulk.query import ShopifyBulkQuery, ShopifyBulkTemplates +from source_shopify.shopify_graphql.bulk.record import ShopifyBulkRecord +from source_shopify.transform import DataTypeEnforcer +from source_shopify.utils import EagerlyCachedStreamState as stream_state_cache +from source_shopify.utils import ShopifyNonRetryableErrors +from source_shopify.utils import ShopifyRateLimiter as limiter + + +class ShopifyStream(HttpStream, ABC): + # define default logger + logger = logging.getLogger("airbyte") + + # Latest Stable Release + api_version = "2023-07" + # Page size + limit = 250 + + primary_key = "id" + order_field = "updated_at" + filter_field = "updated_at_min" + + raise_on_http_errors = True + max_retries = 5 + + def __init__(self, config: Dict) -> None: + super().__init__(authenticator=config["authenticator"]) + self._transformer = DataTypeEnforcer(self.get_json_schema()) + self.config = config + + @property + @abstractmethod + def data_field(self) -> str: + """The name of the field in the response which contains the data""" + + @property + def url_base(self) -> str: + return f"https://{self.config['shop']}.myshopify.com/admin/api/{self.api_version}/" + + @property + def default_filter_field_value(self) -> Union[int, str]: + # certain streams are using `since_id` field as `filter_field`, which requires to use `int` type, + # but many other use `str` values for this, we determine what to use based on `filter_field` value + # by default, we use the user defined `Start Date` as initial value, or 0 for `id`-dependent streams. + return 0 if self.filter_field == "since_id" else (self.config.get("start_date") or "") + + def path(self, **kwargs) -> str: + return f"{self.data_field}.json" + + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: + next_page = response.links.get("next", None) + if next_page: + return dict(parse_qsl(urlparse(next_page.get("url")).query)) + else: + return None + + def request_params(self, next_page_token: Optional[Mapping[str, Any]] = None, **kwargs) -> MutableMapping[str, Any]: + params = {"limit": self.limit} + if next_page_token: + params.update(**next_page_token) + else: + params["order"] = f"{self.order_field} asc" + params[self.filter_field] = self.default_filter_field_value + return params + + @limiter.balance_rate_limit() + def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: + if response.status_code is requests.codes.OK: + try: + json_response = response.json() + records = json_response.get(self.data_field, []) if self.data_field is not None else json_response + yield from self.produce_records(records) + except RequestException as e: + self.logger.warning(f"Unexpected error in `parse_ersponse`: {e}, the actual response data: {response.text}") + yield {} + + def produce_records(self, records: Optional[Union[Iterable[Mapping[str, Any]], Mapping[str, Any]]] = None) -> Mapping[str, Any]: + # transform method was implemented according to issue 4841 + # Shopify API returns price fields as a string and it should be converted to number + # this solution designed to convert string into number, but in future can be modified for general purpose + if isinstance(records, dict): + # for cases when we have a single record as dict + # add shop_url to the record to make querying easy + records["shop_url"] = self.config["shop"] + yield self._transformer.transform(records) + else: + # for other cases + for record in records: + # add shop_url to the record to make querying easy + record["shop_url"] = self.config["shop"] + yield self._transformer.transform(record) + + def should_retry(self, response: requests.Response) -> bool: + known_errors = ShopifyNonRetryableErrors(self.name) + status = response.status_code + if status in known_errors.keys(): + setattr(self, "raise_on_http_errors", False) + self.logger.warning(known_errors.get(status)) + return False + else: + return super().should_retry(response) + + +class ShopifyDeletedEventsStream(ShopifyStream): + data_field = "events" + primary_key = "id" + cursor_field = "deleted_at" + + def __init__(self, config: Dict, deleted_events_api_name: str) -> None: + self.deleted_events_api_name = deleted_events_api_name + super().__init__(config) + + @property + def availability_strategy(self) -> None: + """ + No need to apply the `availability strategy` for this service stream. + """ + return None + + def get_json_schema(self) -> None: + """ + No need to apply the `schema` for this service stream. + Return `{}` to satisfy the `self._transformer.transform(record)` logic. + """ + return {} + + def produce_deleted_records_from_events(self, delete_events: Iterable[Mapping[str, Any]] = []) -> Mapping[str, Any]: + for event in delete_events: + yield { + "id": event["subject_id"], + self.cursor_field: event["created_at"], + "updated_at": event["created_at"], + "deleted_message": event["message"], + "deleted_description": event["description"], + "shop_url": event["shop_url"], + } + + def read_records(self, stream_state: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + delete_events = super().read_records(stream_state=stream_state, **kwargs) + yield from self.produce_deleted_records_from_events(delete_events) + + def request_params( + self, + stream_state: Optional[Mapping[str, Any]] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + **kwargs, + ) -> MutableMapping[str, Any]: + params: Mapping[str, Any] = {} + + if next_page_token: + # `filter` and `verb` cannot be passed, when `page_info` is present. + # See https://shopify.dev/api/usage/pagination-rest + params.update(**next_page_token) + else: + params.update(**{"filter": self.deleted_events_api_name, "verb": "destroy"}) + if stream_state: + state = stream_state.get("deleted", {}).get(self.cursor_field) + if state: + params["created_at_min"] = state + return params + + +class IncrementalShopifyStream(ShopifyStream, ABC): + # Setting the check point interval to the limit of the records output + @property + def state_checkpoint_interval(self) -> int: + return super().limit + + # Setting the default cursor field for all streams + cursor_field = "updated_at" + deleted_cursor_field = "deleted_at" + + @property + def default_state_comparison_value(self) -> Union[int, str]: + # certain streams are using `id` field as `cursor_field`, which requires to use `int` type, + # but many other use `str` values for this, we determine what to use based on `cursor_field` value + return 0 if self.cursor_field == "id" else "" + + def get_updated_state( + self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any] + ) -> MutableMapping[str, Any]: + last_record_value = latest_record.get(self.cursor_field) or self.default_state_comparison_value + current_state_value = current_stream_state.get(self.cursor_field) or self.default_state_comparison_value + return {self.cursor_field: max(last_record_value, current_state_value)} + + @stream_state_cache.cache_stream_state + def request_params( + self, stream_state: Optional[Mapping[str, Any]] = None, next_page_token: Optional[Mapping[str, Any]] = None, **kwargs + ) -> MutableMapping[str, Any]: + params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) + # If there is a next page token then we should only send pagination-related parameters. + if not next_page_token: + params["order"] = f"{self.order_field} asc" + if stream_state: + params[self.filter_field] = stream_state.get(self.cursor_field) + return params + + # Parse the `stream_slice` with respect to `stream_state` for `Incremental refresh` + # cases where we slice the stream, the endpoints for those classes don't accept any other filtering, + # but they provide us with the updated_at field in most cases, so we used that as incremental filtering during the order slicing. + def filter_records_newer_than_state( + self, stream_state: Optional[Mapping[str, Any]] = None, records_slice: Optional[Iterable[Mapping]] = None + ) -> Iterable: + # Getting records >= state + if stream_state: + state_value = stream_state.get(self.cursor_field) + for record in records_slice: + if self.cursor_field in record: + record_value = record.get(self.cursor_field, self.default_state_comparison_value) + if record_value: + if record_value >= state_value: + yield record + else: + # old entities could have cursor field in place, but set to null + self.logger.warning( + f"Stream `{self.name}`, Record ID: `{record.get(self.primary_key)}` cursor value is: {record_value}, record is emitted without state comparison" + ) + yield record + else: + # old entities could miss the cursor field + self.logger.warning( + f"Stream `{self.name}`, Record ID: `{record.get(self.primary_key)}` missing cursor field: {self.cursor_field}, record is emitted without state comparison" + ) + yield record + else: + yield from records_slice + + +class IncrementalShopifySubstream(IncrementalShopifyStream): + """ + IncrementalShopifySubstream - provides slicing functionality for streams using parts of data from parent stream. + For example: + - `Refunds Orders` is the entity of `Orders`, + - `OrdersRisks` is the entity of `Orders`, + - `DiscountCodes` is the entity of `PriceRules`, etc. + + :: @ parent_stream - defines the parent stream object to read from + :: @ slice_key - defines the name of the property in stream slices dict. + :: @ nested_record - the name of the field inside of parent stream record. Default is `id`. + :: @ nested_record_field_name - the name of the field inside of nested_record. + :: @ nested_substream - the name of the nested entity inside of parent stream, helps to reduce the number of + API Calls, if present, see `OrderRefunds` stream for more. + """ + + parent_stream_class: Union[ShopifyStream, IncrementalShopifyStream] = None + slice_key: str = None + nested_record: str = "id" + nested_record_field_name: str = None + nested_substream = None + nested_substream_list_field_id = None + + @cached_property + def parent_stream(self) -> Union[ShopifyStream, IncrementalShopifyStream]: + """ + Returns the instance of parent stream, if the substream has a `parent_stream_class` dependency. + """ + return self.parent_stream_class(self.config) if self.parent_stream_class else None + + def get_updated_state( + self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any] + ) -> MutableMapping[str, Any]: + """UPDATING THE STATE OBJECT: + Stream: Transactions + Parent Stream: Orders + Returns: + { + {...}, + "transactions": { + "created_at": "2022-03-03T03:47:45-08:00", + "orders": { + "updated_at": "2022-03-03T03:47:46-08:00" + } + }, + {...}, + } + """ + updated_state = super().get_updated_state(current_stream_state, latest_record) + # add parent_stream_state to `updated_state` + updated_state[self.parent_stream.name] = stream_state_cache.cached_state.get(self.parent_stream.name) + return updated_state + + def request_params(self, next_page_token: Optional[Mapping[str, Any]] = None, **kwargs) -> MutableMapping[str, Any]: + params = {"limit": self.limit} + if next_page_token: + params.update(**next_page_token) + return params + + def stream_slices(self, stream_state: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + """ + Reading the parent stream for slices with structure: + EXAMPLE: for given nested_record as `id` of Orders, + + Outputs: + [ + {slice_key: 123}, + {slice_key: 456}, + {...}, + {slice_key: 999 + ] + """ + sorted_substream_slices = [] + + # reading parent nested stream_state from child stream state + parent_stream_state = stream_state.get(self.parent_stream.name) if stream_state else {} + + # reading the parent stream + for record in self.parent_stream.read_records(stream_state=parent_stream_state, **kwargs): + # updating the `stream_state` with the state of it's parent stream + # to have the child stream sync independently from the parent stream + stream_state_cache.cached_state[self.parent_stream.name] = self.parent_stream.get_updated_state({}, record) + # to limit the number of API Calls and reduce the time of data fetch, + # we can pull the ready data for child_substream, if nested data is present, + # and corresponds to the data of child_substream we need. + if self.nested_substream and self.nested_substream_list_field_id: + if record.get(self.nested_substream): + sorted_substream_slices.extend( + [ + { + self.slice_key: sub_record[self.nested_substream_list_field_id], + self.cursor_field: record[self.nested_substream][0].get( + self.cursor_field, self.default_state_comparison_value + ), + } + for sub_record in record[self.nested_record] + ] + ) + elif self.nested_substream: + if record.get(self.nested_substream): + sorted_substream_slices.append( + { + self.slice_key: record[self.nested_record], + self.cursor_field: record[self.nested_substream][0].get(self.cursor_field, self.default_state_comparison_value), + } + ) + else: + # avoid checking `deleted` records for substreams, a.k.a `Metafields` streams, + # since `deleted` records are not available, thus we avoid HTTP-400 errors. + if self.deleted_cursor_field not in record: + yield {self.slice_key: record[self.nested_record]} + + # output slice from sorted list to avoid filtering older records + if self.nested_substream: + if len(sorted_substream_slices) > 0: + # sort by cursor_field + sorted_substream_slices.sort(key=lambda x: x.get(self.cursor_field)) + for sorted_slice in sorted_substream_slices: + yield {self.slice_key: sorted_slice[self.slice_key]} + + # the stream_state caching is required to avoid the STATE collisions for Substreams + @stream_state_cache.cache_stream_state + def read_records( + self, + stream_state: Optional[Mapping[str, Any]] = None, + stream_slice: Optional[Mapping[str, Any]] = None, + **kwargs, + ) -> Iterable[Mapping[str, Any]]: + """Reading child streams records for each `id`""" + + slice_data = stream_slice.get(self.slice_key) + # sometimes the stream_slice.get(self.slice_key) has the list of records, + # to avoid data exposition inside the logs, we should get the data we need correctly out of stream_slice. + if isinstance(slice_data, list) and self.nested_record_field_name is not None and len(slice_data) > 0: + slice_data = slice_data[0].get(self.nested_record_field_name) + + # reading substream records + self.logger.info(f"Reading {self.name} for {self.slice_key}: {slice_data}") + records = super().read_records(stream_slice=stream_slice, **kwargs) + # get the cached substream state, to avoid state collisions for Incremental Syncs + cached_substream_state = stream_state_cache.cached_state.get(self.name, {}) + # filtering the portion of already emmited substream records using cached state value, + # since the actual `metafields` endpoint doesn't support the server-side filtering using query params + # thus to avoid the duplicates - we filter the records following the cached state, + # which is freezed every time the sync starts using the actual STATE provided, + # while the active STATE is updated during the sync and saved as expected, in the end. + yield from self.filter_records_newer_than_state(stream_state=cached_substream_state, records_slice=records) + + +class MetafieldShopifySubstream(IncrementalShopifySubstream): + slice_key = "id" + data_field = "metafields" + + parent_stream_class: Union[ShopifyStream, IncrementalShopifyStream] = None + + def path(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> str: + object_id = stream_slice[self.slice_key] + return f"{self.parent_stream_class.data_field}/{object_id}/{self.data_field}.json" + + +class IncrementalShopifyNestedStream(IncrementalShopifyStream): + """ + IncrementalShopifyNestedStream - provides slicing functionality for streams using parts of data from parent stream. + + For example: + - `refunds` is the entity of `order.refunds`, + - `fulfillments` is the entity of the `order.fulfillments` which is nested sub-entity + + :: @ parent_stream - defines the parent stream object to read from + :: @ mutation_map - defines how the nested record should be populated with additional values, + available from parent record. + Example: + >> mutation_map = {"parent_id": "id"}, + where `parent_id` is the new field that created for each subrecord available. + and `id` is the parent_key named `id`, we take the value from. + + :: @ nested_entity - the name of the nested entity inside of parent stream, helps to reduce the number of + API Calls, if present, see `OrderRefunds` or `Fulfillments` streams for more info. + """ + + data_field = None + parent_stream_class: Union[ShopifyStream, IncrementalShopifyStream] = None + mutation_map: Mapping[str, Any] = None + nested_entity = None + + @cached_property + def parent_stream(self) -> object: + """ + Returns the instance of parent stream, if the substream has a `parent_stream_class` dependency. + """ + return self.parent_stream_class(self.config) if self.parent_stream_class else None + + def path(self, **kwargs) -> str: + """ + NOT USED FOR THIS TYPE OF STREAMS. + """ + return "" + + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: + """ + NOT USED FOR THIS TYPE OF STREAMS. + """ + return None + + def request_params(self, **kwargs) -> MutableMapping[str, Any]: + """ + NOT USED FOR THIS TYPE OF STREAMS. + """ + return {} + + def get_updated_state( + self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any] + ) -> MutableMapping[str, Any]: + """UPDATING THE STATE OBJECT: + Stream: Transactions + Parent Stream: Orders + Returns: + { + {...}, + "transactions": { + "created_at": "2022-03-03T03:47:45-08:00", + "orders": { + "updated_at": "2022-03-03T03:47:46-08:00" + } + }, + {...}, + } + """ + updated_state = super().get_updated_state(current_stream_state, latest_record) + # add parent_stream_state to `updated_state` + updated_state[self.parent_stream.name] = stream_state_cache.cached_state.get(self.parent_stream.name) + return updated_state + + def add_parent_id(self, record: Optional[Mapping[str, Any]] = None) -> Mapping[str, Any]: + """ + Adds new field to the record with name `key` based on the `value` key from record. + """ + if self.mutation_map and record: + for subrecord in record.get(self.nested_entity, []): + for k, v in self.mutation_map.items(): + subrecord[k] = record.get(v) + else: + return record + + # the stream_state caching is required to avoid the STATE collisions for Substreams + @stream_state_cache.cache_stream_state + def stream_slices(self, stream_state: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + parent_stream_state = stream_state.get(self.parent_stream.name) if stream_state else {} + for record in self.parent_stream.read_records(stream_state=parent_stream_state, **kwargs): + # updating the `stream_state` with the state of it's parent stream + # to have the child stream sync independently from the parent stream + stream_state_cache.cached_state[self.parent_stream.name] = self.parent_stream.get_updated_state({}, record) + # to limit the number of API Calls and reduce the time of data fetch, + # we can pull the ready data for child_substream, if nested data is present, + # and corresponds to the data of child_substream we need. + if self.nested_entity in record.keys(): + # add parent_id key, value from mutation_map, if passed. + self.add_parent_id(record) + # yield nested sub-rcords + yield from [{self.nested_entity: sub_record} for sub_record in record.get(self.nested_entity, [])] + + def read_records(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: + # get the cached substream state, to avoid state collisions for Incremental Syncs + cached_state = stream_state_cache.cached_state.get(self.name, {}) + # emitting nested parent entity + yield from self.filter_records_newer_than_state(cached_state, self.produce_records(stream_slice.get(self.nested_entity, []))) + + +class IncrementalShopifyStreamWithDeletedEvents(IncrementalShopifyStream): + @property + @abstractmethod + def deleted_events_api_name(self) -> str: + """ + The string value of the Shopify Events Object to pull: + + articles -> Article + blogs -> Blog + custom_collections -> Collection + orders -> Order + pages -> Page + price_rules -> PriceRule + products -> Product + + """ + + @property + def deleted_events(self) -> ShopifyDeletedEventsStream: + """ + The Events stream instance to fetch the `destroyed` records for specified `deleted_events_api_name`, like: `Product`. + See more in `ShopifyDeletedEventsStream` class. + """ + return ShopifyDeletedEventsStream(self.config, self.deleted_events_api_name) + + @property + def default_deleted_state_comparison_value(self) -> Union[int, str]: + """ + Set the default STATE comparison value for cases when the deleted record doesn't have it's value. + We expect the `deleted_at` cursor field for destroyed records would be always type of String. + """ + return "" + + def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: + """ + We extend the stream state with `deleted` property to store the `destroyed` records STATE separetely from the Stream State. + """ + state = super().get_updated_state(current_stream_state, latest_record) + # add `deleted` property to each stream supports `deleted events`, + # to provide the `Incremental` sync mode, for the `Incremental Delete` records. + last_deleted_record_value = latest_record.get(self.deleted_cursor_field) or self.default_deleted_state_comparison_value + current_deleted_state_value = current_stream_state.get(self.deleted_cursor_field) or self.default_deleted_state_comparison_value + state["deleted"] = {self.deleted_cursor_field: max(last_deleted_record_value, current_deleted_state_value)} + return state + + def read_records( + self, + stream_state: Optional[Mapping[str, Any]] = None, + stream_slice: Optional[Mapping[str, Any]] = None, + **kwargs, + ) -> Iterable[Mapping[str, Any]]: + """Override to fetch deleted records for supported streams""" + # main records stream + yield from super().read_records(stream_state=stream_state, stream_slice=stream_slice, **kwargs) + # fetch deleted events after the Stream data is pulled + yield from self.deleted_events.read_records(stream_state=stream_state, **kwargs) + + +class IncrementalShopifyGraphQlBulkStream(IncrementalShopifyStream): + filter_field = "updated_at" + cursor_field = "updated_at" + data_field = "graphql" + http_method = "POST" + + parent_stream_class: Optional[Union[ShopifyStream, IncrementalShopifyStream]] = None + + def __init__(self, config: Dict) -> None: + super().__init__(config) + # init BULK Query instance, pass `shop_id` from config + self.query = self.bulk_query(shop_id=config.get("shop_id")) + # define BULK Manager instance + self.job_manager: ShopifyBulkManager = ShopifyBulkManager(self._session, f"{self.url_base}/{self.path()}") + # define Record Producer instance + self.record_producer: ShopifyBulkRecord = ShopifyBulkRecord(self.query) + + @cached_property + def parent_stream(self) -> object: + """ + Returns the instance of parent stream, if the substream has a `parent_stream_class` dependency. + """ + return self.parent_stream_class(self.config) if self.parent_stream_class else None + + @property + def slice_interval_in_days(self) -> int: + """ + Defines date range per single BULK Job. + """ + return self.config.get("bulk_window_in_days", 30) + + @property + @abstractmethod + def bulk_query(self) -> ShopifyBulkQuery: + """ + This method property should be defined in the stream class instance, + and should be instantiated from the `ShopifyBulkQuery` class. + """ + + def add_shop_url_field(self, records: Iterable[MutableMapping[str, Any]] = []) -> Iterable[MutableMapping[str, Any]]: + # ! Mandatory, add shop_url to the record to make querying easy + # more info: https://github.com/airbytehq/airbyte/issues/25110 + for record in records: + if record: + record["shop_url"] = self.config["shop"] + yield record + + @property + def default_state_comparison_value(self) -> Union[int, str]: + # certain streams are using `id` field as `cursor_field`, which requires to use `int` type, + # but many other use `str` values for this, we determine what to use based on `cursor_field` value + return 0 if self.cursor_field == "id" else self.config.get("start_date") + + # CDK OVERIDES + @property + def availability_strategy(self) -> None: + """NOT USED FOR BULK OPERATIONS TO SAVE THE RATE LIMITS AND TIME FOR THE SYNC.""" + return None + + def request_params(self, **kwargs) -> MutableMapping[str, Any]: + """ + NOT USED FOR SHOPIFY BULK OPERARTIONS. + https://shopify.dev/docs/api/usage/bulk-operations/queries#write-a-bulk-operation + """ + return {} + + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: + """ + NOT USED FOR SHOPIFY BULK OPERATIONS. + https://shopify.dev/docs/api/usage/bulk-operations/queries#write-a-bulk-operation + """ + return None + + def request_body_json(self, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Mapping[str, Any]: + """ + Override for _send_request CDK method to send HTTP request to Shopify BULK Operatoions. + https://shopify.dev/docs/api/usage/bulk-operations/queries#bulk-query-overview + """ + return {"query": ShopifyBulkTemplates.prepare(stream_slice.get("query"))} + + def get_updated_state( + self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any] + ) -> MutableMapping[str, Any]: + """UPDATING THE STATE OBJECT: + Stream: CustomerAddress + Parent Stream: Customers + Returns: + { + "customer_address": { + "id": 12345, + "customers": { + "updated_at": "2022-03-03T03:47:46-08:00" + } + } + } + """ + updated_state = super().get_updated_state(current_stream_state, latest_record) + if self.parent_stream_class: + # add parent_stream_state to `updated_state` + updated_state[self.parent_stream.name] = {self.parent_stream.cursor_field: latest_record.get(self.parent_stream.cursor_field)} + return updated_state + + def get_state_value(self, stream_state: Mapping[str, Any] = None) -> Optional[Union[str, int]]: + if stream_state: + if self.parent_stream_class: + # get parent stream state from the stream_state object. + parent_state = stream_state.get(self.parent_stream.name, {}) + if parent_state: + return parent_state.get(self.parent_stream.cursor_field, self.default_state_comparison_value) + else: + # get the stream state, if no `parent_stream_class` was assigned. + return stream_state.get(self.cursor_field, self.default_state_comparison_value) + else: + # for majority of cases we fallback to start_date, otherwise. + return self.config.get("start_date") + + @stream_state_cache.cache_stream_state + def stream_slices(self, stream_state: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: + if self.filter_field: + state = self.get_state_value(stream_state) + start = pdm.parse(state) + end = pdm.now() + while start < end: + slice_end = start.add(days=self.slice_interval_in_days) + # check end period is less than now() or now() is applied otherwise. + slice_end = slice_end if slice_end < end else end + # making pre-defined sliced query to pass it directly + prepared_query = self.query.get(self.filter_field, start.to_rfc3339_string(), slice_end.to_rfc3339_string()) + self.logger.info(f"Stream: `{self.name}` requesting BULK Job for period: {start} -- {slice_end}.") + yield {"query": prepared_query} + start = slice_end + else: + # for the streams that don't support filtering + yield {"query": self.query.get()} + + def process_bulk_results( + self, response: requests.Response, stream_state: Optional[Mapping[str, Any]] = None + ) -> Iterable[Mapping[str, Any]]: + # get results fetched from COMPLETED BULK Job or `None` + filename = self.job_manager.job_check(response) + # the `filename` could be `None`, meaning there are no data available for the slice period. + if filename: + # add `shop_url` field to each record produced + records = self.add_shop_url_field( + # produce records from saved bulk job result + self.record_producer.read_file(filename) + ) + yield from self.filter_records_newer_than_state(stream_state, records) + + def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: + # get the cached substream state, to avoid state collisions for Incremental Syncs + stream_state = stream_state_cache.cached_state.get(self.name, {self.cursor_field: self.default_state_comparison_value}) + yield from self.process_bulk_results(response, stream_state) diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/streams/streams.py b/airbyte-integrations/connectors/source-shopify/source_shopify/streams/streams.py new file mode 100644 index 000000000000..d528ed0105b2 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/streams/streams.py @@ -0,0 +1,388 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from typing import Any, Iterable, Mapping, MutableMapping, Optional + +import requests +from airbyte_cdk.sources.streams.core import package_name_from_class +from airbyte_cdk.sources.utils.schema_helpers import ResourceSchemaLoader +from requests.exceptions import RequestException +from source_shopify.shopify_graphql.bulk.query import ( + Collection, + CustomerAddresses, + DiscountCode, + FulfillmentOrder, + InventoryItem, + InventoryLevel, + MetafieldCollection, + MetafieldCustomer, + MetafieldDraftOrder, + MetafieldLocation, + MetafieldOrder, + MetafieldProduct, + MetafieldProductImage, + MetafieldProductVariant, + Transaction, +) +from source_shopify.shopify_graphql.graphql import get_query_products +from source_shopify.utils import ApiTypeEnum +from source_shopify.utils import ShopifyRateLimiter as limiter + +from .base_streams import ( + IncrementalShopifyGraphQlBulkStream, + IncrementalShopifyNestedStream, + IncrementalShopifyStream, + IncrementalShopifyStreamWithDeletedEvents, + IncrementalShopifySubstream, + MetafieldShopifySubstream, + ShopifyStream, +) + + +class Articles(IncrementalShopifyStreamWithDeletedEvents): + data_field = "articles" + cursor_field = "id" + order_field = "id" + filter_field = "since_id" + deleted_events_api_name = "Article" + + +class MetafieldArticles(MetafieldShopifySubstream): + parent_stream_class = Articles + + +class Blogs(IncrementalShopifyStreamWithDeletedEvents): + cursor_field = "id" + order_field = "id" + data_field = "blogs" + filter_field = "since_id" + deleted_events_api_name = "Blog" + + +class MetafieldBlogs(MetafieldShopifySubstream): + parent_stream_class = Blogs + + +class Customers(IncrementalShopifyStream): + data_field = "customers" + + +class MetafieldCustomers(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldCustomer = MetafieldCustomer + + +class Orders(IncrementalShopifyStreamWithDeletedEvents): + data_field = "orders" + deleted_events_api_name = "Order" + + def request_params( + self, stream_state: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, **kwargs + ) -> MutableMapping[str, Any]: + params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) + if not next_page_token: + params["status"] = "any" + return params + + +class Disputes(IncrementalShopifyStream): + data_field = "disputes" + filter_field = "since_id" + cursor_field = "id" + order_field = "id" + + def path(self, **kwargs) -> str: + return f"shopify_payments/{self.data_field}.json" + + +class MetafieldOrders(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldOrder = MetafieldOrder + + +class DraftOrders(IncrementalShopifyStream): + data_field = "draft_orders" + + +class MetafieldDraftOrders(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldDraftOrder = MetafieldDraftOrder + + +class Products(IncrementalShopifyStreamWithDeletedEvents): + use_cache = True + data_field = "products" + deleted_events_api_name = "Product" + + +class ProductsGraphQl(IncrementalShopifyStream): + filter_field = "updatedAt" + cursor_field = "updatedAt" + data_field = "graphql" + http_method = "POST" + + def request_params( + self, + stream_state: Optional[Mapping[str, Any]] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + **kwargs, + ) -> MutableMapping[str, Any]: + return {} + + def request_body_json( + self, + stream_state: Mapping[str, Any], + stream_slice: Optional[Mapping[str, Any]] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> Optional[Mapping]: + state_value = stream_state.get(self.filter_field) + if state_value: + filter_value = state_value + else: + filter_value = self.default_filter_field_value + query = get_query_products( + first=self.limit, filter_field=self.filter_field, filter_value=filter_value, next_page_token=next_page_token + ) + return {"query": query} + + @staticmethod + def next_page_token(response: requests.Response) -> Optional[Mapping[str, Any]]: + page_info = response.json()["data"]["products"]["pageInfo"] + has_next_page = page_info["hasNextPage"] + if has_next_page: + return page_info["endCursor"] + else: + return None + + @limiter.balance_rate_limit(api_type=ApiTypeEnum.graphql.value) + def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: + if response.status_code is requests.codes.OK: + try: + json_response = response.json()["data"]["products"]["nodes"] + yield from self.produce_records(json_response) + except RequestException as e: + self.logger.warning(f"Unexpected error in `parse_ersponse`: {e}, the actual response data: {response.text}") + + +class MetafieldProducts(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldProduct = MetafieldProduct + + +class ProductImages(IncrementalShopifyNestedStream): + parent_stream_class = Products + nested_entity = "images" + # add `product_id` to each nested subrecord + mutation_map = {"product_id": "id"} + + +class MetafieldProductImages(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldProductImage = MetafieldProductImage + + +class ProductVariants(IncrementalShopifyNestedStream): + parent_stream_class = Products + nested_entity = "variants" + # add `product_id` to each nested subrecord + mutation_map = {"product_id": "id"} + + +class MetafieldProductVariants(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldProductVariant = MetafieldProductVariant + + +class AbandonedCheckouts(IncrementalShopifyStream): + data_field = "checkouts" + + def request_params( + self, stream_state: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, **kwargs + ) -> MutableMapping[str, Any]: + params = super().request_params(stream_state=stream_state, next_page_token=next_page_token, **kwargs) + # If there is a next page token then we should only send pagination-related parameters. + if not next_page_token: + params["status"] = "any" + return params + + +class CustomCollections(IncrementalShopifyStreamWithDeletedEvents): + data_field = "custom_collections" + deleted_events_api_name = "Collection" + + +class SmartCollections(IncrementalShopifyStream): + data_field = "smart_collections" + + +class MetafieldSmartCollections(MetafieldShopifySubstream): + parent_stream_class = SmartCollections + + +class Collects(IncrementalShopifyStream): + """ + Collects stream does not support Incremental Refresh based on datetime fields, only `since_id` is supported: + https://shopify.dev/docs/admin-api/rest/reference/products/collect + + The Collect stream is the link between Products and Collections, if the Collection is created for Products, + the `collect` record is created, it's reasonable to Full Refresh all collects. As for Incremental refresh - + we would use the since_id specificaly for this stream. + """ + + data_field = "collects" + cursor_field = "id" + order_field = "id" + filter_field = "since_id" + + +class Collections(IncrementalShopifyGraphQlBulkStream): + bulk_query: Collection = Collection + + +class MetafieldCollections(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldCollection = MetafieldCollection + + +class BalanceTransactions(IncrementalShopifyStream): + + """ + PaymentsTransactions stream does not support Incremental Refresh based on datetime fields, only `since_id` is supported: + https://shopify.dev/api/admin-rest/2021-07/resources/transactions + """ + + data_field = "transactions" + cursor_field = "id" + order_field = "id" + filter_field = "since_id" + + def path(self, **kwargs) -> str: + return f"shopify_payments/balance/{self.data_field}.json" + + +class OrderRefunds(IncrementalShopifyNestedStream): + parent_stream_class = Orders + # override default cursor field + cursor_field = "created_at" + nested_entity = "refunds" + + +class OrderRisks(IncrementalShopifySubstream): + parent_stream_class = Orders + slice_key = "order_id" + data_field = "risks" + cursor_field = "id" + + def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: + order_id = stream_slice["order_id"] + return f"orders/{order_id}/{self.data_field}.json" + + +class Transactions(IncrementalShopifySubstream): + parent_stream_class = Orders + slice_key = "order_id" + data_field = "transactions" + cursor_field = "created_at" + + def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: + order_id = stream_slice["order_id"] + return f"orders/{order_id}/{self.data_field}.json" + + +class TransactionsGraphql(IncrementalShopifyGraphQlBulkStream): + bulk_query: Transaction = Transaction + cursor_field = "created_at" + + @property + def name(self) -> str: + # override default name. This stream is essentially the same as `Transactions` stream, but it's using GraphQL API, which does not include the user_id field + return "transactions" + + def get_json_schema(self) -> Mapping[str, Any]: + """ + This stream has the same schema as `Transactions` stream, except of: + - fields: [ `device_id, source_name, user_id, location_id` ] + + Specifically: + - `user_id` field requires `Shopify Plus` / be authorised via `Financialy Embedded App`. + - additional `read_users` scope is required https://shopify.dev/docs/api/usage/access-scopes#authenticated-access-scopes + """ + return ResourceSchemaLoader(package_name_from_class(Transactions)).get_schema("transactions") + + +class TenderTransactions(IncrementalShopifyStream): + data_field = "tender_transactions" + cursor_field = "processed_at" + filter_field = "processed_at_min" + + +class Pages(IncrementalShopifyStreamWithDeletedEvents): + data_field = "pages" + deleted_events_api_name = "Page" + + +class MetafieldPages(MetafieldShopifySubstream): + parent_stream_class = Pages + + +class PriceRules(IncrementalShopifyStreamWithDeletedEvents): + data_field = "price_rules" + deleted_events_api_name = "PriceRule" + + +class DiscountCodes(IncrementalShopifyGraphQlBulkStream): + bulk_query: DiscountCode = DiscountCode + + +class Locations(ShopifyStream): + """ + The location API does not support any form of filtering. + https://shopify.dev/api/admin-rest/2021-07/resources/location + + Therefore, only FULL_REFRESH mode is supported. + """ + + data_field = "locations" + + +class MetafieldLocations(IncrementalShopifyGraphQlBulkStream): + bulk_query: MetafieldLocation = MetafieldLocation + filter_field = None + + +class InventoryLevels(IncrementalShopifyGraphQlBulkStream): + bulk_query: InventoryLevel = InventoryLevel + + +class InventoryItems(IncrementalShopifyGraphQlBulkStream): + bulk_query: InventoryItem = InventoryItem + + +class FulfillmentOrders(IncrementalShopifyGraphQlBulkStream): + bulk_query: FulfillmentOrder = FulfillmentOrder + + +class Fulfillments(IncrementalShopifyNestedStream): + parent_stream_class = Orders + nested_entity = "fulfillments" + + +class Shop(ShopifyStream): + data_field = "shop" + + +class MetafieldShops(IncrementalShopifyStream): + data_field = "metafields" + + +class CustomerSavedSearch(IncrementalShopifyStream): + api_version = "2022-01" + cursor_field = "id" + order_field = "id" + data_field = "customer_saved_searches" + filter_field = "since_id" + + +class CustomerAddress(IncrementalShopifyGraphQlBulkStream): + parent_stream_class = Customers + bulk_query: CustomerAddresses = CustomerAddresses + cursor_field = "id" + + +class Countries(ShopifyStream): + data_field = "countries" diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/transform.py b/airbyte-integrations/connectors/source-shopify/source_shopify/transform.py index 87b1e82b3107..496e527b09e4 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/transform.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/transform.py @@ -41,6 +41,9 @@ def _get_json_types(value_type: Any) -> List[str]: type(None): [ "null", ], + # overflow, when we need to read nested entity from the parent record, + # that has been already transformed. + Decimal: ["number"], } return json_types.get(value_type) diff --git a/airbyte-integrations/connectors/source-shopify/source_shopify/utils.py b/airbyte-integrations/connectors/source-shopify/source_shopify/utils.py index 4eab2e65cd2f..46cb2c18b5f6 100644 --- a/airbyte-integrations/connectors/source-shopify/source_shopify/utils.py +++ b/airbyte-integrations/connectors/source-shopify/source_shopify/utils.py @@ -6,72 +6,11 @@ import enum from functools import wraps from time import sleep -from typing import Any, Dict, List, Mapping, Optional +from typing import Any, Callable, Dict, List, Mapping, Optional import requests - -SCOPES_MAPPING = { - "read_customers": [ - "Customers", - "MetafieldCustomers", - "CustomerSavedSearch", - "CustomerAddress", - ], - "read_orders": [ - "Orders", - "AbandonedCheckouts", - "TenderTransactions", - "Transactions", - "Fulfillments", - "OrderRefunds", - "OrderRisks", - "MetafieldOrders", - ], - "read_draft_orders": [ - "DraftOrders", - "MetafieldDraftOrders", - ], - "read_products": [ - "Products", - "ProductsGraphQl", - "MetafieldProducts", - "ProductImages", - "MetafieldProductImages", - "MetafieldProductVariants", - "CustomCollections", - "Collects", - "Collections", - "ProductVariants", - "MetafieldCollections", - "SmartCollections", - "MetafieldSmartCollections", - ], - "read_content": [ - "Pages", - "MetafieldPages", - ], - "read_price_rules": ["PriceRules"], - "read_discounts": ["DiscountCodes"], - "read_locations": [ - "Locations", - "MetafieldLocations", - ], - "read_inventory": [ - "InventoryItems", - "InventoryLevels", - ], - "read_merchant_managed_fulfillment_orders": ["FulfillmentOrders"], - "read_shopify_payments_payouts": [ - "BalanceTransactions", - "Disputes", - ], - "read_online_store_pages": [ - "Articles", - "MetafieldArticles", - "Blogs", - "MetafieldBlogs", - ], -} +from airbyte_cdk.utils import AirbyteTracedException +from airbyte_protocol.models import FailureType class ShopifyNonRetryableErrors: @@ -88,38 +27,38 @@ def __new__(self, stream: str) -> Mapping[str, Any]: } -class ShopifyAccessScopesError(Exception): +class ShopifyAccessScopesError(AirbyteTracedException): """Raises the error if authenticated user doesn't have access to verify the grantted scopes.""" help_url = "https://shopify.dev/docs/api/usage/access-scopes#authenticated-access-scopes" - def __init__(self, response): - super().__init__( - f"Reason: Scopes are not available, make sure you're using the correct `Shopify Store` name. Actual response: {response}. More info about: {self.help_url}" - ) + def __init__(self, response, **kwargs) -> None: + self.message = f"Reason: Scopes are not available, make sure you're using the correct `Shopify Store` name. Actual response: {response}. More info about: {self.help_url}" + super().__init__(internal_message=self.message, failure_type=FailureType.config_error, **kwargs) -class ShopifyBadJsonError(ShopifyAccessScopesError): +class ShopifyBadJsonError(AirbyteTracedException): """Raises the error when Shopify replies with broken json for `access_scopes` request""" - def __init__(self, message): - super().__init__(f"Reason: Bad JSON Response from the Shopify server. Details: {message}.") + def __init__(self, message, **kwargs) -> None: + self.message = f"Reason: Bad JSON Response from the Shopify server. Details: {message}." + super().__init__(internal_message=self.message, failure_type=FailureType.config_error, **kwargs) -class ShopifyConnectionError(ShopifyAccessScopesError): - """Raises the error when Shopify replies with broken connection error for `access_scopes` request""" +class ShopifyConnectionError(AirbyteTracedException): + """Raises the error when Shopify resources couldn't be accessed because of the ConnectionError occured (100-x)""" - def __init__(self, details): - super().__init__(f"Invalid `Shopify Store` name used or `host` couldn't be verified by Shopify. Details: {details}") + def __init__(self, details, **kwargs) -> None: + self.message = f"Invalid `Shopify Store` name used or `host` couldn't be verified by Shopify. Details: {details}" + super().__init__(internal_message=self.message, failure_type=FailureType.config_error, **kwargs) -class ShopifyWrongShopNameError(Exception): +class ShopifyWrongShopNameError(AirbyteTracedException): """Raises the error when `Shopify Store` name is incorrect or couldn't be verified by the Shopify""" - def __init__(self, url): - super().__init__( - f"Reason: The `Shopify Store` name is invalid or missing for `input configuration`, make sure it's valid. Details: {url}" - ) + def __init__(self, url, **kwargs) -> None: + self.message = f"The `Shopify Store` name is invalid or missing for `input configuration`, make sure it's valid. Details: {url}" + super().__init__(internal_message=self.message, failure_type=FailureType.config_error, **kwargs) class UnrecognisedApiType(Exception): @@ -175,7 +114,7 @@ def _convert_load_to_time(load: Optional[float], threshold: float) -> float: return wait_time @staticmethod - def get_rest_api_wait_time(*args, threshold: float = 0.9, rate_limit_header: str = "X-Shopify-Shop-Api-Call-Limit"): + def get_rest_api_wait_time(*args, threshold: float = 0.9, rate_limit_header: str = "X-Shopify-Shop-Api-Call-Limit") -> float: """ To avoid reaching Shopify REST API Rate Limits, use the "X-Shopify-Shop-Api-Call-Limit" header value, to determine the current rate limits and load and handle wait_time based on load %. @@ -206,7 +145,7 @@ def get_rest_api_wait_time(*args, threshold: float = 0.9, rate_limit_header: str return wait_time @staticmethod - def get_graphql_api_wait_time(*args, threshold: float = 0.9): + def get_graphql_api_wait_time(*args, threshold: float = 0.9) -> float: """ To avoid reaching Shopify Graphql API Rate Limits, use the extensions dict in the response. @@ -254,7 +193,7 @@ def get_graphql_api_wait_time(*args, threshold: float = 0.9): return wait_time @staticmethod - def wait_time(wait_time: float): + def wait_time(wait_time: float) -> None: return sleep(wait_time) @staticmethod @@ -262,15 +201,15 @@ def balance_rate_limit( threshold: float = 0.9, rate_limit_header: str = "X-Shopify-Shop-Api-Call-Limit", api_type: ApiTypeEnum = ApiTypeEnum.rest.value, - ): + ) -> Callable[..., Any]: """ The decorator function. Adjust `threshold`, `rate_limit_header` and `api_type` if needed. """ - def decorator(func): + def decorator(func) -> Callable[..., Any]: @wraps(func) - def wrapper_balance_rate_limit(*args, **kwargs): + def wrapper_balance_rate_limit(*args, **kwargs) -> Any: if api_type == ApiTypeEnum.rest.value: ShopifyRateLimiter.wait_time( ShopifyRateLimiter.get_rest_api_wait_time(*args, threshold=threshold, rate_limit_header=rate_limit_header) @@ -310,7 +249,7 @@ def stream_state_to_tmp(*args, state_object: Dict = cached_state, **kwargs) -> D # Map the input *args, the sequece should be always keeped up to the input function # change the mapping if needed stream: object = args[0] # the self instance of the stream - current_stream_state: Dict = kwargs["stream_state"] or {} + current_stream_state: Dict = kwargs.get("stream_state") or {} # get the current tmp_state_value tmp_stream_state_value = state_object.get(stream.name, {}).get(stream.cursor_field, "") # Save the curent stream value for current sync, if present. @@ -324,9 +263,9 @@ def stream_state_to_tmp(*args, state_object: Dict = cached_state, **kwargs) -> D return state_object - def cache_stream_state(func): + def cache_stream_state(func) -> Callable[..., Any]: @wraps(func) - def decorator(*args, **kwargs): + def decorator(*args, **kwargs) -> Any: EagerlyCachedStreamState.stream_state_to_tmp(*args, **kwargs) return func(*args, **kwargs) diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/conftest.py b/airbyte-integrations/connectors/source-shopify/unit_tests/conftest.py index e8e250524894..6b7d9e7cb0e4 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/conftest.py @@ -3,6 +3,8 @@ # import os +from json import dumps +from typing import Any import pytest import requests @@ -26,6 +28,7 @@ def basic_config(): def auth_config(): return { "shop": "test_shop", + "start_date": "2023-01-01", "credentials": {"auth_method": "api_password", "api_password": "api_password"}, "authenticator": None, } @@ -55,3 +58,800 @@ def response_with_bad_json(): response.status_code = 200 response._content = bad_json_str.encode("utf-8") return response + + +@pytest.fixture +def bulk_error() -> dict[str, Any]: + return { + "data": { + "bulkOperationRunQuery": { + "bulkOperation": None, + "userErrors": [ + { + "field": "some_field", + "message": "something wrong with the requested field.", + }, + ], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_unknown_error() -> dict[str, Any]: + return { + "errors": [ + { + "message": "something wrong with the job", + }, + ], + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_no_errors() -> dict[str, Any]: + return {} + + +@pytest.fixture +def bulk_error_with_concurrent_job(): + return { + "data": { + "bulkOperationRunQuery": { + "bulkOperation": None, + "userErrors": [ + { + "field": None, + "message": "", + }, + { + "field": None, + "message": "A bulk query operation for this app and shop is already in progress: gid://shopify/BulkOperation/4046676525245.", + }, + ], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_successful_response(): + return { + "data": { + "bulkOperationRunQuery": { + "bulkOperation": { + "id": "gid://shopify/BulkOperation/4046733967549", + "status": "CREATED", + }, + "userErrors": [], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_successful_response_with_errors(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4046733967549", + "status": "RUNNING", + }, + "bulkOperationRunQuery": { + "userErrors": [ + { + "message": "something wrong with the job", + }, + ], + }, + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_successful_response_with_no_id(): + return { + "data": { + "bulkOperationRunQuery": { + "bulkOperation": { + "status": "RUNNING", + }, + "userErrors": [], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_successful_completed_response(): + return { + "data": { + "bulkOperationRunQuery": { + "bulkOperation": { + "id": "gid://shopify/BulkOperation/4046733967549", + "status": "CREATED", + "url": '"https://some_url/response-content-disposition=attachment;+filename="bulk-123456789.jsonl";+filename*=UTF-8' + 'bulk-4047416819901.jsonl&response-content-type=application/jsonl"', + }, + "userErrors": [], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_created_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4046733967549", + "status": "CREATED", + "userErrors": [], + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 10, + "actualQueryCost": 10, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 990, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_completed_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": "COMPLETED", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": 'https://some_url?response-content-disposition=attachment;+filename="bulk-123456789.jsonl";+filename*=UTF-8' + "bulk-123456789.jsonl&response-content-type=application/jsonl", + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_failed_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": "FAILED", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_timeout_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": "TIMEOUT", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_running_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": "RUNNING", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_running_response_without_id(): + return { + "data": { + "node": { + # "id": "gid://shopify/BulkOperation/4047052112061", + "status": "RUNNING", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_access_denied_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": "ACCESS_DENIED", + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def bulk_job_unknown_status_response(): + return { + "data": { + "node": { + "id": "gid://shopify/BulkOperation/4047052112061", + "status": None, + "errorCode": None, + "objectCount": "0", + "fileSize": None, + "url": None, + "partialDataUrl": None, + } + }, + "extensions": { + "cost": { + "requestedQueryCost": 1, + "actualQueryCost": 1, + "throttleStatus": { + "maximumAvailable": 1000.0, + "currentlyAvailable": 999, + "restoreRate": 50.0, + }, + } + }, + } + + +@pytest.fixture +def metafield_jsonl_content_example(): + return ( + dumps( + { + "__typename": "Metafield", + "id": "gid://shopify/Metafield/123", + "__parentId": "gid://shopify/Order/1234567", + "createdAt": "2023-01-01T01:01:01Z", + "updatedAt": "2023-01-01T01:01:01Z", + } + ) + + "\n" + ) + + +@pytest.fixture +def filfillment_order_jsonl_content_example(): + return """{"__typename":"Order","id":"gid:\/\/shopify\/Order\/1"} +{"__typename":"FulfillmentOrder","id":"gid:\/\/shopify\/FulfillmentOrder\/2","assignedLocation":{"address1":"Test","address2":null,"city":"Test","countryCode":"Test","name":"Test","phone":"","province":null,"zip":"00000","location":{"locationId":"gid:\/\/shopify\/Location\/123"}},"destination":{"id":"gid:\/\/shopify\/Destination\/777"},"deliveryMethod":{"id":"gid:\/\/shopify\/DeliveryMethod\/123","methodType":"SHIPPING","minDeliveryDateTime":"2023-04-13T12:00:00Z","maxDeliveryDateTime":"2023-04-13T12:00:00Z"},"fulfillAt":"2023-04-13T12:00:00Z","fulfillBy":null,"internationalDuties":null,"fulfillmentHolds":[{}],"createdAt":"2023-04-13T12:09:45Z","updatedAt":"2023-04-13T12:09:46Z","requestStatus":"UNSUBMITTED","status":"CLOSED","supportedActions":[{}],"__parentId":"gid:\/\/shopify\/Order\/1"} +{"__typename":"FulfillmentOrderLineItem","id":"gid:\/\/shopify\/FulfillmentOrderLineItem\/3","inventoryItemId":"gid:\/\/shopify\/InventoryItem\/33","lineItem":{"lineItemId":"gid:\/\/shopify\/LineItem\/31","fulfillableQuantity":0,"quantity":1,"variant":{"variantId":"gid:\/\/shopify\/ProductVariant\/333"}},"__parentId":"gid:\/\/shopify\/FulfillmentOrder\/2"} +{"__typename":"FulfillmentOrderMerchantRequest","id":"gid:\/\/shopify\/FulfillmentOrderMerchantRequest\/333","message":null,"kind":"FULFILLMENT_REQUEST","requestOptions":{"notify_customer":true},"__parentId":"gid:\/\/shopify\/FulfillmentOrder\/2"}\n""" + + +@pytest.fixture +def inventory_items_jsonl_content_example(): + return """{"__typename":"InventoryItem","id":"gid:\/\/shopify\/InventoryItem\/44871665713341","unitCost":null,"countryCodeOfOrigin":null,"harmonizedSystemCode":null,"provinceCodeOfOrigin":null,"updatedAt":"2023-04-14T10:29:27Z","createdAt":"2023-04-14T10:29:27Z","sku":"","tracked":true,"requiresShipping":false} +{"__typename":"InventoryItem","id":"gid:\/\/shopify\/InventoryItem\/45419395743933","unitCost":{"cost":"29.0"},"countryCodeOfOrigin":"UA","harmonizedSystemCode":"330510","provinceCodeOfOrigin":null,"updatedAt":"2023-12-11T10:37:41Z","createdAt":"2023-12-11T10:37:41Z","sku":"123","tracked":true,"requiresShipping":true}\n""" + + +@pytest.fixture +def customer_address_jsonl_content_example(): + return """{"__typename":"Customer","id":"gid:\/\/shopify\/Customer\/123","defaultAddress":{"id":"gid:\/\/shopify\/MailingAddress\/123?model_name=CustomerAddress"},"addresses":[{"address1":"My Best Accent","address2":"","city":"Fair Lawn","country":"United States","countryCode":"US","company":"Test Company","firstName":"New Test","id":"gid:\/\/shopify\/MailingAddress\/123?model_name=CustomerAddress","lastName":"Customer","name":"New Test Customer","phone":"","province":"New Jersey","provinceCode":"NJ","zip":"07410"}],"updatedAt":"2023-04-24T13:53:48Z"} +{"__typename":"Customer","id":"gid:\/\/shopify\/Customer\/456","defaultAddress":{"id":"gid:\/\/shopify\/MailingAddress\/456?model_name=CustomerAddress"},"addresses":[{"address1":null,"address2":null,"city":null,"country":null,"countryCode":null,"company":null,"firstName":"MArcos","id":"gid:\/\/shopify\/MailingAddress\/456?model_name=CustomerAddress","lastName":"Millnitz","name":"MArcos Millnitz","phone":null,"province":null,"provinceCode":null,"zip":null}],"updatedAt":"2023-07-11T20:07:45Z"}\n""" + + +@pytest.fixture +def inventory_levels_jsonl_content_example(): + return """{"__typename":"Location","id":"gid:\/\/shopify\/Location\/63590301885"} +{"__typename":"InventoryLevel","id":"gid:\/\/shopify\/InventoryLevel\/97912455357?inventory_item_id=42185200631997","available":15,"item":{"inventory_item_id":"gid:\/\/shopify\/InventoryItem\/42185200631997"},"updatedAt":"2023-04-13T12:00:55Z","__parentId":"gid:\/\/shopify\/Location\/63590301885"} +{"__typename":"InventoryLevel","id":"gid:\/\/shopify\/InventoryLevel\/97912455357?inventory_item_id=42185218719933","available":8,"item":{"inventory_item_id":"gid:\/\/shopify\/InventoryItem\/42185218719933"},"updatedAt":"2023-04-13T12:09:45Z","__parentId":"gid:\/\/shopify\/Location\/63590301885"}\n""" + + +@pytest.fixture +def discount_codes_jsonl_content_example(): + return """{"__typename":"DiscountCodeNode","id":"gid:\/\/shopify\/DiscountCodeNode\/945205379261","codeDiscount":{"updatedAt":"2023-12-07T11:40:44Z","createdAt":"2021-07-08T12:40:37Z","summary":"Free shipping on all products • Minimum purchase of $1.00 • For all countries","discountType":"SHIPPING"}} +{"__typename":"DiscountRedeemCode","usageCount":0,"code":"TEST","id":"gid:\/\/shopify\/DiscountRedeemCode\/11545139282109","__parentId":"gid:\/\/shopify\/DiscountCodeNode\/945205379261"} +{"__typename":"DiscountRedeemCode","usageCount":0,"code":"TEST2","id":"gid:\/\/shopify\/DiscountRedeemCode\/13175793582269","__parentId":"gid:\/\/shopify\/DiscountCodeNode\/945205379261"}\n""" + + +@pytest.fixture +def collections_jsonl_content_example(): + return """{"__typename":"Collection","id":"gid:\/\/shopify\/Collection\/270889287869","handle":"frontpage","title":"Home page","updatedAt":"2023-09-05T14:06:59Z","bodyHtml":"updated_mon_24.04.2023","sortOrder":"BEST_SELLING","templateSuffix":"","productsCount":1} +{"__typename":"CollectionPublication","publishedAt":"2021-06-23T01:00:25Z","__parentId":"gid:\/\/shopify\/Collection\/270889287869"} +{"__typename":"CollectionPublication","publishedAt":"2021-08-18T09:39:34Z","__parentId":"gid:\/\/shopify\/Collection\/270889287869"} +{"__typename":"CollectionPublication","publishedAt":"2023-04-20T11:12:24Z","__parentId":"gid:\/\/shopify\/Collection\/270889287869"} +{"__typename":"Collection","id":"gid:\/\/shopify\/Collection\/273278566589","handle":"test-collection","title":"Test Collection","updatedAt":"2023-09-05T14:12:04Z","bodyHtml":"updated_mon_24.04.2023","sortOrder":"BEST_SELLING","templateSuffix":"","productsCount":26} +{"__typename":"CollectionPublication","publishedAt":"2021-07-19T14:02:54Z","__parentId":"gid:\/\/shopify\/Collection\/273278566589"} +{"__typename":"CollectionPublication","publishedAt":"2021-08-18T09:39:34Z","__parentId":"gid:\/\/shopify\/Collection\/273278566589"} +{"__typename":"CollectionPublication","publishedAt":"2023-04-20T11:12:24Z","__parentId":"gid:\/\/shopify\/Collection\/273278566589"}\n""" + + +@pytest.fixture +def transactions_jsonl_content_example(): + return ( + dumps( + { + "__typename": "Order", + "id": "gid://shopify/Order/1", + "currency": "USD", + "transactions": [ + { + "id": "gid://shopify/OrderTransaction/1", + "errorCode": None, + "parentTransaction": {"parentId": "gid://shopify/ParentOrderTransaction/0"}, + "test": True, + "kind": "SALE", + "amount": "102.00", + "receipt": '{"paid_amount":"102.00"}', + "gateway": "test", + "authorization": "1234", + "createdAt": "2030-07-02T07:51:49Z", + "status": "SUCCESS", + "processedAt": "2030-07-02T07:51:49Z", + "totalUnsettledSet": { + "presentmentMoney": {"amount": "0.0", "currency": "USD"}, + "shopMoney": {"amount": "0.0", "currency": "USD"}, + }, + "paymentId": "some_payment_id.1", + "paymentDetails": { + "avsResultCode": None, + "cvvResultCode": None, + "creditCardBin": "1", + "creditCardCompany": "Test", + "creditCardNumber": "•••• •••• •••• 1", + "creditCardName": "Test Gateway", + "creditCardWallet": None, + "creditCardExpirationYear": 2023, + "creditCardExpirationMonth": 11, + }, + } + ], + } + ) + + "\n" + ) + + +@pytest.fixture +def metafield_parse_response_expected_result(): + return { + "id": 123, + "admin_graphql_api_id": "gid://shopify/Metafield/123", + "owner_id": 1234567, + "owner_resource": "order", + "shop_url": "test_shop", + "created_at": "2023-01-01T01:01:01+00:00", + "updated_at": "2023-01-01T01:01:01+00:00", + } + + +@pytest.fixture +def fulfillment_orders_response_expected_result(): + return { + "id": 2, + "assigned_location": { + "address1": "Test", + "address2": None, + "city": "Test", + "country_code": "Test", + "name": "Test", + "phone": "", + "province": None, + "zip": "00000", + "location_id": 123, + }, + "destination": { + "id": 777, + }, + "delivery_method": { + "id": 123, + "method_type": "SHIPPING", + "min_delivery_date_time": "2023-04-13T12:00:00+00:00", + "max_delivery_date_time": "2023-04-13T12:00:00+00:00", + }, + "fulfill_at": "2023-04-13T12:00:00+00:00", + "fulfill_by": None, + "international_duties": None, + "fulfillment_holds": [], + "created_at": "2023-04-13T12:09:45+00:00", + "updated_at": "2023-04-13T12:09:46+00:00", + "request_status": "UNSUBMITTED", + "status": "CLOSED", + "supported_actions": [], + "shop_id": None, + "order_id": 1, + "assigned_location_id": 123, + "line_items": [ + { + "id": 3, + "inventory_item_id": 33, + "shop_id": None, + "fulfillment_order_id": 2, + "quantity": 1, + "line_item_id": 31, + "fulfillable_quantity": 0, + "variant_id": 333, + }, + ], + "merchant_requests": [{"id": 333, "message": None, "kind": "FULFILLMENT_REQUEST", "request_options": {"notify_customer": True}}], + "admin_graphql_api_id": "gid://shopify/FulfillmentOrder/2", + "shop_url": "test_shop", + } + + +@pytest.fixture +def inventory_items_response_expected_result(): + return [ + { + "id": 44871665713341, + "country_code_of_origin": None, + "harmonized_system_code": None, + "province_code_of_origin": None, + "updated_at": "2023-04-14T10:29:27+00:00", + "created_at": "2023-04-14T10:29:27+00:00", + "sku": "", + "tracked": True, + "requires_shipping": False, + "admin_graphql_api_id": "gid://shopify/InventoryItem/44871665713341", + "cost": None, + "country_harmonized_system_codes": [], + "shop_url": "test_shop", + }, + { + "id": 45419395743933, + "country_code_of_origin": "UA", + "harmonized_system_code": "330510", + "province_code_of_origin": None, + "updated_at": "2023-12-11T10:37:41+00:00", + "created_at": "2023-12-11T10:37:41+00:00", + "sku": "123", + "tracked": True, + "requires_shipping": True, + "admin_graphql_api_id": "gid://shopify/InventoryItem/45419395743933", + "cost": 29.0, + "country_harmonized_system_codes": [], + "shop_url": "test_shop", + }, + ] + + +@pytest.fixture +def customer_address_parse_response_expected_result(): + return [ + { + "address1": "My Best Accent", + "address2": "", + "city": "Fair Lawn", + "country": "United States", + "country_code": "US", + "company": "Test Company", + "first_name": "New Test", + "id": 123, + "last_name": "Customer", + "name": "New Test Customer", + "phone": "", + "province": "New Jersey", + "province_code": "NJ", + "zip": "07410", + "customer_id": 123, + "country_name": "United States", + "default": True, + "updated_at": "2023-04-24T13:53:48+00:00", + "shop_url": "test_shop" + }, + { + "address1": None, + "address2": None, + "city": None, + "country": None, + "country_code": None, + "company": None, + "first_name": "MArcos", + "id": 456, + "last_name": "Millnitz", + "name": "MArcos Millnitz", + "phone": None, + "province": None, + "province_code": None, + "zip": None, + "customer_id": 456, + "country_name": None, + "default": True, + "updated_at": "2023-07-11T20:07:45+00:00", + "shop_url": "test_shop" + } +] + + +@pytest.fixture +def inventory_levels_response_expected_result(): + return [ + { + "id": "63590301885|42185200631997", + "available": 15, + "updated_at": "2023-04-13T12:00:55+00:00", + "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185200631997", + "inventory_item_id": 42185200631997, + "location_id": 63590301885, + "shop_url": "test_shop", + }, + { + "id": "63590301885|42185218719933", + "available": 8, + "updated_at": "2023-04-13T12:09:45+00:00", + "admin_graphql_api_id": "gid://shopify/InventoryLevel/97912455357?inventory_item_id=42185218719933", + "inventory_item_id": 42185218719933, + "location_id": 63590301885, + "shop_url": "test_shop", + }, + ] + + +@pytest.fixture +def discount_codes_response_expected_result(): + return [ + { + "usage_count": 0, + "code": "TEST", + "id": 11545139282109, + "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/11545139282109", + "price_rule_id": 945205379261, + "updated_at": "2023-12-07T11:40:44+00:00", + "created_at": "2021-07-08T12:40:37+00:00", + "summary": "Free shipping on all products • Minimum purchase of $1.00 • For all countries", + "discount_type": "SHIPPING", + "shop_url": "test_shop", + }, + { + "usage_count": 0, + "code": "TEST2", + "id": 13175793582269, + "admin_graphql_api_id": "gid://shopify/DiscountRedeemCode/13175793582269", + "price_rule_id": 945205379261, + "updated_at": "2023-12-07T11:40:44+00:00", + "created_at": "2021-07-08T12:40:37+00:00", + "summary": "Free shipping on all products • Minimum purchase of $1.00 • For all countries", + "discount_type": "SHIPPING", + "shop_url": "test_shop", + }, + ] + + +@pytest.fixture +def collections_response_expected_result(): + return [ + { + "id": 270889287869, + "handle": "frontpage", + "title": "Home page", + "updated_at": "2023-09-05T14:06:59+00:00", + "body_html": "updated_mon_24.04.2023", + "sort_order": "BEST_SELLING", + "template_suffix": "", + "products_count": 1, + "admin_graphql_api_id": "gid://shopify/Collection/270889287869", + "published_at": "2021-06-23T01:00:25+00:00", + "shop_url": "test_shop", + }, + { + "id": 273278566589, + "handle": "test-collection", + "title": "Test Collection", + "updated_at": "2023-09-05T14:12:04+00:00", + "body_html": "updated_mon_24.04.2023", + "sort_order": "BEST_SELLING", + "template_suffix": "", + "products_count": 26, + "admin_graphql_api_id": "gid://shopify/Collection/273278566589", + "published_at": "2021-07-19T14:02:54+00:00", + "shop_url": "test_shop", + }, + ] + + +@pytest.fixture +def transactions_response_expected_result(): + return { + "id": 1, + "error_code": None, + "test": True, + "kind": "SALE", + "amount": 102.0, + "receipt": '{"paid_amount":"102.00"}', + "gateway": "test", + "authorization": "1234", + "created_at": "2030-07-02T07:51:49+00:00", + "status": "SUCCESS", + "processed_at": "2030-07-02T07:51:49+00:00", + "total_unsettled_set": {"presentment_money": {"amount": 0.0, "currency": "USD"}, "shop_money": {"amount": 0.0, "currency": "USD"}}, + "payment_id": "some_payment_id.1", + "payment_details": { + "avs_result_code": None, + "cvv_result_code": None, + "credit_card_bin": "1", + "credit_card_company": "Test", + "credit_card_number": "•••• •••• •••• 1", + "credit_card_name": "Test Gateway", + "credit_card_wallet": None, + "credit_card_expiration_year": 2023, + "credit_card_expiration_month": 11, + }, + "order_id": 1, + "currency": "USD", + "admin_graphql_api_id": "gid://shopify/OrderTransaction/1", + "parent_id": 0, + "shop_url": "test_shop", + } diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_job.py b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_job.py new file mode 100644 index 000000000000..fa5d50cd0bee --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_job.py @@ -0,0 +1,265 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest +import requests +from source_shopify.shopify_graphql.bulk.exceptions import ShopifyBulkExceptions +from source_shopify.shopify_graphql.bulk.job import ShopifyBulkStatus +from source_shopify.streams.streams import ( + Collections, + CustomerAddress, + DiscountCodes, + FulfillmentOrders, + InventoryItems, + InventoryLevels, + MetafieldOrders, + TransactionsGraphql, +) + + +@pytest.mark.parametrize( + "bulk_job_response, expected_len", + [ + ("bulk_error", 1), + ("bulk_unknown_error", 1), + ("bulk_no_errors", 0), + ], +) +def test_check_for_errors(request, requests_mock, bulk_job_response, expected_len, auth_config) -> None: + stream = MetafieldOrders(auth_config) + requests_mock.get(stream.job_manager.base_url, json=request.getfixturevalue(bulk_job_response)) + test_response = requests.get(stream.job_manager.base_url) + test_errors = stream.job_manager.job_check_for_errors(test_response) + assert len(test_errors) == expected_len + + +def test_get_errors_from_response_invalid_response(auth_config) -> None: + expected = "Couldn't check the `response` for `errors`" + stream = MetafieldOrders(auth_config) + response = requests.Response() + response.status_code = 404 + response.url = "https://example.com/invalid" + with pytest.raises(ShopifyBulkExceptions.BulkJobBadResponse) as error: + stream.job_manager.job_check_for_errors(response) + assert expected in repr(error.value) + + +@pytest.mark.parametrize( + "bulk_job_response, expected", + [ + ("bulk_error_with_concurrent_job", True), + ("bulk_successful_response", False), + ("bulk_error", False), + ], +) +def test_has_running_concurrent_job(request, requests_mock, bulk_job_response, auth_config, expected) -> None: + stream = MetafieldOrders(auth_config) + requests_mock.get(stream.job_manager.base_url, json=request.getfixturevalue(bulk_job_response)) + test_response = requests.get(stream.job_manager.base_url) + test_errors = stream.job_manager.job_check_for_errors(test_response) + assert stream.job_manager.has_running_concurrent_job(test_errors) == expected + + +@pytest.mark.parametrize( + "bulk_job_response, expected", + [ + ("bulk_successful_response", "gid://shopify/BulkOperation/4046733967549"), + ("bulk_error", None), + ("bulk_successful_response_with_no_id", None), + ], +) +def test_job_get_id(request, requests_mock, bulk_job_response, auth_config, expected) -> None: + stream = MetafieldOrders(auth_config) + requests_mock.get(stream.job_manager.base_url, json=request.getfixturevalue(bulk_job_response)) + test_response = requests.get(stream.job_manager.base_url) + assert stream.job_manager.job_get_id(test_response) == expected + + +def test_job_state_completed(auth_config) -> None: + stream = MetafieldOrders(auth_config) + stream.job_manager.job_state = ShopifyBulkStatus.COMPLETED.value + assert stream.job_manager.job_completed() == True + + +@pytest.mark.parametrize( + "bulk_job_response, concurrent_max_retry, error_type, expected", + [ + # method should return this response fixture, once retried. + ("bulk_successful_completed_response", 2, None, "gid://shopify/BulkOperation/4046733967549"), + # method should raise AirbyteTracebackException, because the concurrent BULK Job is in progress + ( + "bulk_error_with_concurrent_job", + 1, + ShopifyBulkExceptions.BulkJobConcurrentError, + "The BULK Job couldn't be created at this time, since another job is running", + ), + ], + ids=[ + "regular concurrent request", + "max atttempt reached", + ] +) +def test_job_retry_on_concurrency(request, requests_mock, bulk_job_response, concurrent_max_retry, error_type, auth_config, expected) -> None: + stream = MetafieldOrders(auth_config) + # patching concurent settings + stream.job_manager.concurrent_max_retry = concurrent_max_retry + stream.job_manager.concurrent_interval_sec = 1 + requests_mock.get(stream.job_manager.base_url, json=request.getfixturevalue(bulk_job_response)) + if error_type: + with pytest.raises(error_type) as error: + stream.job_manager.job_retry_on_concurrency(requests.get(stream.job_manager.base_url).request) + assert expected in repr(error.value) + else: + result = stream.job_manager.job_retry_on_concurrency(requests.get(stream.job_manager.base_url).request) + assert stream.job_manager.job_get_id(result) == expected + + + +@pytest.mark.parametrize( + "job_response, error_type, patch_healthcheck, expected", + [ + ( + "bulk_job_completed_response", + None, + False, + "bulk-123456789.jsonl", + ), + ("bulk_job_failed_response", ShopifyBulkExceptions.BulkJobFailed, False, "exited with FAILED"), + ("bulk_job_timeout_response", ShopifyBulkExceptions.BulkJobTimout, False, "exited with TIMEOUT"), + ("bulk_job_access_denied_response", ShopifyBulkExceptions.BulkJobAccessDenied, False, "exited with ACCESS_DENIED"), + ("bulk_successful_response_with_errors", ShopifyBulkExceptions.BulkJobUnknownError, True, "Could not validate the status of the BULK Job"), + ], + ids=[ + "completed", + "failed", + "timeout", + "access_denied", + "success with errors (edge)", + ], +) +def test_job_check(mocker, request, requests_mock, job_response, auth_config, error_type, patch_healthcheck, expected) -> None: + stream = MetafieldOrders(auth_config) + # modify the sleep time for the test + stream.job_manager.concurrent_max_retry = 1 + stream.job_manager.concurrent_interval_sec = 1 + stream.job_manager.job_check_interval_sec = 1 + # get job_id from FIXTURE + job_id = request.getfixturevalue(job_response).get("data", {}).get("node", {}).get("id") + # patching the method to get the right ID checks + if job_id: + mocker.patch("source_shopify.shopify_graphql.bulk.job.ShopifyBulkManager.job_get_id", value=job_id) + if patch_healthcheck: + mocker.patch("source_shopify.shopify_graphql.bulk.job.ShopifyBulkManager.job_healthcheck", value=job_response) + # mocking the response for STATUS CHECKS + requests_mock.post(stream.job_manager.base_url, json=request.getfixturevalue(job_response)) + test_job_status_response = requests.post(stream.job_manager.base_url) + job_result_url = test_job_status_response.json().get("data", {}).get("node", {}).get("url") + if error_type: + with pytest.raises(error_type) as error: + stream.job_manager.job_check(test_job_status_response) + assert expected in repr(error.value) + else: + if job_result_url: + # mocking the nested request call to retrieve the data from result URL + requests_mock.get(job_result_url, json=request.getfixturevalue(job_response)) + result = stream.job_manager.job_check(test_job_status_response) + assert expected == result + + +@pytest.mark.parametrize( + "job_response, expected", + [ + ("bulk_job_created_response", ShopifyBulkStatus.CREATED.value), + ("bulk_job_running_response", ShopifyBulkStatus.RUNNING.value), + ("bulk_job_running_response_without_id", ShopifyBulkStatus.RUNNING.value), + ], + ids=[ + "created", + "running", + "running_no_id (edge)", + ], +) +def test_job_check_with_running_scenario(request, requests_mock, job_response, auth_config, expected) -> None: + stream = MetafieldOrders(auth_config) + # modify the sleep time for the test + stream.job_manager.job_check_interval_sec = 0 + # get job_id from FIXTURE + job_id = request.getfixturevalue(job_response).get("data", {}).get("node", {}).get("id") + # mocking the response for STATUS CHECKS + requests_mock.post(stream.job_manager.base_url, json=request.getfixturevalue(job_response)) + test_job_status_response = requests.post(stream.job_manager.base_url) + job_result_url = test_job_status_response.json().get("data", {}).get("node", {}).get("url") + # test the state of the job isn't assigned + assert stream.job_manager.job_state == None + + # mocking the nested request call to retrieve the data from result URL + stream.job_manager.job_id = job_id + requests_mock.get(job_result_url, json=request.getfixturevalue(job_response)) + + # calling the sceario processing + stream.job_manager.job_track_running() + assert stream.job_manager.job_state == expected + + + +def test_job_read_file_invalid_filename(mocker, auth_config) -> None: + stream = MetafieldOrders(auth_config) + expected = "An error occured while producing records from BULK Job result" + # patching the method to get the filename + mocker.patch("source_shopify.shopify_graphql.bulk.record.ShopifyBulkRecord.produce_records", side_effect=Exception) + with pytest.raises(ShopifyBulkExceptions.BulkRecordProduceError) as error: + list(stream.record_producer.read_file("test.jsonl")) + + assert expected in repr(error.value) + + +@pytest.mark.parametrize( + "stream, json_content_example, expected", + [ + (CustomerAddress, "customer_address_jsonl_content_example", "customer_address_parse_response_expected_result"), + (MetafieldOrders, "metafield_jsonl_content_example", "metafield_parse_response_expected_result"), + (FulfillmentOrders, "filfillment_order_jsonl_content_example", "fulfillment_orders_response_expected_result"), + (DiscountCodes, "discount_codes_jsonl_content_example", "discount_codes_response_expected_result"), + (Collections, "collections_jsonl_content_example", "collections_response_expected_result"), + (TransactionsGraphql, "transactions_jsonl_content_example", "transactions_response_expected_result"), + (InventoryItems, "inventory_items_jsonl_content_example", "inventory_items_response_expected_result"), + (InventoryLevels, "inventory_levels_jsonl_content_example", "inventory_levels_response_expected_result"), + ], + ids=[ + "CustomerAddress", + "MetafieldOrders", + "FulfillmentOrders", + "DiscountCodes", + "Collections", + "TransactionsGraphql", + "InventoryItems", + "InventoryLevels", + ], +) +def test_bulk_stream_parse_response( + request, + requests_mock, + bulk_job_completed_response, + stream, + json_content_example, + expected, + auth_config, +) -> None: + stream = stream(auth_config) + # get the mocked job_result_url + test_result_url = bulk_job_completed_response.get("data").get("node").get("url") + # mocking the result url with jsonl content + requests_mock.post(stream.job_manager.base_url, json=bulk_job_completed_response) + # getting mock response + test_bulk_response: requests.Response = requests.post(stream.job_manager.base_url) + # mocking nested api call to get data from result url + requests_mock.get(test_result_url, text=request.getfixturevalue(json_content_example)) + # parsing result from completed job + test_records = list(stream.parse_response(test_bulk_response)) + expected_result = request.getfixturevalue(expected) + if isinstance(expected_result, dict): + assert test_records == [expected_result] + elif isinstance(expected_result, list): + assert test_records == expected_result diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_query.py b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_query.py new file mode 100644 index 000000000000..9b9bb8da0873 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_query.py @@ -0,0 +1,209 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest +from graphql_query import Argument, Field, Operation, Query +from source_shopify.shopify_graphql.bulk.query import ( + InventoryLevel, + MetafieldCustomer, + MetafieldProductImage, + ShopifyBulkQuery, + ShopifyBulkTemplates, +) + + +def test_query_status() -> None: + expected = """query { + node(id: "gid://shopify/BulkOperation/4047052112061") { + ... on BulkOperation { + id + status + errorCode + objectCount + fileSize + url + partialDataUrl + } + } + }""" + + input_job_id = "gid://shopify/BulkOperation/4047052112061" + template = ShopifyBulkTemplates.status(input_job_id) + assert repr(template) == repr(expected) + + +def test_bulk_query_prepare() -> None: + expected = '''mutation { + bulkOperationRunQuery( + query: """ + {some_query} + """ + ) { + bulkOperation { + id + status + } + userErrors { + field + message + } + } + }''' + + input_query_from_slice = "{some_query}" + template = ShopifyBulkTemplates.prepare(input_query_from_slice) + assert repr(template) == repr(expected) + + +@pytest.mark.parametrize( + "query_name, fields, filter_field, start, end, expected", + [ + ( + "test_root", + ["test_field1", "test_field2"], + "updated_at", + "2023-01-01", + "2023-01-02", + Query( + name='test_root', + arguments=[ + Argument(name="query", value=f"\"updated_at:>'2023-01-01' AND updated_at:<='2023-01-02'\""), + ], + fields=[Field(name='edges', fields=[Field(name='node', fields=["test_field1", "test_field2"])])] + ) + ) + ], + ids=["simple query with filter and sort"] +) +def test_base_build_query(query_name, fields, filter_field, start, end, expected) -> None: + """ + Expected result rendered: + ''' + { + test_root(query: "updated_at:>'2023-01-01' AND updated_at:<='2023-01-02'") { + edges { + node { + id + test_field1 + test_field2 + } + } + } + ''' + """ + + + builder = ShopifyBulkQuery(shop_id=0) + filter_query = f"{filter_field}:>'{start}' AND {filter_field}:<='{end}'" + built_query = builder.build(query_name, fields, filter_query) + assert expected.render() == built_query.render() + + +@pytest.mark.parametrize( + "query_class, filter_field, start, end, expected", + [ + ( + MetafieldCustomer, + "updated_at", + "2023-01-01", + "2023-01-02", + Operation( + type="", + queries=[ + Query( + name='customers', + arguments=[ + Argument(name="query", value=f"\"updated_at:>='2023-01-01' AND updated_at:<='2023-01-02'\""), + Argument(name="sortKey", value="UPDATED_AT"), + ], + fields=[Field(name='edges', fields=[Field(name='node', fields=['__typename', 'id', Field(name="metafields", fields=[Field(name="edges", fields=[Field(name="node", fields=["__typename", "id", "namespace", "value", "key", "description", "createdAt", "updatedAt", "type"])])])])])] + ) + ] + ), + ), + ( + MetafieldProductImage, + "updated_at", + "2023-01-01", + "2023-01-02", + Operation( + type="", + queries=[ + Query( + name='products', + arguments=[ + Argument(name="query", value=f"\"updated_at:>='2023-01-01' AND updated_at:<='2023-01-02'\""), + Argument(name="sortKey", value="UPDATED_AT"), + ], + fields=[Field(name='edges', fields=[Field(name='node', fields=['__typename','id',Field(name="images", fields=[Field(name="edges", fields=[Field(name="node", fields=["__typename", "id", Field(name="metafields", fields=[Field(name="edges", fields=[Field(name="node", fields=["__typename", "id", "namespace", "value", "key", "description", "createdAt", "updatedAt", "type"])])])])])])])])] + ) + ] + ), + ), + ( + InventoryLevel, + "updated_at", + "2023-01-01", + "2023-01-02", + Operation( + type="", + queries=[ + Query( + name='locations', + arguments=[ + Argument(name="includeLegacy", value="true"), + Argument(name="includeInactive", value="true"), + ], + fields=[ + Field( + name='edges', + fields=[ + Field( + name='node', + fields=[ + '__typename', + 'id', + Query( + name="inventoryLevels", + arguments=[ + Argument(name="query", value=f"\"updated_at:>='2023-01-01' AND updated_at:<='2023-01-02'\""), + ], + fields=[ + Field( + name="edges", + fields=[ + Field( + name="node", + fields=[ + "__typename", + "id", + Field(name="available"), + Field(name="item", fields=[Field(name="id", alias="inventory_item_id")]), + Field(name="updatedAt") + ] + ) + ] + ) + ] + ) + ] + ) + ] + ) + ] + ) + ] + ), + ), + ], + ids=[ + "MetafieldCustomers query with 1 query_path(str)", + "MetafieldProductImages query with composite quey_path(List[2])", + "InventoryLevel query", + ] +) +def test_bulk_query(query_class, filter_field, start, end, expected) -> None: + stream = query_class(shop_id=0) + assert stream.get(filter_field, start, end) == expected.render() \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_record.py b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_record.py new file mode 100644 index 000000000000..2c163004cb38 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_record.py @@ -0,0 +1,198 @@ +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. + + +import pytest +from source_shopify.shopify_graphql.bulk.query import ShopifyBulkQuery +from source_shopify.shopify_graphql.bulk.record import ShopifyBulkRecord + + +@pytest.mark.parametrize( + "record, expected", + [ + ( + {"id": "gid://shopify/Order/19435458986123"}, + {"id": 19435458986123, "admin_graphql_api_id": "gid://shopify/Order/19435458986123"}, + ), + ({"id": 123}, {"id": 123}), + ], +) +def test_record_resolve_id(record, expected) -> None: + bulk_query = ShopifyBulkQuery(shop_id=0) + assert ShopifyBulkRecord(bulk_query).record_resolve_id(record) == expected + + +@pytest.mark.parametrize( + "record, types, expected", + [ + ({"__typename": "Order", "id": "gid://shopify/Order/19435458986123"}, ["Test", "Order"], True), + ({"__typename": "Test", "id": "gid://shopify/Order/19435458986123"}, "Other", False), + ({}, "Other", False), + ], +) +def test_check_type(record, types, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + assert ShopifyBulkRecord(query).check_type(record, types) == expected + + +@pytest.mark.parametrize( + "record, expected", + [ + ( + { + "id": "gid://shopify/Metafield/123", + "__parentId": "gid://shopify/Order/102030", + }, + { + "id": 123, + "admin_graphql_api_id": "gid://shopify/Metafield/123", + "__parentId": "gid://shopify/Order/102030", + }, + ) + ], +) +def test_record_resolver(record, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + record_instance = ShopifyBulkRecord(query) + assert record_instance.record_resolve_id(record) == expected + + +@pytest.mark.parametrize( + "record, expected", + [ + ( + {"id": "gid://shopify/Order/1234567890", "__typename": "Order"}, + {"id": "gid://shopify/Order/1234567890"}, + ), + ], +) +def test_record_new(record, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + record_instance = ShopifyBulkRecord(query) + record_instance.record_new(record) + assert record_instance.buffer == [expected] + + +@pytest.mark.parametrize( + "records_from_jsonl, record_components, expected", + [ + ( + [ + {"__typename": "NewRecord", "id": "gid://shopify/NewRecord/1234567890", "name": "new_record"}, + {"__typename": "RecordComponent", "id": "gid://shopify/RecordComponent/1234567890", "name": "new_component"}, + ], + {"new_record": "NewRecord", "record_components": ["RecordComponent"]}, + [ + { + "id": "gid://shopify/NewRecord/1234567890", + "name": "new_record", + "record_components": { + "RecordComponent": [ + { + "id": "gid://shopify/RecordComponent/1234567890", + "name": "new_component", + }, + ] + }, + } + ], + ), + ], + ids=["add_component"], +) +def test_record_new_component(records_from_jsonl, record_components, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + record_instance = ShopifyBulkRecord(query) + record_instance.components = record_components.get("record_components") + # register new record first + record_instance.record_new(records_from_jsonl[0]) + assert len(record_instance.buffer) > 0 + # check the components placeholder was created for new record registered + assert "record_components" in record_instance.buffer[-1].keys() + # register record component + record_instance.record_new_component(records_from_jsonl[1]) + # check the component was proccessed + assert len(record_instance.buffer[-1]["record_components"]["RecordComponent"]) > 0 + # general check + assert record_instance.buffer == expected + + +@pytest.mark.parametrize( + "buffered_record, expected", + [ + ( + { + "id": "gid://shopify/NewRecord/1234567890", + "name": "new_record", + "record_components": { + "RecordComponent": [ + { + "id": "gid://shopify/RecordComponent/1234567890", + "name": "new_component", + } + ] + }, + }, + [ + { + "id": 1234567890, + "name": "new_record", + "record_components": { + "RecordComponent": [ + { + "id": "gid://shopify/RecordComponent/1234567890", + "name": "new_component", + }, + ] + }, + "admin_graphql_api_id": "gid://shopify/NewRecord/1234567890", + } + ], + ), + ], +) +def test_buffer_flush(buffered_record, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + record_instance = ShopifyBulkRecord(query) + # populate the buffer with record + record_instance.buffer.append(buffered_record) + assert list(record_instance.buffer_flush()) == expected + + +@pytest.mark.parametrize( + "records_from_jsonl, record_composition, expected", + [ + ( + [ + {"__typename": "NewRecord", "id": "gid://shopify/NewRecord/1234567890", "name": "new_record"}, + {"__typename": "RecordComponent", "id": "gid://shopify/RecordComponent/1234567890", "name": "new_component"}, + ], + {"new_record": "NewRecord", "record_components": ["RecordComponent"]}, + [ + { + "id": "gid://shopify/NewRecord/1234567890", + "name": "new_record", + "record_components": { + "RecordComponent": [ + { + "id": "gid://shopify/RecordComponent/1234567890", + "name": "new_component", + }, + ] + }, + } + ], + ), + ], + ids=["test_compose"], +) +def test_record_compose(records_from_jsonl, record_composition, expected) -> None: + query = ShopifyBulkQuery(shop_id=0) + # query.record_composition = record_composition + record_instance = ShopifyBulkRecord(query) + record_instance.composition = record_composition + record_instance.components = record_composition.get("record_components") + # process read jsonl records + for record in records_from_jsonl: + list(record_instance.record_compose(record)) + + assert record_instance.buffer == expected diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_tools.py b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_tools.py new file mode 100644 index 000000000000..ba7e0474f494 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/graphql_bulk/test_tools.py @@ -0,0 +1,54 @@ +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. + + +import pytest +from source_shopify.shopify_graphql.bulk.exceptions import ShopifyBulkExceptions +from source_shopify.shopify_graphql.bulk.tools import BulkTools + + +def test_camel_to_snake() -> None: + assert BulkTools.camel_to_snake("camelCase") == "camel_case" + assert BulkTools.camel_to_snake("snake_case") == "snake_case" + assert BulkTools.camel_to_snake("PascalCase") == "pascal_case" + + +@pytest.mark.parametrize( + "job_result_url, error_type, expected", + [ + ( + "https://storage.googleapis.com/shopify-tiers-assets-prod-us-east1/?GoogleAccessId=assets-us-prod%40shopify-tiers.iam.gserviceaccount.com&Expires=1705508208&Signature=%3D%3D&response-content-disposition=attachment%3B+filename%3D%22bulk-4147374162109.jsonl%22%3B+filename%2A%3DUTF-8%27%27bulk-4147374162109.jsonl&response-content-type=application%2Fjsonl", + None, + "bulk-4147374162109.jsonl", + ), + ( + "https://storage.googleapis.com/shopify-tiers-assets-prod-us-east1/?GoogleAccessId=assets-us-prod%40shopify-tiers.iam.gserviceaccount.com&Expires=1705508208", + ShopifyBulkExceptions.BulkJobResultUrlError, + "Could not extract the `filename` from `result_url` provided", + ), + ], + ids=["success", "error"], +) +def test_filename_from_url(job_result_url, error_type, expected) -> None: + if error_type: + with pytest.raises(error_type) as error: + BulkTools.filename_from_url(job_result_url) + assert expected in repr(error.value) + else: + assert BulkTools.filename_from_url(job_result_url) == expected + + +def test_from_iso8601_to_rfc3339() -> None: + record = {"date": "2023-01-01T15:00:00Z"} + assert BulkTools.from_iso8601_to_rfc3339(record, "date") == "2023-01-01T15:00:00+00:00" + + +def test_fields_names_to_snake_case() -> None: + dict_input = {"camelCase": "value", "snake_case": "value", "__parentId": "value"} + expected_output = {"camel_case": "value", "snake_case": "value", "__parentId": "value"} + assert BulkTools().fields_names_to_snake_case(dict_input) == expected_output + + +def test_resolve_str_id() -> None: + assert BulkTools.resolve_str_id("123") == 123 + assert BulkTools.resolve_str_id("456", str) == "456" + assert BulkTools.resolve_str_id(None) is None diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/test_cached_stream_state.py b/airbyte-integrations/connectors/source-shopify/unit_tests/test_cached_stream_state.py index 031e7871e8ef..80cc6115c449 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/test_cached_stream_state.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/test_cached_stream_state.py @@ -4,7 +4,7 @@ import pytest -from source_shopify.source import OrderRefunds, Orders +from source_shopify.streams.streams import OrderRefunds, Orders from source_shopify.utils import EagerlyCachedStreamState as stream_state_cache # Define the Stream instances for the tests diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/test_deleted_events_stream.py b/airbyte-integrations/connectors/source-shopify/unit_tests/test_deleted_events_stream.py index 6dde83e179de..126d28b7e66d 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/test_deleted_events_stream.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/test_deleted_events_stream.py @@ -5,7 +5,8 @@ import pytest from source_shopify.auth import ShopifyAuthenticator -from source_shopify.source import Products, ShopifyDeletedEventsStream +from source_shopify.streams.base_streams import ShopifyDeletedEventsStream +from source_shopify.streams.streams import Products @pytest.fixture @@ -21,7 +22,7 @@ def config(basic_config): (Products, "products.json", "events.json"), ], ) -def test_path(stream, expected_main_path, expected_events_path, config): +def test_path(stream, expected_main_path, expected_events_path, config) -> None: stream = stream(config) main_path = stream.path() events_path = stream.deleted_events.path() @@ -35,7 +36,7 @@ def test_path(stream, expected_main_path, expected_events_path, config): (Products, {}), ], ) -def test_get_json_schema(stream, expected_events_schema, config): +def test_get_json_schema(stream, expected_events_schema, config) -> None: stream = stream(config) schema = stream.deleted_events.get_json_schema() # no schema is expected @@ -48,7 +49,7 @@ def test_get_json_schema(stream, expected_events_schema, config): (Products, "events", "id", "deleted_at"), ], ) -def test_has_correct_instance_vars(stream, expected_data_field, expected_pk, expected_cursor_field, config): +def test_has_correct_instance_vars(stream, expected_data_field, expected_pk, expected_cursor_field, config) -> None: stream = stream(config) assert stream.deleted_events.data_field == expected_data_field assert stream.deleted_events.primary_key == expected_pk @@ -61,7 +62,7 @@ def test_has_correct_instance_vars(stream, expected_data_field, expected_pk, exp (Products, None), ], ) -def test_has_no_availability_strategy(stream, expected, config): +def test_has_no_availability_strategy(stream, expected, config) -> None: stream = stream(config) # no availability_strategy is expected assert stream.deleted_events.availability_strategy is expected @@ -103,11 +104,11 @@ def test_has_no_availability_strategy(stream, expected, config): ), ], ) -def test_read_deleted_records(stream, requests_mock, deleted_records_json, expected, config, mocker): +def test_read_deleted_records(stream, requests_mock, deleted_records_json, expected, config, mocker) -> None: stream = stream(config) deleted_records_url = stream.url_base + stream.deleted_events.path() requests_mock.get(deleted_records_url, json=deleted_records_json) - mocker.patch("source_shopify.source.IncrementalShopifyStreamWithDeletedEvents.read_records", return_value=deleted_records_json) + mocker.patch("source_shopify.streams.base_streams.IncrementalShopifyStreamWithDeletedEvents.read_records", return_value=deleted_records_json) assert list(stream.read_records(sync_mode=None)) == expected @@ -143,7 +144,7 @@ def test_read_deleted_records(stream, requests_mock, deleted_records_json, expec ), ], ) -def test_produce_deleted_records_from_events(stream, input, expected, config): +def test_produce_deleted_records_from_events(stream, input, expected, config) -> None: stream = stream(config) result = stream.deleted_events.produce_deleted_records_from_events(input) assert list(result) == expected @@ -178,7 +179,7 @@ def test_produce_deleted_records_from_events(stream, input, expected, config): ), ], ) -def test_request_params(config, stream, stream_state, next_page_token, expected_stream_params, expected_deleted_params): +def test_request_params(config, stream, stream_state, next_page_token, expected_stream_params, expected_deleted_params) -> None: stream = stream(config) assert stream.request_params(stream_state=stream_state, next_page_token=next_page_token) == expected_stream_params assert stream.deleted_events.request_params(stream_state=stream_state, next_page_token=next_page_token) == expected_deleted_params @@ -190,7 +191,7 @@ def test_request_params(config, stream, stream_state, next_page_token, expected_ (Products, ShopifyDeletedEventsStream), ], ) -def test_deleted_events_instance(stream, config, expected): +def test_deleted_events_instance(stream, config, expected) -> None: stream = stream(config) assert isinstance(stream.deleted_events, expected) @@ -201,7 +202,7 @@ def test_deleted_events_instance(stream, config, expected): (Products, ""), ], ) -def test_default_deleted_state_comparison_value(stream, config, expected): +def test_default_deleted_state_comparison_value(stream, config, expected) -> None: stream = stream(config) assert stream.default_deleted_state_comparison_value == expected @@ -239,6 +240,6 @@ def test_default_deleted_state_comparison_value(stream, config, expected): ), ], ) -def test_get_updated_state(config, stream, last_record, current_state, expected): +def test_get_updated_state(config, stream, last_record, current_state, expected) -> None: stream = stream(config) assert stream.get_updated_state(current_state, last_record) == expected diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/test_graphql_products.py b/airbyte-integrations/connectors/source-shopify/unit_tests/test_graphql_products.py index d1a9f02de29b..a6c99f9c3c44 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/test_graphql_products.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/test_graphql_products.py @@ -1,7 +1,7 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. import pytest -from source_shopify.graphql import get_query_products +from source_shopify.shopify_graphql.graphql import get_query_products @pytest.mark.parametrize( diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/test_source.py b/airbyte-integrations/connectors/source-shopify/unit_tests/test_source.py index 1f4f7bb1d0e9..e4f07f314761 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/test_source.py @@ -7,7 +7,8 @@ import pytest from source_shopify.auth import ShopifyAuthenticator -from source_shopify.source import ( +from source_shopify.source import SourceShopify +from source_shopify.streams.streams import ( AbandonedCheckouts, Articles, Blogs, @@ -41,14 +42,14 @@ Products, ProductVariants, Shop, - SourceShopify, TenderTransactions, Transactions, + TransactionsGraphql, ) @pytest.fixture -def config(basic_config): +def config(basic_config) -> dict: basic_config["start_date"] = "2020-11-01" basic_config["authenticator"] = ShopifyAuthenticator(basic_config) return basic_config @@ -61,18 +62,22 @@ def config(basic_config): (Blogs, None, "blogs.json"), (MetafieldBlogs, {"id": 123}, "blogs/123/metafields.json"), (MetafieldArticles, {"id": 123}, "articles/123/metafields.json"), - (MetafieldCustomers, {"id": 123}, "customers/123/metafields.json"), - (MetafieldOrders, {"id": 123}, "orders/123/metafields.json"), - (MetafieldDraftOrders, {"id": 123}, "draft_orders/123/metafields.json"), - (MetafieldProducts, {"id": 123}, "products/123/metafields.json"), - (MetafieldProductVariants, {"variants": 123}, "variants/123/metafields.json"), + # GraphQL Bulk Streams + (MetafieldCustomers, None, "graphql.json"), + (MetafieldOrders, None, "graphql.json"), + (MetafieldDraftOrders, None, "graphql.json"), + (MetafieldProducts, None, "graphql.json"), + (MetafieldProductVariants, None, "graphql.json"), + (MetafieldLocations, None, "graphql.json"), + (MetafieldCollections, None, "graphql.json"), + # (MetafieldSmartCollections, {"id": 123}, "smart_collections/123/metafields.json"), - (MetafieldCollections, {"collection_id": 123}, "collections/123/metafields.json"), (MetafieldPages, {"id": 123}, "pages/123/metafields.json"), - (MetafieldLocations, {"id": 123}, "locations/123/metafields.json"), (MetafieldShops, None, "metafields.json"), - (ProductImages, {"product_id": 123}, "products/123/images.json"), - (ProductVariants, {"product_id": 123}, "products/123/variants.json"), + # Nested Substreams + (ProductImages, None, ""), + (ProductVariants, None, ""), + # (Customers, None, "customers.json"), (Orders, None, "orders.json"), (DraftOrders, None, "draft_orders.json"), @@ -87,7 +92,7 @@ def config(basic_config): (CustomCollections, None, "custom_collections.json"), ], ) -def test_customers_path(stream, stream_slice, expected_path, config): +def test_path(stream, stream_slice, expected_path, config) -> None: stream = stream(config) if stream_slice: result = stream.path(stream_slice) @@ -99,39 +104,47 @@ def test_customers_path(stream, stream_slice, expected_path, config): @pytest.mark.parametrize( "stream,stream_slice,expected_path", [ - (OrderRefunds, {"order_id": 12345}, "orders/12345/refunds.json"), (OrderRisks, {"order_id": 12345}, "orders/12345/risks.json"), (Transactions, {"order_id": 12345}, "orders/12345/transactions.json"), - (DiscountCodes, {"price_rule_id": 12345}, "price_rules/12345/discount_codes.json"), - (InventoryLevels, {"location_id": 12345}, "locations/12345/inventory_levels.json"), - (FulfillmentOrders, {"order_id": 12345}, "orders/12345/fulfillment_orders.json"), - (Fulfillments, {"order_id": 12345}, "orders/12345/fulfillments.json"), + # Nested Substreams + (OrderRefunds, None, ""), + (Fulfillments, None, ""), + # GQL BULK stream + (DiscountCodes, None, "graphql.json"), + (FulfillmentOrders, None, "graphql.json"), + (InventoryLevels, None, "graphql.json"), ], ) -def test_customers_path_with_stream_slice_param(stream, stream_slice, expected_path, config): +def test_path_with_stream_slice_param(stream, stream_slice, expected_path, config) -> None: stream = stream(config) - assert stream.path(stream_slice) == expected_path + if stream_slice: + result = stream.path(stream_slice) + else: + result = stream.path() + assert result == expected_path -def test_check_connection(config, mocker): - mocker.patch("source_shopify.source.Shop.read_records", return_value=[{"id": 1}]) +def test_check_connection(config, mocker) -> None: + mocker.patch("source_shopify.streams.streams.Shop.read_records", return_value=[{"id": 1}]) source = SourceShopify() logger_mock = MagicMock() assert source.check_connection(logger_mock, config) == (True, None) -def test_read_records(config, mocker): +def test_read_records(config, mocker) -> None: records = [{"created_at": "2022-10-10T06:21:53-07:00", "orders": {"updated_at": "2022-10-10T06:21:53-07:00"}}] stream_slice = records[0] stream = OrderRefunds(config) - mocker.patch("source_shopify.source.IncrementalShopifyStream.read_records", return_value=records) - assert next(stream.read_records(stream_slice=stream_slice)) == records[0] + mocker.patch("source_shopify.streams.base_streams.IncrementalShopifyNestedStream.read_records", return_value=records) + assert stream.read_records(stream_slice=stream_slice)[0] == records[0] @pytest.mark.parametrize( "stream, expected", [ - (OrderRefunds, {"limit": 250}), + # Nested Substream + (OrderRefunds, {}), + # (Orders, {"limit": 250, "status": "any", "order": "updated_at asc", "updated_at_min": "2020-11-01"}), ( AbandonedCheckouts, @@ -139,7 +152,7 @@ def test_read_records(config, mocker): ), ], ) -def test_request_params(config, stream, expected): +def test_request_params(config, stream, expected) -> None: assert stream(config).request_params() == expected @@ -168,12 +181,12 @@ def test_request_params(config, stream, expected): "no values at all", ], ) -def test_get_updated_state(config, last_record, current_state, expected): +def test_get_updated_state(config, last_record, current_state, expected) -> None: stream = OrderRefunds(config) assert stream.get_updated_state(current_state, last_record) == expected -def test_parse_response_with_bad_json(config, response_with_bad_json): +def test_parse_response_with_bad_json(config, response_with_bad_json) -> None: stream = Customers(config) assert list(stream.parse_response(response_with_bad_json)) == [{}] @@ -186,8 +199,30 @@ def test_parse_response_with_bad_json(config, response_with_bad_json): ], ids=["old style", "oauth style"], ) -def test_get_shop_name(config, shop, expected): +def test_get_shop_name(config, shop, expected) -> None: source = SourceShopify() config["shop"] = shop actual = source.get_shop_name(config) assert actual == expected + +@pytest.mark.parametrize( + "config, expected_stream_class", + [ + ({"fetch_transactions_user_id": False}, TransactionsGraphql), + ({"fetch_transactions_user_id": True}, Transactions), + ({}, TransactionsGraphql), + ], + ids=["don't fetch user_id", "fetch user id", "unset config value shouldn't fetch user_id"], +) +def test_select_transactions_stream(config, expected_stream_class): + config["shop"] = "test-store" + config["credentials"] = { + "auth_method": "api_password", + "api_password": "shppa_123" + } + config["authenticator"] = ShopifyAuthenticator(config) + + source = SourceShopify() + actual = source.select_transactions_stream(config) + assert type(actual) == expected_stream_class + diff --git a/airbyte-integrations/connectors/source-shopify/unit_tests/unit_test.py b/airbyte-integrations/connectors/source-shopify/unit_tests/unit_test.py index 14da41e6c0b1..d9c9e1ea0723 100644 --- a/airbyte-integrations/connectors/source-shopify/unit_tests/unit_test.py +++ b/airbyte-integrations/connectors/source-shopify/unit_tests/unit_test.py @@ -3,9 +3,12 @@ # +from unittest.mock import patch + import pytest import requests -from source_shopify.source import BalanceTransactions, DiscountCodes, FulfillmentOrders, PriceRules, SourceShopify +from source_shopify.source import ConnectionCheckTest, SourceShopify +from source_shopify.streams.streams import BalanceTransactions, DiscountCodes, FulfillmentOrders, PriceRules def test_get_next_page_token(requests_mock, auth_config): @@ -30,28 +33,54 @@ def test_get_next_page_token(requests_mock, auth_config): assert test == expected_output_token -def test_privileges_validation(requests_mock, basic_config): +@pytest.mark.parametrize( + "fetch_transactions_user_id, expected", + [ + ( + True, + [ + "abandoned_checkouts", + "fulfillments", + "metafield_orders", + "metafield_shops", + "order_refunds", + "order_risks", + "orders", + "shop", + "tender_transactions", + "transactions", + "countries", + ], + ), + ( + False, + [ + "abandoned_checkouts", + "fulfillments", + "metafield_orders", + "metafield_shops", + "order_refunds", + "order_risks", + "orders", + "shop", + "tender_transactions", + "transactions", + "countries", + ], + ), + ], +) +def test_privileges_validation(requests_mock, fetch_transactions_user_id, basic_config, expected): requests_mock.get( "https://test_shop.myshopify.com/admin/oauth/access_scopes.json", json={"access_scopes": [{"handle": "read_orders"}]}, ) - source = SourceShopify() - - expected = [ - "abandoned_checkouts", - "fulfillments", - "metafield_orders", - "metafield_shops", - "order_refunds", - "order_risks", - "orders", - "shop", - "tender_transactions", - "transactions", - "countries", - ] - - assert [stream.name for stream in source.streams(basic_config)] == expected + basic_config["fetch_transactions_user_id"] = fetch_transactions_user_id + # mock the get_shop_id method + with patch.object(ConnectionCheckTest, "get_shop_id", return_value=123) as mock: + source = SourceShopify() + streams = source.streams(basic_config) + assert [stream.name for stream in streams] == expected @pytest.mark.parametrize( diff --git a/docs/integrations/sources/shopify-migrations.md b/docs/integrations/sources/shopify-migrations.md index e811d2f5743e..0ecf880c31ae 100644 --- a/docs/integrations/sources/shopify-migrations.md +++ b/docs/integrations/sources/shopify-migrations.md @@ -1,5 +1,43 @@ # Shopify Migration Guide +## Upgrading to 2.0.0 +This version implements `Shopify GraphQL BULK Operations` to speed up the following streams: + - `Collections` + - `Customer Address` + - `Discount Codes` + - `Fulfillment Orders` + - `Inventory Items` + - `Inventory Levels` + - `Metafield Collections` + - `Metafield Customers` + - `Metafield Draft_orders` + - `Metafield Locations` + - `Metafield Orders` + - `Metafield Product Images` + - `Metafield Product Variants` + - `Transactions Graphql` (duplicated `Transactions` stream to provide faster fetch) + +Increased the performance for the following streams: +- `Fulfillments` +- `Order Refunds` +- `Product Images` +- `Product Variants` + +Other bug fixes and improvements, more info: `https://github.com/airbytehq/airbyte/pull/32345` + +### Action items required for 2.0.0 +* The `Fulfillments` stream now has the cursor field `updated_at`, instead of the `id`. +* The `Order Refunds` stream, now has the schema `refund_line_items.line_item.properties` to array of `strings`, instead of `object` with properties. +* The `Fulfillment Orders` stream now has the `supported_actions` schema as `array of objects` instead of `array of strings`. +* The `Collections` stream now requires additional api scope `read_publications` to fetch the `published_at` field with `GraphQL BULK Operations`. + + - if `API_PASSWORD` is used for authentication: + - BEFORE UPDATING to the `2.0.0`: update your `Private Developer Application` scopes with `read_publications` and save the changes, in your Shopify Account. + - if `OAuth2.0` is used for authentication: + - `re-auth` in order to obtain new scope automatically, after the upgrade. + - `Refresh Schema` + `Reset` is required for these streams after the upgrade from previous version. + + ## Upgrading to 1.0.0 This version uses Shopify API version `2023-07` which brings changes to the following streams: - removed `gateway, payment_details, processing_method` properties from `Order` stream, they are no longer supplied. diff --git a/docs/integrations/sources/shopify.md b/docs/integrations/sources/shopify.md index 5a5aa4b43b91..86b9ebdc35c3 100644 --- a/docs/integrations/sources/shopify.md +++ b/docs/integrations/sources/shopify.md @@ -85,6 +85,7 @@ Add the following scopes to your custom app to ensure Airbyte can sync all avail * `read_price_rules` * `read_product_listings` * `read_products` +* `read_publications` * `read_reports` * `read_resource_feedbacks` * `read_script_tags` @@ -105,43 +106,44 @@ Add the following scopes to your custom app to ensure Airbyte can sync all avail The Shopify 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. -This source can sync data for the [Shopify REST API](https://shopify.dev/api/admin-rest) and the [Shopify GraphQl API](https://shopify.dev/api/admin-graphql). +This source can sync data for the [Shopify REST API](https://shopify.dev/api/admin-rest) and the [Shopify GraphQL API](https://shopify.dev/api/admin-graphql) and the [Shopify GraphQL BULK API](https://shopify.dev/docs/api/usage/bulk-operations/queries) ## Supported streams -- [Abandoned Checkouts](https://shopify.dev/api/admin-rest/2022-01/resources/abandoned-checkouts#top) -- [Articles](https://shopify.dev/api/admin-rest/2022-01/resources/article) +- [Abandoned Checkouts](https://shopify.dev/api/admin-rest/2023-07/resources/abandoned-checkouts#top) +- [Articles](https://shopify.dev/api/admin-rest/2023-07/resources/article) - [Balance Transactions](https://shopify.dev/docs/api/admin-rest/2023-10/resources/transactions) -- [Blogs](https://shopify.dev/api/admin-rest/2022-01/resources/blog) -- [Collects](https://shopify.dev/api/admin-rest/2022-01/resources/collect#top) -- [Collections](https://shopify.dev/api/admin-rest/2022-01/resources/collection) -- [Countries](https://shopify.dev/docs/api/admin-rest/2023-04/resources/country) -- [Custom Collections](https://shopify.dev/api/admin-rest/2022-01/resources/customcollection#top) -- [Customers](https://shopify.dev/api/admin-rest/2022-01/resources/customer#top) -- [Customer Address](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customer-address) -- [Customer Saved Search](https://shopify.dev/docs/api/admin-rest/2023-04/resources/customersavedsearch) -- [Draft Orders](https://shopify.dev/api/admin-rest/2022-01/resources/draftorder#top) -- [Discount Codes](https://shopify.dev/api/admin-rest/2022-01/resources/discountcode#top) +- [Blogs](https://shopify.dev/api/admin-rest/2023-07/resources/blog) +- [Collects](https://shopify.dev/api/admin-rest/2023-07/resources/collect#top) +- [Collections (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/Collection) +- [Countries](https://shopify.dev/docs/api/admin-rest/2023-07/resources/country) +- [Custom Collections](https://shopify.dev/api/admin-rest/2023-07/resources/customcollection#top) +- [Customers](https://shopify.dev/api/admin-rest/2023-07/resources/customer#top) +- [Customer Address](https://shopify.dev/docs/api/admin-rest/2023-07/resources/customer-address) +- [Customer Saved Search](https://shopify.dev/docs/api/admin-rest/2023-07/resources/customersavedsearch) +- [Draft Orders](https://shopify.dev/api/admin-rest/2023-07/resources/draftorder#top) +- [Discount Codes (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/unions/DiscountCode) - [Disputes](https://shopify.dev/docs/api/admin-rest/2023-07/resources/dispute) -- [Fulfillments](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillment) -- [Fulfillment Orders](https://shopify.dev/api/admin-rest/2022-01/resources/fulfillmentorder) -- [Inventory Items](https://shopify.dev/api/admin-rest/2022-01/resources/inventoryItem) -- [Inventory Levels](https://shopify.dev/api/admin-rest/2021-01/resources/inventorylevel) -- [Locations](https://shopify.dev/api/admin-rest/2022-01/resources/location) -- [Metafields](https://shopify.dev/api/admin-rest/2022-01/resources/metafield#top) -- [Orders](https://shopify.dev/api/admin-rest/2022-01/resources/order#top) -- [Order Refunds](https://shopify.dev/api/admin-rest/2022-01/resources/refund#top) -- [Order Risks](https://shopify.dev/api/admin-rest/2022-01/resources/order-risk#top) -- [Pages](https://shopify.dev/api/admin-rest/2022-01/resources/page#top) -- [Price Rules](https://shopify.dev/api/admin-rest/2022-01/resources/pricerule#top) -- [Products](https://shopify.dev/api/admin-rest/2022-01/resources/product#top) +- [Fulfillments](https://shopify.dev/api/admin-rest/2023-07/resources/fulfillment) +- [Fulfillment Orders (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/FulfillmentOrder) +- [Inventory Items (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/InventoryItem) +- [Inventory Levels (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/InventoryLevel) +- [Locations](https://shopify.dev/api/admin-rest/2023-07/resources/location) +- [Metafields (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/Metafield) +- [Orders](https://shopify.dev/api/admin-rest/2023-07/resources/order#top) +- [Order Refunds](https://shopify.dev/api/admin-rest/2023-07/resources/refund#top) +- [Order Risks](https://shopify.dev/api/admin-rest/2023-07/resources/order-risk#top) +- [Pages](https://shopify.dev/api/admin-rest/2023-07/resources/page#top) +- [Price Rules](https://shopify.dev/api/admin-rest/2023-07/resources/pricerule#top) +- [Products](https://shopify.dev/api/admin-rest/2023-07/resources/product#top) - [Products (GraphQL)](https://shopify.dev/api/admin-graphql/2022-10/queries/products) -- [Product Images](https://shopify.dev/api/admin-rest/2022-01/resources/product-image) -- [Product Variants](https://shopify.dev/api/admin-rest/2022-01/resources/product-variant) -- [Shop](https://shopify.dev/api/admin-rest/2022-01/resources/shop) -- [Smart Collections](https://shopify.dev/api/admin-rest/2022-01/resources/smartcollection) -- [Transactions](https://shopify.dev/api/admin-rest/2022-01/resources/transaction#top) -- [Tender Transactions](https://shopify.dev/api/admin-rest/2022-01/resources/tendertransaction) +- [Product Images](https://shopify.dev/api/admin-rest/2023-07/resources/product-image) +- [Product Variants](https://shopify.dev/api/admin-rest/2023-07/resources/product-variant) +- [Shop](https://shopify.dev/api/admin-rest/2023-07/resources/shop) +- [Smart Collections](https://shopify.dev/api/admin-rest/2023-07/resources/smartcollection) +- [Transactions](https://shopify.dev/api/admin-rest/2023-07/resources/transaction#top) +- [Transactions (GraphQL)](https://shopify.dev/docs/api/admin-graphql/2023-07/objects/OrderTransaction) +- [Tender Transactions](https://shopify.dev/api/admin-rest/2023-07/resources/tendertransaction) ## Capturing deleted records @@ -191,14 +193,8 @@ Waiting seconds then retrying..." This is expected when the connector hits a `429 - Rate Limit Exceeded` HTTP Error. The sync operation will continue successfully after a short backoff period. -#### Incremental sync recommendations +For all `Shopify GraphQL BULK` api requests these limitations are applied: https://shopify.dev/docs/api/usage/bulk-operations/queries#operation-restrictions -For the smoothest experience with Incremental Refresh sync mode, the following is recommended: - -- The `Order Refunds`, `Order Risks`, `Transactions` should be synced along with `Orders` stream. -- `Discount Codes` should be synced along with `Price Rules` stream. - -If a child stream is synced independently of its parent stream, a full sync will occur, followed by a filtering out of records. This process may be less efficient compared to syncing child streams alongside their respective parent streams. ### Troubleshooting @@ -211,6 +207,7 @@ If a child stream is synced independently of its parent stream, a full sync will | Version | Date | Pull Request | Subject | | :------ | :--------- | :------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | +| 2.0.0 | 2024-02-12 | [32345](https://github.com/airbytehq/airbyte/pull/32345) | Fixed the issue with `state` causing the `substreams` to skip the records, made `metafield_*`: `collections, customers, draft_orders, locations, orders, product_images, product_variants, products`, and `fulfillment_orders, collections, discount_codes, inventory_levels, inventory_items, transactions_graphql, customer_address` streams to use `BULK Operations` instead of `REST`| | 1.1.8 | 2024-02-12 | [35166](https://github.com/airbytehq/airbyte/pull/35166) | Manage dependencies with Poetry. | | 1.1.7 | 2024-01-19 | [33804](https://github.com/airbytehq/airbyte/pull/33804) | Updated documentation with list of all supported streams | | 1.1.6 | 2024-01-04 | [33414](https://github.com/airbytehq/airbyte/pull/33414) | Prepare for airbyte-lib |