Created
January 5, 2021 21:08
-
-
Save Antebios/f53807040247b536e1674758a400dc45 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from woocommerce import API | |
import json | |
import time | |
import array | |
# Production | |
wcapi = API( | |
url="https://mysite.com", | |
consumer_key="ck_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", | |
consumer_secret="cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", | |
wp_api=True, | |
version="wc/v3", | |
timeout=15 | |
) | |
#ProductID = 426 | |
#ProductIDs = [298, 304, 307, 348, 350, 353, 355, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377] | |
#ProductIDs = [288, 286, 284, 281, 279, 273, 271, 269, 267, 265, 261, 259, 254, 247, 243, 222, 220, 217] | |
ProductIDs = [215, 213, 211, 208, 206, 195, 125] | |
WhatIf = False # value is either True or False only. | |
option1 = "Original Painting" | |
option2 = "Print Size" | |
variationsDict = { | |
1: {'Painting':'X-Large'}, | |
2: {'Print':'Small'}, | |
3: {'Print':'Medium'}, | |
4: {'Print':'Large'}, | |
5: {'Print':'X-Large'} | |
} | |
def GetProductInfo(product_id: int): | |
global product_type | |
global product_price | |
global product_regular_price | |
global product_weight | |
global product_dimensions | |
global product_dimensions_length | |
global product_dimensions_width | |
global product_dimensions_height | |
global product_shipping_class | |
global product_shipping_class_id | |
global product_categories | |
# Get Parent Product Information | |
product = wcapi.get("products/" + str(product_id)).json() | |
#product_id = product["id"] | |
product_type = product["type"] | |
product_price = product["price"] | |
product_regular_price = product["regular_price"] | |
product_weight = product["weight"] | |
if not product_weight: | |
print("Missing product weight, so setting default to 4 lbs.") | |
product_weight = 4 | |
product_dimensions = product["dimensions"] | |
product_dimensions_length = product_dimensions["length"] | |
product_dimensions_width = product_dimensions["width"] | |
product_dimensions_height = product_dimensions["height"] | |
product_shipping_class = product["shipping_class"] | |
product_shipping_class_id = product["shipping_class_id"] | |
product_categories = product["categories"] | |
def checkVariations(product_id: int, \ | |
option1: str, \ | |
option1Value: str, \ | |
option2: str, \ | |
option2Value: str) -> bool: | |
IsFound = False | |
IsOption1Found = False | |
IsOption2Found = False | |
variations_all = wcapi.get("products/" + str(product_id) + "/variations/").json() | |
attribCount = len(variations_all) | |
#option1 = "Original Painting" | |
#option1Value = "Painting" | |
#option2 = "Print Size" | |
#option2Value = "X-Large" | |
if attribCount > 0: | |
for variation in variations_all: | |
attribCollection = variation['attributes'] | |
coll1 = attribCollection[0] | |
coll2 = attribCollection[1] | |
coll1Name = coll1['name'] | |
coll1Option = coll1['option'] | |
coll2Name = coll2['name'] | |
coll2Option = coll2['option'] | |
if (coll1Name == option1 | |
and coll1Option == option1Value | |
and coll2Name == option2 | |
and coll2Option == option2Value | |
): | |
IsFound = True | |
else: | |
IsFound = False | |
return IsFound | |
else: | |
#print("No Variations were found!") | |
IsFound = False | |
return IsFound | |
def CreateProductVariation(product_id: int, \ | |
option1: str, \ | |
option1Value: str, \ | |
option2: str, \ | |
option2Value: str): | |
if (option1Value == "Painting" | |
and option2Value == "X-Large"): | |
shipping_class = "large-painting" | |
prodvarManageStock = True | |
prodvarPrice = product_regular_price | |
prodvarStockQuantity = 1 | |
prodvarWeight = product_weight | |
prodvarDimensions = { | |
"length": product_dimensions_length, | |
"width": product_dimensions_width, | |
"height": product_dimensions_height | |
} | |
prodvarMetaData = "" | |
prodvarShippingClass = product_shipping_class | |
# end of "Painting" : "X-Large" | |
if (option1Value == "Print" | |
and option2Value == "Small"): | |
prodvarManageStock = False | |
prodvarPrice = "5.00" | |
prodvarStockQuantity = 0 | |
prodvarWeight = "0.1" | |
prodvarDimensions = { | |
"length": "8.5", | |
"width": "0.1", | |
"height": "11" | |
} | |
prodvarMetaData = { | |
"key": "_shipping-usps-envelope", | |
"value": "yes" | |
} | |
prodvarShippingClass = "large-envelope" | |
# end of "Print" : "Small" | |
if (option1Value == "Print" | |
and option2Value == "Medium"): | |
prodvarManageStock = False | |
prodvarPrice = "7.00" | |
prodvarStockQuantity = 0 | |
prodvarWeight = "0.1" | |
prodvarDimensions = { | |
"length": "11", | |
"width": "0.1", | |
"height": "14" | |
} | |
prodvarMetaData = { | |
"key": "_shipping-usps-envelope", | |
"value": "yes" | |
} | |
prodvarShippingClass = "large-envelope" | |
# end of "Print" : "Medium" | |
if (option1Value == "Print" | |
and option2Value == "Large"): | |
prodvarManageStock = False | |
prodvarPrice = "25.00" | |
prodvarStockQuantity = 0 | |
prodvarWeight = "0.2" | |
prodvarDimensions = { | |
"length": "16", | |
"width": "0.1", | |
"height": "20" | |
} | |
prodvarMetaData = "" | |
prodvarShippingClass = "tubes" | |
# end of "Print" : "Large" | |
if (option1Value == "Print" | |
and option2Value == "X-Large"): | |
prodvarManageStock = False | |
prodvarPrice = "30.00" | |
prodvarStockQuantity = 0 | |
prodvarWeight = "0.2" | |
prodvarDimensions = { | |
"length": "18", | |
"width": "0.1", | |
"height": "24" | |
} | |
prodvarMetaData = "" | |
prodvarShippingClass = "tubes" | |
# end of "Print" : "X-Large" | |
# Now create structure | |
painting_variation_data = { | |
"manage_stock": prodvarManageStock, | |
"regular_price": prodvarPrice, | |
"stock_quantity": prodvarStockQuantity, | |
"weight": prodvarWeight, | |
"dimensions": prodvarDimensions, | |
"shipping_class": prodvarShippingClass, | |
"attributes": [ | |
{ | |
"id": 2, | |
"name": option1, | |
"option": option1Value | |
}, | |
{ | |
"id": 1, | |
"name": option2, | |
"option": option2Value | |
} | |
] | |
} | |
# , | |
# "meta_data": [ | |
# prodvarMetaData | |
# ] | |
print(prodvarMetaData) | |
if not prodvarMetaData: | |
#print("Missing meta_data") | |
print("Skipped adding variation for Product: " + str(product_id)) | |
else: | |
#print("Found meta_data") | |
#print("Printing: prodvarMetaData") | |
#print(prodvarMetaData) | |
print("Adding variation for Product: " + str(product_id)) | |
# metaVar = [prodvarMetaData] | |
painting_variation_data["meta_data"] = [prodvarMetaData] | |
print("Printing: painting_variation_data") | |
print(painting_variation_data) | |
if not WhatIf: | |
print("Updating record for " + str(product_id) + " for " + option1Value + ":" + option2Value) | |
wcapi.post("products/" + str(product_id) + "/variations", painting_variation_data).json() | |
time.sleep(3) | |
else: | |
print("Skipping creation of Variation for " + option1Value + ":" + option2Value) | |
print("================================================================") | |
## end of CreateProductVariation func ## | |
def ConvertProductToVariable (product_id: int): | |
attributes_data = { | |
"type": "variable", | |
"manage_stock": False, | |
"attributes": [ | |
{ | |
"id": 0, | |
"name": "Item Dimensions", | |
"position": 0, | |
"visible": True, | |
"variation": False, | |
"options": [ | |
"16 x 20 in." | |
] | |
}, | |
{ | |
"id": 2, | |
"name": "Original Painting", | |
"position": 1, | |
"visible": True, | |
"variation": True, | |
"options": [ | |
"Painting", | |
"Print" | |
] | |
}, | |
{ | |
"id": 1, | |
"name": "Print Size", | |
"position": 2, | |
"visible": True, | |
"variation": True, | |
"options": [ | |
"Small", | |
"Medium", | |
"Large", | |
"X-Large" | |
] | |
} | |
], | |
"categories" : [ | |
{ | |
"id": 17 | |
}, | |
{ | |
"id": 28 | |
} | |
] | |
} | |
if not WhatIf: | |
print("Converting product to Variation for: " + str(product_id)) | |
wcapi.put("products/" + str(product_id), attributes_data).json() | |
time.sleep(5) | |
else: | |
print("Skipped converting Product: " + str(product_id)) | |
print("================================================================") | |
## end of ConvertProductToVariable func ## | |
def ProcessProducts(product_id: int): | |
# Convert Product from Simple to Variable | |
ConvertProductToVariable(product_id) | |
# Iterate through the list of variations | |
for p_id, p_info in variationsDict.items(): | |
for key in p_info: | |
option1Value = key | |
option2Value = p_info[key] | |
results = checkVariations(product_id, option1, option1Value, option2, option2Value) | |
print("Results from checking variation: " + option1Value + ":" + option2Value + "==" + str(results)) | |
if results == True: | |
print("Variation already exists, so skipping: " + option1Value + ":" + option2Value) | |
else: | |
print("About to create variation for: " + option1Value + ":" + option2Value) | |
CreateProductVariation(product_id, option1, option1Value, option2, option2Value) | |
for product_id in ProductIDs: | |
#print(product_id) | |
GetProductInfo(product_id) | |
ProcessProducts(product_id) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment