adds checking for admin urls 👌
This commit is contained in:
@ -16,10 +16,7 @@ class SegmentMiddleware(object):
|
|||||||
self.get_response = get_response
|
self.get_response = get_response
|
||||||
|
|
||||||
def __call__(self, request):
|
def __call__(self, request):
|
||||||
django_admin = reverse('admin:index')
|
reverse_urls = [reverse('admin:index'), reverse('wagtailadmin_home')]
|
||||||
|
|
||||||
if request.path.startswith('/admin/') or request.path.startswith('/django-admin/'):
|
|
||||||
return self.get_response(request)
|
|
||||||
|
|
||||||
if 'visit_count' not in request.session:
|
if 'visit_count' not in request.session:
|
||||||
request.session['visit_count'] = []
|
request.session['visit_count'] = []
|
||||||
@ -27,6 +24,9 @@ class SegmentMiddleware(object):
|
|||||||
if 'segments' not in request.session:
|
if 'segments' not in request.session:
|
||||||
request.session['segments'] = []
|
request.session['segments'] = []
|
||||||
|
|
||||||
|
if any(request.path.startswith(item) for item in reverse_urls):
|
||||||
|
return self.get_response(request)
|
||||||
|
|
||||||
segments = Segment.objects.all().filter(status='enabled')
|
segments = Segment.objects.all().filter(status='enabled')
|
||||||
|
|
||||||
for segment in segments:
|
for segment in segments:
|
||||||
|
@ -101,7 +101,7 @@ class VisitCountRule(AbstractBaseRule):
|
|||||||
('less_than', _("Less than")),
|
('less_than', _("Less than")),
|
||||||
('equal_to', _("Equal to")),
|
('equal_to', _("Equal to")),
|
||||||
)
|
)
|
||||||
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default="ht")
|
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default="more_than")
|
||||||
count = models.PositiveSmallIntegerField(default=0, null=True)
|
count = models.PositiveSmallIntegerField(default=0, null=True)
|
||||||
counted_page = models.ForeignKey(
|
counted_page = models.ForeignKey(
|
||||||
'wagtailcore.Page',
|
'wagtailcore.Page',
|
||||||
|
@ -93,10 +93,12 @@ def serve_variation(page, request, serve_args, serve_kwargs):
|
|||||||
def _check_for_variations(segments, page):
|
def _check_for_variations(segments, page):
|
||||||
for segment in segments:
|
for segment in segments:
|
||||||
page_class = page.__class__
|
page_class = page.__class__
|
||||||
|
if not any(item == PersonalisablePage for item in page_class.__bases__):
|
||||||
|
page_class = PersonalisablePage
|
||||||
|
|
||||||
variation = page_class.objects.filter(canonical_page=page, segment=segment)
|
variation = page_class.objects.filter(canonical_page=page, segment=segment)
|
||||||
|
|
||||||
if variation:
|
if variation:
|
||||||
|
|
||||||
return variation
|
return variation
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
@ -12,11 +12,6 @@ class SegmentFactory(factory.DjangoModelFactory):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = models.Segment
|
model = models.Segment
|
||||||
|
|
||||||
@factory.post_generation
|
|
||||||
def create_rules(self, create, extracted, **kwargs):
|
|
||||||
if not create:
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
class TimeRuleFactory(factory.DjangoModelFactory):
|
class TimeRuleFactory(factory.DjangoModelFactory):
|
||||||
start_time = datetime.time(8,0,0)
|
start_time = datetime.time(8,0,0)
|
||||||
@ -30,3 +25,10 @@ class ReferralRuleFactory(factory.DjangoModelFactory):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.ReferralRule
|
model = models.ReferralRule
|
||||||
|
|
||||||
|
class VisitCountRuleFactory(factory.DjangoModelFactory):
|
||||||
|
operator = "more_than"
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.VisitCountRule
|
||||||
|
@ -3,9 +3,10 @@ import datetime
|
|||||||
import pytest
|
import pytest
|
||||||
from django.test.client import Client
|
from django.test.client import Client
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
from wagtail.wagtailcore.models import Page
|
||||||
|
|
||||||
from tests.factories.segment import (
|
from tests.factories.segment import (
|
||||||
ReferralRuleFactory, SegmentFactory, TimeRuleFactory)
|
ReferralRuleFactory, SegmentFactory, TimeRuleFactory, VisitCountRuleFactory)
|
||||||
from tests.factories.site import SiteFactory
|
from tests.factories.site import SiteFactory
|
||||||
|
|
||||||
|
|
||||||
@ -121,6 +122,21 @@ class TestUserSegmenting(object):
|
|||||||
second_segment_referral_rule = ReferralRuleFactory
|
second_segment_referral_rule = ReferralRuleFactory
|
||||||
|
|
||||||
|
|
||||||
|
def test_visit_count_rule(self, client):
|
||||||
|
segment = SegmentFactory(name='Visit Count')
|
||||||
|
|
||||||
|
visit_count_rule = VisitCountRuleFactory(
|
||||||
|
counted_page=Page.objects.filter(slug="root").first(),
|
||||||
|
segment=segment
|
||||||
|
)
|
||||||
|
|
||||||
|
client.get("/root")
|
||||||
|
|
||||||
|
import pdb
|
||||||
|
pdb.set_trace()
|
||||||
|
|
||||||
|
assert any(item['encoded_name'] == 'visit-count' for item in client.session['segments'])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
class TestUserVisitCount(object):
|
class TestUserVisitCount(object):
|
||||||
@ -141,3 +157,13 @@ class TestUserVisitCount(object):
|
|||||||
assert not any(item['path'] == '/doesntexist' for item in client.session['visit_count'])
|
assert not any(item['path'] == '/doesntexist' for item in client.session['visit_count'])
|
||||||
|
|
||||||
|
|
||||||
|
def test_ignores_admin_visits(self, client):
|
||||||
|
client.get('/admin/')
|
||||||
|
|
||||||
|
assert not any(item['path'] == '/admin/' for item in client.session['visit_count'])
|
||||||
|
|
||||||
|
client.get('/django-admin/')
|
||||||
|
|
||||||
|
assert not any(item['path'] == '/django-admin/' for item in client.session['visit_count'])
|
||||||
|
|
||||||
|
assert client.session['visit_count'] == []
|
||||||
|
Reference in New Issue
Block a user