massive load of products working

This commit is contained in:
Sam
2021-02-03 13:00:08 +00:00
parent b7ab7eb5d3
commit b4eaa0f287
2 changed files with 31 additions and 15 deletions

View File

@@ -1 +1,10 @@
id,nombre-producto,descripcion,imagen,url,precio,gastos-envio,cond-envio,descuento,stock,tags,categoria,identificadores id,nombre-producto,descripcion,imagen,url,precio,gastos-envio,cond-envio,descuento,stock,tags,categoria,identificadores
,,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "alto, forma/redondo"
,mi-nombre,mi-descripcion,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl"
Can't render this file because it has a wrong number of fields in line 10.

View File

@@ -14,6 +14,7 @@ import requests
from products.models import Product from products.models import Product
from products.serializers import ProductSerializer from products.serializers import ProductSerializer
from companies.models import Company
from back_latienda.permissions import IsCreator from back_latienda.permissions import IsCreator
@@ -48,33 +49,38 @@ def load_coop_products(request):
decoded_file = csv_file.read().decode('utf-8').splitlines() decoded_file = csv_file.read().decode('utf-8').splitlines()
csv_reader = csv.DictReader(decoded_file, delimiter=',') csv_reader = csv.DictReader(decoded_file, delimiter=',')
counter = 0 counter = 0
for row in csv_reader: for row in csv_reader:
if '' in (row['nombre-producto'], row['descripcion'], row['precio']): if '' in (row['nombre-producto'], row['descripcion'], row['precio'], row['categoria']):
logging.error(f"Required data missing: {row}") logging.error(f"Required data missing: {row}")
continue continue
try: try:
# download image references in csv # download image references in csv
image_url = row['image'].strip() if row['imagen'].strip() != '':
response = requests.get(image_url, stream=True) image_url = row['imagen'].strip()
if response.status_code == 200: response = requests.get(image_url, stream=True)
path = f"{setting.BASE_DIR}media/{row['nombre-producto'].strip()}.{image.url.split('/')[-1]}" if response.status_code == 200:
logging.info(f"Saving product image to: {path}") path = f"{setting.BASE_DIR}media/{row['nombre-producto'].strip()}.{image.url.split('/')[-1]}"
new_image = open(path, 'wb') logging.info(f"Saving product image to: {path}")
for chunk in response: new_image = open(path, 'wb')
new_image.write(chunk) for chunk in response:
new_image.close() new_image.write(chunk)
new_image.close()
else:
logging.warning(f"Image URL did not work: {image_url}")
new_image = None
else: else:
logging.warninig(f"Image URL did not work: {image_url}")
new_image = None new_image = None
# assemble instance data # assemble instance data
product_data = { product_data = {
'id': None if row['id'].strip()=='' else row['id'].strip(), 'id': None if row['id'].strip()=='' else row['id'].strip(),
'name': row['nombre-coop'].strip(), 'company': Company.objects.filter(creator=request.user).first(),
'short_name': row['nombre-producto'].strip(), 'name': row['nombre-producto'].strip(),
'description': row['descripcion'].strip(), 'description': row['descripcion'].strip(),
'image': new_image, 'image': new_image,
'url': row['url'].strip(), 'url': row['url'].strip(),
'precio': row['precio'].strip(), 'price': row['precio'].strip(),
'shipping_cost': row['gastos-envio'].strip(), 'shipping_cost': row['gastos-envio'].strip(),
'shipping_terms': row['cond-envio'].strip(), 'shipping_terms': row['cond-envio'].strip(),
'discount': row['descuento'].strip(), 'discount': row['descuento'].strip(),
@@ -83,6 +89,7 @@ def load_coop_products(request):
'category': row['categoria'].strip(), 'category': row['categoria'].strip(),
'identifiers': row['identificadores'].strip(), 'identifiers': row['identificadores'].strip(),
} }
Product.objects.create(**product_data) Product.objects.create(**product_data)
logging.info(f"Created Product: {product_data}") logging.info(f"Created Product: {product_data}")
counter += 1 counter += 1