def test_with_compensation_1_mo_and_lite_non_autorenew(self): user = User.objects.create_user(username="******", password="******") premium = Generators.premium_subscription(user, "AstroBin Lite") ultimate = Generators.premium_subscription(user, "AstroBin Ultimate 2020+") premium.expires = date.today() + timedelta(days=30) premium.unsubscribe() premium.save() ultimate.expires = date.today() ultimate.save() self.assertTrue(is_ultimate_2020(user)) self.assertFalse(is_lite(user)) DataLossCompensationRequest.objects.create( user=user, requested_compensation="1_MO_ULTIMATE") reactivate_previous_subscription_when_ultimate_compensation_expires.apply( ) ultimate.expires = date.today() - timedelta(1) ultimate.save() self.assertFalse(is_ultimate_2020(user)) self.assertTrue(is_lite(user))
def image_post_delete(sender, instance, **kwargs): def decrease_counter(user): user.userprofile.premium_counter -= 1 with transaction.atomic(): user.userprofile.save(keep_deleted=True) ImageIndex().remove_object(instance) try: if instance.uploaded > datetime.datetime.now() - relativedelta( hours=24): decrease_counter(instance.user) elif is_lite(instance.user): usersub = premium_get_valid_usersubscription(instance.user) usersub_created = usersub.expires - relativedelta(years=1) dt = instance.uploaded.date() - usersub_created if dt.days >= 0: decrease_counter(instance.user) elif is_lite_2020(instance.user) or \ is_premium(instance.user) or \ is_premium_2020(instance.user) or \ is_any_ultimate(instance.user): decrease_counter(instance.user) except IntegrityError: # Possibly the user is being deleted pass
def has_access_to_premium_group_features(user): # type: (User) -> bool return is_lite(user) \ or is_premium(user) \ or is_lite_2020(user) \ or is_premium_2020(user) \ or is_ultimate_2020(user)
def image_post_save(sender, instance, created, **kwargs): 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: user_scores_index = instance.user.userprofile.get_scores( )['user_scores_index'] if user_scores_index >= 1.00 or is_lite(instance.user) or is_premium( instance.user): instance.moderated_when = datetime.date.today() instance.moderator_decision = 1 instance.save() instance.user.userprofile.premium_counter += 1 instance.user.userprofile.save() profile_saved = True if not instance.is_wip: 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) ] push_notification( followers, 'new_image', { 'object_url': settings.BASE_URL + instance.get_absolute_url(), 'originator': instance.user.userprofile.get_display_name(), }) if instance.moderator_decision == 1: add_story(instance.user, verb='VERB_UPLOADED_IMAGE', action_object=instance) if not profile_saved: # Trigger update of auto_add fields try: instance.user.userprofile.save() except UserProfile.DoesNotExist: pass # Trigger real time search index instance.user.save()
def show_ads(user): if not settings.ADS_ENABLED: return False if is_donor(user) and not user.userprofile.allow_astronomy_ads: return False if is_lite(user) or is_premium(user): return False if (is_premium_2020(user) or is_ultimate_2020(user)) and not user.userprofile.allow_astronomy_ads: return False return True
def show_ads(user): from astrobin_apps_donations.templatetags.astrobin_apps_donations_tags import is_donor from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import is_premium, is_lite if not settings.ADS_ENABLED: return False if is_donor(user): return False if settings.PREMIUM_ENABLED and (is_lite(user) or is_premium(user)): return False return True
def has_object_permission(self, request, view, obj: ImageRevision) -> bool: if request.method in permissions.SAFE_METHODS: return True if is_any_ultimate(request.user) or is_premium( request.user) or is_lite(request.user): return True revision_count: int = obj.image.revisions.count() if is_premium_2020(request.user): return revision_count < settings.PREMIUM_MAX_REVISIONS_PREMIUM_2020 if is_lite_2020(request.user): return revision_count < settings.PREMIUM_MAX_REVISIONS_LITE_2020 return revision_count < settings.PREMIUM_MAX_REVISIONS_FREE_2020
def image_post_save(sender, instance, created, **kwargs): 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: user_scores_index = instance.user.userprofile.get_scores()['user_scores_index'] if user_scores_index >= 1.00 or is_lite(instance.user) or is_premium(instance.user): instance.moderated_when = datetime.date.today() instance.moderator_decision = 1 instance.save() instance.user.userprofile.premium_counter += 1 instance.user.userprofile.save() profile_saved = True if not instance.is_wip: 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)] push_notification(followers, 'new_image', { 'object_url': settings.BASE_URL + instance.get_absolute_url(), 'originator': instance.user.userprofile.get_display_name(), }) if instance.moderator_decision == 1: add_story(instance.user, verb = 'VERB_UPLOADED_IMAGE', action_object = instance) if not profile_saved: # Trigger update of auto_add fields try: instance.user.userprofile.save() except UserProfile.DoesNotExist: pass # Trigger real time search index instance.user.save()
def pybb_premoderation(user, post_content): # Paying members always approved from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import ( is_lite, is_premium) if is_lite(user) or is_premium(user): return True # Users with sufficient index are always approved from django.conf import settings index = user.userprofile.get_scores()['user_scores_index'] if index >= settings.MIN_INDEX_TO_LIKE: return True # Users that have had 5 messages approved before are always approved from pybb.models import Post posts = Post.objects.filter(user = user, on_moderation = False) if posts.count() >= 5: return True return False
def pybb_premoderation(user, post_content): # Paying members always approved from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import ( is_lite, is_premium) if is_lite(user) or is_premium(user): return True # Users with sufficient index are always approved from django.conf import settings index = user.userprofile.get_scores()['user_scores_index'] if index >= settings.MIN_INDEX_TO_LIKE: return True # Users that have had 5 messages approved before are always approved from pybb.models import Post posts = Post.objects.filter(user=user, on_moderation=False) if posts.count() >= 5: return True return False
def image_post_delete(sender, instance, **kwargs): def decrease_counter(user): user.userprofile.premium_counter -= 1 with transaction.atomic(): user.userprofile.save() try: if is_free(instance.user): decrease_counter(instance.user) if is_lite(instance.user): usersub = UserSubscription.active_objects.get( user=instance.user, subscription__group__name='astrobin_lite') usersub_created = usersub.expires - datetime.timedelta( 365) # leap years be damned dt = instance.uploaded.date() - usersub_created if dt.days >= 0: decrease_counter(instance.user) except IntegrityError: # Possibly the user is being deleted pass
def image_post_delete(sender, instance, **kwargs): def decrease_counter(user): user.userprofile.premium_counter -= 1 with transaction.atomic(): user.userprofile.save(keep_deleted=True) try: if is_free(instance.user): decrease_counter(instance.user) if is_lite(instance.user): usersub = UserSubscription.active_objects.get( user=instance.user, subscription__group__name='astrobin_lite') from dateutil.relativedelta import relativedelta usersub_created = usersub.expires - relativedelta(years=1) dt = instance.uploaded.date() - usersub_created if dt.days >= 0: decrease_counter(instance.user) except IntegrityError: # Possibly the user is being deleted pass
def image_post_delete(sender, instance, **kwargs): def decrease_counter(user): user.userprofile.premium_counter -= 1 with transaction.atomic(): user.userprofile.save() try: if is_free(instance.user): decrease_counter(instance.user) if is_lite(instance.user): usersub = UserSubscription.active_objects.get( user = instance.user, subscription__group__name = 'astrobin_lite') from dateutil.relativedelta import relativedelta usersub_created = usersub.expires - relativedelta(years=1) dt = instance.uploaded.date() - usersub_created if dt.days >= 0: decrease_counter(instance.user) except IntegrityError: # Possibly the user is being deleted pass
def show_uploads_used(user): return is_free(user) or is_lite(user)