improvement to WC migration

This commit is contained in:
Sam
2021-02-24 11:26:07 +00:00
parent e94e0c2dd5
commit 873ec25a92
3 changed files with 24 additions and 18 deletions

View File

@@ -8,6 +8,7 @@ This file holds the functions necesary to:
"""
import logging
from io import BytesIO
import datetime
from woocommerce import API
import requests
@@ -17,6 +18,7 @@ from django.core.files import File
from companies.models import Company
from products.models import Product
from products.serializers import ProductSerializer
from history.models import HistorySync
def get_wcapi_instance(url, key, secret, version="wc/v3"):
@@ -30,7 +32,7 @@ def get_wcapi_instance(url, key, secret, version="wc/v3"):
return wcapi
def migrate_shop_products(url, key, secret, version="wc/v3"):
def migrate_shop_products(url, key, secret, user=None, version="wc/v3"):
"""Tries to connect to WooCommerce site @ url with given credentials
If succesful, returns list of Product instances created
@@ -62,11 +64,23 @@ def migrate_shop_products(url, key, secret, version="wc/v3"):
print(f"Could not load products fom {url}: [{response.status_code}]")
return None
# create HistorySync instance and link to every product created
history = HistorySync.objects.create(
company=company,
sync_date=datetime.datetime.now(),
)
product_fields = [f.name for f in Product._meta.get_fields()]
counter = 0
products_created = []
for product in products:
instance_data = {'company':company.id}
# prepare instance data
instance_data = {
'company':company.id,
'creator': user.id if user is not None else None,
'history': history.id,
'url': product['permalink'],
}
# parse the product info
for key in product:
if key in product_fields:
@@ -77,20 +91,6 @@ def migrate_shop_products(url, key, secret, version="wc/v3"):
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():
@@ -129,6 +129,10 @@ def migrate_shop_products(url, key, secret, version="wc/v3"):
logging.info(f"Product {instance_data.get('name')} created")
print(f"Product {instance_data.get('name')} created")
# update history.quantity
history.quantity = counter
history.save()
print(f"Products created: {counter}")
return products_created