示例#1
0
    def test_get_users_in_group_sample_one_user(self):
        group = Group.objects.create(name='test_group')
        user = Generators.user()
        user.groups.add(group)

        self.assertEqual(
            1, len(UserService.get_users_in_group_sample(group.name, 10)))
        self.assertEqual(
            1, len(UserService.get_users_in_group_sample(group.name, 50)))
        self.assertEqual(
            1, len(UserService.get_users_in_group_sample(group.name, 100)))
示例#2
0
def image_post_save(sender, instance, created, **kwargs):
    # type: (object, Image, bool, object) -> None

    if created:
        instance.user.userprofile.premium_counter += 1
        instance.user.userprofile.save(keep_deleted=True)

        if not instance.user.userprofile.exclude_from_competitions:
            instance.designated_iotd_submitters.add(
                *UserService.get_users_in_group_sample(
                    'iotd_submitters', settings.
                    IOTD_DESIGNATED_SUBMITTERS_PERCENTAGE, instance.user))
            instance.designated_iotd_reviewers.add(
                *UserService.get_users_in_group_sample(
                    'iotd_reviewers', settings.
                    IOTD_DESIGNATED_REVIEWERS_PERCENTAGE, instance.user))

        if not instance.is_wip:
            if not instance.skip_notifications:
                push_notification_for_new_image.apply_async(args=(
                    instance.user.pk,
                    instance.pk,
                ))
            if instance.moderator_decision == 1:
                add_story(instance.user,
                          verb='VERB_UPLOADED_IMAGE',
                          action_object=instance)

        if Image.all_objects.filter(user=instance.user).count() == 1:
            push_notification(
                [instance.user], None, 'congratulations_for_your_first_image',
                {
                    'BASE_URL': settings.BASE_URL,
                    'PREMIUM_MAX_IMAGES_FREE':
                    settings.PREMIUM_MAX_IMAGES_FREE,
                    'url': reverse_url('image_detail',
                                       args=(instance.get_id(), ))
                })

    if not instance.uploader_in_progress:
        groups = instance.user.joined_group_set.filter(autosubmission=True)
        for group in groups:
            if instance.is_wip:
                group.images.remove(instance)
            else:
                group.images.add(instance)

        if instance.user.userprofile.updated < datetime.datetime.now(
        ) - datetime.timedelta(minutes=5):
            instance.user.save()
            try:
                instance.user.userprofile.save(keep_deleted=True)
            except UserProfile.DoesNotExist:
                pass
示例#3
0
    def test_get_users_in_group_sample_many_users(self):
        group = Group.objects.create(name='test_group')
        for i in range(100):
            user = Generators.user()
            user.groups.add(group)

        self.assertEqual(
            10, len(UserService.get_users_in_group_sample(group.name, 10)))
        self.assertEqual(
            50, len(UserService.get_users_in_group_sample(group.name, 50)))
        self.assertEqual(
            100, len(UserService.get_users_in_group_sample(group.name, 100)))
示例#4
0
    def test_get_users_in_group_sample_with_exclude(self):
        group = Group.objects.create(name='test_group')
        user = Generators.user()
        user.groups.add(group)

        self.assertEqual(
            0, len(UserService.get_users_in_group_sample(group.name, 10,
                                                         user)))
示例#5
0
    def submit_to_iotd_tp_process(user: User, image: Image, auto_submit=False):
        may, reason = IotdService.may_submit_to_iotd_tp_process(user, image)

        if may:
            image.designated_iotd_submitters.add(
                *UserService.get_users_in_group_sample(
                    'iotd_submitters', settings.IOTD_DESIGNATED_SUBMITTERS_PERCENTAGE, image.user
                )
            )

            image.designated_iotd_reviewers.add(
                *UserService.get_users_in_group_sample(
                    'iotd_reviewers', settings.IOTD_DESIGNATED_REVIEWERS_PERCENTAGE, image.user
                )
            )

            if auto_submit:
                image.user.userprofile.auto_submit_to_iotd_tp_process = True
                image.user.userprofile.save(keep_deleted=True)

            push_notification([image.user], None, 'image_submitted_to_iotd_tp', {})

        return may, reason
