headers validation in CSV
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
sku,nombre-producto,descripcion,imagen,url,precio,gastos-envio,cond-envio,descuento,stock,tags,categoria,identificadores,
|
sku,nombre-producto,descripcion,imagen,url,precio,gastos-envio,cond-envio,descuento,stock,tags,categoria,identificadores
|
||||||
,mi-nombre,mi-descripcion1,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio,"color/rojo, talla/xxl"
|
,mi-nombre,mi-descripcion1,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio,"color/rojo, talla/xxl"
|
||||||
,mi-nombre,,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "color/rojo, talla/xxl"
|
,mi-nombre,,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio, "color/rojo, talla/xxl"
|
||||||
,mi-nombre,mi-descripcion2,,coop.com,3.25,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio,"dimension/alto, forma/redondo"
|
,mi-nombre,mi-descripcion2,,coop.com,3.25,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl", limpio,"dimension/alto, forma/redondo"
|
||||||
|
|||||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@@ -241,7 +241,7 @@ def product_loader(csv_reader, user, company=None):
|
|||||||
'sku': row['sku'],
|
'sku': row['sku'],
|
||||||
'name': row['nombre-producto'],
|
'name': row['nombre-producto'],
|
||||||
'description': row['descripcion'],
|
'description': row['descripcion'],
|
||||||
'url': row['url'].strip(),
|
'url': row['url'],
|
||||||
'price': row['precio'],
|
'price': row['precio'],
|
||||||
'shipping_cost': row['gastos-envio'],
|
'shipping_cost': row['gastos-envio'],
|
||||||
'shipping_terms': row['cond-envio'],
|
'shipping_terms': row['cond-envio'],
|
||||||
|
|||||||
@@ -102,12 +102,20 @@ def load_coop_products(request):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
csv_file = request.FILES['csv_file']
|
csv_file = request.FILES['csv_file']
|
||||||
|
expected_fieldnames = ['sku','nombre-producto','descripcion','imagen','url','precio','gastos-envio','cond-envio','descuento','stock','tags','categoria','identificadores']
|
||||||
|
|
||||||
if csv_file.name.endswith('.csv') is not True:
|
if csv_file.name.endswith('.csv') is not True:
|
||||||
logging.error(f"File {csv_file.name} is not a CSV file")
|
logging.error(f"File {csv_file.name} is not a CSV file")
|
||||||
return Response({"errors":{"details": "File is not CSV type"}}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
return Response({"errors":{"details": "File is not CSV type"}}, status=status.HTTP_406_NOT_ACCEPTABLE)
|
||||||
|
|
||||||
logging.info(f"Reading contents of {csv_file.name}")
|
logging.info(f"Reading contents of {csv_file.name}")
|
||||||
decoded_file = csv_file.read().decode('utf-8').splitlines()
|
decoded_file = csv_file.read().decode('utf-8').splitlines()
|
||||||
|
|
||||||
|
fieldnames = decoded_file[0].split(',')
|
||||||
|
# Check the fieldnames are as specified, if requested
|
||||||
|
if expected_fieldnames and fieldnames != expected_fieldnames:
|
||||||
|
return Response({"errors": {"details": f"The CSV fields are expected to be {','.join(expected_fieldnames)}"}}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
csv_reader = csv.DictReader(decoded_file, delimiter=',')
|
csv_reader = csv.DictReader(decoded_file, delimiter=',')
|
||||||
count = product_loader(csv_reader, request.user)
|
count = product_loader(csv_reader, request.user)
|
||||||
if count is None:
|
if count is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user