7

adds referral rule and fixes segment testing

This commit is contained in:
Boris Besemer
2016-11-08 09:04:57 +01:00
parent 40a9c598bb
commit 5e06baeee2
3 changed files with 39 additions and 8 deletions

View File

@ -1,4 +1,4 @@
from personalisation.models import Segment, AbstractBaseRule, TimeRule from personalisation.models import Segment, AbstractBaseRule
class SegmentMiddleware(object): class SegmentMiddleware(object):
"""Middleware for testing and putting a user in a segment""" """Middleware for testing and putting a user in a segment"""
@ -12,10 +12,9 @@ class SegmentMiddleware(object):
chosen_segments = [] chosen_segments = []
for segment in segments: for segment in segments:
result = False
rules = AbstractBaseRule.objects.filter(segment=segment).select_subclasses() rules = AbstractBaseRule.objects.filter(segment=segment).select_subclasses()
for rule in rules: result = self.test_rules(rules)
result = rule.test_user()
if result: if result:
chosen_segments.append(segment.encoded_name()) chosen_segments.append(segment.encoded_name())
@ -25,3 +24,13 @@ class SegmentMiddleware(object):
print(request.session['segments']) print(request.session['segments'])
return response return response
def test_rules(self, rules):
for rule in rules:
result = rule.test_user()
if result is False:
return False
return True

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.3 on 2016-11-08 07:47
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('personalisation', '0004_segment_status'),
]
operations = [
migrations.CreateModel(
name='ReferralRule',
fields=[
('abstractbaserule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='personalisation.AbstractBaseRule')),
('regex_string', models.TextField()),
],
bases=('personalisation.abstractbaserule',),
),
]

View File

@ -1,9 +1,8 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from datetime import datetime, time from datetime import datetime
import re import re
from django.conf import settings
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 _
@ -37,7 +36,6 @@ class Segment(ClusterableModel):
return "".join(self.name.lower().split()) return "".join(self.name.lower().split())
""" """
Base for creating rules to segment users with Base for creating rules to segment users with
""" """
@ -58,7 +56,7 @@ class AbstractBaseRule(models.Model):
""" """
Time rule to segment users based on the 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):