7
This repository has been archived on 2023-05-07. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cavemanon-wagtail-personali…/src/personalisation/middleware.py
2016-11-08 13:45:18 +01:00

44 lines
1.2 KiB
Python

from personalisation.models import AbstractBaseRule, Segment
class SegmentMiddleware(object):
"""Middleware for testing and putting a user in a segment"""
def __init__(self, get_response=None):
self.get_response = get_response
def __call__(self, request):
segments = Segment.objects.all().filter(status="live")
chosen_segments = []
for segment in segments:
rules = AbstractBaseRule.objects.filter(segment=segment).select_subclasses()
result = self.test_rules(rules, request)
if result:
self.add_segment_to_user(segment, request)
response = self.get_response(request)
print(request.session['segments'])
return response
def test_rules(self, rules, request):
for rule in rules:
result = rule.test_user(request)
if result is False:
return False
return True
def add_segment_to_user(self, segment, request):
if 'segments' not in request.session:
request.session['segments'] = []
if segment not in request.session['segments']:
request.session['segments'].append(segment.encoded_name())