headers validation in CSV

This commit is contained in:
Diego Calvo
2021-03-26 12:07:50 +01:00
parent 0251ce034e
commit 9604eee0ef
3 changed files with 10 additions and 2 deletions

View File

@@ -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: