Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sandbox/exampledata/personalisation.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"enable_date": "2017-06-02T10:58:39.389Z",
"disable_date": "2017-06-02T10:34:51.722Z",
"visit_count": 0,
"status": "enabled",
"enabled": true,
"persistent": false,
"match_any": false
}
Expand All @@ -39,7 +39,7 @@
"enable_date": "2017-06-02T10:57:44.497Z",
"disable_date": "2017-06-02T10:57:39.984Z",
"visit_count": 1,
"status": "enabled",
"enabled": true,
"persistent": false,
"match_any": false
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.2 on 2017-08-10 13:48
from __future__ import unicode_literals

from django.db import migrations, models


def forward(apps, schema_editor):
Segment = apps.get_model('wagtail_personalisation', 'Segment')

for segment in Segment.objects.all():
segment.enabled = segment.status == 'enabled'
segment.save()


def backward(apps, schema_editor):
Segment = apps.get_model('wagtail_personalisation', 'Segment')

for segment in Segment.objects.all():
if segment.enabled:
segment.status = 'enabled'
else:
segment.status = 'disabled'

segment.save()


class Migration(migrations.Migration):

dependencies = [
('wagtail_personalisation', '0023_personalisablepagemetadata_variant_cascade'),
]

operations = [
migrations.AddField(
model_name='segment',
name='enabled',
field=models.BooleanField(default=True, help_text='Should the segment be active?'),
),
migrations.RunPython(forward, reverse_code=backward),
migrations.RemoveField(
model_name='segment',
name='status',
),
]
20 changes: 5 additions & 15 deletions src/wagtail_personalisation/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,12 @@

class SegmentQuerySet(models.QuerySet):
def enabled(self):
return self.filter(status=self.model.STATUS_ENABLED)
return self.filter(enabled=True)


@python_2_unicode_compatible
class Segment(ClusterableModel):
"""The segment model."""
STATUS_ENABLED = 'enabled'
STATUS_DISABLED = 'disabled'

STATUS_CHOICES = (
(STATUS_ENABLED, _('Enabled')),
(STATUS_DISABLED, _('Disabled')),
)

TYPE_DYNAMIC = 'dynamic'
TYPE_STATIC = 'static'