示例#6
0
def image_post_save(sender, instance, created, **kwargs):
    # type: (object, Image, bool, object) -> None

    profile_saved = False

    groups = instance.user.joined_group_set.filter(autosubmission=True)
    for group in groups:
        if instance.is_wip:
            group.images.remove(instance)
        else:
            group.images.add(instance)

    if created:
        instance.user.userprofile.premium_counter += 1
        instance.user.userprofile.save(keep_deleted=True)
        profile_saved = True

        if not instance.user.userprofile.exclude_from_competitions:
            instance.designated_iotd_submitters.add(
                *UserService.get_users_in_group_sample(
                    'iotd_submitters', settings.
                    IOTD_DESIGNATED_SUBMITTERS_PERCENTAGE, instance.user))
            instance.designated_iotd_reviewers.add(
                *UserService.get_users_in_group_sample(
                    'iotd_reviewers', settings.
                    IOTD_DESIGNATED_REVIEWERS_PERCENTAGE, instance.user))

        if not instance.is_wip and not instance.skip_notifications:
            followers = [
                x.user for x in ToggleProperty.objects.filter(
                    property_type="follow",
                    content_type=ContentType.objects.get_for_model(User),
                    object_id=instance.user.pk)
            ]

            thumb = instance.thumbnail_raw('gallery', {'sync': True})
            push_notification(followers, 'new_image', {
                'image': instance,
                'image_thumbnail': thumb.url if thumb else None
            })

            if instance.moderator_decision == 1:
                add_story(instance.user,
                          verb='VERB_UPLOADED_IMAGE',
                          action_object=instance)

        if Image.all_objects.filter(user=instance.user).count() == 1:
            push_notification(
                [instance.user], 'congratulations_for_your_first_image', {
                    'BASE_URL': settings.BASE_URL,
                    'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE
                })

    if not profile_saved:
        # Trigger update of auto_add fields
        try:
            instance.user.userprofile.save(keep_deleted=True)
        except UserProfile.DoesNotExist:
            pass

    # Trigger real time search index
    if instance.user.userprofile.updated < datetime.datetime.now(
    ) - datetime.timedelta(minutes=5):
        instance.user.save()
示例#7
0
    def test_get_users_in_group_sample_no_users(self):
        group = Group.objects.create(name='test_group')

        self.assertEqual(
            0, len(UserService.get_users_in_group_sample(group.name, 10)))
示例#8
0
def image_post_save(sender, instance, created, **kwargs):
    # type: (object, Image, bool, object) -> None

    if created:
        instance.user.userprofile.premium_counter += 1
        instance.user.userprofile.save(keep_deleted=True)

        if not instance.user.userprofile.exclude_from_competitions:
            instance.designated_iotd_submitters.add(
                *UserService.get_users_in_group_sample(
                    'iotd_submitters', settings.
                    IOTD_DESIGNATED_SUBMITTERS_PERCENTAGE, instance.user))
            instance.designated_iotd_reviewers.add(
                *UserService.get_users_in_group_sample(
                    'iotd_reviewers', settings.
                    IOTD_DESIGNATED_REVIEWERS_PERCENTAGE, instance.user))

        if not instance.is_wip:
            if not instance.skip_notifications:
                push_notification_for_new_image.apply_async(args=(
                    instance.user.pk,
                    instance.pk,
                ))
            if instance.moderator_decision == 1:
                add_story(instance.user,
                          verb='VERB_UPLOADED_IMAGE',
                          action_object=instance)

        if Image.all_objects.filter(user=instance.user).count() == 1:
            push_notification(
                [instance.user], None, 'congratulations_for_your_first_image',
                {
                    'BASE_URL': settings.BASE_URL,
                    'PREMIUM_MAX_IMAGES_FREE':
                    settings.PREMIUM_MAX_IMAGES_FREE,
                    'url': reverse_url('image_detail',
                                       args=(instance.get_id(), ))
                })

        mentions = MentionsService.get_mentions(instance.description_bbcode)
    else:
        mentions = cache.get("image.%d.image_pre_save_mentions" % instance.pk,
                             [])

    for username in mentions:
        user = get_object_or_None(User, username=username)
        if not user:
            try:
                profile = get_object_or_None(UserProfile, real_name=username)
                if profile:
                    user = profile.user
            except MultipleObjectsReturned:
                user = None
        if user and user != instance.user:
            thumb = instance.thumbnail_raw('gallery', None, sync=True)
            push_notification(
                [user], instance.user, 'new_image_description_mention', {
                    'image':
                    instance,
                    'image_thumbnail':
                    thumb.url if thumb else None,
                    'url':
                    build_notification_url(
                        settings.BASE_URL + instance.get_absolute_url(),
                        instance.user),
                    'user':
                    instance.user.userprofile.get_display_name(),
                    'user_url':
                    settings.BASE_URL + reverse_url(
                        'user_page', kwargs={'username': instance.user}),
                })

    if not instance.uploader_in_progress:
        groups = instance.user.joined_group_set.filter(autosubmission=True)
        for group in groups:
            if instance.is_wip:
                group.images.remove(instance)
            else:
                group.images.add(instance)

        if instance.user.userprofile.updated < datetime.datetime.now(
        ) - datetime.timedelta(minutes=5):
            instance.user.save()
            try:
                instance.user.userprofile.save(keep_deleted=True)
            except UserProfile.DoesNotExist:
                pass

        UserService(instance.user).clear_gallery_image_list_cache()