changed inheritance to polymorphic
This commit is contained in:
2
setup.py
2
setup.py
@ -28,7 +28,7 @@ setup(
|
|||||||
'Topic :: Internet :: WWW/HTTP :: Site Management',
|
'Topic :: Internet :: WWW/HTTP :: Site Management',
|
||||||
],
|
],
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'django-model-utils==2.6',
|
'django-polymorphic==1.0.2',
|
||||||
'wagtail>=1.7',
|
'wagtail>=1.7',
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -8,14 +8,17 @@ class SegmentMiddleware(object):
|
|||||||
self.get_response = get_response
|
self.get_response = get_response
|
||||||
|
|
||||||
def __call__(self, request):
|
def __call__(self, request):
|
||||||
segments = Segment.objects.all().filter(status="enabled")
|
if 'segments' not in request.session:
|
||||||
|
request.session['segments'] = []
|
||||||
|
|
||||||
chosen_segments = []
|
chosen_segments = []
|
||||||
|
|
||||||
for segment in segments:
|
for segment in segments:
|
||||||
rules = AbstractBaseRule.objects.filter(segment=segment).select_subclasses()
|
rules = AbstractBaseRule.objects.filter(segment=segment)
|
||||||
result = self.test_rules(rules, request)
|
result = self.test_rules(rules, request)
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
self.add_segment_to_user(segment, request)
|
self.add_segment_to_user(segment, request)
|
||||||
|
|
||||||
@ -25,22 +28,20 @@ class SegmentMiddleware(object):
|
|||||||
request.session['segments'] = []
|
request.session['segments'] = []
|
||||||
|
|
||||||
print(request.session['segments'])
|
print(request.session['segments'])
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def test_rules(self, rules, request):
|
def test_rules(self, rules, request):
|
||||||
for rule in rules:
|
if len(rules) > 0:
|
||||||
result = rule.test_user(request)
|
for rule in rules:
|
||||||
|
result = rule.test_user(request)
|
||||||
|
|
||||||
if result is False:
|
if result is False:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def add_segment_to_user(self, segment, request):
|
def add_segment_to_user(self, segment, request):
|
||||||
if 'segments' not in request.session:
|
|
||||||
request.session['segments'] = []
|
|
||||||
|
|
||||||
if segment not in request.session['segments']:
|
if segment not in request.session['segments']:
|
||||||
request.session['segments'].append(segment.encoded_name())
|
request.session['segments'].append(segment.encoded_name())
|
||||||
|
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.3 on 2016-11-08 13:00
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('contenttypes', '0002_remove_content_type_name'),
|
||||||
|
('personalisation', '0005_referralrule'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='abstractbaserule',
|
||||||
|
name='polymorphic_ctype',
|
||||||
|
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_personalisation.abstractbaserule_set+', to='contenttypes.ContentType'),
|
||||||
|
),
|
||||||
|
]
|
@ -2,11 +2,11 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from polymorphic.models import PolymorphicModel
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from model_utils.managers import InheritanceManager
|
|
||||||
from modelcluster.models import ClusterableModel
|
from modelcluster.models import ClusterableModel
|
||||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
||||||
|
|
||||||
@ -35,13 +35,12 @@ class Segment(ClusterableModel):
|
|||||||
return "".join(self.name.lower().split())
|
return "".join(self.name.lower().split())
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
Base for creating rules to segment users with
|
|
||||||
"""
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class AbstractBaseRule(models.Model):
|
class AbstractBaseRule(PolymorphicModel):
|
||||||
|
"""Base for creating rules to segment users with"""
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
segment = models.ForeignKey(to=Segment, related_name="segment")
|
segment = models.ForeignKey(to=Segment, related_name="segment")
|
||||||
objects = InheritanceManager()
|
|
||||||
|
|
||||||
def test_user(self, request=None):
|
def test_user(self, request=None):
|
||||||
return True
|
return True
|
||||||
@ -50,11 +49,10 @@ class AbstractBaseRule(models.Model):
|
|||||||
return "Segmentation rule"
|
return "Segmentation rule"
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
Time rule to segment users based on a start and end time
|
|
||||||
"""
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class TimeRule(AbstractBaseRule):
|
class TimeRule(AbstractBaseRule):
|
||||||
|
"""Time rule to segment users based on a start and end time"""
|
||||||
start_time = models.TimeField(_("Starting time"))
|
start_time = models.TimeField(_("Starting time"))
|
||||||
end_time = models.TimeField(_("Ending time"))
|
end_time = models.TimeField(_("Ending time"))
|
||||||
|
|
||||||
@ -76,10 +74,9 @@ class TimeRule(AbstractBaseRule):
|
|||||||
return '{} - {}'.format(self.start_time, self.end_time)
|
return '{} - {}'.format(self.start_time, self.end_time)
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
Referral rule to segment users based on a regex test
|
|
||||||
"""
|
|
||||||
class ReferralRule(AbstractBaseRule):
|
class ReferralRule(AbstractBaseRule):
|
||||||
|
"""Referral rule to segment users based on a regex test"""
|
||||||
regex_string = models.TextField()
|
regex_string = models.TextField()
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
10
src/personalisation/templates/wagtailadmin/segment.html
Normal file
10
src/personalisation/templates/wagtailadmin/segment.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{% extends "wagtailadmin/base.html" %}
|
||||||
|
{% load i18n staticfiles %}
|
||||||
|
{% block titletag %}{% trans "Segments" %}{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Our segment page</h1>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
Reference in New Issue
Block a user