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)))
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
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)))
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)))
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
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()
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)))
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()