diff --git a/datasets/test_products.csv b/datasets/test_products.csv index 0257322..376c863 100644 --- a/datasets/test_products.csv +++ b/datasets/test_products.csv @@ -1,10 +1,10 @@ -sku,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" \ No newline at end of file +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" +,mi-nombre,mi-descripcion3,,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-descripcion4,,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-descripcion5,,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-descripcion6,,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-descripcion7,,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-descripcion8,,coop.com,10.00,5.01,"condiciones de envio, una cosa, y la otra",4.05,1000,"color/rojo, talla/xxl",, \ No newline at end of file diff --git a/products/tests.py b/products/tests.py index 1b64ee4..7d09e13 100644 --- a/products/tests.py +++ b/products/tests.py @@ -434,11 +434,10 @@ class LoadCoopProductsTestCase(APITestCase): # send in request response = self.client.post(self.endpoint, files) - # check response self.assertEqual(response.status_code, 200) # check for object creation - self.assertEquals(5, self.model.objects.count()) + self.assertEquals(9, self.model.objects.count()) def test_auth_user_with_no_company_cannot_load_csv(self): # delete existing instances @@ -455,7 +454,7 @@ class LoadCoopProductsTestCase(APITestCase): response = self.client.post(self.endpoint, files) # check response - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 406) # check for object creation self.assertEqual(0, self.model.objects.count()) diff --git a/products/utils.py b/products/utils.py index 8ca91ac..e635a37 100644 --- a/products/utils.py +++ b/products/utils.py @@ -187,16 +187,19 @@ def product_loader(csv_reader, user, company=None): for row in csv_reader: # trim strings for key in row: - if row[key]: - if 'imagen' in key or 'categoria' in key: - row[key] = row[key].strip() - elif key in ['precio', 'gastos-envio']: - row[key] = Decimal(row[key][:-1].strip().replace(',','.')) + try: + if row[key]: + if 'imagen' in key or 'categoria' in key: + row[key] = row[key].strip() + elif key in ['precio', 'gastos-envio']: + row[key] = Decimal(row[key][:-1].strip().replace(',','.')) + else: + row[key] = row[key].strip() else: - row[key] = row[key].strip() - if row[key] == '': - row[key] = None - + row[key] = None + except Exception as e: + logging.error(f"Could not access key {key}: {str(e)}") + continue # check required data if '' in (row['nombre-producto'], row['descripcion'], row['precio'],): logging.error(f"Required data missing: {row}") diff --git a/products/views.py b/products/views.py index c49b8c1..a1b2177 100644 --- a/products/views.py +++ b/products/views.py @@ -80,13 +80,12 @@ def load_coop_products(request): logging.info(f"Reading contents of {csv_file.name}") decoded_file = csv_file.read().decode('utf-8').splitlines() csv_reader = csv.DictReader(decoded_file, delimiter=',') - count = product_loader(csv_reader, request.user) if count is None: return Response({"errors": {"details": "Authenticated user is not related to any company"}}, status=status.HTTP_406_NOT_ACCEPTABLE) return Response(f"{count} products registered for {request.user.company.company_name}") except Exception as e: - return Response({"errors": {"details": str(type(e))}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + return Response({"errors": {"details": str(e)}}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) @api_view(['GET',]) # include allowed methods