improvements to coop loader
This commit is contained in:
@@ -452,7 +452,6 @@ class LoadCoopManagerTestCase(APITestCase):
|
|||||||
|
|
||||||
# send in request
|
# send in request
|
||||||
response = self.client.post(self.endpoint, files)
|
response = self.client.post(self.endpoint, files)
|
||||||
import ipdb; ipdb.set_trace()
|
|
||||||
# check response
|
# check response
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
# check for object creation
|
# check for object creation
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
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
|
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 tagulous.models import TagModel
|
||||||
|
|
||||||
from companies.models import Company
|
from companies.models import Company
|
||||||
@@ -116,7 +120,7 @@ def coop_loader(csv_reader, request=None):
|
|||||||
for row in csv_reader:
|
for row in csv_reader:
|
||||||
# trim strings
|
# trim strings
|
||||||
for key in row:
|
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()
|
# import ipdb; ipdb.set_trace()
|
||||||
if '' in (row['cif'], row['nombre-coop'], row['email']):
|
if '' in (row['cif'], row['nombre-coop'], row['email']):
|
||||||
logging.error(f"Required data missing: {row}")
|
logging.error(f"Required data missing: {row}")
|
||||||
@@ -136,14 +140,19 @@ def coop_loader(csv_reader, request=None):
|
|||||||
try:
|
try:
|
||||||
validator(row['url'])
|
validator(row['url'])
|
||||||
except ValidationError:
|
except ValidationError:
|
||||||
logging.warning(f"Invalid url value '{row['url']}', skipped")
|
logging.warning(f"Invalid url value '{row['url']}'")
|
||||||
row['url'] = None
|
row['url'] = None
|
||||||
try:
|
try:
|
||||||
validator(row['logo-url'])
|
validator(row['logo-url'])
|
||||||
except ValidationError:
|
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
|
row['logo-url'] = None
|
||||||
# validate boolean
|
# validate boolean
|
||||||
|
try:
|
||||||
|
shop = bool(row['es-tienda'])
|
||||||
|
except:
|
||||||
|
logging.warning(f"Invalid valur for es-tiends: {row['es-tienda']}")
|
||||||
|
shop = None
|
||||||
|
|
||||||
# create instances
|
# create instances
|
||||||
try:
|
try:
|
||||||
@@ -151,10 +160,31 @@ def coop_loader(csv_reader, request=None):
|
|||||||
'cif': row['cif'],
|
'cif': row['cif'],
|
||||||
'company_name': row['nombre-coop'],
|
'company_name': row['nombre-coop'],
|
||||||
'short_name': row['nombre-corto'],
|
'short_name': row['nombre-corto'],
|
||||||
'shop': bool(row['es-tienda']),
|
'shop': shop,
|
||||||
'shop_link': row['url'],
|
'shop_link': row['url'],
|
||||||
|
'phone': row['telefono'],
|
||||||
|
'address': row['direccion'],
|
||||||
}
|
}
|
||||||
coop = Company.objects.create(**coop_data)
|
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}")
|
logging.info(f"Created Coop: {coop_data}")
|
||||||
coop_counter += 1
|
coop_counter += 1
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ def create_imported_product(info, company, history, user):
|
|||||||
# save using File object
|
# save using File object
|
||||||
img_io = BytesIO()
|
img_io = BytesIO()
|
||||||
image.save(img_io, format=image.format)
|
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()
|
new.save()
|
||||||
except AssertionError as e:
|
except AssertionError as e:
|
||||||
logging.error(f"Source image [{info['images'][0]['src']}] not reachable: {response.status_code}")
|
logging.error(f"Source image [{info['images'][0]['src']}] not reachable: {response.status_code}")
|
||||||
|
|||||||
Reference in New Issue
Block a user