def common_variables(request): from rawdata.utils import rawdata_user_has_valid_subscription from django_user_agents.utils import get_and_set_user_agent from django_bouncy.models import Bounce get_and_set_user_agent(request) bounced = False if request.user.is_authenticated(): bounced = Bounce.objects.filter( address = request.user.email, bounce_type="Permanent").exists() d = { 'True': True, 'False': False, 'LANGUAGE_CODE': request.LANGUAGE_CODE if hasattr(request, "LANGUAGE_CODE") else "en", 'DEBUG_MODE': settings.DEBUG, 'REQUEST_COUNTRY': get_client_country_code(request), #'random_gear_item': Gear.objects.filter(moderator_fixed = None).order_by('?')[:1].get(), 'is_producer': request.user.groups.filter(name='Producers'), 'is_retailer': request.user.groups.filter(name='Retailers'), 'rawdata_has_subscription': rawdata_user_has_valid_subscription(request.user), 'IMAGES_URL' : settings.IMAGES_URL, 'MEDIA_URL' : settings.MEDIA_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, 'PREMIUM_ENABLED': settings.PREMIUM_ENABLED, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'PREMIUM_MAX_IMAGES_LITE': settings.PREMIUM_MAX_IMAGES_LITE, 'PAYPAL_TEST': settings.PAYPAL_TEST, 'IOTD_SHOW_CHOOSING_JUDGE': settings.IOTD_SHOW_CHOOSING_JUDGE, 'SOLVING_ENABLED': settings.ENABLE_SOLVING, 'GOOGLE_ANALYTICS_ID': settings.GOOGLE_ANALYTICS_ID, 'READONLY_MODE': settings.READONLY_MODE, 'HAS_BOUNCED_EMAILS': bounced, 'COUNTRIES': COUNTRIES, 'COOKIELAW_ACCEPTED': request.COOKIES.get('cookielaw_accepted', False), } if request.user.is_authenticated() and request.user.userprofile.is_image_moderator(): d['images_pending_moderation_no'] = Image.objects_including_wip.filter(moderator_decision = 0).count() return d
def common_variables(request): from rawdata.utils import user_has_active_subscription from django_user_agents.utils import get_and_set_user_agent get_and_set_user_agent(request) d = { #'random_gear_item': Gear.objects.filter(moderator_fixed = None).order_by('?')[:1].get(), 'is_producer': request.user.groups.filter(name='Producers'), 'is_retailer': request.user.groups.filter(name='Retailers'), 'has_rawdata_subscription': user_has_active_subscription(request.user), 'is_iotd_staff': request.user.groups.filter(name='IOTD_Staff'), 'IMAGES_URL' : settings.IMAGES_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, } return d
def common_variables(request): from rawdata.utils import rawdata_user_has_valid_subscription from django_user_agents.utils import get_and_set_user_agent from django_bouncy.models import Bounce get_and_set_user_agent(request) bounced = False if request.user.is_authenticated(): bounced = Bounce.objects.filter( address = request.user.email, bounce_type="Permanent").exists() d = { 'True': True, 'False': False, 'LANGUAGE_CODE': request.LANGUAGE_CODE if 'LANGUAGE_CODE' in request else 'en', #'random_gear_item': Gear.objects.filter(moderator_fixed = None).order_by('?')[:1].get(), 'is_producer': request.user.groups.filter(name='Producers'), 'is_retailer': request.user.groups.filter(name='Retailers'), 'rawdata_has_subscription': rawdata_user_has_valid_subscription(request.user), 'IMAGES_URL' : settings.IMAGES_URL, 'MEDIA_URL' : settings.MEDIA_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, 'PREMIUM_ENABLED': settings.PREMIUM_ENABLED, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'PREMIUM_MAX_IMAGES_LITE': settings.PREMIUM_MAX_IMAGES_LITE, 'PAYPAL_TEST': settings.PAYPAL_TEST, 'IOTD_SHOW_CHOOSING_JUDGE': settings.IOTD_SHOW_CHOOSING_JUDGE, 'SOLVING_ENABLED': settings.ENABLE_SOLVING, 'GOOGLE_ANALYTICS_ID': settings.GOOGLE_ANALYTICS_ID, 'READONLY_MODE': settings.READONLY_MODE, 'HAS_BOUNCED_EMAILS': bounced } if request.user.is_authenticated() and request.user.userprofile.is_image_moderator(): d['images_pending_moderation_no'] = Image.objects_including_wip.filter(moderator_decision = 0).count() return d
def common_variables(request): from django_user_agents.utils import get_and_set_user_agent from django_bouncy.models import Bounce, Complaint get_and_set_user_agent(request) hard_bounces = None soft_bounces = None complained = False if request.user.is_authenticated: cache_key = 'hard_bounces_%d' % request.user.pk hard_bounces = cache.get(cache_key) if hard_bounces is None: hard_bounces = Bounce.objects.filter(hard=True, address=request.user.email, bounce_type="Permanent") cache.set(cache_key, hard_bounces, 3600) cache_key = 'soft_bounces_%d' % request.user.pk soft_bounces = cache.get(cache_key) if soft_bounces is None: soft_bounces = Bounce.objects.filter( hard=False, address=request.user.email, bounce_type="Transient", created_at__gte=datetime.now() - timedelta(days=7))[:3] cache.set(cache_key, soft_bounces, 3600) cache_key = 'complained_%d' % request.user.pk complained = cache.get(cache_key) if complained is None: complained = Complaint.objects.filter( address=request.user.email).exists() cache.set(cache_key, complained, 3600) def has_unmigrated_legacy_gear_items(user: User) -> bool: if user.groups.filter(name='own_equipment_migrators').exists(): for klass in ('telescopes', 'cameras', 'mounts', 'filters', 'focal_reducers', 'accessories', 'software'): if getattr(user.userprofile, klass)\ .annotate(count=Count('migration_strategies'))\ .filter(count=0)\ .exists(): return True return False d = { 'True': True, 'False': False, 'STATIC_URL': settings.STATIC_URL, 'LANGUAGE_CODE': request.LANGUAGE_CODE if hasattr(request, "LANGUAGE_CODE") else "en", 'DEBUG_MODE': settings.DEBUG, 'TESTING': settings.TESTING, 'REQUEST_COUNTRY': get_client_country_code(request), 'IMAGES_URL': settings.IMAGES_URL, 'MEDIA_URL': settings.MEDIA_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'ADMANAGER_PUBLISHER_ID': settings.ADMANAGER_PUBLISHER_ID, 'NATIVE_RESPONSIVE_WIDE_SLOT': settings.NATIVE_RESPONSIVE_WIDE_SLOT, 'NATIVE_RESPONSIVE_RECTANGULAR_SLOT': settings.NATIVE_RESPONSIVE_RECTANGULAR_SLOT, 'NATIVE_RESPONSIVE_RECTANGULAR_SLOT_2': settings.NATIVE_RESPONSIVE_RECTANGULAR_SLOT_2, 'NATIVE_RESPONSIVE_SKYSCRAPER_SLOT_1': settings.NATIVE_RESPONSIVE_SKYSCRAPER_SLOT_1, 'NATIVE_RESPONSIVE_SKYSCRAPER_SLOT_2': settings.NATIVE_RESPONSIVE_SKYSCRAPER_SLOT_2, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, 'PREMIUM_ENABLED': settings.PREMIUM_ENABLED, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'PREMIUM_MAX_IMAGES_LITE': settings.PREMIUM_MAX_IMAGES_LITE, 'PREMIUM_MAX_IMAGES_FREE_2020': settings.PREMIUM_MAX_IMAGES_FREE_2020, 'PREMIUM_MAX_IMAGES_LITE_2020': settings.PREMIUM_MAX_IMAGES_LITE_2020, 'PREMIUM_MAX_IMAGES_PREMIUM_2020': settings.PREMIUM_MAX_IMAGES_PREMIUM_2020, 'PREMIUM_MAX_IMAGE_SIZE_FREE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_FREE_2020, 'PREMIUM_MAX_IMAGE_SIZE_LITE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_LITE_2020, 'PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020': settings.PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020, 'PREMIUM_MAX_REVISIONS_FREE_2020': settings.PREMIUM_MAX_REVISIONS_FREE_2020, 'PREMIUM_MAX_REVISIONS_LITE_2020': settings.PREMIUM_MAX_REVISIONS_LITE_2020, 'PREMIUM_MAX_REVISIONS_PREMIUM_2020': settings.PREMIUM_MAX_REVISIONS_PREMIUM_2020, 'PREMIUM_PRICE_FREE_2020': settings.PREMIUM_PRICE_FREE_2020, 'PREMIUM_PRICE_LITE_2020': settings.PREMIUM_PRICE_LITE_2020, 'PREMIUM_PRICE_PREMIUM_2020': settings.PREMIUM_PRICE_PREMIUM_2020, 'PREMIUM_PRICE_ULTIMATE_2020': settings.PREMIUM_PRICE_ULTIMATE_2020, 'PAYPAL_TEST': settings.PAYPAL_TEST, 'IOTD_SHOW_CHOOSING_JUDGE': settings.IOTD_SHOW_CHOOSING_JUDGE, 'IOTD_SUBMISSION_WINDOW_DAYS': settings.IOTD_SUBMISSION_WINDOW_DAYS, 'ENABLE_SOLVING': settings.ENABLE_SOLVING, 'GOOGLE_ANALYTICS_ID': settings.GOOGLE_ANALYTICS_ID, 'GOOGLE_ADS_ID': settings.GOOGLE_ADS_ID, 'READONLY_MODE': settings.READONLY_MODE, 'HARD_BOUNCES': hard_bounces, 'SOFT_BOUNCES': soft_bounces, 'HAS_COMPLAINT': complained, 'COUNTRIES': COUNTRIES, 'COOKIELAW_ACCEPTED': request.COOKIES.get('cookielaw_accepted', False), 'HAS_CAMERA_RENAME_PROPOSALS': CameraRenameProposal.objects.filter(user=request.user, status="PENDING") \ if request.user.is_authenticated \ else CameraRenameProposal.objects.none(), 'HAS_UNMIGRATED_LEGACY_GEAR_ITEMS': has_unmigrated_legacy_gear_items(request.user), 'enums': { 'SubjectType': SubjectType, }, 'abuse_report_form': AbuseReportForm() } if request.user.is_authenticated and request.user.userprofile.is_image_moderator( ): d['images_pending_moderation_no'] = ImageService( ).get_images_pending_moderation().count() return d
def common_variables(request): from django_user_agents.utils import get_and_set_user_agent from django_bouncy.models import Bounce, Complaint get_and_set_user_agent(request) hard_bounces = None soft_bounces = None complained = False if request.user.is_authenticated(): cache_key = 'hard_bounces_%d' % request.user.pk hard_bounces = cache.get(cache_key) if hard_bounces is None: hard_bounces = Bounce.objects.filter( hard=True, address=request.user.email, bounce_type="Permanent") cache.set(cache_key, hard_bounces, 3600) cache_key = 'soft_bounces_%d' % request.user.pk soft_bounces = cache.get(cache_key) if soft_bounces is None: soft_bounces = Bounce.objects.filter( hard=False, address=request.user.email, bounce_type="Transient", created_at__gte=datetime.now() - timedelta(days=7))[:3] cache.set(cache_key, soft_bounces, 3600) cache_key = 'complained_%d' % request.user.pk complained = cache.get(cache_key) if complained is None: complained = Complaint.objects.filter(address=request.user.email).exists() cache.set(cache_key, complained, 3600) d = { 'True': True, 'False': False, 'STATIC_URL': settings.STATIC_URL, 'LANGUAGE_CODE': request.LANGUAGE_CODE if hasattr(request, "LANGUAGE_CODE") else "en", 'DEBUG_MODE': settings.DEBUG, 'REQUEST_COUNTRY': get_client_country_code(request), 'IMAGES_URL': settings.IMAGES_URL, 'MEDIA_URL': settings.MEDIA_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'ADSENSE_ENABLED': settings.ADSENSE_ENABLED, 'ADMANAGER_PUBLISHER_ID': settings.ADMANAGER_PUBLISHER_ID, 'NATIVE_RESPONSIVE_WIDE_SLOT': settings.NATIVE_RESPONSIVE_WIDE_SLOT, 'NATIVE_RESPONSIVE_RECTANGULAR_SLOT': settings.NATIVE_RESPONSIVE_RECTANGULAR_SLOT, 'NATIVE_RESPONSIVE_RECTANGULAR_SLOT_2': settings.NATIVE_RESPONSIVE_RECTANGULAR_SLOT_2, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, 'PREMIUM_ENABLED': settings.PREMIUM_ENABLED, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'PREMIUM_MAX_IMAGES_LITE': settings.PREMIUM_MAX_IMAGES_LITE, 'PREMIUM_MAX_IMAGES_FREE_2020': settings.PREMIUM_MAX_IMAGES_FREE_2020, 'PREMIUM_MAX_IMAGES_LITE_2020': settings.PREMIUM_MAX_IMAGES_LITE_2020, 'PREMIUM_MAX_IMAGES_PREMIUM_2020': settings.PREMIUM_MAX_IMAGES_PREMIUM_2020, 'PREMIUM_MAX_IMAGE_SIZE_FREE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_FREE_2020, 'PREMIUM_MAX_IMAGE_SIZE_LITE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_LITE_2020, 'PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020': settings.PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020, 'PREMIUM_MAX_REVISIONS_FREE_2020': settings.PREMIUM_MAX_REVISIONS_FREE_2020, 'PREMIUM_MAX_REVISIONS_LITE_2020': settings.PREMIUM_MAX_REVISIONS_LITE_2020, 'PREMIUM_MAX_REVISIONS_PREMIUM_2020': settings.PREMIUM_MAX_REVISIONS_PREMIUM_2020, 'PREMIUM_PRICE_FREE_2020': settings.PREMIUM_PRICE_FREE_2020, 'PREMIUM_PRICE_LITE_2020': settings.PREMIUM_PRICE_LITE_2020, 'PREMIUM_PRICE_PREMIUM_2020': settings.PREMIUM_PRICE_PREMIUM_2020, 'PREMIUM_PRICE_ULTIMATE_2020': settings.PREMIUM_PRICE_ULTIMATE_2020, 'PAYPAL_TEST': settings.PAYPAL_TEST, 'IOTD_SHOW_CHOOSING_JUDGE': settings.IOTD_SHOW_CHOOSING_JUDGE, 'ENABLE_SOLVING': settings.ENABLE_SOLVING, 'GOOGLE_ANALYTICS_ID': settings.GOOGLE_ANALYTICS_ID, 'GOOGLE_ADS_ID': settings.GOOGLE_ADS_ID, 'READONLY_MODE': settings.READONLY_MODE, 'HARD_BOUNCES': hard_bounces, 'SOFT_BOUNCES': soft_bounces, 'HAS_COMPLAINT': complained, 'COUNTRIES': COUNTRIES, 'COOKIELAW_ACCEPTED': request.COOKIES.get('cookielaw_accepted', False), 'AUTOMATIC_RECOVERY_CONFIRMATION_BEGINS': Image.all_objects.filter( user=request.user, corrupted=True, recovered__isnull=False).order_by('recovered').first().recovered + timedelta(days=14) \ if request.user.is_authenticated() and \ Image.all_objects.filter( user=request.user, corrupted=True, recovered__isnull=False).exists() \ else None, 'min_index_to_like': settings.MIN_INDEX_TO_LIKE, 'enums': { 'SubjectType': SubjectType, }, } if request.user.is_authenticated() and request.user.userprofile.is_image_moderator(): d['images_pending_moderation_no'] = ImageService().get_images_pending_moderation().count() return d
def test_get_and_set_user_agent(self): # Test that get_and_set_user_agent attaches ``user_agent`` to request request = RequestFactory().get('') get_and_set_user_agent(request) self.assertIsInstance(request.user_agent, UserAgent)
def common_variables(request): from django_user_agents.utils import get_and_set_user_agent from django_bouncy.models import Bounce, Complaint get_and_set_user_agent(request) bounced = False complained = False if request.user.is_authenticated(): bounced = Bounce.objects.filter(address=request.user.email, bounce_type="Permanent").exists() complained = Complaint.objects.filter( address=request.user.email).exists() d = { 'True': True, 'False': False, 'LANGUAGE_CODE': request.LANGUAGE_CODE if hasattr(request, "LANGUAGE_CODE") else "en", 'DEBUG_MODE': settings.DEBUG, 'REQUEST_COUNTRY': get_client_country_code(request), # 'random_gear_item': Gear.objects.filter(moderator_fixed = None).order_by('?')[:1].get(), 'is_producer': request.user.groups.filter(name='Producers'), 'is_retailer': request.user.groups.filter(name='Retailers'), 'IMAGES_URL': settings.IMAGES_URL, 'MEDIA_URL': settings.MEDIA_URL, 'ADS_ENABLED': settings.ADS_ENABLED, 'DONATIONS_ENABLED': settings.DONATIONS_ENABLED, 'PREMIUM_ENABLED': settings.PREMIUM_ENABLED, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'PREMIUM_MAX_IMAGES_LITE': settings.PREMIUM_MAX_IMAGES_LITE, 'PREMIUM_MAX_IMAGES_FREE_2020': settings.PREMIUM_MAX_IMAGES_FREE_2020, 'PREMIUM_MAX_IMAGES_LITE_2020': settings.PREMIUM_MAX_IMAGES_LITE_2020, 'PREMIUM_MAX_IMAGES_PREMIUM_2020': settings.PREMIUM_MAX_IMAGES_PREMIUM_2020, 'PREMIUM_MAX_IMAGE_SIZE_FREE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_FREE_2020, 'PREMIUM_MAX_IMAGE_SIZE_LITE_2020': settings.PREMIUM_MAX_IMAGE_SIZE_LITE_2020, 'PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020': settings.PREMIUM_MAX_IMAGE_SIZE_PREMIUM_2020, 'PREMIUM_MAX_REVISIONS_FREE_2020': settings.PREMIUM_MAX_REVISIONS_FREE_2020, 'PREMIUM_MAX_REVISIONS_LITE_2020': settings.PREMIUM_MAX_REVISIONS_LITE_2020, 'PREMIUM_MAX_REVISIONS_PREMIUM_2020': settings.PREMIUM_MAX_REVISIONS_PREMIUM_2020, 'PREMIUM_PRICE_FREE_2020': settings.PREMIUM_PRICE_FREE_2020, 'PREMIUM_PRICE_LITE_2020': settings.PREMIUM_PRICE_LITE_2020, 'PREMIUM_PRICE_PREMIUM_2020': settings.PREMIUM_PRICE_PREMIUM_2020, 'PREMIUM_PRICE_ULTIMATE_2020': settings.PREMIUM_PRICE_ULTIMATE_2020, 'PAYPAL_TEST': settings.PAYPAL_TEST, 'IOTD_SHOW_CHOOSING_JUDGE': settings.IOTD_SHOW_CHOOSING_JUDGE, 'ENABLE_SOLVING': settings.ENABLE_SOLVING, 'GOOGLE_ANALYTICS_ID': settings.GOOGLE_ANALYTICS_ID, 'READONLY_MODE': settings.READONLY_MODE, 'HAS_BOUNCED_EMAILS': bounced, 'HAS_COMPLAINT': complained, 'COUNTRIES': COUNTRIES, 'COOKIELAW_ACCEPTED': request.COOKIES.get('cookielaw_accepted', False), 'enums': { 'SubjectType': SubjectType, }, } if request.user.is_authenticated( ) and request.user.userprofile.is_image_moderator(): d['images_pending_moderation_no'] = Image.objects_including_wip.filter( moderator_decision=0).count() return d
def is_touch_capable(request): return get_and_set_user_agent(request).is_touch_capable
def is_bot(request): return get_and_set_user_agent(request).is_bot
def is_mobile(request): return get_and_set_user_agent(request).is_mobile