airbyte-agent-shopify 0.1.21__tar.gz → 0.1.22__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 (61) hide show
  1. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/CHANGELOG.md +5 -0
  2. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/PKG-INFO +3 -3
  3. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/README.md +2 -2
  4. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/__init__.py +6 -6
  5. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/executor/local_executor.py +4 -3
  6. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/adapters/httpx_adapter.py +10 -1
  7. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/pyproject.toml +1 -1
  8. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/.gitignore +0 -0
  9. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/AUTH.md +0 -0
  10. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/REFERENCE.md +0 -0
  11. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/__init__.py +0 -0
  12. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/__init__.py +0 -0
  13. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/auth_strategies.py +0 -0
  14. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/auth_template.py +0 -0
  15. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/cloud_utils/__init__.py +0 -0
  16. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/cloud_utils/client.py +0 -0
  17. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/connector_model_loader.py +0 -0
  18. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/constants.py +0 -0
  19. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/exceptions.py +0 -0
  20. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/executor/__init__.py +0 -0
  21. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/executor/hosted_executor.py +0 -0
  22. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/executor/models.py +0 -0
  23. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/extensions.py +0 -0
  24. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/__init__.py +0 -0
  25. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/adapters/__init__.py +0 -0
  26. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/config.py +0 -0
  27. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/exceptions.py +0 -0
  28. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/protocols.py +0 -0
  29. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http/response.py +0 -0
  30. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/http_client.py +0 -0
  31. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/introspection.py +0 -0
  32. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/logging/__init__.py +0 -0
  33. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/logging/logger.py +0 -0
  34. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/logging/types.py +0 -0
  35. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/observability/__init__.py +0 -0
  36. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/observability/config.py +0 -0
  37. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/observability/models.py +0 -0
  38. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/observability/redactor.py +0 -0
  39. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/observability/session.py +0 -0
  40. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/performance/__init__.py +0 -0
  41. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/performance/instrumentation.py +0 -0
  42. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/performance/metrics.py +0 -0
  43. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/__init__.py +0 -0
  44. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/base.py +0 -0
  45. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/components.py +0 -0
  46. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/connector.py +0 -0
  47. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/extensions.py +0 -0
  48. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/operations.py +0 -0
  49. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/schema/security.py +0 -0
  50. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/secrets.py +0 -0
  51. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/__init__.py +0 -0
  52. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/config.py +0 -0
  53. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/events.py +0 -0
  54. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/telemetry/tracker.py +0 -0
  55. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/types.py +0 -0
  56. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/utils.py +0 -0
  57. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/_vendored/connector_sdk/validation.py +0 -0
  58. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/connector.py +0 -0
  59. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/connector_model.py +0 -0
  60. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/models.py +65 -65
  61. {airbyte_agent_shopify-0.1.21 → airbyte_agent_shopify-0.1.22}/airbyte_agent_shopify/types.py +0 -0
@@ -1,5 +1,10 @@
1
1
  # Shopify changelog
2
2
 
3
+ ## [0.1.22] - 2026-01-30
4
+ - Updated connector definition (YAML version 0.1.2)
5
+ - Source commit: 5b20f488
6
+ - SDK version: 0.1.0
7
+
3
8
  ## [0.1.21] - 2026-01-30
4
9
  - Updated connector definition (YAML version 0.1.2)
5
10
  - Source commit: a3729d85
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: airbyte-agent-shopify
3
- Version: 0.1.21
3
+ Version: 0.1.22
4
4
  Summary: Airbyte Shopify Connector for AI platforms
5
5
  Project-URL: Homepage, https://github.com/airbytehq/airbyte-agent-connectors
6
6
  Project-URL: Documentation, https://docs.airbyte.com/ai-agents/
