diff --git a/src/personalisation/middleware.py b/src/personalisation/middleware.py index beb0290..611ea4d 100644 --- a/src/personalisation/middleware.py +++ b/src/personalisation/middleware.py @@ -1,4 +1,4 @@ -from personalisation.models import Segment, AbstractBaseRule, TimeRule +from personalisation.models import Segment, AbstractBaseRule class SegmentMiddleware(object): """Middleware for testing and putting a user in a segment""" @@ -12,10 +12,9 @@ class SegmentMiddleware(object): chosen_segments = [] for segment in segments: - result = False rules = AbstractBaseRule.objects.filter(segment=segment).select_subclasses() - for rule in rules: - result = rule.test_user() + result = self.test_rules(rules) + if result: chosen_segments.append(segment.encoded_name()) @@ -25,3 +24,13 @@ class SegmentMiddleware(object): print(request.session['segments']) return response + + + def test_rules(self, rules): + for rule in rules: + result = rule.test_user() + + if result is False: + return False + + return True diff --git a/src/personalisation/migrations/0005_referralrule.py b/src/personalisation/migrations/0005_referralrule.py new file mode 100644 index 0000000..2d9eb9b --- /dev/null +++ b/src/personalisation/migrations/0005_referralrule.py @@ -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',), + ), + ] diff --git a/src/personalisation/models.py b/src/personalisation/models.py index dc6f54e..c918c1f 100644 --- a/src/personalisation/models.py +++ b/src/personalisation/models.py @@ -1,9 +1,8 @@ from __future__ import absolute_import, unicode_literals -from datetime import datetime, time +from datetime import datetime import re -from django.conf import settings from django.db import models from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ @@ -37,7 +36,6 @@ class Segment(ClusterableModel): return "".join(self.name.lower().split()) - """ 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 class TimeRule(AbstractBaseRule):