From 213e32cf6d9d0703a6e10edc65cb8c17608947f0 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Thu, 28 Jun 2018 17:09:45 +0100 Subject: [PATCH 1/3] Added a one off command to add many invited user to a service. It would be nice to add something that can do this from the Admin app. --- app/commands.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ app/invite/rest.py | 4 ++++ 2 files changed, 49 insertions(+) diff --git a/app/commands.py b/app/commands.py index eda6ae69e..e3f1a9923 100644 --- a/app/commands.py +++ b/app/commands.py @@ -33,6 +33,7 @@ from app.dao.services_dao import ( dao_fetch_service_by_id ) from app.dao.users_dao import (delete_model_user, delete_user_verify_codes) +from app.invite.rest import create_invited_user from app.models import PROVIDERS, User, SMS_TYPE, EMAIL_TYPE, Notification from app.performance_platform.processing_time import (send_processing_time_for_start_and_end) from app.utils import ( @@ -622,3 +623,47 @@ def migrate_data_to_ft_notification_status(start_date, end_date): total_updated += result.rowcount print('Total inserted/updated records = {}'.format(total_updated)) + + +@notify_command(name='bulk-invite-user-to-service') +@click.option('-f', '--file_name', required=True, + help="Full path of the file containing a list of email address for people to invite to a service") +@click.option('-s', '--service_id', required=True, help='The id of the service that the invite is for') +@click.option('-u', '--user_id', required=True, help='The id of the user that the invite is from') +@click.option('-a', '--auth_type', required=False, + help='The authentication type for the user, sms_auth or email_auth. Defaults to sms_auth if not provided') +@click.option('-p', '--permissions', required=True, help='Comma separated list of permissions.') +def bulk_invite_user_to_service(file_name, service_id, user_id, auth_type, permissions): + # permissions + # manage_users | manage_templates | manage_settings + # send messages ==> send_texts | send_emails | send_letters + # Access API keys manage_api_keys + # platform_admin + # view_activity + # "send_texts,send_emails,send_letters,view_activity" + + file = open(file_name) + for email_address in file: + data = { + 'service': service_id, + 'email_address': email_address.strip(), + 'from_user': user_id, + 'permissions': permissions, + 'auth_type': auth_type, + 'invite_link_host': current_app.config['ADMIN_BASE_URL'] + } + with current_app.test_request_context( + path='/service/{}/invite/'.format(service_id), + method='POST', + data=json.dumps(data), + headers={"Content-Type": "application/json"} + ): + try: + response = create_invited_user(service_id) + if response[1] != 201: + print("*** ERROR occurred for email address: {}".format(email_address.strip())) + print(response[0].get_data(as_text=True)) + except Exception as e: + print("*** ERROR occurred for email address: {}. \n{}".format(email_address.strip(), e)) + + file.close() diff --git a/app/invite/rest.py b/app/invite/rest.py index fcd7e7b08..0d6c86bb3 100644 --- a/app/invite/rest.py +++ b/app/invite/rest.py @@ -1,3 +1,5 @@ +import json + from flask import ( Blueprint, request, @@ -24,6 +26,8 @@ register_errors(invite) @invite.route('', methods=['POST']) def create_invited_user(service_id): request_json = request.get_json() + # request_json = request.data + print(request_json) invited_user, errors = invited_user_schema.load(request_json) save_invited_user(invited_user) From b201711705d292a157f92de2bd460e9eb4cd76b7 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Fri, 29 Jun 2018 10:26:14 +0100 Subject: [PATCH 2/3] Undo the chnages to create_invited_user --- app/invite/rest.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/invite/rest.py b/app/invite/rest.py index 0d6c86bb3..fcd7e7b08 100644 --- a/app/invite/rest.py +++ b/app/invite/rest.py @@ -1,5 +1,3 @@ -import json - from flask import ( Blueprint, request, @@ -26,8 +24,6 @@ register_errors(invite) @invite.route('', methods=['POST']) def create_invited_user(service_id): request_json = request.get_json() - # request_json = request.data - print(request_json) invited_user, errors = invited_user_schema.load(request_json) save_invited_user(invited_user) From f4846c88c9f281daf43dc4246bf3ea10c44e9dcc Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Fri, 29 Jun 2018 11:12:54 +0100 Subject: [PATCH 3/3] Had to move the import to the method rather than the top of the file. --- app/commands.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/commands.py b/app/commands.py index e3f1a9923..b130d97a8 100644 --- a/app/commands.py +++ b/app/commands.py @@ -33,7 +33,6 @@ from app.dao.services_dao import ( dao_fetch_service_by_id ) from app.dao.users_dao import (delete_model_user, delete_user_verify_codes) -from app.invite.rest import create_invited_user from app.models import PROVIDERS, User, SMS_TYPE, EMAIL_TYPE, Notification from app.performance_platform.processing_time import (send_processing_time_for_start_and_end) from app.utils import ( @@ -641,7 +640,7 @@ def bulk_invite_user_to_service(file_name, service_id, user_id, auth_type, permi # platform_admin # view_activity # "send_texts,send_emails,send_letters,view_activity" - + from app.invite.rest import create_invited_user file = open(file_name) for email_address in file: data = {