8

fixes imports and abstract class

This commit is contained in:
Boris Besemer
2016-12-19 14:15:25 +01:00
parent 6ecc15c1dd
commit 94b54bfcf7
3 changed files with 19 additions and 33 deletions

View File

@@ -2,30 +2,24 @@ import time
from personalisation.models import AbstractBaseRule, Segment from personalisation.models import AbstractBaseRule, Segment
class BaseSegmentsAdapter(object): class BaseSegmentsAdapter(object):
"""Base adapter with required functions predefined""" def _test_rules(self, rules, request):
def setup(self): if len(rules) > 0:
return for rule in rules:
result = rule.test_user(request)
def get(self): if result is False:
return return False
def add(self): return True
return return False
def refresh(self):
return
def check_segment_exists(self):
return
class Meta: class Meta:
abstract = True abstract = True
class SessionSegmentsAdapter(BaseSegmentsAdapter): class SessionSegmentsAdapter(BaseSegmentsAdapter):
"""Segments adapter that uses Django's SessionMiddleware to store segments"""
# Setup
def setup(self, request): def setup(self, request):
self.request = request self.request = request
@@ -33,11 +27,9 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
if 'segments' not in self.request.session: if 'segments' not in self.request.session:
self.request.session['segments'] = [] self.request.session['segments'] = []
# Get segments
def get(self): def get(self):
return self.request.session['segments'] return self.request.session['segments']
# Add segments
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"""
@@ -73,7 +65,7 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
queried_rules = rule.objects.filter(segment=segment) queried_rules = rule.objects.filter(segment=segment)
for result in queried_rules: for result in queried_rules:
segment_rules.append(result) segment_rules.append(result)
result = _test_rules(segment_rules, self.request) result = self._test_rules(segment_rules, self.request)
if result: if result:
self.add(segment) self.add(segment)
@@ -84,21 +76,8 @@ class SessionSegmentsAdapter(BaseSegmentsAdapter):
segment.visit_count = segment.visit_count + 1 segment.visit_count = segment.visit_count + 1
segment.save() segment.save()
# Quick checking logic to see if a segment exists
def check_segment_exists(self, segment): def check_segment_exists(self, segment):
segments = self.request.session['segments'] 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 self.request.session['segments'] if segment.pk == item.id)
def _test_rules(rules, request):
"""Test whether the user matches a segment's rules'"""
if len(rules) > 0:
for rule in rules:
result = rule.test_user(request)
if result is False:
return False
return True
return False

View File

@@ -1,6 +1,7 @@
from django.conf import settings from django.conf import settings
from personalisation.adapters import SessionSegmentsAdapter from personalisation.utils import import_class
segments_adapter = getattr(settings, 'PERSONALISATION_SEGMENTS_ADAPTER', SessionSegmentsAdapter)
segments_adapter = import_class(getattr(settings, 'PERSONALISATION_SEGMENTS_ADAPTER', 'personalisation.adapters.SessionSegmentsAdapter'))

View File

@@ -1,5 +1,11 @@
import importlib
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 import_class(name):
module_name, class_name = name.rsplit('.', 1)
return getattr(importlib.import_module(module_name), class_name)