@@ -171,7 +171,7 @@ See the official [Shopify API reference](https://shopify.dev/docs/api/admin-rest
171
171
 
172
172
  ## Version information
173
173
 
174
- - **Package version:** 0.1.21
174
+ - **Package version:** 0.1.22
175
175
  - **Connector version:** 0.1.2
176
- - **Generated with Connector SDK commit SHA:** e4eb233f8dd57ad9bc825064625222a988db2cc6
176
+ - **Generated with Connector SDK commit SHA:** 5b20f488dec0e8f29410823753106603c23a4b65
177
177
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/shopify/CHANGELOG.md)
@@ -138,7 +138,7 @@ See the official [Shopify API reference](https://shopify.dev/docs/api/admin-rest
138
138
 
139
139
  ## Version information
140
140
 
141
- - **Package version:** 0.1.21
141
+ - **Package version:** 0.1.22
142
142
  - **Connector version:** 0.1.2
143
- - **Generated with Connector SDK commit SHA:** e4eb233f8dd57ad9bc825064625222a988db2cc6
143
+ - **Generated with Connector SDK commit SHA:** 5b20f488dec0e8f29410823753106603c23a4b65
144
144
  - **Changelog:** [View changelog](https://github.com/airbytehq/airbyte-agent-connectors/blob/main/connectors/shopify/CHANGELOG.md)
@@ -13,14 +13,14 @@ from .models import (
13
13
  CustomerAddressList,
14
14
  MarketingConsent,
15
15
  OrderAddress,
16
- Transaction,
17
- Refund,
18
16
  LineItem,
19
17
  Fulfillment,
18
+ Transaction,
19
+ Refund,
20
20
  Order,
21
21
  OrderList,
22
- ProductImage,
23
22
  ProductVariant,
23
+ ProductImage,
24
24
  Product,
25
25
  ProductList,
26
26
  ProductVariantList,
@@ -187,14 +187,14 @@ __all__ = [
187
187
  "CustomerAddressList",
188
188
  "MarketingConsent",
189
189
  "OrderAddress",
190
- "Transaction",
191
- "Refund",
192
190
  "LineItem",
193
191
  "Fulfillment",
192
+ "Transaction",
193
+ "Refund",
194
194
  "Order",
195
195
  "OrderList",
196
- "ProductImage",
197
196
  "ProductVariant",
197
+ "ProductImage",
198
198
  "Product",
199
199
  "ProductList",
200
200
  "ProductVariantList",
@@ -584,7 +584,7 @@ class LocalExecutor:
584
584
  return ExecutionResult(
585
585
  success=True,
586
586
  data={
587
- "status": "unhealthy",
587
+ "status": "skipped",
588
588
  "error": "No list operation available for health check",
589
589
  },
590
590
  )
@@ -599,7 +599,7 @@ class LocalExecutor:
599
599
  return ExecutionResult(
600
600
  success=True,
601
601
  data={
602
- "status": "unhealthy",
602
+ "status": "skipped",
603
603
  "error": "No standard handler available",
604
604
  },
605
605
  )
@@ -616,13 +616,14 @@ class LocalExecutor:
616
616
  )
617
617
  except Exception as e:
618
618
  return ExecutionResult(
619
- success=True,
619
+ success=False,
620
620
  data={
621
621
  "status": "unhealthy",
622
622
  "error": str(e),
623
623
  "checked_entity": check_entity,
624
624
  "checked_action": "list",
625
625
  },
626
+ error=str(e),
626
627
  )
627
628
 
628
629
  async def _execute_operation(
@@ -186,7 +186,16 @@ class HTTPXClient:
186
186
  # Try to get error message from response
187
187
  try:
188
188
  error_data = httpx_response.json()
189
- error_message = error_data.get("message") or error_data.get("error") or str(error_data)
189
+ errors_list = error_data.get("errors")
190
+ if isinstance(errors_list, list):
191
+
192
+ def _extract_error(e: object) -> str:
193
+ if isinstance(e, dict):
194
+ return str(e.get("userPresentableMessage") or e.get("message") or e.get("error") or e)
195
+ return str(e)
196
+
197
+ errors_list = ", ".join(_extract_error(e) for e in errors_list)
198
+ error_message = errors_list or error_data.get("message") or error_data.get("error") or str(error_data)
190
199
  except Exception:
191
200
  error_message = httpx_response.text or f"HTTP {status_code} error"
192
201
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "airbyte-agent-shopify"
3
- version = "0.1.21"
3
+ version = "0.1.22"
4
4
  description = "Airbyte Shopify Connector for AI platforms"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -119,55 +119,6 @@ class OrderAddress(BaseModel):
119
119
  latitude: Union[float | None, Any] = Field(default=None)
120
120
  longitude: Union[float | None, Any] = Field(default=None)
121
121
 
122
- class Transaction(BaseModel):
123
- """An order transaction"""
124
- model_config = ConfigDict(extra="allow", populate_by_name=True)
125
-
126
- id: Union[int, Any] = Field(default=None)
127
- order_id: Union[int | None, Any] = Field(default=None)
128
- kind: Union[str | None, Any] = Field(default=None)
129
- gateway: Union[str | None, Any] = Field(default=None)
130
- status: Union[str | None, Any] = Field(default=None)
131
- message: Union[str | None, Any] = Field(default=None)
132
- created_at: Union[str | None, Any] = Field(default=None)
133
- test: Union[bool | None, Any] = Field(default=None)
134
- authorization: Union[str | None, Any] = Field(default=None)
135
- location_id: Union[int | None, Any] = Field(default=None)
136
- user_id: Union[int | None, Any] = Field(default=None)
137
- parent_id: Union[int | None, Any] = Field(default=None)
138
- processed_at: Union[str | None, Any] = Field(default=None)
139
- device_id: Union[int | None, Any] = Field(default=None)
140
- error_code: Union[str | None, Any] = Field(default=None)
141
- source_name: Union[str | None, Any] = Field(default=None)
142
- receipt: Union[dict[str, Any] | None, Any] = Field(default=None)
143
- currency_exchange_adjustment: Union[dict[str, Any] | None, Any] = Field(default=None)
144
- amount: Union[str | None, Any] = Field(default=None)
145
- currency: Union[str | None, Any] = Field(default=None)
146
- payment_id: Union[str | None, Any] = Field(default=None)
147
- total_unsettled_set: Union[dict[str, Any] | None, Any] = Field(default=None)
148
- manual_payment_gateway: Union[bool | None, Any] = Field(default=None)
149
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
150
-
151
- class Refund(BaseModel):
152
- """An order refund"""
153
- model_config = ConfigDict(extra="allow", populate_by_name=True)
154
-
155
- id: Union[int, Any] = Field(default=None)
156
- order_id: Union[int | None, Any] = Field(default=None)
157
- created_at: Union[str | None, Any] = Field(default=None)
158
- note: Union[str | None, Any] = Field(default=None)
159
- user_id: Union[int | None, Any] = Field(default=None)
160
- processed_at: Union[str | None, Any] = Field(default=None)
161
- restock: Union[bool | None, Any] = Field(default=None)
162
- duties: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
163
- total_duties_set: Union[dict[str, Any] | None, Any] = Field(default=None)
164
- return_: Union[dict[str, Any] | None, Any] = Field(default=None, alias="return")
165
- refund_line_items: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
166
- transactions: Union[list[Transaction] | None, Any] = Field(default=None)
167
- order_adjustments: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
168
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
169
- refund_shipping_lines: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
170
-
171
122
  class LineItem(BaseModel):
172
123
  """LineItem type definition"""
173
124
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -225,6 +176,55 @@ class Fulfillment(BaseModel):
225
176
  name: Union[str | None, Any] = Field(default=None)
226
177
  admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
227
178
 
179
+ class Transaction(BaseModel):
180
+ """An order transaction"""
181
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
182
+
183
+ id: Union[int, Any] = Field(default=None)
184
+ order_id: Union[int | None, Any] = Field(default=None)
185
+ kind: Union[str | None, Any] = Field(default=None)
186
+ gateway: Union[str | None, Any] = Field(default=None)
187
+ status: Union[str | None, Any] = Field(default=None)
188
+ message: Union[str | None, Any] = Field(default=None)
189
+ created_at: Union[str | None, Any] = Field(default=None)
190
+ test: Union[bool | None, Any] = Field(default=None)
191
+ authorization: Union[str | None, Any] = Field(default=None)
192
+ location_id: Union[int | None, Any] = Field(default=None)
193
+ user_id: Union[int | None, Any] = Field(default=None)
194
+ parent_id: Union[int | None, Any] = Field(default=None)
195
+ processed_at: Union[str | None, Any] = Field(default=None)
196
+ device_id: Union[int | None, Any] = Field(default=None)
197
+ error_code: Union[str | None, Any] = Field(default=None)
198
+ source_name: Union[str | None, Any] = Field(default=None)
199
+ receipt: Union[dict[str, Any] | None, Any] = Field(default=None)
200
+ currency_exchange_adjustment: Union[dict[str, Any] | None, Any] = Field(default=None)
201
+ amount: Union[str | None, Any] = Field(default=None)
202
+ currency: Union[str | None, Any] = Field(default=None)
203
+ payment_id: Union[str | None, Any] = Field(default=None)
204
+ total_unsettled_set: Union[dict[str, Any] | None, Any] = Field(default=None)
205
+ manual_payment_gateway: Union[bool | None, Any] = Field(default=None)
206
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
207
+
208
+ class Refund(BaseModel):
209
+ """An order refund"""
210
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
211
+
212
+ id: Union[int, Any] = Field(default=None)
213
+ order_id: Union[int | None, Any] = Field(default=None)
214
+ created_at: Union[str | None, Any] = Field(default=None)
215
+ note: Union[str | None, Any] = Field(default=None)
216
+ user_id: Union[int | None, Any] = Field(default=None)
217
+ processed_at: Union[str | None, Any] = Field(default=None)
218
+ restock: Union[bool | None, Any] = Field(default=None)
219
+ duties: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
220
+ total_duties_set: Union[dict[str, Any] | None, Any] = Field(default=None)
221
+ return_: Union[dict[str, Any] | None, Any] = Field(default=None, alias="return")
222
+ refund_line_items: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
223
+ transactions: Union[list[Transaction] | None, Any] = Field(default=None)
224
+ order_adjustments: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
225
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
226
+ refund_shipping_lines: Union[list[dict[str, Any]] | None, Any] = Field(default=None)
227
+
228
228
  class Order(BaseModel):
229
229
  """A Shopify order"""
230
230
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -329,22 +329,6 @@ class OrderList(BaseModel):
329
329
 
330
330
  orders: Union[list[Order], Any] = Field(default=None)
331
331
 
332
- class ProductImage(BaseModel):
333
- """A product image"""
334
- model_config = ConfigDict(extra="allow", populate_by_name=True)
335
-
336
- id: Union[int, Any] = Field(default=None)
337
- product_id: Union[int | None, Any] = Field(default=None)
338
- position: Union[int | None, Any] = Field(default=None)
339
- created_at: Union[str | None, Any] = Field(default=None)
340
- updated_at: Union[str | None, Any] = Field(default=None)
341
- alt: Union[str | None, Any] = Field(default=None)
342
- width: Union[int | None, Any] = Field(default=None)
343
- height: Union[int | None, Any] = Field(default=None)
344
- src: Union[str | None, Any] = Field(default=None)
345
- variant_ids: Union[list[int] | None, Any] = Field(default=None)
346
- admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
347
-
348
332
  class ProductVariant(BaseModel):
349
333
  """A product variant"""
350
334
  model_config = ConfigDict(extra="allow", populate_by_name=True)
@@ -376,6 +360,22 @@ class ProductVariant(BaseModel):
376
360
  requires_shipping: Union[bool | None, Any] = Field(default=None)
377
361
  admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
378
362
 
363
+ class ProductImage(BaseModel):
364
+ """A product image"""
365
+ model_config = ConfigDict(extra="allow", populate_by_name=True)
366
+
367
+ id: Union[int, Any] = Field(default=None)
368
+ product_id: Union[int | None, Any] = Field(default=None)
369
+ position: Union[int | None, Any] = Field(default=None)
370
+ created_at: Union[str | None, Any] = Field(default=None)
371
+ updated_at: Union[str | None, Any] = Field(default=None)
372
+ alt: Union[str | None, Any] = Field(default=None)
373
+ width: Union[int | None, Any] = Field(default=None)
374
+ height: Union[int | None, Any] = Field(default=None)
375
+ src: Union[str | None, Any] = Field(default=None)
376
+ variant_ids: Union[list[int] | None, Any] = Field(default=None)
377
+ admin_graphql_api_id: Union[str | None, Any] = Field(default=None)
378
+
379
379
  class Product(BaseModel):
380
380
  """A Shopify product"""
381
381
  model_config = ConfigDict(extra="allow", populate_by_name=True)