diff --git a/datasets/test_products.csv b/datasets/test_products.csv index 376c863..5da2e6a 100644 --- a/datasets/test_products.csv +++ b/datasets/test_products.csv @@ -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" diff --git a/products/utils.py b/products/utils.py index 936c866..3f69ded 100644 --- a/products/utils.py +++ b/products/utils.py @@ -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'], diff --git a/products/views.py b/products/views.py index bf67980..41fb76a 100644 --- a/products/views.py +++ b/products/views.py @@ -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: