fixes a few issues
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import time
|
||||
|
||||
from django.db.models import F
|
||||
|
||||
from personalisation.models import AbstractBaseRule, Segment
|
||||
|
||||
|
||||
class BaseSegmentsAdapter(object):
|
||||
def setup(self):
|
||||
return None
|
||||
|
||||
def _test_rules(self, rules, request):
|
||||
if len(rules) > 0:
|
||||
for rule in rules:
|
||||
@@ -23,20 +28,18 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
|
||||
def setup(self, request):
|
||||
self.request = request
|
||||
|
||||
# Set up segments dictionary object in the session
|
||||
if 'segments' not in self.request.session:
|
||||
self.request.session['segments'] = []
|
||||
self.request.session.setdefault('segments', [])
|
||||
|
||||
def get(self):
|
||||
def get_all_segments(self):
|
||||
return self.request.session['segments']
|
||||
|
||||
def get_segment(self, segment_id):
|
||||
return next(item for item in self.request.session['segments'] if item.id == segment_id)
|
||||
|
||||
def add(self, segment):
|
||||
def check_if_segmented(item):
|
||||
"""Check if the user has been segmented"""
|
||||
for seg in self.request.session['segments']:
|
||||
if seg['encoded_name'] == item.encoded_name():
|
||||
return True
|
||||
return False
|
||||
return any(seg['encoded_name'] == item.encoded_name for seg in self.request.session['segments'])
|
||||
|
||||
if not check_if_segmented(segment):
|
||||
segdict = {
|
||||
@@ -56,15 +59,13 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
|
||||
|
||||
self.request.session['segments'] = current_segments
|
||||
|
||||
segments = Segment.objects.all().filter(status='enabled')
|
||||
segments = Segment.objects.filter(status='enabled').prefetch_related('rules')
|
||||
|
||||
for segment in segments:
|
||||
rules = AbstractBaseRule.__subclasses__()
|
||||
segment_rules = []
|
||||
for rule in rules:
|
||||
queried_rules = rule.objects.filter(segment=segment)
|
||||
for result in queried_rules:
|
||||
segment_rules.append(result)
|
||||
segment_rules += rule.objects.filter(segment=segment)
|
||||
result = self._test_rules(segment_rules, self.request)
|
||||
|
||||
if result:
|
||||
@@ -73,11 +74,11 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
|
||||
|
||||
for seg in self.request.session['segments']:
|
||||
segment = Segment.objects.get(pk=seg['id'])
|
||||
segment.visit_count = segment.visit_count + 1
|
||||
segment.visit_count = F('visit_count') + 1
|
||||
segment.save()
|
||||
|
||||
def check_segment_exists(self, segment):
|
||||
segments = self.request.session['segments']
|
||||
|
||||
return any(item for item in self.request.session['segments'] if segment.pk == item.id)
|
||||
return any(item for item in segments if segment.pk == item.id)
|
||||
|
||||
|
@@ -1,7 +1,6 @@
|
||||
from django.conf import settings
|
||||
|
||||
from personalisation.utils import import_class
|
||||
from django.utils.module_loading import import_string
|
||||
|
||||
|
||||
segments_adapter = import_class(getattr(settings, 'PERSONALISATION_SEGMENTS_ADAPTER', 'personalisation.adapters.SessionSegmentsAdapter'))()
|
||||
segments_adapter = import_string(getattr(settings, 'PERSONALISATION_SEGMENTS_ADAPTER', 'personalisation.adapters.SessionSegmentsAdapter'))()
|
||||
|
||||
|
@@ -1,11 +1,5 @@
|
||||
import importlib
|
||||
|
||||
def impersonate_other_page(page, other_page):
|
||||
page.path = other_page.path
|
||||
page.depth = other_page.depth
|
||||
page.url_path = other_page.url_path
|
||||
page.title = other_page.title
|
||||
|
||||
def import_class(name):
|
||||
module_name, class_name = name.rsplit('.', 1)
|
||||
return getattr(importlib.import_module(module_name), class_name)
|
||||
|
@@ -88,7 +88,7 @@ def segment_user(page, request, serve_args, serve_kwargs):
|
||||
def serve_variation(page, request, serve_args, serve_kwargs):
|
||||
user_segments = []
|
||||
|
||||
for segment in segments_adapter.get():
|
||||
for segment in segments_adapter.get_all_segments():
|
||||
try:
|
||||
user_segment = Segment.objects.get(pk=segment['id'],
|
||||
status='enabled')
|
||||
|
Reference in New Issue
Block a user