Files
consumocuidado-server/utils/woocommerce.py
2021-02-17 12:26:40 +00:00

116 lines
3.4 KiB
Python

"""
This file holds the functions necesary to:
- Connect to seller's shop API
- Load information on seller [??]
- Load product information
"""
import logging
from woocommerce import API
from companies.models import Company
from products.models import Product
from products.serializers import ProductSerializer
def get_wcapi_instance(url, key, secret, version="wc/v3"):
wcapi = API(
url=url,
consumer_key=key,
consumer_secret=secret,
wp_api=True,
version=version
)
return wcapi
def migrate_shop_products(url, key, secret, version="wc/v3"):
# get wcapi
wcapi = get_wcapi_instance(url, key, secret, version)
consumer_key = 'ck_565539bb25b472b1ff7a209eb157ca11c0a26397'
consumer_secret = 'cs_9c1690ba5da0dd70f51d61c395628fa14d1a104c'
# get company fom url
company = Company.objects.filter(web_link=url).first()
if not company:
# logging.error(f"Could not find Company with URL: {url}")
# print(f"Could not find Company with URL: {url}")
# return None
# TODO: ELIMINATE THIS AFTER DEBUGGING
company = Company.objects.create(web_link=url)
logging.error(f"Created Company for testing: {url}")
# list products
response = wcapi.get('/products/')
if response.status_code == 200:
products = response.json()
elif response.status_code == 401:
logging.error(f"{response.status_code} [{response.url}]: {response.json()}")
return None
else:
logging.error(f"Could not load products from {url}: [{response.status_code}]")
print(f"Could not load products fom {url}: [{response.status_code}]")
return None
product_fields = [f.name for f in Product._meta.get_fields()]
counter = 0
products_created = []
for product in products:
instance_data = {'company':company.id}
# parse the product info
for key in product:
if key in product_fields:
instance_data[key] = product[key]
# remove unwanted fields
instance_data.pop('id')
# extract m2m field data
tags = instance_data.pop('tags')
attributes = instance_data.pop('attributes')
# create instance with serializer
'''
serializer = ProductSerializer(data=instance_data)
if serializer.is_valid():
new = serializer.save()
if tags:
new.tags.set(tags)
if attributes:
new.attributes.set(attributes)
new.save()
else:
logging.error(f"{serializer.errors}")
continue
'''
# alternative method
serializer = ProductSerializer(data=instance_data)
if serializer.is_valid():
try:
new = Product.objects.create(**serializer.validated_data)
if tags:
new.tags.set(tags)
if attributes:
new.attributes.set(attributes)
new.save()
except Exception as e:
logging.error(f"Could not create product instance: {str(e)}")
else:
logging.error(f"{serializer.errors}")
continue
products_created.append(new)
counter += 1
logging.info(f"Product {instance_data.get('name')} created")
print(f"Product {instance_data.get('name')} created")
print(f"Products created: {counter}")
return products_created