airbyte-source-shopify 2.6.6.dev202503182156__tar.gz → 2.7.0.dev202503201259__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/PKG-INFO +1 -1
  2. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/pyproject.toml +1 -1
  3. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/product_variants.json +4 -0
  4. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/job.py +2 -4
  5. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/query.py +17 -9
  6. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/streams/base_streams.py +1 -7
  7. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/README.md +0 -0
  8. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/__init__.py +0 -0
  9. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/auth.py +0 -0
  10. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/config_migrations.py +0 -0
  11. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/http_request.py +0 -0
  12. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/run.py +0 -0
  13. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/abandoned_checkouts.json +0 -0
  14. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/articles.json +0 -0
  15. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/balance_transactions.json +0 -0
  16. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/blogs.json +0 -0
  17. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/collections.json +0 -0
  18. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/collects.json +0 -0
  19. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/countries.json +0 -0
  20. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/custom_collections.json +0 -0
  21. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/customer_address.json +0 -0
  22. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/customer_journey_summary.json +0 -0
  23. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/customers.json +0 -0
  24. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/discount_codes.json +0 -0
  25. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/disputes.json +0 -0
  26. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/draft_orders.json +0 -0
  27. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/fulfillment_orders.json +0 -0
  28. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/fulfillments.json +0 -0
  29. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/inventory_items.json +0 -0
  30. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/inventory_levels.json +0 -0
  31. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/locations.json +0 -0
  32. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_articles.json +0 -0
  33. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_blogs.json +0 -0
  34. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_collections.json +0 -0
  35. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_customers.json +0 -0
  36. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_draft_orders.json +0 -0
  37. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_locations.json +0 -0
  38. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_orders.json +0 -0
  39. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_pages.json +0 -0
  40. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_product_images.json +0 -0
  41. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_product_variants.json +0 -0
  42. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_products.json +0 -0
  43. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_shops.json +0 -0
  44. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/metafield_smart_collections.json +0 -0
  45. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/order_agreements.json +0 -0
  46. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/order_refunds.json +0 -0
  47. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/order_risks.json +0 -0
  48. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/orders.json +0 -0
  49. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/pages.json +0 -0
  50. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/price_rules.json +0 -0
  51. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/product_images.json +0 -0
  52. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/products.json +0 -0
  53. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/shop.json +0 -0
  54. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/smart_collections.json +0 -0
  55. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/tender_transactions.json +0 -0
  56. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/schemas/transactions.json +0 -0
  57. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/scopes.py +0 -0
  58. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/__init__.py +0 -0
  59. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/exceptions.py +0 -0
  60. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/record.py +0 -0
  61. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/retry.py +0 -0
  62. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/status.py +0 -0
  63. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/shopify_graphql/bulk/tools.py +0 -0
  64. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/source.py +0 -0
  65. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/spec.json +0 -0
  66. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/streams/streams.py +0 -0
  67. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/transform.py +0 -0
  68. {airbyte_source_shopify-2.6.6.dev202503182156 → airbyte_source_shopify-2.7.0.dev202503201259}/source_shopify/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-source-shopify
3
- Version: 2.6.6.dev202503182156
3
+ Version: 2.7.0.dev202503201259
4
4
  Summary: Source CDK implementation for Shopify.
5
5
  License: ELv2
6
6
  Author: Airbyte
@@ -5,7 +5,7 @@ requires = [
5
5
  build-backend = "poetry.core.masonry.api"
6
6
 
7
7
  [tool.poetry]
8
- version = "2.6.6.dev202503182156"
8
+ version = "2.7.0.dev202503201259"
9
9
  name = "airbyte-source-shopify"
10
10
  description = "Source CDK implementation for Shopify."
11
11
  authors = [
@@ -236,6 +236,10 @@
236
236
  "tax_code": {
237
237
  "description": "The tax code for the product variant.",
238
238
  "type": ["null", "string"]
239
+ },
240
+ "tracked": {
241
+ "description": "Whether inventory levels are tracked for the item.",
242
+ "type": ["null", "boolean"]
239
243
  }
240
244
  }
241
245
  }
@@ -246,8 +246,7 @@ class ShopifyBulkManager:
246
246
  _, canceled_response = self.http_client.send_request(
247
247
  http_method="POST",
248
248
  url=self.base_url,
249
- data=ShopifyBulkTemplates.cancel(self._job_id),
250
- headers={"Content-Type": "application/graphql"},
249
+ json={"query": ShopifyBulkTemplates.cancel(self._job_id)},
251
250
  request_kwargs={},
252
251
  )
253
252
  # mark the job was self-canceled
@@ -405,8 +404,7 @@ class ShopifyBulkManager:
405
404
  _, response = self.http_client.send_request(
406
405
  http_method="POST",
407
406
  url=self.base_url,
408
- data=ShopifyBulkTemplates.status(self._job_id),
409
- headers={"Content-Type": "application/graphql"},
407
+ json={"query": ShopifyBulkTemplates.status(self._job_id)},
410
408
  request_kwargs={},
411
409
  )
