From 6e54d513c95653bdaaeb18937144b4cedab16ba0 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 16 Feb 2021 12:51:12 +0000 Subject: [PATCH] first steps on woocommerce integration --- products/views.py | 2 +- requirements.txt | 3 +- utils/woocommerce.py | 80 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 utils/woocommerce.py diff --git a/products/views.py b/products/views.py index f9f356b..9a3b5b5 100644 --- a/products/views.py +++ b/products/views.py @@ -48,7 +48,7 @@ class ProductViewSet(viewsets.ModelViewSet): @action(detail=True, methods=['GET',]) def related(request): - # find the most similar products + # TODO: find the most similar products return Response(data=[]) diff --git a/requirements.txt b/requirements.txt index 05d3342..cb2021b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,4 +12,5 @@ django-tagulous==1.1.0 Pillow==8.1.0 drf-extra-fields==3.0.4 django-ipware==3.0.2 -geoip2==4.1.0 \ No newline at end of file +geoip2==4.1.0 +woocommerce==2.1.1 diff --git a/utils/woocommerce.py b/utils/woocommerce.py new file mode 100644 index 0000000..8dce681 --- /dev/null +++ b/utils/woocommerce.py @@ -0,0 +1,80 @@ +""" +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()] + + for product in products: + instance_data = {} + # remove unwanted fields + product.pop('id') + for key in product: + if key in product_fields: + instance_data[key] = product[key] + # validate data + import ipdb; ipdb.set_trace() + serializer = ProductSerializer(**instance_data) + if serializer.is_valid(): + import ipdb; ipdb.set_trace() + Product.objects.create(**serializer.validated_data) + else: + import ipdb; ipdb.set_trace() + + + + +