first steps on woocommerce integration
This commit is contained in:
@@ -48,7 +48,7 @@ class ProductViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
@action(detail=True, methods=['GET',])
|
@action(detail=True, methods=['GET',])
|
||||||
def related(request):
|
def related(request):
|
||||||
# find the most similar products
|
# TODO: find the most similar products
|
||||||
return Response(data=[])
|
return Response(data=[])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,4 +12,5 @@ django-tagulous==1.1.0
|
|||||||
Pillow==8.1.0
|
Pillow==8.1.0
|
||||||
drf-extra-fields==3.0.4
|
drf-extra-fields==3.0.4
|
||||||
django-ipware==3.0.2
|
django-ipware==3.0.2
|
||||||
geoip2==4.1.0
|
geoip2==4.1.0
|
||||||
|
woocommerce==2.1.1
|
||||||
|
|||||||
80
utils/woocommerce.py
Normal file
80
utils/woocommerce.py
Normal file
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user