Beispiel #1
0
    def filter_add_user(cls, info, difference, trim):
        """
        A method that retrieves users' info using the difference.
        """
        def normalize(info):
            """
            A function that normalizes retrieved information from Slack.
            """
            user_dict = {}
            not_user_list = []

            for item in info:
                if 'deleted' in item and item['deleted'] is True:
                    not_user_list.append(item['id'])
                    continue
                if 'is_bot' in item and item['is_bot'] is True:
                    not_user_list.append(item['id'])
                    continue
                if 'email' not in item['profile'] or item['profile'].get('email') is None:
                    not_user_list.append(item['id'])
                    continue

                if not item['profile']['email'].endswith(settings.DOMAIN_LIST):
                    not_user_list.append(item['id'])
                    continue

                firstname, lastname = re.match(
                    '^([\w-]+)[.]{0,1}([\w-]+){0,1}@',
                    item['profile']['email']).groups()
                lastname = '' if lastname is None else lastname
                user_dict[item['id']] = {
                    'slack_id': item['id'],
                    'email': item['profile']['email'],
                    # use slack default image
                    'photo': item['profile'].get('image_original', item['profile'].get('image_192')),
                    'firstname': firstname.title(),
                    'lastname': lastname.title()
                }

            return user_dict, not_user_list

        info, not_user = normalize(info)

        difference = cls.get_real_users(difference[:], not_user)

        if len(difference) == 0:
            return "Users list not changed"

        if trim:
            return cls.trim_away(not_user)

        try:
            for user in difference:
                if user in info:
                    with transaction.atomic():
                        SlackUser.create(info[user])
            return "Users updated successfully"
        except Exception as e:
            return "Users couldn't be updated successfully - %s" % e.message
Beispiel #2
0
def update_users():
    call = slack_client.api_call("users.list")
    if call.get('ok'):
        users_ids = []
        for item in call['members']:
            try:
                user = SlackUser(
                    id=item['id'],
                    team_id=item['team_id'],
                    name=item['name'],
                    deleted=item['deleted'],
                    color=item['color'],
                    real_name=item['real_name'],
                    tz=item['tz'],
                    profile=json.dumps(item['profile']),
                    is_admin=item['is_admin'],
                    is_owner=item['is_owner'],
                    is_primary_owner=item['is_primary_owner'],
                    is_bot=item['is_bot'],
                    updated=datetime.fromtimestamp(item['updated']),
                    is_app_user=item['is_app_user'],
                )
                db.session.merge(user)
                db.session.commit()
                users_ids.append(user.id)
            except:
                continue
        return {'ok': True, 'users_ids': users_ids}
    else:
        return {'ok': False}
Beispiel #3
0
    def add(cls, **kwargs):
        utype = kwargs.get('utype')
        users = SlackUser.objects.filter(user_type=utype).order_by('id')
        if kwargs.get("utype") != "guest":
            user = SlackUser(
                firstname=kwargs.get("firstname"),
                lastname=kwargs.get("lastname"),)
        else:
            last_guest = filter(lambda x: x.firstname.startswith("Guest"),
                                list(users))[-1] if len(users) else None

            if not last_guest:
                username = kwargs.get("name", "Guest 1")
            else:
                last_num = int(
                    re.match("^Guest ([\d]*)".format(), last_guest.firstname).groups()[0])

                username = '******'.format(last_num + 1)

            user = SlackUser(firstname=username)

        user.slack_id = cls.generate_unique(
            utype, [individual.slack_id for individual in users] if len(users) else [])
        user.user_type = utype

        try:
            user.save()
            return "{} ({}) was created successfully.".format(user.firstname, utype,), user.id

        except Exception, e:
            return "{0} user couldn't be created. Error: {1}".format(
                utype.upper(), type(e)), None
Beispiel #4
0
def create_user():
    """
    Creates a user.

    :Returns: SlackUser object
    """
    user_dummy_data = {
        'slack_id': 'UX03131',
        'firstname': 'Test',
        'lastname': 'User',
        'email': '*****@*****.**',
        'photo': 'inexistent_photo.jpg'
    }
    return SlackUser.create(user_dummy_data)
Beispiel #5
0
def create_user():
    """
    Creates a user.

    :Returns: SlackUser object
    """
    user_dummy_data = {
        "slack_id": "UX03131",
        "firstname": "Test",
        "lastname": "User",
        "email": "*****@*****.**",
        "photo": "inexistent_photo.jpg",
    }
    return SlackUser.create(user_dummy_data)
