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,,,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"
|
||||
|
||||
|
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'],
|
||||
'name': row['nombre-producto'],
|
||||
'description': row['descripcion'],
|
||||
'url': row['url'].strip(),
|
||||
'url': row['url'],
|
||||
'price': row['precio'],
|
||||
'shipping_cost': row['gastos-envio'],
|
||||
'shipping_terms': row['cond-envio'],
|
||||
|
||||
@@ -102,12 +102,20 @@ def load_coop_products(request):
|
||||
|
||||
try:
|
||||
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:
|
||||
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)
|
||||
|
||||
logging.info(f"Reading contents of {csv_file.name}")
|
||||
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=',')
|
||||
count = product_loader(csv_reader, request.user)
|
||||
if count is None:
|
||||
|
||||
Reference in New Issue
Block a user