adds base and time rules
This commit is contained in:
17
src/personalisation/admin.py
Normal file
17
src/personalisation/admin.py
Normal file
@ -0,0 +1,17 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from personalisation import models
|
||||
|
||||
class TimeRuleAdmin(admin.ModelAdmin):
|
||||
list_display = ('name', 'start_time', 'end_time')
|
||||
|
||||
class TimeRuleAdminInline(admin.TabularInline):
|
||||
model = models.TimeRule
|
||||
|
||||
class SegmentAdmin(admin.ModelAdmin):
|
||||
list_display = ['name']
|
||||
inlines = (TimeRuleAdminInline,)
|
||||
|
||||
|
||||
admin.site.register(models.TimeRule, TimeRuleAdmin)
|
||||
admin.site.register(models.Segment, SegmentAdmin)
|
@ -1,3 +1,5 @@
|
||||
from personalisation.models import TimeRule
|
||||
|
||||
class SegmentMiddleware(object):
|
||||
"""Middleware for testing and putting a user in a segment"""
|
||||
|
||||
@ -5,7 +7,14 @@ class SegmentMiddleware(object):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
request.session['segmented'] = True
|
||||
time_rules = TimeRule.objects.all()
|
||||
|
||||
result = False
|
||||
|
||||
for rule in time_rules:
|
||||
result = rule.test_user()
|
||||
|
||||
request.session['segmented'] = result
|
||||
response = self.get_response(request)
|
||||
|
||||
print(request.session['segmented'])
|
||||
|
@ -0,0 +1,32 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.3 on 2016-11-07 13:53
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('personalisation', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AbstractRuleBase',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=255)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TimeRule',
|
||||
fields=[
|
||||
('abstractrulebase_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='personalisation.AbstractRuleBase')),
|
||||
('start_time', models.TimeField(verbose_name='Starting time')),
|
||||
('end_time', models.TimeField(verbose_name='Ending time')),
|
||||
],
|
||||
bases=('personalisation.abstractrulebase',),
|
||||
),
|
||||
]
|
@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.3 on 2016-11-07 14:12
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('personalisation', '0002_abstractrulebase_timerule'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='abstractrulebase',
|
||||
name='segment',
|
||||
field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, related_name='segment', to='personalisation.Segment'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
@ -1,8 +1,11 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import datetime, time
|
||||
|
||||
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 _
|
||||
|
||||
from modelcluster.models import ClusterableModel
|
||||
from wagtail.wagtailadmin.edit_handlers import FieldPanel
|
||||
@ -20,4 +23,47 @@ class Segment(ClusterableModel):
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
return self.name
|
||||
|
||||
|
||||
"""
|
||||
Base for creating rules to segment users with
|
||||
"""
|
||||
@python_2_unicode_compatible
|
||||
class AbstractRuleBase(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
segment = models.ForeignKey(to=Segment, related_name="segment")
|
||||
|
||||
def test_user(self, request=None):
|
||||
return True
|
||||
|
||||
def return_segment_id(self):
|
||||
return "".join(self.name.lower().split())
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
"""
|
||||
Time rule to segment users with
|
||||
"""
|
||||
@python_2_unicode_compatible
|
||||
class TimeRule(AbstractRuleBase):
|
||||
start_time = models.TimeField(_("Starting time"))
|
||||
end_time = models.TimeField(_("Ending time"))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TimeRule, self).__init__(*args, **kwargs)
|
||||
|
||||
def test_user(self, request=None):
|
||||
current_time = datetime.now().time()
|
||||
starting_time = self.start_time
|
||||
ending_time = self.end_time
|
||||
|
||||
if starting_time <= current_time <= ending_time:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user