7

Make the static segments work with match_any and fix bug in visit count

This commit is contained in:
Todd Dembrey
2017-10-24 10:50:05 +01:00
parent a116b14d57
commit 9e0fc8e6fd
4 changed files with 44 additions and 11 deletions

View File

@ -1,3 +1,5 @@
from __future__ import absolute_import, unicode_literals
from importlib import import_module
from django.conf import settings
@ -11,6 +13,7 @@ from django.utils.lru_cache import lru_cache
from wagtail.wagtailadmin.forms import WagtailAdminModelForm
SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
@ -43,15 +46,21 @@ class SegmentAdminForm(WagtailAdminModelForm):
instance = super(SegmentAdminForm, self).save(*args, **kwargs)
if instance.can_populate:
from .adapters import get_segment_adapter
request = RequestFactory().get('/')
request.session = SessionStore()
adapter = get_segment_adapter(request)
rules = [rule for rule in instance.get_rules() if rule.static]
for session in Session.objects.filter(expire_date__gt=timezone.now()).iterator():
session_data = session.get_decoded()
user = user_from_data(session_data.get('_auth_id'))
request.user = user
request.session = SessionStore(session_key=session.session_key)
all_pass = all(rule.test_user(request) for rule in instance.get_rules() if rule.static)
if all_pass:
passes = adapter._test_rules(rules, request, instance.match_any)
if passes:
instance.sessions.add(session)
instance.frozen = True