def _get_course_email_context(course): """ Returns context arguments to apply to all emails, independent of recipient. """ course_id = str(course.id) course_title = course.display_name course_end_date = get_default_time_display(course.end) course_root = reverse('course_root', kwargs={'course_id': course_id}) course_url = '{}{}'.format( settings.LMS_ROOT_URL, course_root ) image_url = f'{settings.LMS_ROOT_URL}{course_image_url(course)}' lms_root_url = configuration_helpers.get_value('LMS_ROOT_URL', settings.LMS_ROOT_URL) email_context = { 'course_title': course_title, 'course_root': course_root, 'course_language': course.language, 'course_url': course_url, 'course_image_url': image_url, 'course_end_date': course_end_date, 'account_settings_url': '{}{}'.format(lms_root_url, reverse('account_settings')), 'email_settings_url': '{}{}'.format(lms_root_url, reverse('dashboard')), 'logo_url': get_logo_url_for_email(), 'platform_name': configuration_helpers.get_value('PLATFORM_NAME', settings.PLATFORM_NAME), 'year': timezone.now().year, } return email_context
def _get_asset_json(display_name, content_type, date, location, thumbnail_location, locked): ''' Helper method for formatting the asset information to send to client. ''' asset_url = StaticContent.serialize_asset_key_with_slash(location) external_url = settings.LMS_BASE + asset_url return { 'display_name': display_name, 'content_type': content_type, 'date_added': get_default_time_display(date), 'url': asset_url, 'external_url': external_url, 'portable_url': StaticContent.get_static_path_from_location(location), 'thumbnail': StaticContent.serialize_asset_key_with_slash(thumbnail_location) if thumbnail_location else None, 'locked': locked, # needed for Backbone delete/update. 'id': six.text_type(location) }
def __init__(self, fake_email, num_sent, num_failed): super().__init__() self.created = get_default_time_display(fake_email.created) number_sent = str(num_sent) + ' sent' if num_failed > 0: number_sent += ', ' + str(num_failed) + " failed" self.number_sent = number_sent fake_email_dict = fake_email.to_dict() self.email = {feature: fake_email_dict[feature] for feature in self.EMAIL_FEATURES} self.requester = 'expected' self.sent_to = ['expected']
def setUp(self): super().setUp() self.user = UserFactory.create(email="*****@*****.**", username="******", profile__name="Test User") self.course = CourseFactory.create(org='edx', course='999', display_name='test_course') self.context = { 'user_id': self.user.id, 'course_title': self.course.display_name, 'name': self.user.profile.name, 'course_end_date': get_default_time_display(self.course.end), }
def setUp(self): super(KeywordSubTest, self).setUp() # lint-amnesty, pylint: disable=super-with-arguments self.user = UserFactory.create(email="*****@*****.**", username="******", profile__name="Test User") self.course = CourseFactory.create(org='edx', course='999', display_name='test_course') self.context = { 'user_id': self.user.id, 'course_title': self.course.display_name, 'name': self.user.profile.name, 'course_end_date': get_default_time_display(self.course.end), }
def __init__(self, fake_email, num_sent, num_failed): super(FakeEmailInfo, self).__init__() # lint-amnesty, pylint: disable=super-with-arguments self.created = get_default_time_display(fake_email.created) number_sent = str(num_sent) + ' sent' if num_failed > 0: number_sent += ', ' + str(num_failed) + " failed" self.number_sent = number_sent fake_email_dict = fake_email.to_dict() self.email = { feature: fake_email_dict[feature] for feature in self.EMAIL_FEATURES } self.requester = u'expected' self.sent_to = [u'expected']
def default(self, obj): if isinstance(obj, datetime): return get_default_time_display(obj) return json.JSONEncoder.default(self, obj)
def extract_email_features(email_task): """ From the given task, extract email content information Expects that the given task has the following attributes: * task_input (dict containing email_id) * task_output (optional, dict containing total emails sent) * requester, the user who executed the task With this information, gets the corresponding email object from the bulk emails table, and loads up a dict containing the following: * created, the time the email was sent displayed in default time display * sent_to, the group the email was delivered to * email, dict containing the subject, id, and html_message of an email * number_sent, int number of emails sent * requester, the user who sent the emails If task_input cannot be loaded, then the email cannot be loaded and None is returned for these fields. """ # Load the task input info to get email id try: task_input_information = json.loads(email_task.task_input) except ValueError: log.error(u"Could not parse task input as valid json; task input: %s", email_task.task_input) return email_error_information() email = CourseEmail.objects.get(id=task_input_information['email_id']) email_feature_dict = { 'created': get_default_time_display(email.created), 'sent_to': [target.long_display() for target in email.targets.all()], 'requester': str(email_task.requester), } features = ['subject', 'html_message', 'id'] email_info = {feature: six.text_type(getattr(email, feature)) for feature in features} # Pass along email as an object with the information we desire email_feature_dict['email'] = email_info # Translators: number sent refers to the number of emails sent number_sent = _('0 sent') if hasattr(email_task, 'task_output') and email_task.task_output is not None: try: task_output = json.loads(email_task.task_output) except ValueError: log.error(u"Could not parse task output as valid json; task output: %s", email_task.task_output) else: if 'succeeded' in task_output and task_output['succeeded'] > 0: num_emails = task_output['succeeded'] number_sent = ungettext( u"{num_emails} sent", u"{num_emails} sent", num_emails ).format(num_emails=num_emails) if 'failed' in task_output and task_output['failed'] > 0: num_emails = task_output['failed'] number_sent += ", " number_sent += ungettext( u"{num_emails} failed", u"{num_emails} failed", num_emails ).format(num_emails=num_emails) email_feature_dict['number_sent'] = number_sent return email_feature_dict
def test_get_default_time_display_no_tzname(): assert get_default_time_display(None) == "" test_time = datetime(1992, 3, 12, 15, 3, 30, tzinfo=NamelessTZ()) assert get_default_time_display(test_time) == "Mar 12, 1992 at 15:03-0300"
def test_get_dflt_time_disp_notz(): test_time = datetime(1992, 3, 12, 15, 3, 30) assert get_default_time_display(test_time) == "Mar 12, 1992 at 15:03 UTC"
def test_get_default_time_display(): assert get_default_time_display(None) == "" test_time = datetime(1992, 3, 12, 15, 3, 30, tzinfo=utc) assert get_default_time_display(test_time) == "Mar 12, 1992 at 15:03 UTC"
def default(self, obj): # lint-amnesty, pylint: disable=arguments-differ if isinstance(obj, datetime): return get_default_time_display(obj) return json.JSONEncoder.default(self, obj)