예제 #1
0
def insert_user_into_group_pass_if_already_member(domain, group, email):
    """
    Subscribes an email address to a mailing list. If the email address is already subscribed, silently pass.
    :param domain: The G Suite domain in question.
    :type domain: str
    :param group: The group to add an email to.
    :type group: str
    :param email: The email address to add to the group.
    :type email: str
    :return: Nothing. Raises exception if failed.
    :rtype None
    """
    logger = logging.getLogger(__name__)

    try:
        insert_email_into_g_suite_group(domain, group, email)
    except HttpError as err:
        error_message = _get_error_message_from_httperror(err)

        if 'Member already exists' in error_message:
            logger.warning('Email address "{email}" was already subscribed to mailing list "{list}"!'.format(
                email=email, list=group
            ))
        else:
            raise err
예제 #2
0
    def test_insert_ow4_user_into_g_suite_group(self, mocked_insert,
                                                mocked_logger):
        user = G(OnlineUser, online_mail="firstname.lastname")
        group_email = self.group + "@" + self.domain

        ow4_gsuite_sync = settings.OW4_GSUITE_SYNC
        ow4_gsuite_sync["ENABLED"] = True
        ow4_gsuite_sync["ENABLE_INSERT"] = True

        mocked_insert.return_value.members.return_value.insert.return_value.execute.return_value = {
            "email": user.online_mail
        }

        with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync):
            resp = insert_email_into_g_suite_group(self.domain, self.group,
                                                   user.online_mail)
            self.assertEqual(user.online_mail, resp.get("email"))

        mocked_logger.assert_called_with(
            "Inserting '{user}' into G Suite group '{group}'.".format(
                user=user.online_mail, group=group_email),
            extra={
                "email": user.online_mail,
                "group": group_email
            },
        )
예제 #3
0
def insert_user_into_group_pass_if_already_member(domain: str, group: str,
                                                  email: str) -> None:
    """
    Subscribes an email address to a mailing list.
    If the email address is already subscribed, silently pass.
    Raises exception if failed.
    """
    logger = logging.getLogger(__name__)

    try:
        insert_email_into_g_suite_group(domain, group, email)
    except HttpError as err:
        error_message = _get_error_message_from_httperror(err)

        if "Member already exists" in error_message:
            logger.warning(
                'Email address "{email}" was already subscribed to mailing list "{list}"!'
                .format(email=email, list=group))
        else:
            raise err
예제 #4
0
    def test_insert_email_into_g_suite_group_already_exists_raises(
            self, mocked_g_suite_client):
        group_name = list(settings.OW4_GSUITE_SYNC.get('GROUPS').keys())[0]
        email = '*****@*****.**'

        error_reason = 'Member already exists'

        mocked_g_suite_client.return_value.members.return_value.insert.side_effect = \
            create_http_error(status=409, reason=error_reason, error=error_reason)

        ow4_gsuite_sync = self.ow4_gsuite_sync
        ow4_gsuite_sync['ENABLE_INSERT'] = True

        with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync):
            with self.assertRaises(HttpError):
                insert_email_into_g_suite_group(self.domain, group_name, email)

        with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync):
            insert_email_into_g_suite_group(self.domain,
                                            group_name,
                                            email,
                                            suppress_http_errors=True)
예제 #5
0
    def test_insert_when_insert_disabled(self, mocked_logger):
        group_name = list(settings.OW4_GSUITE_SYNC.get("GROUPS").keys())[0]
        email = "*****@*****.**"

        ow4_gsuite_sync = self.ow4_gsuite_sync
        ow4_gsuite_sync["ENABLE_INSERT"] = False

        with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync):
            resp = insert_email_into_g_suite_group(self.domain, group_name, email)
            self.assertIsNone(resp)
            mocked_logger.assert_called_with(
                f'Skipping inserting email "{email}" since ENABLE_INSERT is False.'
            )
예제 #6
0
    def test_insert_email_into_g_suite_group(self, mocked_g_suite_client):
        group_name = list(settings.OW4_GSUITE_SYNC.get('GROUPS').keys())[0]
        email = '*****@*****.**'

        # Yes, really... https://stackoverflow.com/a/32956627
        mocked_g_suite_client.return_value.members.return_value.insert.return_value.execute.return_value = \
            {'email': email}

        ow4_gsuite_sync = self.ow4_gsuite_sync
        ow4_gsuite_sync['ENABLE_INSERT'] = True

        with override_settings(OW4_GSUITE_SYNC=ow4_gsuite_sync):
            resp = insert_email_into_g_suite_group(self.domain, group_name,
                                                   email)
            self.assertEqual(resp.get('email'), email)