7

more cleanup on the segments adapter, moves segment dict creator to utils

This commit is contained in:
blurrah
2017-05-03 13:35:51 +02:00
committed by Boris Besemer
parent ecfae3ec19
commit dd1dafd450
2 changed files with 14 additions and 19 deletions

View File

@ -5,6 +5,7 @@ from django.db.models import F
from personalisation.models import Segment from personalisation.models import Segment
from personalisation.rules import AbstractBaseRule from personalisation.rules import AbstractBaseRule
from personalisation.utils import create_segment_dictionary
class BaseSegmentsAdapter(object): class BaseSegmentsAdapter(object):
@ -23,9 +24,6 @@ class BaseSegmentsAdapter(object):
def refresh(self): def refresh(self):
return None return None
def check_segment_exists(self):
return None
def _test_rules(self, rules, request, match_any=False): def _test_rules(self, rules, request, match_any=False):
if len(rules) > 0: if len(rules) > 0:
for rule in rules: for rule in rules:
@ -56,21 +54,13 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
def get_segment(self, segment_id): def get_segment(self, segment_id):
return next(item for item in self.request.session['segments'] if item.id == segment_id) return next(item for item in self.request.session['segments'] if item.id == segment_id)
def create_seg_dict(self, segment):
return {
"encoded_name": segment.encoded_name(),
"id": segment.pk,
"timestamp": int(time.time()),
"persistent": segment.persistent
}
def add(self, segment): def add(self, segment):
def check_if_segmented(item): def check_if_segmented(item):
"""Check if the user has been segmented""" """Check if the user has been segmented"""
return any(seg['encoded_name'] == item.encoded_name() for seg in self.request.session['segments']) return any(seg['encoded_name'] == item.encoded_name() for seg in self.request.session['segments'])
if not check_if_segmented(segment): if not check_if_segmented(segment):
segdict = self.create_seg_dict(segment) segdict = create_segment_dictionary(segment)
self.request.session['segments'].append(segdict) self.request.session['segments'].append(segdict)
def refresh(self): def refresh(self):
@ -99,7 +89,7 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
result = self._test_rules(segment_rules, self.request, match_any=segment.match_any) result = self._test_rules(segment_rules, self.request, match_any=segment.match_any)
if result: if result:
segdict = self.create_seg_dict(segment) segdict = create_segment_dictionary(segment)
if not any(seg['id'] == segdict['id'] for seg in new_segments): if not any(seg['id'] == segdict['id'] for seg in new_segments):
new_segments.append(segdict) new_segments.append(segdict)
@ -107,9 +97,3 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
update_visit_count(self) update_visit_count(self)
def check_segment_exists(self, segment):
segments = self.request.session['segments']
return any(item for item in segments if segment.pk == item.id)

View File

@ -1,5 +1,16 @@
import time
def impersonate_other_page(page, other_page): def impersonate_other_page(page, other_page):
page.path = other_page.path page.path = other_page.path
page.depth = other_page.depth page.depth = other_page.depth
page.url_path = other_page.url_path page.url_path = other_page.url_path
page.title = other_page.title page.title = other_page.title
def create_segment_dictionary(segment):
return {
"encoded_name": segment.encoded_name(),
"id": segment.pk,
"timestamp": int(time.time()),
"persistent": segment.persistent
}