Expand All @@ -50,8 +42,8 @@ class Segment(ClusterableModel):
enable_date = models.DateTimeField(null=True, editable=False)
disable_date = models.DateTimeField(null=True, editable=False)
visit_count = models.PositiveIntegerField(default=0, editable=False)
status = models.CharField(
max_length=20, choices=STATUS_CHOICES, default=STATUS_ENABLED)
enabled = models.BooleanField(
default=True, help_text=_("Should the segment be active?"))
persistent = models.BooleanField(
default=False, help_text=_("Should the segment persist between visits?"))
match_any = models.BooleanField(
Expand Down Expand Up @@ -111,7 +103,7 @@ def __init__(self, *args, **kwargs):
MultiFieldPanel([
FieldPanel('name', classname="title"),
FieldRowPanel([
FieldPanel('status'),
FieldPanel('enabled'),
FieldPanel('persistent'),
]),
FieldPanel('match_any'),
Expand Down Expand Up @@ -178,9 +170,7 @@ def get_rules(self):
return segment_rules

def toggle(self, save=True):
self.status = (
self.STATUS_ENABLED if self.status == self.STATUS_DISABLED
else self.STATUS_DISABLED)
self.enabled = not self.enabled
if save:
self.save()

Expand Down
10 changes: 5 additions & 5 deletions src/wagtail_personalisation/receivers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
def check_status_change(sender, instance, *args, **kwargs):
"""Check if the status has changed. Alter dates accordingly."""
try:
original_status = sender.objects.get(pk=instance.id).status
original_status = sender.objects.get(pk=instance.id).enabled
except sender.DoesNotExist:
original_status = ""
original_status = None

if original_status != instance.status:
if instance.status == instance.STATUS_ENABLED:
if original_status != instance.enabled:
if instance.enabled is True:
instance.enable_date = timezone.now()
instance.visit_count = 0
return instance
if instance.status == instance.STATUS_DISABLED:
if instance.enabled is False:
instance.disable_date = timezone.now()


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ <h2>{% trans 'Filter' %}</h2>
<div class="nice-padding block_container">
{% if all_count %}
{% for segment in object_list %}
<div class="block block--{{ segment.status }}" onclick="location.href = '{% url 'wagtail_personalisation_segment_modeladmin_edit' segment.pk %}'">
<div class="block block--{{ segment.enabled|yesno:"enabled,disabled" }}" onclick="location.href = '{% url 'wagtail_personalisation_segment_modeladmin_edit' segment.pk %}'">
<h2>{{ segment }}</h2>

<div class="inspect_container">
Expand Down Expand Up @@ -98,10 +98,10 @@ <h2>{{ segment }}</h2>

{% if user_can_create %}
<ul class="block_actions">
{% if segment.status == segment.STATUS_DISABLED %}
<li><a href="{% url 'segment:toggle' segment.pk %}" title="{% trans "Enable this segment" %}">enable</a></li>
{% elif segment.status == segment.STATUS_ENABLED %}
{% if segment.enabled %}
<li><a href="{% url 'segment:toggle' segment.pk %}" title="{% trans "Disable this segment" %}">disable</a></li>
{% else %}
<li><a href="{% url 'segment:toggle' segment.pk %}" title="{% trans "Enable this segment" %}">enable</a></li>
{% endif %}
<li><a href="{% url 'wagtail_personalisation_segment_modeladmin_edit' segment.pk %}" title="{% trans "Configure this segment" %}">configure this</a></li>
{% if segment.is_static %}
Expand Down
2 changes: 1 addition & 1 deletion src/wagtail_personalisation/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class SegmentModelAdmin(ModelAdmin):
delete_view_class = SegmentModelDeleteView
menu_icon = 'fa-snowflake-o'
add_to_settings_menu = False
list_display = ('name', 'persistent', 'match_any', 'status',
list_display = ('name', 'persistent', 'match_any', 'enabled',
'page_count', 'variant_count', 'statistics')
index_view_extra_js = ['js/commons.js', 'js/index.js']
index_view_extra_css = ['css/index.css']
Expand Down
2 changes: 1 addition & 1 deletion tests/factories/segment.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

class SegmentFactory(factory.DjangoModelFactory):
name = 'TestSegment'
status = models.Segment.STATUS_ENABLED
enabled = True

class Meta:
model = models.Segment
2 changes: 1 addition & 1 deletion tests/unit/test_adapter_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def test_refresh_removes_disabled(rf):
adapter.set_segments([segment_1, segment_2])

adapter = adapters.SessionSegmentsAdapter(request)
segment_1.status = segment_1.STATUS_DISABLED
segment_1.enabled = False
segment_1.save()
adapter.refresh()

Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
@pytest.mark.django_db
def test_segment_create():
factoried_segment = SegmentFactory()
segment = Segment(name='TestSegment', status='enabled')
segment = Segment(name='TestSegment', enabled=True)
TimeRule(
start_time=datetime.time(8, 0, 0),
end_time=datetime.time(23, 0, 0),
segment=segment)

assert factoried_segment.name == segment.name
assert factoried_segment.status == segment.status
assert factoried_segment.enabled == segment.enabled


@pytest.mark.django_db
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/test_static_dynamic_segments.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@


def form_with_data(segment, *rules):
model_fields = ['type', 'status', 'count', 'name', 'match_any', 'randomisation_percent']
model_fields = ['type', 'enabled', 'count', 'name', 'match_any', 'randomisation_percent']

class TestSegmentAdminForm(SegmentAdminForm):
class Meta:
Expand Down