def test_notification_registration(self): flags = {} flags['got_notification'] = False def notification_function(arguments): message = "Test" message_arguments = {} user = User.objects.get(username='******') NotificationHandler.send_notification(user, 'test_notification', message, message_arguments) flags['got_notification'] = True NotificationHandler.register_notification('test_notification', notification_function) logger = logging.getLogger('oioioi') logger.info("Test notification", extra= {'notification': 'test_notification'}) self.assertTrue(flags['got_notification'])
def test_notification_registration(self): flags = {} flags['got_notification'] = False def notification_function(arguments): message = "Test" message_arguments = {} user = User.objects.get(username='******') NotificationHandler.send_notification(user, 'test_notification', message, message_arguments) flags['got_notification'] = True NotificationHandler.register_notification('test_notification', notification_function) logger = logging.getLogger('oioioi') logger.info("Test notification", extra={'notification': 'test_notification'}) self.assertTrue(flags['got_notification'])
# Check if any initial result is visible for user if not pi.controller.can_see_submission_status(request, arguments.submission): return if pi.contest: url = reverse( 'submission', kwargs={ 'contest_id': pi.contest.pk, 'submission_id': arguments.submission.pk, }, ) elif pi.problem.problemsite: url = (reverse('problem_site', kwargs={'site_key': pi.problem.problemsite.url_key}) + '?key=submissions') else: url = '' message = ugettext_noop("Initial result for task %(short_name)s is ready") message_arguments = {'short_name': pi.short_name, 'address': url} NotificationHandler.send_notification(arguments.user, 'initial_results', message, message_arguments) NotificationHandler.register_notification( 'initial_results', notification_function_initial_results)
def notification_function_submission_judged(arguments): assert hasattr(arguments, 'user') and \ hasattr(arguments, 'submission') pi = arguments.submission.problem_instance request = RequestFactory().get('/', data={'name': u'test'}) request.user = arguments.user request.contest = pi.contest request.timestamp = datetime.now().replace(tzinfo=utc) # Check if the final report is visible to the user if not pi.contest.controller.can_see_submission_score(request, arguments.submission): return url = reverse('submission', kwargs={'contest_id': pi.contest.pk, 'submission_id': arguments.submission.pk}) message = pi.contest.controller \ .get_notification_message_submission_judged(arguments.submission) message_arguments = {'short_name': pi.short_name, 'address': url} NotificationHandler.send_notification(arguments.user, 'submission_judged', message, message_arguments) NotificationHandler.register_notification('submission_judged', notification_function_submission_judged)
# Check if the final report is visible to the user if not pi.contest.controller.can_see_submission_score( request, arguments.submission): return url = reverse( 'submission', kwargs={ 'contest_id': pi.contest.pk, 'submission_id': arguments.submission.pk }, ) message = pi.contest.controller.get_notification_message_submission_judged( arguments.submission) message_arguments = { 'short_name': pi.short_name, 'contest_name': pi.contest.name, 'task_name': six.text_type(pi), 'score': six.text_type(arguments.submission.score), 'address': url, } NotificationHandler.send_notification(arguments.user, 'submission_judged', message, message_arguments) NotificationHandler.register_notification( 'submission_judged', notification_function_submission_judged)
request = RequestFactory().get('/', data={'name': u'test'}) request.user = arguments.user request.contest = pi.contest request.timestamp = datetime.now().replace(tzinfo=utc) # Check if any initial result is visible for user if not pi.controller \ .can_see_submission_status(request, arguments.submission): return if pi.contest: url = reverse('submission', kwargs={'contest_id': pi.contest.pk, 'submission_id': arguments.submission.pk}) elif pi.problem.problemsite: url = reverse('problem_site', kwargs={ 'site_key': pi.problem.problemsite.url_key}) \ + '?key=submissions' else: url = '' message = ugettext_noop("Initial result for task %(short_name)s is ready") message_arguments = {'short_name': pi.short_name, 'address': url} NotificationHandler.send_notification(arguments.user, 'initial_results', message, message_arguments) NotificationHandler.register_notification('initial_results', notification_function_initial_results)
and hasattr(arguments, 'question_instance') \ and hasattr(arguments, 'answer_instance'), \ "The log doesn't have user, question_instance or answer_instance" \ " value in the extra map" message_details = arguments.question_instance.topic + ': ' + \ arguments.question_instance.content message = ugettext_noop("Your question was answered.") message_arguments = {'address': arguments.question_instance .get_absolute_url(), 'details': message_details[:MAX_DETAILS_LENGTH]} NotificationHandler.send_notification(arguments.user, 'question_answered', message, message_arguments) NotificationHandler.register_notification('question_answered', notification_function_answer) def notification_function_public(arguments): assert hasattr(arguments, 'contest') \ and hasattr(arguments, 'message_instance'), \ "The log doesn't have contest or message_instance value" \ " in the extra map" message_details = arguments.message_instance.topic + ': ' + \ arguments.message_instance.content message = ugettext_noop("New public message.") message_arguments = { 'address': arguments.message_instance.get_absolute_url(), 'details': message_details[:MAX_DETAILS_LENGTH] }
message_details = ( arguments.question_instance.topic + ': ' + arguments.question_instance.content ) message = ugettext_noop("Your question was answered.") message_arguments = { 'address': arguments.question_instance.get_absolute_url(), 'details': message_details[:MAX_DETAILS_LENGTH], } NotificationHandler.send_notification( arguments.user, 'question_answered', message, message_arguments ) NotificationHandler.register_notification( 'question_answered', notification_function_answer ) def notification_function_public(arguments): assert hasattr(arguments, 'contest') and hasattr(arguments, 'message_instance'), ( "The log doesn't have contest or message_instance value" " in the extra map" ) message_details = ( arguments.message_instance.topic + ': ' + arguments.message_instance.content ) message = ugettext_noop("New public message.") message_arguments = { 'address': arguments.message_instance.get_absolute_url(), 'details': message_details[:MAX_DETAILS_LENGTH],
'ended': ugettext_noop("User %(sender)s no longer " "wants to be your friend."), } def friendship_notification(arguments): assert hasattr(arguments, 'type') \ and hasattr(arguments, 'sender') \ and hasattr(arguments, 'recipient'), \ "The log doesn't have type, sender or recipient " \ "value in the extra map" link_target_user = arguments.sender notification_recipient = arguments.recipient url = reverse('view_profile', kwargs={'username': link_target_user.username}) message_arguments = { 'sender': arguments.sender.username, 'recipient': arguments.recipient.username, 'address': url } message = TYPE_TO_TEXT[arguments.type] NotificationHandler.send_notification(notification_recipient, 'friends', message, message_arguments) NotificationHandler.register_notification('friends', friendship_notification)