412
410
  self._job_healthcheck(response)
@@ -2652,7 +2652,15 @@ class ProductVariant(ShopifyBulkQuery):
2652
2652
  Field(name="src", alias="image_src"),
2653
2653
  Field(name="url", alias="image_url"),
2654
2654
  ]
2655
-
2655
+ measurement_fields = [
2656
+ Field(name="weight", fields=["value", "unit"]),
2657
+ ]
2658
+ inventory_item_fields = [
2659
+ Field(name="id", alias="inventory_item_id"),
2660
+ Field(name="tracked", alias="tracked"),
2661
+ Field(name="requiresShipping", alias="requiresShipping"),
2662
+ Field(name="measurement", alias="measurement", fields=measurement_fields),
2663
+ ]
2656
2664
  query_nodes: List[Field] = [
2657
2665
  "__typename",
2658
2666
  "id",
@@ -2662,25 +2670,19 @@ class ProductVariant(ShopifyBulkQuery):
2662
2670
  "position",
2663
2671
  "inventoryPolicy",
2664
2672
  "compareAtPrice",
2665
- "inventoryManagement",
2666
2673
  "createdAt",
2667
2674
  "updatedAt",
2668
2675
  "taxable",
2669
2676
  "barcode",
2670
- "weight",
2671
- "weightUnit",
2672
2677
  "inventoryQuantity",
2673
- "requiresShipping",
2674
2678
  "availableForSale",
2675
2679
  "displayName",
2676
2680
  "taxCode",
2677
2681
  Field(name="selectedOptions", alias="options", fields=option_fields),
2678
- Field(name="weight", alias="grams"),
2679
2682
  Field(name="image", fields=image_fields),
2680
2683
  Field(name="inventoryQuantity", alias="old_inventory_quantity"),
2681
2684
  Field(name="product", fields=[Field(name="id", alias="product_id")]),
2682
- Field(name="fulfillmentService", fields=[Field(name="handle", alias="fulfillment_service")]),
2683
- Field(name="inventoryItem", fields=[Field(name="id", alias="inventory_item_id")]),
2685
+ Field(name="inventoryItem", fields=inventory_item_fields),
2684
2686
  ] + presentment_prices
2685
2687
 
2686
2688
  return query_nodes
@@ -2741,6 +2743,12 @@ class ProductVariant(ShopifyBulkQuery):
2741
2743
  # unnest mandatory fields from their placeholders
2742
2744
  record["product_id"] = self._unnest_and_resolve_id(record, "product", "product_id")
2743
2745
  record["inventory_item_id"] = self._unnest_and_resolve_id(record, "inventoryItem", "inventory_item_id")
2746
+ inventory_item = record.get("inventoryItem")
2747
+ measurement_weight = record.get("inventoryItem", {}).get("measurement", {}).get("weight")
2748
+ record["weight"] = measurement_weight.get("value") if measurement_weight.get("value") else 0.0
2749
+ record["weight_unit"] = measurement_weight.get("unit") if measurement_weight else None
2750
+ record["tracked"] = inventory_item.get("tracked") if inventory_item else None
2751
+ record["requires_shipping"] = inventory_item.get("requiresShipping") if inventory_item else None
2744
2752
  record["image_id"] = self._unnest_and_resolve_id(record, "image", "image_id")
2745
2753
  image = record.get("image", {})
2746
2754
  record["image_src"] = image.get("image_src") if image else None
@@ -2751,7 +2759,7 @@ class ProductVariant(ShopifyBulkQuery):
2751
2759
  price = record.get("price")
2752
2760
  record["price"] = float(price) if price else None
2753
2761
  # cast the `grams` to integer
2754
- record["grams"] = int(record.get("grams", 0))
2762
+ record["grams"] = int(record.get("weight", 0))
2755
2763
  # convert date-time cursors
2756
2764
  record["createdAt"] = self.tools.from_iso8601_to_rfc3339(record, "createdAt")
2757
2765
  record["updatedAt"] = self.tools.from_iso8601_to_rfc3339(record, "updatedAt")
@@ -33,7 +33,7 @@ class ShopifyStream(HttpStream, ABC):
33
33
  logger = logging.getLogger("airbyte")
34
34
 
35
35
  # Latest Stable Release
36
- api_version = "2024-04"
36
+ api_version = "2025-01"
37
37
  # Page size
38
38
  limit = 250
39
39
 
@@ -80,12 +80,6 @@ class ShopifyStream(HttpStream, ABC):
80
80
  params["order"] = f"{self.order_field} asc"
81
81
  params[self.filter_field] = self.default_filter_field_value
82
82
  return params
83
-
84
- def backoff_time(self, response):
85
- if response.status_code == 500:
86
- return 10
87
- else:
88
- return super().backoff_time(response)
89
83
 
90
84
  @limiter.balance_rate_limit()
91
85
  def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: