From dd610118a7d7beca52f0b2d7ed82e802851ee7e6 Mon Sep 17 00:00:00 2001 From: Zainab Amir Date: Wed, 15 Dec 2021 19:07:25 +0500 Subject: [PATCH] feat: create braze alias and event (#29612) --- .../save_for_later/api/v1/tests/test_views.py | 2 + lms/djangoapps/save_for_later/api/v1/views.py | 61 +++++++++++-------- requirements/edx/base.in | 1 + requirements/edx/base.txt | 2 + requirements/edx/development.txt | 2 + requirements/edx/testing.txt | 2 + 6 files changed, 45 insertions(+), 25 deletions(-) diff --git a/lms/djangoapps/save_for_later/api/v1/tests/test_views.py b/lms/djangoapps/save_for_later/api/v1/tests/test_views.py index 03d0e3604c..7c3fe0594e 100644 --- a/lms/djangoapps/save_for_later/api/v1/tests/test_views.py +++ b/lms/djangoapps/save_for_later/api/v1/tests/test_views.py @@ -2,6 +2,7 @@ Tests for /save/course/ API. """ +from unittest.mock import patch, MagicMock import ddt from django.conf import settings @@ -37,6 +38,7 @@ class SaveForLaterApiViewTest(ThirdPartyAuthTestMixin, APITestCase): self.course_key = CourseKey.from_string(self.course_id) CourseOverviewFactory.create(id=self.course_key) + @patch('lms.djangoapps.save_for_later.api.v1.views.BrazeClient', MagicMock()) def test_save_course_using_email(self): """ Test successfully email sent diff --git a/lms/djangoapps/save_for_later/api/v1/views.py b/lms/djangoapps/save_for_later/api/v1/views.py index 10556860c3..873e5eafbb 100644 --- a/lms/djangoapps/save_for_later/api/v1/views.py +++ b/lms/djangoapps/save_for_later/api/v1/views.py @@ -2,27 +2,23 @@ Save for later views """ - +from datetime import datetime import logging from django.conf import settings from django.utils.decorators import method_decorator -from django.contrib.sites.models import Site from ratelimit.decorators import ratelimit from rest_framework.response import Response from rest_framework.views import APIView from django.db import transaction from opaque_keys.edx.keys import CourseKey -from edx_ace import ace -from edx_ace.recipient import Recipient +from braze.client import BrazeClient from eventtracking import tracker from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers from openedx.core.djangoapps.user_api.accounts.api import get_email_validation_error from openedx.core.djangoapps.content.course_overviews.models import CourseOverview -from openedx.core.djangoapps.ace_common.template_context import get_base_template_context -from lms.djangoapps.save_for_later.message_types import SaveForLater from lms.djangoapps.save_for_later.models import SavedCourse log = logging.getLogger(__name__) @@ -84,28 +80,43 @@ class SaveForLaterApiView(APIView): except CourseOverview.DoesNotExist: return Response({'error_code': 'course-not-found'}, status=404) - site = Site.objects.get_current() - message_context = get_base_template_context(site) - message_context.update({ - 'course_image_url': course_overview.course_image_url, - 'partner_image_url': org_img_url, - 'enroll_course_url': '/register?course_id={course_key}&enrollment_action=enroll&email_opt_in=false&' - 'save_for_later=true'.format(course_key=course_key), - 'view_course_url': marketing_url + '?save_for_later=true' if marketing_url else '#', - 'course_key': course_key, - 'display_name': course_overview.display_name, - 'short_description': course_overview.short_description, - 'lms_url': configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL), - 'from_address': configuration_helpers.get_value('email_from_address', settings.DEFAULT_FROM_EMAIL), - }) + lms_url = configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL) + event_properties = { + 'time': datetime.now().isoformat(), + 'name': 'user.send.save.for.later.email', + 'properties': { + 'course_image_url': '{base_url}{image_path}'.format( + base_url=lms_url, image_path=course_overview.course_image_url + ), + 'partner_image_url': '{base_url}{image_path}'.format(base_url=lms_url, image_path=org_img_url), + 'enroll_course_url': '{base_url}/register?course_id={course_id}&enrollment_action=enroll&email_opt_in=' + 'false&save_for_later=true'.format(base_url=lms_url, course_id=course_key), + 'view_course_url': marketing_url + '?save_for_later=true' if marketing_url else '#', + 'display_name': course_overview.display_name, + 'short_description': course_overview.short_description, + } + } - msg = SaveForLater().personalize( - recipient=Recipient(lms_user_id=0, email_address=email), - language=settings.LANGUAGE_CODE, - user_context=message_context, + braze_client = BrazeClient( + api_key=configuration_helpers.get_value('BRAZE_API_KEY'), + api_url=configuration_helpers.get_value('BRAZE_API_URL'), + app_id=configuration_helpers.get_value('BRAZE_APP_ID'), ) + try: - ace.send(msg) + external_id = braze_client.get_braze_external_id(email) + if external_id: + event_properties.update({'external_id': external_id}) + else: + braze_client.create_braze_alias(emails=[email], alias_label='save_for_later') + event_properties.update({ + 'user_alias': { + 'alias_label': 'save_for_later', + 'alias_name': email, + }, + }) + + braze_client.track_user(events=[event_properties]) tracker.emit( USER_SENT_EMAIL_SAVE_FOR_LATER, { diff --git a/requirements/edx/base.in b/requirements/edx/base.in index c7c124f492..9cd76900d8 100644 --- a/requirements/edx/base.in +++ b/requirements/edx/base.in @@ -72,6 +72,7 @@ done-xblock edx-ace edx-api-doc-tools edx-auth-backends # Allow Studio to use LMS SSO +edx-braze-client edx-bulk-grades # LMS REST API for managing bulk grading operations edx-ccx-keys edx-celeryutils diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index b1340875cb..f6b02334e5 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -396,6 +396,8 @@ edx-api-doc-tools==1.5.0 # via -r requirements/edx/base.in edx-auth-backends==4.0.1 # via -r requirements/edx/base.in +edx-braze-client==0.1.0 + # via -r requirements/edx/base.in edx-bulk-grades==0.9.2 # via # -r requirements/edx/base.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index eaaf3595ff..9e2f071a8e 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -502,6 +502,8 @@ edx-api-doc-tools==1.5.0 # via -r requirements/edx/testing.txt edx-auth-backends==4.0.1 # via -r requirements/edx/testing.txt +edx-braze-client==0.1.0 + # via -r requirements/edx/testing.txt edx-bulk-grades==0.9.2 # via # -r requirements/edx/testing.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 687d80d5b5..453e8c3b70 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -484,6 +484,8 @@ edx-api-doc-tools==1.5.0 # via -r requirements/edx/base.txt edx-auth-backends==4.0.1 # via -r requirements/edx/base.txt +edx-braze-client==0.1.0 + # via -r requirements/edx/base.txt edx-bulk-grades==0.9.2 # via # -r requirements/edx/base.txt