adds referral rule and fixes segment testing
This commit is contained in:
@ -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
|
||||||
|
24
src/personalisation/migrations/0005_referralrule.py
Normal file
24
src/personalisation/migrations/0005_referralrule.py
Normal 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',),
|
||||||
|
),
|
||||||
|
]
|
@ -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):
|
||||||
|
Reference in New Issue
Block a user