fixes imports and abstract class
This commit is contained in:
@@ -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
|
|
||||||
|
@@ -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'))
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user