From 25b8e561d33e3ba73161f0855aed8afc553cafd5 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 26 Feb 2021 13:16:37 +0000 Subject: [PATCH] improvements to coop loader --- core/tests.py | 1 - core/utils.py | 38 ++++++++++++++++++++++++++++++++++---- utils/woocommerce.py | 2 +- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/core/tests.py b/core/tests.py index 6a249ae..bc48c2c 100644 --- a/core/tests.py +++ b/core/tests.py @@ -452,7 +452,6 @@ class LoadCoopManagerTestCase(APITestCase): # send in request response = self.client.post(self.endpoint, files) - import ipdb; ipdb.set_trace() # check response self.assertEqual(response.status_code, 200) # check for object creation diff --git a/core/utils.py b/core/utils.py index 14a363f..b4c1c8e 100644 --- a/core/utils.py +++ b/core/utils.py @@ -1,4 +1,5 @@ import logging +from io import BytesIO from django.contrib.auth import get_user_model from django.contrib.sites.shortcuts import get_current_site @@ -12,6 +13,9 @@ from django.core.validators import validate_email, EmailValidator, URLValidator, from rest_framework_simplejwt.tokens import RefreshToken +import requests +from PIL import Image +from django.core.files import File from tagulous.models import TagModel from companies.models import Company @@ -116,7 +120,7 @@ def coop_loader(csv_reader, request=None): for row in csv_reader: # trim strings for key in row: - if row[key]: row[key] = row[key].strip() + if row[key]: row[key] = row[key].strip().lower() # import ipdb; ipdb.set_trace() if '' in (row['cif'], row['nombre-coop'], row['email']): logging.error(f"Required data missing: {row}") @@ -136,14 +140,19 @@ def coop_loader(csv_reader, request=None): try: validator(row['url']) except ValidationError: - logging.warning(f"Invalid url value '{row['url']}', skipped") + logging.warning(f"Invalid url value '{row['url']}'") row['url'] = None try: validator(row['logo-url']) except ValidationError: - logging.warning(f"Invalid url value '{row['logo-url']}', skipped") + logging.warning(f"Invalid logo URL value '{row['logo-url']}'") row['logo-url'] = None # validate boolean + try: + shop = bool(row['es-tienda']) + except: + logging.warning(f"Invalid valur for es-tiends: {row['es-tienda']}") + shop = None # create instances try: @@ -151,10 +160,31 @@ def coop_loader(csv_reader, request=None): 'cif': row['cif'], 'company_name': row['nombre-coop'], 'short_name': row['nombre-corto'], - 'shop': bool(row['es-tienda']), + 'shop': shop, 'shop_link': row['url'], + 'phone': row['telefono'], + 'address': row['direccion'], } coop = Company.objects.create(**coop_data) + # image logo data + if row['logo-url'] is not None: + try: + # get image + headers={"User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"} + response = requests.get(row['logo-url'], stream=True, headers=headers) + assert(response.status_code==200) + response.raw.decode_content = True + image = Image.open(response.raw) + # save using File object + img_io = BytesIO() + image.save(img_io, format=image.format) + coop.logo.save(f"{coop.company_name}.{image.format.lower()}", File(img_io), save=False) + coop.save() + except AssertionError as e: + logging.error(f"Source image [{row['logo-url']}] not reachable: {response.status_code}") + except Exception as e: + logging.error(f"Could not add image to COOP {coop.company_name} from [{row['logo-url']}]: {str(e)}") + # logging.info(f"Created Coop: {coop_data}") coop_counter += 1 diff --git a/utils/woocommerce.py b/utils/woocommerce.py index be2a34c..8cc76f7 100644 --- a/utils/woocommerce.py +++ b/utils/woocommerce.py @@ -86,7 +86,7 @@ def create_imported_product(info, company, history, user): # save using File object img_io = BytesIO() image.save(img_io, format=image.format) - new.image.save(f"{new.name}-{new.sku}.jpg", File(img_io), save=False) + new.image.save(f"{new.name}-{new.sku}.{image.format.lower()}", File(img_io), save=False) new.save() except AssertionError as e: logging.error(f"Source image [{info['images'][0]['src']}] not reachable: {response.status_code}")