""" 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} # 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') if instance_data.get('tags') == []: instance_data.pop('tags') if instance_data.get('attributes') == []: instance_data.pop('attributes') # create instance try: new = Product.objects.create(**instance_data) products_created.append(new) counter += 1 logging.info(f"Product {instance_data.get('name')} created") print(f"Product {instance_data.get('name')} created") except Exception as e: logging.error(f"Could not create product instance: {str(e)}") print(f"Products created: {counter}") return products_created