From 0f7af9c0fb3eb175ef8d6149da0fbef2efaf3117 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 26 Feb 2021 11:46:40 +0000 Subject: [PATCH] isolated cooploading functionality --- core/utils.py | 39 +++++++++++++++++++++++++++++++++++++++ core/views.py | 30 +++--------------------------- products/tests.py | 1 - products/views.py | 1 - 4 files changed, 42 insertions(+), 29 deletions(-) diff --git a/core/utils.py b/core/utils.py index 732b99b..b94035d 100644 --- a/core/utils.py +++ b/core/utils.py @@ -13,6 +13,8 @@ from rest_framework_simplejwt.tokens import RefreshToken from tagulous.models import TagModel +from companies.models import Company + User = get_user_model() @@ -98,3 +100,40 @@ def reformat_google_taxonomy(file_name): line = line.replace(' > ', '/') destination_file.write(line) + +def coop_loader(csv_reader, request): + """ + Parse csv data and extract: + + - coop data + - manager user data + + Return counts + """ + coop_counter = 0 + user_counter = 0 + for row in csv_reader: + if '' in (row['cif'], row['nombre-coop'], row['email']): + logging.error(f"Required data missing: {row}") + continue + try: + coop_data = { + 'cif': row['cif'].strip(), + 'company_name': row['nombre-coop'].strip(), + 'short_name': row['nombre-corto'].strip(), + 'shop': bool(row['es-tienda'].strip()), + 'shop_link': row['url'].strip(), + } + coop = Company.objects.create(**coop_data) + logging.info(f"Created Coop: {coop_data}") + coop_counter += 1 + + coop_user = User.objects.create_user(email=row['email'], company=coop, role='COOP_MANAGER', is_active=False) + # send confirmation email + send_verification_email(request, coop_user) + logging.info(f"Created User: {coop_user}") + user_counter += 1 + except Exception as e: + logging.error(f"Could not parse {row}") + return coop_counter, user_counter + diff --git a/core/views.py b/core/views.py index b3a551a..2eec7cb 100644 --- a/core/views.py +++ b/core/views.py @@ -183,35 +183,11 @@ def load_coop_managers(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=',') - coop_counter = 0 - user_counter = 0 - for row in csv_reader: - if '' in (row['cif'], row['nombre-coop'], row['email']): - logging.error(f"Required data missing: {row}") - continue - try: - coop_data = { - 'cif': row['cif'].strip(), - 'company_name': row['nombre-coop'].strip(), - 'short_name': row['nombre-corto'].strip(), - 'shop': bool(row['es-tienda'].strip()), - 'shop_link': row['url'].strip(), - } - coop = Company.objects.create(**coop_data) - logging.info(f"Created Coop: {coop_data}") - coop_counter += 1 + coop_count, user_count = utils.coop_loader(csv_reader, request) - coop_user = User.objects.create_user(email=row['email'], company=coop, role='COOP_MANAGER', is_active=False) - # send confirmation email - utils.send_verification_email(request, coop_user) - logging.info(f"Created User: {coop_user}") - user_counter += 1 - except Exception as e: - logging.error(f"Could not parse {row}") - - return Response() + return Response({'details': f"Created {coop_count} Companies, {user_count} Managing Users"}) except Exception as e: - return Response({"errors": {"details": str(type(e))}}) + return Response({"errors": {"details": f'{type(e)}: {e}'}}) @api_view(['GET',]) diff --git a/products/tests.py b/products/tests.py index 745875b..720ea1b 100644 --- a/products/tests.py +++ b/products/tests.py @@ -533,7 +533,6 @@ class ProductSearchTest(TestCase): # check prices self.assertTrue(payload['prices']['min'] <= payload['prices']['max']) - def test_anon_user_can_paginate_search(self): expected_instances = [ self.factory(tags="lunares/rojos", category='zapatos', description="zapatos verdes"), diff --git a/products/views.py b/products/views.py index 8e45772..efc40c6 100644 --- a/products/views.py +++ b/products/views.py @@ -212,7 +212,6 @@ def product_search(request): for chunk in chunks: product_set, min_price, max_price = find_related_products_v6(chunk, shipping_cost, discount, category, tags, price_min, price_max) # update price values - # import ipdb; ipdb.set_trace() if prices['min'] is None or min_price['price__min'] < prices['min']: prices['min'] = min_price['price__min'] if prices['max'] is None or max_price['price__max'] > prices['max']: