producteca 2.0.38__py3-none-any.whl → 2.0.40__py3-none-any.whl
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.
Potentially problematic release.
This version of producteca might be problematic. Click here for more details.
- producteca/products/products.py +38 -39
- {producteca-2.0.38.dist-info → producteca-2.0.40.dist-info}/METADATA +1 -1
- {producteca-2.0.38.dist-info → producteca-2.0.40.dist-info}/RECORD +6 -6
- {producteca-2.0.38.dist-info → producteca-2.0.40.dist-info}/LICENSE +0 -0
- {producteca-2.0.38.dist-info → producteca-2.0.40.dist-info}/WHEEL +0 -0
- {producteca-2.0.38.dist-info → producteca-2.0.40.dist-info}/entry_points.txt +0 -0
producteca/products/products.py
CHANGED
|
@@ -69,13 +69,13 @@ class Integration(BaseModel):
|
|
|
69
69
|
class Variation(BaseModel):
|
|
70
70
|
variation_id: Optional[int] = Field(default=None, alias='variationId')
|
|
71
71
|
components: Optional[List] = None
|
|
72
|
-
pictures: Optional[List[Picture]] = None
|
|
73
|
-
stocks: Optional[List[Stock]] = None
|
|
72
|
+
pictures: Optional[Union[List[Picture], List]] = None
|
|
73
|
+
stocks: Optional[Union[List[Stock], List]] = None
|
|
74
74
|
attributes_hash: Optional[str] = Field(default=None, alias='attributesHash')
|
|
75
75
|
primary_color: Optional[str] = Field(default=None, alias='primaryColor')
|
|
76
76
|
thumbnail: Optional[str] = None
|
|
77
|
-
attributes: Optional[List[Attribute]] = None
|
|
78
|
-
integrations: Optional[List[Integration]] = None
|
|
77
|
+
attributes: Optional[Union[List[Attribute], List]] = None
|
|
78
|
+
integrations: Optional[Union[List[Integration], List]] = None
|
|
79
79
|
id: Optional[int] = None
|
|
80
80
|
sku: Optional[str] = None
|
|
81
81
|
barcode: Optional[str] = None
|
|
@@ -96,34 +96,34 @@ class BundleComponent(BaseModel):
|
|
|
96
96
|
|
|
97
97
|
class BundleVariation(BaseModel):
|
|
98
98
|
variation_id: int = Field(alias='variationId')
|
|
99
|
-
components: List[BundleComponent]
|
|
99
|
+
components: Union[List[BundleComponent], List]
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
class BundleResult(BaseModel):
|
|
103
103
|
company_id: int = Field(alias='companyId')
|
|
104
104
|
product_id: int = Field(alias='productId')
|
|
105
|
-
variations: List[BundleVariation]
|
|
105
|
+
variations: Union[List[BundleVariation], List]
|
|
106
106
|
id: str
|
|
107
107
|
|
|
108
108
|
|
|
109
109
|
class BundleResponse(BaseModel):
|
|
110
|
-
results: List[BundleResult]
|
|
110
|
+
results: Union[List[BundleResult], List]
|
|
111
111
|
count: int
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
class Product(BaseModel):
|
|
115
|
-
integrations: Optional[List[Integration]] = None
|
|
116
|
-
variations: Optional[List[Variation]] = None
|
|
115
|
+
integrations: Optional[Union[List[Integration], List]] = None
|
|
116
|
+
variations: Optional[Union[List[Variation], List]] = None
|
|
117
117
|
is_simple: Optional[bool] = Field(default=None, alias='isSimple')
|
|
118
118
|
has_variations: Optional[bool] = Field(default=None, alias='hasVariations')
|
|
119
119
|
thumbnail: Optional[str] = None
|
|
120
120
|
category: Optional[str] = None
|
|
121
121
|
notes: Optional[str] = None
|
|
122
|
-
prices: Optional[List[Price]] = None
|
|
122
|
+
prices: Optional[Union[List[Price], List]] = None
|
|
123
123
|
buying_price: Optional[float] = Field(default=None, alias='buyingPrice')
|
|
124
124
|
is_archived: Optional[bool] = Field(default=None, alias='isArchived')
|
|
125
|
-
dimensions: Optional[Dimensions] = None
|
|
126
|
-
attributes: Optional[List[Attribute]] = None
|
|
125
|
+
dimensions: Optional[Union[Dimensions, dict]] = None
|
|
126
|
+
attributes: Optional[Union[List[Attribute], List]] = None
|
|
127
127
|
metadata: Optional[List[str]] = None
|
|
128
128
|
is_original: Optional[bool] = Field(default=None, alias='isOriginal')
|
|
129
129
|
name: str
|
|
@@ -138,16 +138,16 @@ class ProductVariationBase(BaseModel):
|
|
|
138
138
|
variation_id: Optional[int] = Field(default=None, alias='variationId')
|
|
139
139
|
code: Optional[str] = None
|
|
140
140
|
barcode: Optional[str] = None
|
|
141
|
-
attributes: List[Attribute] = []
|
|
141
|
+
attributes: Union[List[Attribute], List] = []
|
|
142
142
|
tags: Optional[List[str]] = []
|
|
143
143
|
buying_price: Optional[float] = Field(0, alias='buyingPrice')
|
|
144
|
-
dimensions: Optional[Dimensions] = Field(default_factory=Dimensions)
|
|
144
|
+
dimensions: Optional[Union[Dimensions, dict]] = Field(default_factory=Dimensions)
|
|
145
145
|
brand: Optional[str] = ''
|
|
146
146
|
notes: Optional[str] = ''
|
|
147
|
-
deals: Optional[List[Deal]] = []
|
|
148
|
-
stocks: List[Stock]
|
|
149
|
-
prices: Optional[List[Price]] = []
|
|
150
|
-
pictures: Optional[List[Picture]] = []
|
|
147
|
+
deals: Optional[Union[List[Deal], List]] = []
|
|
148
|
+
stocks: Optional[Union[List[Stock], List]] = []
|
|
149
|
+
prices: Optional[Union[List[Price], List]] = []
|
|
150
|
+
pictures: Optional[Union[List[Picture], List]] = []
|
|
151
151
|
|
|
152
152
|
|
|
153
153
|
class ProductVariation(ProductVariationBase):
|
|
@@ -180,11 +180,11 @@ class MeliProduct(BaseModel):
|
|
|
180
180
|
product_id: Optional[int] = Field(default=None, alias='productId')
|
|
181
181
|
tags: Optional[List[str]] = Field(default=None)
|
|
182
182
|
has_custom_shipping_costs: Optional[bool] = Field(default=None, alias='hasCustomShippingCosts')
|
|
183
|
-
shipping: Optional[Shipping] = None
|
|
184
|
-
mshops_shipping: Optional[MShopsShipping] = Field(default=None, alias='mShopsShipping')
|
|
183
|
+
shipping: Optional[Union[Shipping, dict]] = None
|
|
184
|
+
mshops_shipping: Optional[Union[MShopsShipping, dict]] = Field(default=None, alias='mShopsShipping')
|
|
185
185
|
add_free_shipping_cost_to_price: Optional[bool] = Field(default=None, alias='addFreeShippingCostToPrice')
|
|
186
|
-
category: MeliCategory
|
|
187
|
-
attribute_completion: Optional[AttributeCompletion] = Field(default=None, alias='attributeCompletion')
|
|
186
|
+
category: Union[MeliCategory, dict]
|
|
187
|
+
attribute_completion: Optional[Union[AttributeCompletion, dict]] = Field(default=None, alias='attributeCompletion')
|
|
188
188
|
catalog_products: Optional[List[str]] = Field(default=None, alias='catalogProducts')
|
|
189
189
|
warranty: Optional[str] = None
|
|
190
190
|
domain: Optional[str] = None
|
|
@@ -211,8 +211,8 @@ class ResolvedValue(BaseModel):
|
|
|
211
211
|
|
|
212
212
|
class ResolvedError(BaseModel):
|
|
213
213
|
resolved: Optional[bool] = None
|
|
214
|
-
reason: Optional[ErrorReason] = None
|
|
215
|
-
value: Optional[ResolvedValue] = None
|
|
214
|
+
reason: Optional[Union[ErrorReason, dict]] = None
|
|
215
|
+
value: Optional[Union[ResolvedValue, dict]] = None
|
|
216
216
|
statusCode: Optional[int] = None
|
|
217
217
|
|
|
218
218
|
|
|
@@ -227,20 +227,20 @@ class ErrorContext(BaseModel):
|
|
|
227
227
|
|
|
228
228
|
|
|
229
229
|
class SynchronizeResponse(BaseModel):
|
|
230
|
-
product: Optional[ResolvedError] = None
|
|
231
|
-
variation: Optional[ResolvedError] = None
|
|
232
|
-
deals: Optional[ResolvedError] = None
|
|
233
|
-
bundles: Optional[ResolvedError] = None
|
|
234
|
-
taxes: Optional[ResolvedError] = None
|
|
235
|
-
meliProductListingIntegrations: Optional[ResolvedError] = None
|
|
236
|
-
tags: Optional[ResolvedError] = None
|
|
237
|
-
productIntegrations: Optional[ResolvedError] = None
|
|
230
|
+
product: Optional[Union[ResolvedError, dict]] = None
|
|
231
|
+
variation: Optional[Union[ResolvedError, dict]] = None
|
|
232
|
+
deals: Optional[Union[ResolvedError, dict]] = None
|
|
233
|
+
bundles: Optional[Union[ResolvedError, dict]] = None
|
|
234
|
+
taxes: Optional[Union[ResolvedError, dict]] = None
|
|
235
|
+
meliProductListingIntegrations: Optional[Union[ResolvedError, dict]] = None
|
|
236
|
+
tags: Optional[Union[ResolvedError, dict]] = None
|
|
237
|
+
productIntegrations: Optional[Union[ResolvedError, dict]] = None
|
|
238
238
|
statusCode: Optional[int] = None
|
|
239
|
-
error_context: Optional[ErrorContext] = Field(None, alias='error@context')
|
|
239
|
+
error_context: Optional[Union[ErrorContext, dict]] = Field(None, alias='error@context')
|
|
240
240
|
|
|
241
241
|
|
|
242
242
|
class ListedSynchronizeResponse(BaseModel):
|
|
243
|
-
results: List[SynchronizeResponse]
|
|
243
|
+
results: Union[List[SynchronizeResponse], List]
|
|
244
244
|
|
|
245
245
|
|
|
246
246
|
@dataclass
|
|
@@ -262,6 +262,10 @@ class ProductService(BaseService):
|
|
|
262
262
|
raise Exception("Sku or code should be provided to update the product")
|
|
263
263
|
data = product_variation.model_dump(by_alias=True, exclude_none=True)
|
|
264
264
|
response = requests.post(endpoint_url, json=data, headers=headers)
|
|
265
|
+
if not response.ok:
|
|
266
|
+
raise Exception(f"Error getting product {product_variation.sku} - {product_variation.code}\n {response.text}")
|
|
267
|
+
if response.status_code == 204:
|
|
268
|
+
raise Exception("Status code is 204, meaning nothing was updated or created")
|
|
265
269
|
response_data = response.json()
|
|
266
270
|
try:
|
|
267
271
|
return Product(**response_data)
|
|
@@ -286,11 +290,6 @@ class ProductService(BaseService):
|
|
|
286
290
|
raise Exception(f"Errored with the following message {error_res.message} - {error_res.model_dump_json()}")
|
|
287
291
|
except ValidationError:
|
|
288
292
|
pass
|
|
289
|
-
|
|
290
|
-
if not response.ok:
|
|
291
|
-
raise Exception(f"Error getting product {product_variation.sku} - {product_variation.code}\n {response.text}")
|
|
292
|
-
if response.status_code == 204:
|
|
293
|
-
raise Exception("Status code is 204, meaning nothing was updated or created")
|
|
294
293
|
raise Exception(f"Unhandled error, check response {response.text}")
|
|
295
294
|
|
|
296
295
|
def get(self, product_id: int) -> "ProductService":
|
|
@@ -9,7 +9,7 @@ producteca/payments/payments.py,sha256=ac0X-QC4CGvxs40B_qWv0IepBVpj_nULNSNp8s3v5
|
|
|
9
9
|
producteca/payments/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
producteca/payments/tests/test_payments.py,sha256=wutk5zK2xRChTvKyTmi54Y_92PzNtUKZF6xWF298sFY,3032
|
|
11
11
|
producteca/products/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
producteca/products/products.py,sha256=
|
|
12
|
+
producteca/products/products.py,sha256=IHM-lQ1VSGIqaUxgr5wKhT1rkFT6c2QAjnrefUOoEQg,12859
|
|
13
13
|
producteca/products/search_products.py,sha256=8qKPhwHWq-QzRc3-oZKlMaQQN4Et2iUWm4uxOGWXzFc,6172
|
|
14
14
|
producteca/products/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
producteca/products/tests/test_products.py,sha256=0Tph7T9D2XTLdTDoIpR2PcLTrvPt6h2LPuKowTXrDgU,5742
|
|
@@ -25,8 +25,8 @@ producteca/shipments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
|
25
25
|
producteca/shipments/shipment.py,sha256=YokJRBX1ZbUtZVc4AOAB188rbHFO0_MH5hFv5U9Qpjw,844
|
|
26
26
|
producteca/shipments/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
27
|
producteca/shipments/tests/test_shipment.py,sha256=0edX3WM-t4nbp53r_Lvhtk_Suc2QCnIUQ27I90qSUfE,2512
|
|
28
|
-
producteca-2.0.
|
|
29
|
-
producteca-2.0.
|
|
30
|
-
producteca-2.0.
|
|
31
|
-
producteca-2.0.
|
|
32
|
-
producteca-2.0.
|
|
28
|
+
producteca-2.0.40.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
29
|
+
producteca-2.0.40.dist-info/METADATA,sha256=-m4yt_B7JGPYuOeDKoVhCikbKOg5Vdv_G8_dISUi47I,3809
|
|
30
|
+
producteca-2.0.40.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
31
|
+
producteca-2.0.40.dist-info/entry_points.txt,sha256=BFSDFLbB70p8YVZPiU7HDJdj2VyyLdMVa4ekLQAUAVc,125
|
|
32
|
+
producteca-2.0.40.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|