def create_user():
    """
    Creates a user.

    :Returns: SlackUser object
    """
    user_dummy_data = {
        'slack_id': 'UX03131',
        'firstname': 'Test',
        'lastname': 'User',
        'email': '*****@*****.**',
        'photo': 'inexistent_photo.jpg'
    }
    return SlackUser.create(user_dummy_data)
Beispiel #7
0
    def add(cls, **kwargs):
        utype = kwargs.get("utype")
        users = SlackUser.objects.filter(user_type=utype).order_by("id")
        if kwargs.get("utype").lower() != "guest":
            user = SlackUser(
                firstname=kwargs.get("firstname"), lastname=kwargs.get("lastname")
            )
        else:
            # for some reason filter object is not subscriptable
            # last_guest = (
            #     filter(lambda x: x.firstname.startswith("Guest"), list(users))[-1]
            #     if len(users)
            #     else None
            # )
            guests = [x for x in list(users) if x.firstname.startswith("Guest")]
            last_guest = guests[-1] if len(guests) else None

            if not guests:
                username = kwargs.get("name", "Guest 1")
            else:
                last_num = int(
                    re.match("^Guest ([\d]*)".format(), last_guest.firstname).groups()[
                        0
                    ]
                )

                username = "******".format(last_num + 1)

            user = SlackUser(firstname=username)

        user.slack_id = cls.generate_unique(
            utype, [individual.slack_id for individual in users] if len(users) else []
        )
        user.user_type = utype

        try:
            user.save()
            return (
                "{} ({}) was created successfully.".format(user.firstname, utype),
                user.id,
            )

        except Exception as e:
            user_type = utype.upper()
            error_type = type(e)
            return f"{user_type} user couldn't be created. Error: {error_type}"
Beispiel #8
0
    def add(cls, **kwargs):
        utype = kwargs.get('utype')
        users = SlackUser.objects.filter(user_type=utype).order_by('id')
        if kwargs.get("utype") != "guest":
            user = SlackUser(
                firstname=kwargs.get("firstname"),
                lastname=kwargs.get("lastname"),
            )
        else:
            last_guest = filter(lambda x: x.firstname.startswith("Guest"),
                                list(users))[-1] if len(users) else None

            if not last_guest:
                username = kwargs.get("name", "Guest 1")
            else:
                last_num = int(
                    re.match("^Guest ([\d]*)".format(),
                             last_guest.firstname).groups()[0])

                username = '******'.format(last_num + 1)

            user = SlackUser(firstname=username)

        user.slack_id = cls.generate_unique(
            utype, [individual.slack_id
                    for individual in users] if len(users) else [])
        user.user_type = utype

        try:
            user.save()
            return "{} ({}) was created successfully.".format(
                user.firstname,
                utype,
            ), user.id

        except Exception, e:
            return "{0} user couldn't be created. Error: {1}".format(
                utype.upper(), type(e)), None
Beispiel #9
0
 def _add_new_users(cls, users_to_be_added, valid_users):
     for user_slack_id in users_to_be_added:
         current_user = valid_users[user_slack_id]
         SlackUser.create(current_user)
Beispiel #10
0
    def filter_add_user(cls, info, difference, trim):
        """
        A method that retrieves users' info using the difference.
        """
        def normalize(info):
            """
            A function that normalizes retrieved information from Slack.
            """
            user_dict = {}
            not_user_list = []

            for item in info:
                if 'deleted' in item and item['deleted'] is True:
                    not_user_list.append(item['id'])
                    continue
                if 'is_bot' in item and item['is_bot'] is True:
                    not_user_list.append(item['id'])
                    continue
                if 'email' not in item['profile'] or item['profile'].get(
                        'email') is None:
                    not_user_list.append(item['id'])
                    continue

                if not item['profile']['email'].endswith(settings.DOMAIN_LIST):
                    not_user_list.append(item['id'])
                    continue

                firstname = item.get('profile').get('first_name', '')
                lastname = item.get('profile').get('last_name', '')
                user_dict[item['id']] = {
                    'slack_id':
                    item['id'],
                    'email':
                    item['profile']['email'],
                    # use slack default image
                    'photo':
                    item['profile'].get('image_original',
                                        item['profile'].get('image_192')),
                    'firstname':
                    firstname.title(),
                    'lastname':
                    lastname.title()
                }

            return user_dict, not_user_list

        info, not_user = normalize(info)

        difference = cls.get_real_users(difference[:], not_user)

        if len(difference) == 0:
            return "Users list not changed"

        if trim:
            return cls.trim_away(not_user)

        try:
            for user in difference:
                if user in info:
                    with transaction.atomic():
                        SlackUser.create(info[user])
            return "Users updated successfully"
        except Exception as e:
            return "Users couldn't be updated successfully - %s" % e.message